本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
步骤 2:在分类账中创建表、索引和示例数据
重要
终止支持通知:现有客户将能够使用亚马逊,QLDB直到 2025 年 7 月 31 日终止支持。有关更多详细信息,请参阅将亚马逊QLDB账本迁移到亚马逊 Aurora Postgr SQL
当您的Amazon QLDB 账本处于活动状态时,您可以开始创建有关车辆、车主和注册信息的数据表。创建表和索引后,可以向其中加载数据。
在此步骤中,您将在vehicle-registration
分类账中创建四个表格:
-
VehicleRegistration
-
Vehicle
-
Person
-
DriversLicense
您还可创建以下索引。
表名称 | 字段 |
---|---|
VehicleRegistration |
VIN |
VehicleRegistration |
LicensePlateNumber |
Vehicle |
VIN |
Person |
GovId |
DriversLicense |
LicensePlateNumber |
DriversLicense |
PersonId |
您可以使用QLDB控制台自动创建这些带索引的表,并在表中加载示例数据。或者,您可以使用控制台上的 P artiQL 编辑器来手动运行每个 PartiQL 语句。 step-by-step
创建表、索引与示例数据
-
在 https://console.aws.amazon.com/ql
d QLDB b 上打开亚马逊控制台。 -
在导航窗格中,选择 开始。
-
在示例应用程序数据卡上的 自动选项下,在分类账列表中进行选择
vehicle-registration
。 -
选择 加在示例数据。
如果操作成功完成,控制台将显示消息样本数据已加载。
此脚本在单个事务中运行所有语句。如果事务的任何部分失败,则会回滚每条语句,并显示相应的错误消息。解决任何问题后,您可以重试该操作。
注意
-
事务失败的一个可能原因是尝试创建重复表。如果您的分类账中已存在以下任何表名,则您的加载示例数据的请求将失败:
VehicleRegistration
Vehicle
、Person
、和DriversLicense
。相反,请尝试将此示例数据加载到一个空分类账中。
-
此脚本运行参数化
INSERT
语句。因此,这些 PartiQL 语句使用绑定参数而不是文字数据记录在日记账块中。例如,您可能会在日记块中看到以下语句,其中问号(?
)是文档内容的变量占位符。INSERT INTO Vehicle ?
-
使用空 PrimaryOwner
字段将文档插入 VehicleRegistration
,使用空 PersonId
字段将文档插入 DriversLicense
。稍后,您将使用 Person
表中系统分配的文档 id
填充这些字段。
提示
最佳做法是使用此文档 id
元数据字段作为外键。有关更多信息,请参阅 查询文档元数据。
创建表、索引与示例数据
-
在 https://console.aws.amazon.com/ql
d QLDB b 上打开亚马逊控制台。 -
在导航窗格中,选择 PartiQL 编辑器。
-
选择
vehicle-registration
分类账。 -
首先创建四个表。QLDB支持开放内容且不强制架构,因此您无需指定属性或数据类型。
在查询编辑器窗口中输入以下语句,然后选择 运行。要运行语句,您可对 Windows 使用快捷键Ctrl+Enter,对 macOS 使用Cmd+Return。有关更多键盘快捷键的信息,请参阅 PartiQL 编辑器键盘快捷键。
CREATE TABLE VehicleRegistration
对以下每个步骤重复此步骤。
CREATE TABLE Vehicle
CREATE TABLE Person
CREATE TABLE DriversLicense
-
接下来,创建可优化每个表的查询性能的索引。
重要
QLDB需要索引才能高效地查找文档。如果没有索引,则QLDB需要在读取文档时进行全表扫描。这可能会导致大型表出现性能问题,包括并发冲突与事务超时。
为避免表扫描,必须在索引字段或文档 ID 上使用相等运算符(
=
或IN
)运行带有WHERE
谓词子句的语句。有关更多信息,请参阅 优化查询性能。在查询编辑器窗口中输入以下语句,然后选择 运行。
CREATE INDEX ON VehicleRegistration (VIN)
对以下每个步骤重复此步骤。
CREATE INDEX ON VehicleRegistration (LicensePlateNumber)
CREATE INDEX ON Vehicle (VIN)
CREATE INDEX ON Person (GovId)
CREATE INDEX ON DriversLicense (LicensePlateNumber)
CREATE INDEX ON DriversLicense (PersonId)
-
创建索引后,您可以开始将数据加载到表中。在此步骤中,将包含分类账所跟踪车辆所有者的个人信息的文档插入
Person
表中。在查询编辑器窗口中输入以下语句,然后选择 运行。
INSERT INTO Person << { 'FirstName' : 'Raul', 'LastName' : 'Lewis', 'DOB' : `1963-08-19T`, 'GovId' : 'LEWISR261LL', 'GovIdType' : 'Driver License', 'Address' : '1719 University Street, Seattle, WA, 98109' }, { 'FirstName' : 'Brent', 'LastName' : 'Logan', 'DOB' : `1967-07-03T`, 'GovId' : 'LOGANB486CG', 'GovIdType' : 'Driver License', 'Address' : '43 Stockert Hollow Road, Everett, WA, 98203' }, { 'FirstName' : 'Alexis', 'LastName' : 'Pena', 'DOB' : `1974-02-10T`, 'GovId' : '744 849 301', 'GovIdType' : 'SSN', 'Address' : '4058 Melrose Street, Spokane Valley, WA, 99206' }, { 'FirstName' : 'Melvin', 'LastName' : 'Parker', 'DOB' : `1976-05-22T`, 'GovId' : 'P626-168-229-765', 'GovIdType' : 'Passport', 'Address' : '4362 Ryder Avenue, Seattle, WA, 98101' }, { 'FirstName' : 'Salvatore', 'LastName' : 'Spencer', 'DOB' : `1997-11-15T`, 'GovId' : 'S152-780-97-415-0', 'GovIdType' : 'Passport', 'Address' : '4450 Honeysuckle Lane, Seattle, WA, 98101' } >>
-
然后,在
DriversLicense
表格中填入包含每位车主驾驶执照信息的文档。在查询编辑器窗口中输入以下语句,然后选择 运行。
INSERT INTO DriversLicense << { 'LicensePlateNumber' : 'LEWISR261LL', 'LicenseType' : 'Learner', 'ValidFromDate' : `2016-12-20T`, 'ValidToDate' : `2020-11-15T`, 'PersonId' : '' }, { 'LicensePlateNumber' : 'LOGANB486CG', 'LicenseType' : 'Probationary', 'ValidFromDate' : `2016-04-06T`, 'ValidToDate' : `2020-11-15T`, 'PersonId' : '' }, { 'LicensePlateNumber' : '744 849 301', 'LicenseType' : 'Full', 'ValidFromDate' : `2017-12-06T`, 'ValidToDate' : `2022-10-15T`, 'PersonId' : '' }, { 'LicensePlateNumber' : 'P626-168-229-765', 'LicenseType' : 'Learner', 'ValidFromDate' : `2017-08-16T`, 'ValidToDate' : `2021-11-15T`, 'PersonId' : '' }, { 'LicensePlateNumber' : 'S152-780-97-415-0', 'LicenseType' : 'Probationary', 'ValidFromDate' : `2015-08-15T`, 'ValidToDate' : `2021-08-21T`, 'PersonId' : '' } >>
-
现在,在
VehicleRegistration
表中填入车辆登记文件。这些文档包括存储主要和次要所有者的嵌套Owners
结构。在查询编辑器窗口中输入以下语句,然后选择 运行。
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': '' }, 'SecondaryOwners' : [] } }, { 'VIN' : 'KM8SRDHF6EU074761', 'LicensePlateNumber' : 'CA762X', 'State' : 'WA', 'City' : 'Kent', 'PendingPenaltyTicketAmount' : 130.75, 'ValidFromDate' : `2017-09-14T`, 'ValidToDate' : `2020-06-25T`, 'Owners' : { 'PrimaryOwner' : { 'PersonId': '' }, 'SecondaryOwners' : [] } }, { 'VIN' : '3HGGK5G53FM761765', 'LicensePlateNumber' : 'CD820Z', 'State' : 'WA', 'City' : 'Everett', 'PendingPenaltyTicketAmount' : 442.30, 'ValidFromDate' : `2011-03-17T`, 'ValidToDate' : `2021-03-24T`, 'Owners' : { 'PrimaryOwner' : { 'PersonId': '' }, 'SecondaryOwners' : [] } }, { 'VIN' : '1HVBBAANXWH544237', 'LicensePlateNumber' : 'LS477D', 'State' : 'WA', 'City' : 'Tacoma', 'PendingPenaltyTicketAmount' : 42.20, 'ValidFromDate' : `2011-10-26T`, 'ValidToDate' : `2023-09-25T`, 'Owners' : { 'PrimaryOwner' : { 'PersonId': '' }, 'SecondaryOwners' : [] } }, { 'VIN' : '1C4RJFAG0FC625797', 'LicensePlateNumber' : 'TH393F', 'State' : 'WA', 'City' : 'Olympia', 'PendingPenaltyTicketAmount' : 30.45, 'ValidFromDate' : `2013-09-02T`, 'ValidToDate' : `2024-03-19T`, 'Owners' : { 'PrimaryOwner' : { 'PersonId': '' }, 'SecondaryOwners' : [] } } >>
-
最后,在
Vehicle
表中填入描述在分类账中注册的车辆的文档。在查询编辑器窗口中输入以下语句,然后选择 运行。
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' }, { 'VIN' : '3HGGK5G53FM761765', 'Type' : 'Motorcycle', 'Year' : 2011, 'Make' : 'Ducati', 'Model' : 'Monster 1200', 'Color' : 'Yellow' }, { 'VIN' : '1HVBBAANXWH544237', 'Type' : 'Semi', 'Year' : 2009, 'Make' : 'Ford', 'Model' : 'F 150', 'Color' : 'Black' }, { 'VIN' : '1C4RJFAG0FC625797', 'Type' : 'Sedan', 'Year' : 2019, 'Make' : 'Mercedes', 'Model' : 'CLK 350', 'Color' : 'White' } >>
接下来,您可以使用 SELECT
语句从 vehicle-registration
分类账中的表中读取数据。继续执行第 3 步:查询分类账中的表。