ステップ 5. 文書の改訂履歴の表示 - Amazon Quantum Ledger Database (Amazon QLDB)

英語の翻訳が提供されている場合で、内容が矛盾する場合には、英語版がオリジナルとして取り扱われます。翻訳は機械翻訳により提供されています。

ステップ 5. 文書の改訂履歴の表示

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

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

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

リビジョン履歴を表示するには

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

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

  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 の値を使用して、以下の構文で履歴関数にクエリを実行します。

    SELECT * FROM history( table [, `start-time`, `end-time`] ) AS h WHERE h.metadata.id = 'id'
    • 開始時刻終了時刻は、両方とも含まれるオプションのパラメータです。ISO 8601 の日付と時刻の形式および協定世界時 (UTC) である必要があります。

    • 開始-時間 および 終了時間 は、バックティック(`...`)。詳細については、「PartiQL での Ion のクエリ」を参照してください。

    • ベストプラクティスとして、日付範囲(開始-時間 および 終了時間)および文書ID(metadata.id)。 QLDB プロセス SELECT トランザクションのクエリ。トランザクションのタイムアウト制限の対象となります。

      QLDB 履歴はドキュメント 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

    履歴に対するこの最初のクエリでは、修正した車両登録データが射影されます。結果には、次のようにドキュメントのすべてのリビジョンが含まれます。

    VIN City 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. 元帳内の伝票を検証する」に進みます。