创建带有索引的表和插入文档 - Amazon Quantum Ledger Database (Amazon QLDB)

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

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

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

创建表与索引

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

CREATE TABLE VehicleRegistration
CREATE TABLE Vehicle

CREATE TABLE语句返回系统为新表分配的 ID。QLDB 中的所有系统分配的 ID都是通用唯一标识符 (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 的语法和语义详细信息,请参阅在 Amazon QLDB 中使用 PartiQL 查询 Ion

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

重要

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

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