ステップ 5: ドキュメントのリビジョン履歴を表示する - Amazon Quantum Ledger Database (Amazon QLDB)

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

ステップ 5: ドキュメントのリビジョン履歴を表示する

VIN が 1N4AL11D75C109151 の車両の登録データを変更した後、登録されているすべての所有者やその他の更新されたすべてのフィールドの履歴のクエリを実行できます。組み込みの履歴関数にクエリを実行することによって、挿入、更新、削除したドキュメントのすべてのリビジョンを表示できます。

履歴関数は、テーブルのコミット済みビューからリビジョンを返します。これには、アプリケーションのデータとそれに関連するメタデータの両方が含まれます。このメタデータには、それぞれのリビジョンがいつ、どの順番で作成されたか、またどのトランザクションによってコミットされたかが正確に示されます。

このステップでは、vehicle-registration 台帳の VehicleRegistration テーブルに含まれているドキュメントのリビジョン履歴のクエリを実行します。

リビジョン履歴を表示するには
  1. Amazon QLDB コンソール (https://console.aws.amazon.com/qldb) を開きます。

  2. ナビゲーションペイン内で [PartiQL エディタ] を選択します。

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

  4. ドキュメントの履歴にクエリを実行するには、まずその一意の id を検索します。コミット済みビューにクエリを実行する以外に、ドキュメント id を取得する方法として、テーブルのデフォルトのユーザービューで BY キーワードを使用する方法があります。詳細については、「BY 句を使用したドキュメント ID のクエリの実行」を参照してください。

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

    SELECT r_id FROM VehicleRegistration AS r BY r_id WHERE r.VIN = '1N4AL11D75C109151'
  5. 次に、この id の値を使用して、履歴関数にクエリを実行します。次のステートメントを入力し、[Run (実行)] を選択します。必要に応じて、id 値を独自のドキュメント ID に置き換えてください。

    SELECT h.data.VIN, h.data.City, h.data.Owners FROM history(VehicleRegistration) AS h WHERE h.metadata.id = 'ADR2LQq48kB9neZDupQrMm' --replace with your id
    注記

    このチュートリアルでは、この履歴クエリはドキュメント ID ADR2LQq48kB9neZDupQrMm のすべてのリビジョンを返します。ただし、ベストプラクティスとして、履歴クエリをドキュメント ID と日付範囲 (開始時刻および終了時刻) の両方で修飾します。

    QLDB では、すべての SELECT クエリはトランザクションで処理され、トランザクションタイムアウト制限の対象になります。開始時刻と終了時刻を含む履歴クエリでは、日付範囲修飾のメリットが得られます。詳細については、「履歴関数」を参照してください。

    履歴関数は、コミット済みビューと同じスキーマ内にあるドキュメントを返します。この例では、修正した車両登録データが射影されます。出力は以下の例のようになります。

    VIN 市町村 Owners
    "1N4AL11D75C109151" "Seattle" {PrimaryOwner:{PersonId:""},SecondaryOwners:[]}
    "1N4AL11D75C109151" "Seattle" {PrimaryOwner:{PersonId:"294jJ3YUoH1IEEm8GSabOs"}, SecondaryOwners:[]}
    "1N4AL11D75C109151" "Everett" {PrimaryOwner:{PersonId:"7NmE8YLPbXc0IqesJy1rpR"}, SecondaryOwners:[]}
    "1N4AL11D75C109151" "Everett" {PrimaryOwner:{PersonId:"7NmE8YLPbXc0IqesJy1rpR"}, SecondaryOwners:[{PersonId:"5Ufgdlnj06gF5CWcOIu64s"}]}
    注記

    履歴クエリでは、ドキュメントのリビジョンが順番に返されない場合があります。

    出力を見て、変更が「ステップ 4: 台帳のドキュメントを変更する」で行った内容を反映していることを確認します。

  6. 次に、各リビジョンのドキュメントメタデータを調べることができます。次のステートメントを入力し、[Run (実行)] を選択します。ここでも、必要に応じて、id 値を独自のドキュメント ID に置き換えてください。

    SELECT VALUE h.metadata FROM history(VehicleRegistration) AS h WHERE h.metadata.id = 'ADR2LQq48kB9neZDupQrMm' --replace with your id

    出力は以下の例のようになります。

    version id txTime txId
    0 "ADR2LQq48kB9neZDupQrMm" 2019-05-23T19:20:360d-3Z "FMoVdWuPxJg3k466Iz4i75"
    1 "ADR2LQq48kB9neZDupQrMm" 2019-05-23T21:40:199d-3Z "KWByxe842Xw8DNHcvARPOt"
    2 "ADR2LQq48kB9neZDupQrMm" 2019-05-23T21:44:432d-3Z "EKwDOJRwbHpFvmAyJ2Kdh9"
    3 "ADR2LQq48kB9neZDupQrMm" 2019-05-23T21:49:254d-3Z "96EiZd7vCmJ6RAvOvTZ4YA"

    これらのメタデータフィールドは、各項目がいつ、どのトランザクションによって変更されたかを示す詳細を提供します。このデータからは、以下を推測できます。

    • ドキュメントはシステムによって割り当てられた id: ADR2LQq48kB9neZDupQrMm で個々に識別されます。これは Base62 でエンコードされた文字列で表される汎用一意識別子 (UUID) です。

    • txTime は、ドキュメントの最初のリビジョン (バージョン 0) が 2019-05-23T19:20:360d-3Z に作成されたことを示しています。

    • その後の各トランザクションにより、同じドキュメント id、増分されたバージョン番号、および更新された txIdtxTime を含む新しいリビジョンが作成されます。

vehicle-registration 台帳のドキュメントリビジョンを暗号的に検証するには、「ステップ 6: 台帳のドキュメントを検証する」に進みます。