データのクエリの実行 - Amazon Quantum 台帳データベース (Amazon QLDB)

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

データのクエリの実行

重要

サポート終了通知: 既存のお客様は、07/31/2025 のサポート終了QLDBまで Amazon を使用できます。詳細については、「Amazon Ledger QLDB を Amazon Aurora Postgre に移行するSQL」を参照してください。

ユーザービューは、自分のユーザーデータの中で最新の削除されていないリビジョンのみを返します。これは Amazon のデフォルトビューですQLDB。つまり、自分のデータのみにクエリを実行するときには、特別な限定詞は必要ありません。

次のクエリ例の構文とパラメータの詳細については、「Amazon QLDB PartiQL リファレンスSELECT」の「」を参照してください。

基本的なクエリ

基本的な SELECT クエリでは、テーブルに挿入したドキュメントが返されます。

警告

インデックス付きルックアップQLDBなしで でクエリを実行すると、完全なテーブルスキャンが呼び出されます。PartiQL はSQL互換性があるため、このようなクエリをサポートしています。ただし、 の本番稼働用ユースケースではテーブルスキャンを実行しないでくださいQLDB。テーブルスキャンより、同時実行の競合やトランザクションのタイムアウトなど、大きなテーブルでパフォーマンスの問題が発生する可能性があります。

テーブルスキャンを回避するには、インデックス付きフィールドまたはドキュメント ID で等価演算子を使用する WHERE 述語句でステートメントを実行する必要があります (例: WHERE indexedField = 123 または WHERE indexedField IN (456, 789))。詳細については、「クエリパフォーマンスの最適化」を参照してください。

以下のクエリは、以前に インデックスを持つテーブルの作成とドキュメントの挿入 に挿入した車両登録ドキュメントの結果を示しています。結果の順序は一定ではなく、SELECT クエリごとに異なる場合があります。のクエリでは、結果の順序に依存しないでくださいQLDB。

SELECT * FROM VehicleRegistration WHERE LicensePlateNumber IN ('LEWISR261LL', 'CA762X')
{ 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" }] } }, { VIN: "KM8SRDHF6EU074761", LicensePlateNumber: "CA762X", State: "WA", City: "Kent", PendingPenaltyTicketAmount: 130.75, ValidFromDate: 2017-09-14T, ValidToDate: 2020-06-25T, Owners: { PrimaryOwner: { PersonId: "IN7MvYtUjkp1GMZu0F6CG9" }, SecondaryOwners: [] } }
SELECT * FROM Vehicle WHERE VIN IN ('1N4AL11D75C109151', 'KM8SRDHF6EU074761')
{ VIN: "1N4AL11D75C109151", Type: "Sedan", Year: 2011, Make: "Audi", Model: "A5", Color: "Silver" }, { VIN: "KM8SRDHF6EU074761", Type: "Sedan", Year: 2015, Make: "Tesla", Model: "Model S", Color: "Blue" }
重要

PartiQL では、一重引用符を使用して、データ操作言語 (DML) またはクエリステートメントの文字列を示します。ただし、QLDBコンソールとQLDBシェルはクエリ結果を Amazon Ion テキスト形式で返すため、二重引用符で囲まれた文字列が表示されます。

この構文により、PartiQL クエリ言語はSQL互換性を維持し、Amazon Ion テキスト形式はJSON互換性を維持できます。

射影とフィルタ

射影 (ターゲットの SELECT) およびその他の標準フィルタ (WHERE 句) を使用できます。次のクエリは、VehicleRegistration テーブルからドキュメントフィールドのサブセットを返します。以下の基準で車両をフィルタリングします。

  • 文字列フィルタ: シアトルで登録されています。

  • 10 進数フィルタ: 金額が 100.0 未満の支払い保留中の反則切符がある。

  • 日付フィルタ: 登録日は 2019 年 9 月 4 日以降有効である。

SELECT r.VIN, r.PendingPenaltyTicketAmount, r.Owners FROM VehicleRegistration AS r WHERE r.VIN IN ('1N4AL11D75C109151', 'KM8SRDHF6EU074761') AND r.City = 'Seattle' --string AND r.PendingPenaltyTicketAmount < 100.0 --decimal AND r.ValidToDate >= `2019-09-04T` --timestamp with day precision
{ VIN: "1N4AL11D75C109151", PendingPenaltyTicketAmount: 90.25, Owners: { PrimaryOwner: { PersonId: "294jJ3YUoH1IEEm8GSabOs" }, SecondaryOwners: [{ PersonId: "5Ufgdlnj06gF5CWcOIu64s" }] } }

Joins

内部結合クエリを記述することもできます。以下の例では、登録車両の属性と共にすべての登録ドキュメントを返す暗黙的な内部結合クエリを示しています。

SELECT * FROM VehicleRegistration AS r, Vehicle AS v WHERE r.VIN = v.VIN AND r.VIN IN ('1N4AL11D75C109151', 'KM8SRDHF6EU074761')
{ 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" }] }, Type: "Sedan", Year: 2011, Make: "Audi", Model: "A5", Color: "Silver" }, { VIN: "KM8SRDHF6EU074761", LicensePlateNumber: "CA762X", State: "WA", City: "Kent", PendingPenaltyTicketAmount: 130.75, ValidFromDate: 2017-09-14T, ValidToDate: 2020-06-25T, Owners: { PrimaryOwner: { PersonId: "IN7MvYtUjkp1GMZu0F6CG9" }, SecondaryOwners: [] }, Type: "Sedan", Year: 2015, Make: "Tesla", Model: "Model S", Color: "Blue" }

また、以下のように、明示的な構文で同じ内部結合クエリを記述することもできます。

SELECT * FROM VehicleRegistration AS r INNER JOIN Vehicle AS v ON r.VIN = v.VIN WHERE r.VIN IN ('1N4AL11D75C109151', 'KM8SRDHF6EU074761')

ネストされたデータ

で PartiQL を使用してQLDB、ドキュメント内のネストされたデータをクエリできます。以下の例では、ネストされたデータを平坦化する相関サブクエリを示しています。ここで @ 文字は構文的に省略可能です。ただしこの文字は、Owners という名前の別のコレクション (存在する場合) ではなく、VehicleRegistration 内の Owners 構造を必要とすることを明示的に示しています。

SELECT r.VIN, o.SecondaryOwners FROM VehicleRegistration AS r, @r.Owners AS o WHERE r.VIN IN ('1N4AL11D75C109151', 'KM8SRDHF6EU074761')
{ VIN: "1N4AL11D75C109151", SecondaryOwners: [{ PersonId: "5Ufgdlnj06gF5CWcOIu64s" }] }, { VIN: "KM8SRDHF6EU074761", SecondaryOwners: [] }

以下に示しているのは、ネストされたデータを射影する SELECT リスト内のサブクエリと、内部結合を示しています。

SELECT v.Make, v.Model, (SELECT VALUE o.PrimaryOwner.PersonId FROM @r.Owners AS o) AS PrimaryOwner FROM VehicleRegistration AS r, Vehicle AS v WHERE r.VIN = v.VIN AND r.VIN IN ('1N4AL11D75C109151', 'KM8SRDHF6EU074761')
{ Make: "Audi", Model: "A5", PrimaryOwner: ["294jJ3YUoH1IEEm8GSabOs"] }, { Make: "Tesla", Model: "Model S", PrimaryOwner: ["IN7MvYtUjkp1GMZu0F6CG9"] }

以下では、VehicleRegistration ドキュメントについて、Owners.SecondaryOwners リスト内の各個人の PersonId とインデックス番号 (序数) を返します。

SELECT s.PersonId, owner_idx FROM VehicleRegistration AS r, @r.Owners.SecondaryOwners AS s AT owner_idx WHERE r.VIN = '1N4AL11D75C109151'
{
    PersonId: "5Ufgdlnj06gF5CWcOIu64s",
    owner_idx: 0
}

ドキュメントのメタデータのクエリを実行する方法については、「ドキュメントのメタデータのクエリの実行」に進みます。