创建带有索引的表和插入文档 - 亚马逊 Quantum Ledger 数据库(亚马逊QLDB)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

创建带有索引的表和插入文档

重要

终止支持通知:现有客户可以在2025年7月31日终止支持QLDB之前使用亚马逊。有关更多详细信息,请参阅将亚马逊QLDB账本迁移到亚马逊 Aurora Postgr SQL e。

创建 Amazon QLDB 账本后,您的第一步是创建包含基本CREATE TABLE报表的表。表由QLDB文档组成,这些版本是 Amazon Ion struct 格式的数据集。

创建表与索引

表具有简单的、区分大小写的名称,没有名称空间。QLDB支持开放内容且不强制架构,因此在创建表时无需定义属性或数据类型。

CREATE TABLE VehicleRegistration
CREATE TABLE Vehicle

CREATE TABLE语句返回系统为新表分配的 ID。系统分配IDs的所有标识符QLDB都是通用唯一标识符 (UUID),每个标识符都以 Base62 编码的字符串表示。

注意

或者,您可在创建表时为表资源定义标签。要了解如何操作,请参阅 创建时对表格进行标记

您还可以在表格创建索引以优化查询性能。

CREATE INDEX ON VehicleRegistration (VIN)
CREATE INDEX ON VehicleRegistration (LicensePlateNumber)
CREATE INDEX ON Vehicle (VIN)
重要

QLDB需要索引才能高效地查找文档。如果没有索引,则QLDB需要在读取文档时进行全表扫描。这可能会导致大型表出现性能问题,包括并发冲突与事务超时。

为避免表扫描,必须在索引字段或文档 ID 上使用相等运算符(=IN)运行带有WHERE谓词子句的语句。有关更多信息,请参阅 优化查询性能

创建索引时应注意以下限制:

  • 只能在单个顶级字段创建索引。不支持复合索引、嵌套索引、唯一索引以及基于函数的索引。

  • 您可以为任何 Ion 数据类型创建索引,其中包括 liststruct。但是,无论 Ion 类型如何,您都只能通过整个 Ion 值进行索引查找。例如,使用 list 类型作为索引时,不能按列表中的一个项目进行索引查找。

  • 只有使用相等谓词时,查询性能才会得到改善;例如WHERE indexedField = 123WHERE indexedField IN (456, 789)

    QLDB不支持查询谓词中的不等式。因此,未实施范围过滤扫描。

  • 索引字段名称区分大小写,且最大长度可为 128 个字符。

  • 中的索引创建QLDB是异步的。非空表上完成索引所需的时间取决于表的大小。有关更多信息,请参阅 管理索引

插入文档

然后,您可将文档插入表格中。QLDB文档以 Amazon Ion 格式存储。以下 PartiQL INSERT语句包括开始使用 Amazon QLDB 控制台中使用的车辆注册采样数据的子集。

INSERT INTO VehicleRegistration << { 'VIN' : '1N4AL11D75C109151', 'LicensePlateNumber' : 'LEWISR261LL', 'State' : 'WA', 'City' : 'Seattle', 'PendingPenaltyTicketAmount' : 90.25, 'ValidFromDate' : `2017-08-21T`, 'ValidToDate' : `2020-05-11T`, 'Owners' : { 'PrimaryOwner' : { 'PersonId' : '294jJ3YUoH1IEEm8GSabOs' }, 'SecondaryOwners' : [ { 'PersonId' : '5Ufgdlnj06gF5CWcOIu64s' } ] } }, { 'VIN' : 'KM8SRDHF6EU074761', 'LicensePlateNumber' : 'CA762X', 'State' : 'WA', 'City' : 'Kent', 'PendingPenaltyTicketAmount' : 130.75, 'ValidFromDate' : `2017-09-14T`, 'ValidToDate' : `2020-06-25T`, 'Owners' : { 'PrimaryOwner' : { 'PersonId': 'IN7MvYtUjkp1GMZu0F6CG9' }, 'SecondaryOwners' : [] } } >>
INSERT INTO Vehicle << { 'VIN' : '1N4AL11D75C109151', 'Type' : 'Sedan', 'Year' : 2011, 'Make' : 'Audi', 'Model' : 'A5', 'Color' : 'Silver' } , { 'VIN' : 'KM8SRDHF6EU074761', 'Type' : 'Sedan', 'Year' : 2015, 'Make' : 'Tesla', 'Model' : 'Model S', 'Color' : 'Blue' } >>
PartiQL 语法和语义
  • 字段名称以单引号('...')括起来。

  • 字符串值也以单引号('...')括起来。

  • 时间戳用反引号(`...`)括起来。任何 Ion 字面值都可以用反引号表示。

  • 整数和小数为不需要表示的字面值。

有关 PartiQL 的语法和语义详细信息,请参阅在亚马逊中使用 partiQL 查询 Ion QLDB

INSERT 语句创建版本号为零的文档的初始修订版。要唯一标识每个文档,QLDB请将文档 ID 作为元数据的一部分进行分配。插入语句返回插入的每个文档 ID。

重要

由于QLDB不强制架构,因此您可以多次将同一个文档插入表中。每个 insert 语句向日记账提交一个单独的文档条目,并为每个文档QLDB分配一个唯一的 ID。

若要了解如何查询您插入到表格中的文档,请继续 查询数据