SQL では、SELECT
句なしの WHERE
ステートメントは、テーブルのすべての行を返します。Amazon DynamoDB では、Scan
オペレーションで同様のアクションを行います。どちらの場合も、すべて、または一部の項目を取得できます。
SQL または NoSQL データベースのいずれを使用するにしても、スキャンは大量のシステムリソースを消費するので、控え目に使用する必要があります。スキャンが適切 (小さなテーブルをスキャンするなど) または不可避 (データの一括エクスポートの実行など) な場合はあります。しかし、一般的なルールとして、スキャンを実行しないようアプリケーションを設計する必要があります。詳細については、「DynamoDB のテーブルに対するクエリの実行」を参照してください。
注記
一括エクスポートを実行すると、パーティションごとに少なくとも 1 つのファイルも作成されます。各ファイル内のすべての項目は、その特定のパーティションのハッシュされたキースペースからのものです。
SQL を使用してテーブルをスキャンする
SQL を使用すると、SELECT
句を指定せずに、WHERE
ステートメントを使用してテーブルをスキャンし、データのすべてを取得することができます。結果の 1 つ以上の列をリクエストできます。または、ワイルドカード文字「*」を使用する場合は、すべての項目をリクエストできます。
以下は SELECT
ステートメントの使用例です。
/* Return all of the data in the table */ SELECT * FROM Music;
/* Return all of the values for Artist and Title */ SELECT Artist, Title FROM Music;
DynamoDB でテーブルをスキャンする
Amazon DynamoDB では、DynamoDB API または PartiQL (SQL 互換のクエリ言語) を使用して、テーブルに対してスキャンを実行します。
DynamoDB API では、テーブルまたはセカンダリインデックスの各項目にアクセスして、1 つまたは複数の項目または項目属性を返す Scan
オペレーションを使用します。
// Return all of the data in the table { TableName: "Music" }
// Return all of the values for Artist and Title { TableName: "Music", ProjectionExpression: "Artist, Title" }
Scan
オペレーションでは、FilterExpression
パラメータも指定できます。これを使用して、結果に表示しない項目を破棄することができます。FilterExpression
は、スキャンの実行後、結果が返されるまでの間に適用されます。(これは、大きなテーブルではお勧めしません。返される一致項目がごく少数でも、Scan
全体に対して料金が請求されます。)