ドキュメントのメタデータのクエリの実行 - Amazon Quantum Ledger Database (Amazon QLDB)

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

ドキュメントのメタデータのクエリの実行

INSERT ステートメントで、バージョン番号が 0 というドキュメントの最初のリビジョンが作成されます。各ドキュメントを一意に識別するために、Amazon QLDB によってドキュメント ID がメタデータの一部として割り当てられます。

QLDB は、ドキュメント ID とバージョン番号に加えて、各ドキュメントの他のシステム生成メタデータをテーブルに保存します。このメタデータには、トランザクション情報、ジャーナル属性、およびドキュメントのハッシュ値が含まれます。

システムによって割り当てられた ID はすべて汎用一意 ID (UUID、Universally Unique Identifier) であり、それぞれ Base62 エンコード文字列で表されます。詳細については、「Amazon QLDB で割り当てられる一意の ID」を参照してください。

コミット済みビュー

コミット済みビューのクエリを実行して、ドキュメントのメタデータにアクセスできます。このビューでは、システムで定義したテーブルからドキュメントを返します。このテーブルはユーザーテーブルに直接対応するものです。これには、自分のデータもシステムによって生成されたメタデータも、最後にコミットされ削除されていないリビジョンで含まれます。このビューのクエリを実行するには、クエリ内のテーブル名にプレフィックス _ql_committed_ を追加します。(プレフィックス _ql_ は、システムオブジェクトの QLDB に割り当てられます。)

SELECT * FROM _ql_committed_VehicleRegistration AS r WHERE r.data.VIN IN ('1N4AL11D75C109151', 'KM8SRDHF6EU074761')

このクエリの出力では、以前に インデックスを持つテーブルの作成とドキュメントの挿入 に挿入したデータを使用して、それぞれの削除されていないドキュメントの最新リビジョンのシステムコンテンツを表示します。システムドキュメントには、metadata フィールドのネストされたメタデータ、data フィールドのネストされたユーザーデータがあります。

{ blockAddress:{ strandId:"JdxjkR9bSYB5jMHWcI464T", sequenceNo:14 }, hash:{{wCsmM6qD4STxz0WYmE+47nZvWtcCz9D6zNtCiM5GoWg=}}, data:{ VIN: "1N4AL11D75C109151", LicensePlateNumber: "LEWISR261LL", State: "WA", City: "Seattle", PendingPenaltyTicketAmount: 90.25, ValidFromDate: 2017-08-21T, ValidToDate: 2020-05-11T, Owners: { PrimaryOwner: { PersonId: "294jJ3YUoH1IEEm8GSabOs" }, SecondaryOwners: [{ PersonId: "5Ufgdlnj06gF5CWcOIu64s" }] } }, metadata:{ id:"3Qv67yjXEwB9SjmvkuG6Cp", version:0, txTime:2019-06-05T20:53:321d-3Z, txId:"HgXAkLjAtV0HQ4lNYdzX60" } }, { blockAddress:{ strandId:"JdxjkR9bSYB5jMHWcI464T", sequenceNo:14 }, hash:{{wPuwH60TtcCvg/23BFp+redRXuCALkbDihkEvCX22Jk=}}, data:{ VIN: "KM8SRDHF6EU074761", LicensePlateNumber: "CA762X", State: "WA", City: "Kent", PendingPenaltyTicketAmount: 130.75, ValidFromDate: 2017-09-14T, ValidToDate: 2020-06-25T, Owners: { PrimaryOwner: { PersonId: "IN7MvYtUjkp1GMZu0F6CG9" }, SecondaryOwners: [] } }, metadata:{ id:"JOzfB3lWqGU727mpPeWyxg", version:0, txTime:2019-06-05T20:53:321d-3Z, txId:"HgXAkLjAtV0HQ4lNYdzX60" } }
コミット済みビューフィールド
  • blockAddress: ドキュメントリビジョンがコミットされた台帳のジャーナルのブロックの場所。暗号検証に使用するアドレスには、以下の 2 つのフィールドがあります。

    • strandId - ブロックを含むジャーナルストランドの一意の ID。

    • sequenceNo: ストランド内でブロックの場所を指定するインデックス番号。

    注記

    この例にあるドキュメントにはどちらにも、sequenceNo が同じ blockAddress が含まれています。これらのドキュメントは、1 回のトランザクションで (この場合には、1 つのステートメントに) 挿入されたため、同じブロックにコミットされています。

  • hash: ドキュメントリビジョンを一意に表す SHA-256 Ion ハッシュ値。ハッシュは data フィールドと metadata フィールドを対象とし、暗号検証に使用できます。

  • data – ドキュメントのユーザーデータ属性。

    リビジョンを秘匿化すると、この data 構造は dataHash フィールドに置き換えられ、その値は削除された data 構造の Ion ハッシュになります。

  • metadata: ドキュメントのメタデータ属性。

    • id: ドキュメントのシステムによって割り当てられた一意の ID。

    • version – ドキュメントのバージョン番号。これは、ドキュメントリビジョンごとに増えていく、0 から始まる整数です。

    • txTime: ジャーナルにドキュメントリビジョンがコミットされたときのタイムスタンプ。

    • txId: ドキュメントリビジョンをコミットしたトランザクションの一意の ID。

コミットされたビューとユーザービューへの参加

コミットされたビュー内のテーブルをユーザービューのテーブルと結合するクエリを記述できます。例えば、あるテーブルのドキュメント id を別のテーブルのユーザー定義フィールドと結合することができます。

次のクエリは、PersonIdDriversLicensePerson という名前の 2 つのテーブルをドキュメント id のフィールドとそれぞれ結合します。後者にはコミット済みビューを使用します。

SELECT * FROM DriversLicense AS d INNER JOIN _ql_committed_Person AS p ON d.PersonId = p.metadata.id WHERE p.metadata.id = '1CWScY2qHYI9G88C2SjvtH'

デフォルトのユーザービューでドキュメント ID フィールドのクエリを実行する方法については、「BY 句を使用したドキュメント ID のクエリの実行」に進みます。