本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
步骤 2:在分类账中创建表、索引和示例数据
重要
终止支持通知:现有客户将能够使用 Amazon QLDB,直到 2025 年 7 月 31 日终止支持。有关更多详细信息,请参阅将亚马逊 QLDB 账本迁移到亚马逊 Aurora PostgreSQL
当您的 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
创建表、索引与示例数据
-
在 /qldb 上打开亚马逊 QLDB 控制台。https://console.aws.amazon.com
-
在导航窗格中,选择 开始。
-
在示例应用程序数据卡上的 自动选项下,在分类账列表中进行选择
vehicle-registration。 -
选择 加在示例数据。
如果操作成功完成,控制台将显示消息样本数据已加载。
此脚本在单个事务中运行所有语句。如果事务的任何部分失败,则会回滚每条语句,并显示相应的错误消息。解决任何问题后,您可以重试该操作。
注意
-
事务失败的一个可能原因是尝试创建重复表。如果您的分类账中已存在以下任何表名,则您的加载示例数据的请求将失败:
VehicleRegistrationVehicle、Person、和DriversLicense。相反,请尝试将此示例数据加载到一个空分类账中。
-
此脚本运行参数化
INSERT语句。因此,这些 PartiQL 语句使用绑定参数而不是文字数据记录在日记账块中。例如,您可能会在日记块中看到以下语句,其中问号(?)是文档内容的变量占位符。INSERT INTO Vehicle ?
-
使用空 PrimaryOwner 字段将文档插入 VehicleRegistration,使用空 PersonId 字段将文档插入 DriversLicense。稍后,您将使用 Person 表中系统分配的文档 id 填充这些字段。
提示
最佳做法是使用此文档 id 元数据字段作为外键。有关更多信息,请参阅 查询文档元数据。
创建表、索引与示例数据
-
在 /qldb 上打开亚马逊 QLDB 控制台。https://console.aws.amazon.com
-
在导航窗格中,选择 PartiQL 编辑器。
-
选择
vehicle-registration分类账。 -
首先创建四个表。QLDB 支持开放内容且不强制架构,因此不需要定义属性或数据类型。
在查询编辑器窗口中输入以下语句,然后选择 运行。要运行语句,您可对 Windows 使用快捷键Ctrl+Enter,对 macOS 使用Cmd+Return。有关更多键盘快捷键的信息,请参阅 PartiQL 编辑器键盘快捷键。
CREATE TABLE VehicleRegistration对以下每个步骤重复此步骤。
CREATE TABLE VehicleCREATE TABLE PersonCREATE 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 步:查询分类账中的表。