テーブルのスキャンにおける相違点 - Amazon DynamoDB

テーブルのスキャンにおける相違点

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

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 全体に対して料金が請求されます。)

PartiQL for DynamoDB

PartiQL では、Select ステートメントを使用するテーブルに対してすべての内容を返す ExecuteStatement オペレーションを使用してスキャンを実行します。

SELECT AlbumTitle, Year, Price FROM Music

このステートメントは、Music テーブルのすべての項目を返すことに注意してください。

SelectExecuteStatement を使用したコード例については、DynamoDB 用の PartiQL select ステートメント を参照してください。