リビジョン履歴のクエリの実行 - Amazon Quantum Ledger Database (Amazon QLDB)

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

リビジョン履歴のクエリの実行

Amazon QLDB は、テーブル内にあるすべてのドキュメントの履歴全体を保存します。組み込みの履歴関数のクエリを実行することで、「ドキュメントの更新と削除」で前に挿入、更新、削除された車両登録ドキュメントの 3 つのリビジョンすべてを表示できます。

履歴関数

QLDB の履歴関数は、テーブルのシステム定義ビューからリビジョンを返す PartiQL の拡張機能です。そのため、お客様のデータも、コミット済みビューと同じスキーマにあるその関連メタデータも両方含まれます。

[Syntax] (構文)

SELECT * FROM history( table_name | 'table_id' [, `start-time` [, `end-time` ] ] ) AS h [ WHERE h.metadata.id = 'id' ]
引数
table_name | 'table_id'

テーブル名またはテーブル ID のいずれか。テーブル名は PartiQL 識別子であり、二重引用符で囲んでも、引用符で囲まなくてもかまいません。テーブル ID は文字列リテラルであり、単一引用符で囲む必要があります。テーブル ID の使用の詳細については、「非アクティブなテーブルの履歴に対するクエリの実行」を参照してください。

`start-time`、`end-time`

(オプション) リビジョンがアクティブだった時間範囲を指定します。これらのパラメータでは、リビジョンがトランザクションのジャーナルにコミットされた時間範囲を指定しません。

開始時刻と終了時刻は、バックティック (`...`) で示すことができる Ion タイムスタンプリテラルです。詳細については、「Amazon QLDB での PartiQL による Ion のクエリ」を参照してください。

これらの時間パラメータには、次の動作があります。

  • 開始時刻終了時刻は、両方とも含まれます。両方とも、ISO 8601 の日時形式、協定世界時 (UTC) にしてください。

  • 開始時刻は、過去の任意の日付で 終了時刻以前の時刻に設定してください。

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

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

'id'

(オプション) リビジョン履歴のクエリを実行するドキュメント ID。一重引用符を使用して表記されます。

ヒント

ベストプラクティスとして、履歴クエリは日付範囲 (start-time および end-time) とドキュメント ID (metadata.id) の両方で修飾します。QLDB では、すべての SELECT クエリはトランザクションで処理され、トランザクションタイムアウト制限の対象になります。

履歴クエリでは、テーブルで作成するインデックスは使用されません。QLDB 履歴はドキュメント ID によってのみインデックス付けされるため、現時点では追加の履歴インデックスを作成することはできません。開始時刻と終了時刻を含む履歴クエリでは、日付範囲修飾のメリットが得られます。

履歴クエリの例

車両登録ドキュメントの履歴のクエリを実行するために、「ドキュメントの更新と削除」で保存しておいた id を使用します。例えば、次の履歴クエリは、2019-06-05T00:00:00Z2019-06-05T23:59:59Z の間アクティブだったドキュメント ID ADR2Ll1fGsU4Jr4EqTdnQF のリビジョンを返します。

注記

開始時刻と終了時刻のパラメータでは、リビジョンがトランザクション内のジャーナルにコミットされた時間範囲を指定しないことに注意してください。例えば、リビジョンが 2019-06-05T00:00:00Z 以前にコミットされ、その開始時刻を過ぎてもアクティブなままだった場合、この例のクエリは結果にそのリビジョンを返します。

必ず、id、開始時刻、終了時刻を適した独自の値に置き換えてください。

SELECT * FROM history(VehicleRegistration, `2019-06-05T00:00:00Z`, `2019-06-05T23:59:59Z`) AS h WHERE h.metadata.id = 'ADR2Ll1fGsU4Jr4EqTdnQF' --replace with your id

クエリ結果は以下のようになります。

{ blockAddress:{ strandId:"JdxjkR9bSYB5jMHWcI464T", sequenceNo:14 }, hash:{{B2wYwrHKOWsmIBmxUgPRrTx9lv36tMlod2xVvWNiTbo=}}, data: { VIN: "1HVBBAANXWH544237", LicensePlateNumber: "LS477D", State: "WA", City: "Tacoma", PendingPenaltyTicketAmount: 42.20, ValidFromDate: 2011-10-26T, ValidToDate: 2023-09-25T, Owners: { PrimaryOwner: { PersonId: "KmA3XPKKFqYCP2zhR3d0Ho" }, SecondaryOwners: [] } }, metadata:{ id:"ADR2Ll1fGsU4Jr4EqTdnQF", version:0, txTime:2019-06-05T20:53:321d-3Z, txId:"HgXAkLjAtV0HQ4lNYdzX60" } }, { blockAddress:{ strandId:"JdxjkR9bSYB5jMHWcI464T", sequenceNo:17 }, hash:{{LGSFZ4iEYWZeMwmAqcxxNyT4wbCtuMOmFCj8pEd6Mp0=}}, data: { VIN: "1HVBBAANXWH544237", LicensePlateNumber: "LS477D", State: "WA", PendingPenaltyTicketAmount: 42.20, ValidFromDate: 2011-10-26T, ValidToDate: 2023-09-25T, Owners: { PrimaryOwner: { PersonId: "KmA3XPKKFqYCP2zhR3d0Ho" }, SecondaryOwners: [] }, City: "Bellevue" }, metadata:{ id:"ADR2Ll1fGsU4Jr4EqTdnQF", version:1, txTime:2019-06-05T21:01:442d-3Z, txId:"9cArhIQV5xf5Tf5vtsPwPq" } }, { blockAddress:{ strandId:"JdxjkR9bSYB5jMHWcI464T", sequenceNo:19 }, hash:{{7bm5DUwpqJFGrmZpb7h9wAxtvggYLPcXq+LAobi9fDg=}}, metadata:{ id:"ADR2Ll1fGsU4Jr4EqTdnQF", version:2, txTime:2019-06-05T21:03:76d-3Z, txId:"9GslbtDtpVHAgYghR5FXbZ" } }

出力には、メタデータの属性が含まれ、それぞれのアイテムが変更された日時、また関連するトランザクション内容の詳細を確認できます。このデータで、以下を確認できます。

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

  • INSERT ステートメントで、ドキュメントの最初のリビジョン (バージョン0) を作成します。

  • その後、更新のたびに新しいリビジョンが作成され、同じドキュメント id にバージョン番号が増えていきます。

  • txId フィールドは各リビジョンをコミットしたトランザクションを示し、txTime は各リビジョンがコミットされた日時を示します。

  • DELETE ステートメントでは新しいリビジョンが作成されますが、これはドキュメントの最後のリビジョンになります。この最終的なリビジョンには、メタデータのみが含まれます。

リビジョンを完全に削除する方法については、ドキュメントのリビジョンを秘匿化する に進んでください。