翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
SELECT Amazon の コマンド QLDB
重要
サポート終了通知: 既存のお客様は、07/31/2025 のサポート終了QLDBまで Amazon を使用できます。詳細については、「Amazon Ledger QLDB を Amazon Aurora Postgre に移行するSQL
Amazon ではQLDB、 SELECT
コマンドを使用して 1 つ以上のテーブルからデータを取得します。のすべてのSELECT
クエリQLDBはトランザクションで処理され、トランザクションタイムアウト制限 の対象となります。
結果の順序は一定ではなく、SELECT
クエリごとに異なる場合があります。のクエリでは、結果の順序に依存しないでくださいQLDB。
特定のテーブルでこの PartiQL コマンドを実行するためのアクセスを制御する方法については、「Amazon での標準アクセス許可モードの開始方法 QLDB」を参照してください。
警告
インデックス付きルックアップQLDBなしで でクエリを実行すると、完全なテーブルスキャンが呼び出されます。PartiQL はSQL互換性があるため、このようなクエリをサポートしています。ただし、 の本番稼働用ユースケースではテーブルスキャンを実行しないでくださいQLDB。テーブルスキャンより、同時実行の競合やトランザクションのタイムアウトなど、大きなテーブルでパフォーマンスの問題が発生する可能性があります。
テーブルスキャンを回避するには、インデックス付きフィールドまたはドキュメント ID で等価演算子を使用する WHERE
述語句でステートメントを実行する必要があります (例: WHERE indexedField = 123
または WHERE indexedField IN (456, 789)
)。詳細については、「クエリパフォーマンスの最適化」を参照してください。
構文
SELECT [ VALUE ]
expression
[ ASfield_alias
] [,expression
, ... ] FROMsource
[ ASsource_alias
] [ ATidx_alias
] [ BYid_alias
] [,source
, ... ] [ WHEREcondition
]
パラメータ
- 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
句を使用して内部結合クエリを記述することができます。この構文では、JOIN
と ON
を組み合わせる必要があります。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
ソースの中にネストされたクエリ (サブクエリ) を記述できます。このようなクエリには、主な制限として、一番外側のクエリのみがグローバルデータベース環境にアクセスできるという制限があります。ここでは、テーブル VehicleRegistration
と Person
を持つ台帳があると仮定します。以下のネストされたクエリは、内部の SELECT
が Person
にアクセスしようとしているため、有効ではありません。
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 ドライバーを使用してこのステートメントをプログラムで実行する方法については、「ドライバーの開始方法」の以下のチュートリアルを参照してください。
-
Java: クイックスタートチュートリアル | クックブックリファレンス
-
.NET: クイックスタートチュートリアル | クックブックリファレンス
-
Go: クイックスタートチュートリアル | クックブックリファレンス
-
Node.js: クイックスタートチュートリアル | クックブックリファレンス
-
Python: クイックスタートチュートリアル | クックブックリファレンス