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

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

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

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

履歴関数

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

構文

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

Parameters

table_name|table_id

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

開始時間,end-time

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

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

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

  • -開始時間およびend-time両方とも包括的です。両方とも、ISO 8601 の日時形式、協定世界時 (UTC) にしてください。

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

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

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

id

(オプション)リビジョン履歴を照会するドキュメント ID。

ヒント

ベストプラクティスとして、履歴クエリは日付範囲 (開始時間およびend-time) とドキュメント ID (metadata.id). QLDBでは、あらゆるSELECTクエリはトランザクションで処理され、トランザクションタイムアウト制限

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

履歴クエリの例

車両登録書類の履歴をクエリするには、id以前に保存したことドキュメントの更新と削除。たとえば、次の履歴クエリでは、ドキュメント ID のリビジョンが返されます。ADR2Ll1fGsU4Jr4EqTdnQFその間ずっと活動していたこと2019-06-05T00:00:00Zおよび2019-06-05T23:59:59Z

注記

開始時刻と終了時刻のパラメータがあることに注意してください。はいけないトランザクション中にリビジョンがジャーナルにコミットされた時刻範囲を指定します。たとえば、リビジョンが以前にコミットされた場合などです。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 ステートメントでは新しいリビジョンが作成されますが、これはドキュメントの最後のリビジョンになります。この最終的なリビジョンには、メタデータのみが含まれます。

クエリを最適化する方法については、「」に進みます。クエリパフォーマンスの最適化