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

ステップ 5: 台帳の変更履歴を表示する

VIN 1N4AL11D75C109151 で車両の登録データを修正した後、登録されているすべての所有者やその他の更新されたすべてのフィールドの履歴に対してクエリを実行できます。このクエリでは、各リビジョンがいつ、どの順番で行われたかや、どのトランザクションによってコミットされたかを正確に示すメタデータも返されます。

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

変更履歴を表示するには

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

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

  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'
    • start-time および end-time パラメータはどちらもオプションです。ISO 8601 の日付と時刻の形式および協定世界時 (UTC) である必要があります。

    • start-time は、過去の任意の日付で end-time 以前の時刻に設定してください。

    • end-time は、協定世界時 (UTC) における現在の日時よりも前の時刻にしてください。

    • 開始時刻を指定し、終了時刻を指定しない場合、クエリではデフォルトで終了時刻が現在の日付と時刻に設定されます。どちらも指定しない場合、クエリでは履歴全体が返されます。

    注記

    ベストプラクティスとして、履歴に対するクエリはドキュメント id で修飾します。これにより、非効率的なクエリを回避することができます。

    start-timeend-time は、バックティック (`...`) で示すことができる Amazon Ion リテラル値です。詳細については、「PartiQL での Ion のクエリ」を参照してください。

    履歴関数は、コミット済みビューと同じスキーマを持つドキュメントを返します。たとえば、以下のようなステートメントを入力し、[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 によって一意に識別されます。

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

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

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