Amazon Quantum Ledger Database (Amazon QLDB)
開発者ガイド

ステップ 2: テーブル、インデックス、サンプルデータを作成する

Amazon QLDB 台帳がアクティブになったら、車両、車両の所有者、登録情報に関するデータのテーブルを作成できるようになります。テーブルとインデックスを作成した後、これらにデータをロードできます。

このステップでは、vehicle-registration 台帳に 4 つのテーブルを作成します。

  • VehicleRegistration

  • Vehicle

  • Person

  • DriversLicense

以下のインデックスも作成します。

テーブル名 フィールド
VehicleRegistration VIN
VehicleRegistration LicensePlateNumber
Vehicle VIN
Person GovId
DriversLicense LicenseNumber
DriversLicense PersonId

空の PrimaryOwner フィールドを含む VehicleRegistration と、空の PersonId フィールドを含む DriversLicense にドキュメントを挿入します。後で、Person テーブルからシステムによって割り当てられたドキュメント id をこれらのフィールドに入力します。

ベストプラクティスとして、このドキュメント id メタデータフィールドを外部キーとして使用します。詳細については、「ドキュメントのメタデータのクエリの実行」を参照してください。

QLDB コンソールを使用して、インデックス付きのこれらのテーブルを自動的に作成し、そこにサンプルデータをロードできます。または、コンソールの [Query editor (クエリエディタ)] を使用して、各 PartiQL ステートメントをステップごとに手動で実行できます。

自動オプション

テーブル、インデックス、およびサンプルデータを作成するには

  1. https://console.aws.amazon.com/qldb で Amazon QLDB コンソールを開きます。

  2. ナビゲーションペインで、[Getting started (開始方法)] を選択します。

  3. [Sample application data (サンプルアプリケーションデータ)] カードの [Automatic option (自動オプション)] で、台帳のリストから vehicle-registration を選択します。

  4. [Load sample data (サンプルデータのロード)] を選択します。

    オペレーションが正常に終了すると、コンソールに「Sample data loaded (サンプルデータがロードされました)」というメッセージが表示されます。

    このスクリプトは、すべてのステートメントを単一のトランザクションで実行します。トランザクションの一部が失敗すると、すべてのステートメントがロールバックされ、該当するエラーメッセージが表示されます。問題に対処した後、オペレーションを再試行できます。

    注記

    • 考えられる原因の 1 つとして、重複するテーブル複製を作成しようとすると、トランザクションが失敗することがあります。サンプルデータをロードするためのリクエストは、VehicleRegistrationVehiclePersonDriversLicense のいずれかのテーブル名が台帳に既に存在する場合、失敗します。

      代わりに、このサンプルデータを空の台帳にロードしてみてください。

    • このスクリプトは、パラメータ化された INSERT ステートメントを実行します。したがって、これらの PartiQL ステートメントは、リテラルデータではなくバインドパラメータを使用してジャーナルブロックに記録されます。たとえば、ジャーナルブロックに次のステートメントがあるとします。ここで、疑問符 (?) はドキュメントコンテンツの変数プレースホルダーです。

      INSERT INTO Vehicle ?
手動オプション

テーブル、インデックス、およびサンプルデータを作成するには

  1. https://console.aws.amazon.com/qldb で Amazon QLDB コンソールを開きます。

  2. ナビゲーションペインで [Query Editor (クエリエディタ)] を選択します。

  3. vehicle-registration 台帳を選択します。

  4. まず 4 つのテーブルを作成することから始めます。QLDB ではオープンのコンテンツをサポートしており、スキーマを強制しないため、属性やデータ型は指定しません。

    クエリエディタウィンドウで、次のステートメントを入力し、 [Run (実行)] を選択します。

    CREATE TABLE VehicleRegistration

    以下の各項目について、このステップを繰り返します。

    CREATE TABLE Vehicle
    CREATE TABLE Person
    CREATE TABLE DriversLicense
  5. 次に、各テーブルに対してクエリを高速化するためのインデックスを作成します。

    クエリエディタウィンドウで、次のステートメントを入力し、[Run (実行)] を選択します。

    CREATE INDEX ON VehicleRegistration (VIN)

    以下に対してこの手順を繰り返します。

    CREATE INDEX ON VehicleRegistration (LicensePlateNumber)
    CREATE INDEX ON Vehicle (VIN)
    CREATE INDEX ON Person (GovId)
    CREATE INDEX ON DriversLicense (LicenseNumber)
    CREATE INDEX ON DriversLicense (PersonId)
  6. インデックスを作成したら、テーブルへのデータのロードを開始することができます。このステップでは、各車両の所有者の運転免許証情報を含むドキュメントを DriversLicense テーブルに入力します。

    クエリエディタウィンドウで、次のステートメントを入力し、[Run (実行)] を選択します。

    INSERT INTO DriversLicense << { 'LicenseNumber' : 'LEWISR261LL', 'LicenseType' : 'Learner', 'ValidFromDate' : `2016-12-20T`, 'ValidToDate' : `2020-11-15T`, 'PersonId' : '' }, { 'LicenseNumber' : 'LOGANB486CG', 'LicenseType' : 'Probationary', 'ValidFromDate' : `2016-04-06T`, 'ValidToDate' : `2020-11-15T`, 'PersonId' : '' }, { 'LicenseNumber' : '744 849 301', 'LicenseType' : 'Full', 'ValidFromDate' : `2017-12-06T`, 'ValidToDate' : `2022-10-15T`, 'PersonId' : '' }, { 'LicenseNumber' : 'P626-168-229-765', 'LicenseType' : 'Learner', 'ValidFromDate' : `2017-08-16T`, 'ValidToDate' : `2021-11-15T`, 'PersonId' : '' }, { 'LicenseNumber' : 'S152-780-97-415-0', 'LicenseType' : 'Probationary', 'ValidFromDate' : `2015-08-15T`, 'ValidToDate' : `2021-08-21T`, 'PersonId' : '' } >>
  7. 次に、台帳が追跡している車両の所有者に関する個人情報を含む Person テーブルにドキュメントを挿入します。

    クエリエディタウィンドウで、次のステートメントを入力し、[Run (実行)] を選択します。

    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' } >>
  8. 次に、車両登録ドキュメントを VehicleRegistration テーブルに入力します。これらのドキュメントには、代表所有者と共有所有者を格納する、ネストされた Owners 構造が含まれています。

    クエリエディタウィンドウで、次のステートメントを入力し、[Run (実行)] を選択します。

    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' : [] } } >>
  9. 最後に、台帳に登録されている車両について記述したドキュメントを Vehicle テーブルに入力します。

    クエリエディタウィンドウで、以下のステートメントを入力し、[Run (実行)] を選択します。

    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: 台帳のテーブルのクエリを実行する」に進みます。