データのクエリの実行 - Amazon Quantum Ledger Database (Amazon QLDB)

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

データのクエリの実行

ユーザービューは、自分のユーザーデータの中で最新の削除されていないリビジョンのみを返します。これが 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 コンソールはクエリ結果を 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" }] } }

結合

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

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 には Amazon Ion 拡張機能があり、これらの機能を使用してドキュメント内のネストされたデータのクエリを実行できます。以下の例では、ネストされたデータを平坦化する相関サブクエリを示しています。ここで @ 文字は構文的に省略可能です。ただしこの文字は、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
}

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