Amazon QLDB の SELECT コマンド - Amazon Quantum Ledger Database (Amazon QLDB)

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

Amazon QLDB の SELECT コマンド

Amazon QLDB では、1 つまたは複数のテーブルからデータを取得するには、SELECT コマンドを使用します。QLDB のすべての SELECT クエリはトランザクションで処理され、トランザクションタイムアウト制限の対象になります。

結果の順序は一定ではなく、SELECT クエリごとに異なる場合があります。QLDB のクエリの結果の順序は変わる可能性があることに注意してください。

特定のテーブルでこの PartiQL コマンドを実行するためのアクセスを制御する方法については、「Amazon QLDB の標準アクセス許可モードの開始方法」を参照してください。

警告

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

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

構文

SELECT [ VALUE ] expression [ AS field_alias ] [, expression, ... ] FROM source [ AS source_alias ] [ AT idx_alias ] [ BY id_alias ] [, source, ... ] [ WHERE condition ]

パラメータ

VALUE

タプル構造内にラップされている値ではなく raw データ型の値がクエリから返されるようにする式修飾子。

expression

* ワイルドカードからの射影、または結果セットからの 1 つ以上のドキュメントフィールドの射影リスト。式には、PartiQL 関数 への呼び出し、または PartiQL 演算子 によって変更されたフィールドで構成できます。

AS field_alias

(オプション) 最終結果セットで使用されるフィールドの一時的なユーザー定義エイリアス。AS キーワードはオプションです。

シンプルなフィールド名ではない式に対してエイリアスを指定しない場合、結果セットはそのフィールドに対してデフォルト名を適用します。

FROM source

クエリされるソース。現在サポートされているソースは、テーブル名、テーブル間の 内部結合、ネストされた SELECT クエリ (「ネストされたクエリに関する制限事項」の対象)、およびテーブルの履歴関数呼び出しだけです。

1 つ以上のソースを指定する必要があります。複数のソースはカンマで区切る必要があります。

AS source_alias

(オプション) クエリが実行されるソースに該当するユーザー定義のエイリアス名。SELECT 句または WHERE 句で使用されるソースエイリアスは、いずれも FROM 句で宣言する必要があります。AS キーワードはオプションです。

AT idx_alias

(オプション) ソースからリスト内の各要素のインデックス番号 (序数) にバインドされる、ユーザー定義のエイリアス。このエイリアスは、AT キーワードを使用して FROM 句で宣言する必要があります。

BY id_alias

(オプション) 結果セット内の各ドキュメントの id メタデータフィールドにバインドされる、ユーザー定義のエイリアス。このエイリアスは、BY キーワードを使用して FROM 句で宣言する必要があります。これは、デフォルトのユーザービューへのクエリ実行中にドキュメント ID を射影またはフィルタ処理する場合に便利です。詳細については、「BY 句を使用したドキュメント ID のクエリの実行」を参照してください。

WHERE condition

クエリの選択条件および結合条件 (該当する場合)。

注記

WHERE 句を省略すると、テーブル内のすべてのドキュメントが取得されます。

Joins

現在は内部結合のみサポートされています。以下のように、明示的な INNER JOIN 句を使用して内部結合クエリを記述することができます。この構文では、JOINON を組み合わせる必要があります。INNER キーワードはオプションです。

SELECT expression FROM table1 AS t1 [ INNER ] JOIN table2 AS t2 ON t1.element = t2.element

また以下のように、黙示的な構文を使用して内部結合を記述することもできます。

SELECT expression FROM table1 AS t1, table2 AS t2 WHERE t1.element = t2.element

ネストされたクエリに関する制限事項

SELECT 式や FROM ソースの中にネストされたクエリ (サブクエリ) を記述できます。このようなクエリには、主な制限として、一番外側のクエリのみがグローバルデータベース環境にアクセスできるという制限があります。ここでは、テーブル VehicleRegistrationPerson を持つ台帳があると仮定します。以下のネストされたクエリは、内部の SELECTPerson にアクセスしようとしているため、有効ではありません。

SELECT r.VIN, (SELECT p.PersonId FROM Person AS p WHERE p.PersonId = r.Owners.PrimaryOwner.PersonId) AS PrimaryOwner FROM VehicleRegistration AS r

一方、以下のネストされたクエリは有効です。

SELECT r.VIN, (SELECT o.PrimaryOwner.PersonId FROM @r.Owners AS o) AS PrimaryOwner FROM VehicleRegistration AS r

次のクエリは、すべてを対象とするワイルドカードと IN 演算子を使用する標準 WHERE 述語句を指定した基本的な SELECT を示しています。

SELECT * FROM Vehicle WHERE VIN IN ('1N4AL11D75C109151', 'KM8SRDHF6EU074761')

以下は、文字列フィルタを使用した SELECT の射影を示しています。

SELECT FirstName, LastName, Address FROM Person WHERE Address LIKE '%Seattle%' AND GovId = 'LEWISR261LL'

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

SELECT r.VIN, o.SecondaryOwners FROM VehicleRegistration AS r, @r.Owners AS o WHERE r.VIN IN ('1N4AL11D75C109151', 'KM8SRDHF6EU074761')

以下は、ネストされたデータを射影する 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')

以下は、明示的な内部結合を示しています。

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

以下は、BY 句を使用したドキュメント id メタデータフィールドの射影を示しています。

SELECT r_id, r.VIN FROM VehicleRegistration AS r BY r_id WHERE r_id = 'documentId'

以下では、BY 句を使用して、それぞれ PersonId および ドキュメント id フィールドで DriversLicense テーブルと Person テーブルを結合します。

SELECT * FROM DriversLicense AS d INNER JOIN Person AS p BY pid ON d.PersonId = pid WHERE pid = 'documentId'

以下では、コミット済みビュー を使用して、それぞれ PersonId および ドキュメント id フィールドで DriversLicense テーブルと Person テーブルを結合します。

SELECT * FROM DriversLicense AS d INNER JOIN _ql_committed_Person AS cp ON d.PersonId = cp.metadata.id WHERE cp.metadata.id = 'documentId'

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

SELECT s.PersonId, owner_idx FROM VehicleRegistration AS r, @r.Owners.SecondaryOwners AS s AT owner_idx WHERE r.VIN = 'KM8SRDHF6EU074761'

ドライバーを使用したプログラムでの実行

QLDB ドライバーを使用してこのステートメントをプログラムで実行する方法については、「ドライバーの開始方法」の以下のチュートリアルを参照してください。