DynamoDB でのクエリの操作 - Amazon DynamoDB

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

DynamoDB でのクエリの操作

-Queryオペレーションは、プライマリキー値に基づいて項目を探します。

パーティションキー属性の名前、および属性の単一値を指定する必要があります。Queryそのパーティションキー値を持つすべての項目を返します。 必要に応じて、ソートキー属性を指定し、比較演算子を使用して、検索 結果をさらに絞り込むことができます。

キー条件式

検索条件を指定するには、キー条件 式— テーブルまたはインデックスから読み取る項目を決定する文字列。

等価条件としてパーティションキーの名前と値を指定する必要があります。

オプションで、ソートキーに 2 番目の条件を指定できます (存在する場合)。ソート キーの条件では、次の比較演算子の 1 つを使用する必要があります。

  • a = b — 属性が a の値はと等しくなります。b

  • a < b — true の場合 a 未満です。b

  • a <= b — true の場合 a 以下 b

  • a > b — true の場合 a がより大きい b

  • a >= b — true の場合 a 以上 b

  • a BETWEEN b AND c— true a 以上 b以下 c.

次の関数もサポートされます。

  • begins_with (a, substr)— 属性の値aは特定の 部分文字列で始まります。

次の AWS Command Line Interface (AWS CLI) の例は、キー条件 式の使用方法を示しています。これらの式では、プレースホルダー (:nameおよび :sub実際の値の代わりに)。詳細については、「」を参照してください。Expression Attribute Names in DynamoDBおよびExpression Attribute Values

のクエリThread特定ののテーブル。ForumName ( パーティションキー) です。それを持つすべてのアイテムForumName値はクエリによって 読み込まれます。これはソートキー (Subject) は KeyConditionExpression

aws dynamodb query \ --table-name Thread \ --key-condition-expression "ForumName = :name" \ --expression-attribute-values '{":name":{"S":"Amazon DynamoDB"}}'

のクエリThread特定ののテーブル。ForumName ( パーティションキー) を使用していてもいますが、今回は指定の Subject(ソートキー)。

aws dynamodb query \ --table-name Thread \ --key-condition-expression "ForumName = :name and Subject = :sub" \ --expression-attribute-values file://values.json

の引数--expression-attribute-valuesに保存されます。 values.jsonファイルを開きます。

{ ":name":{"S":"Amazon DynamoDB"}, ":sub":{"S":"DynamoDB Thread 1"} }

のクエリReply特定ののテーブル。Id(パーティション キー) を返しますが、ReplyDateTime(ソートキー)は特定の文字 で始まります。

aws dynamodb query \ --table-name Reply \ --key-condition-expression "Id = :id and begins_with(ReplyDateTime, :dt)" \ --expression-attribute-values file://values.json

の引数--expression-attribute-valuesに保存されます。 values.jsonファイルを開きます。

{ ":id":{"S":"Amazon DynamoDB#DynamoDB Thread 1"}, ":dt":{"S":"2015-09"} }

最初の 文字がa-zまたはA-Zであり、2番目の文字(存在する場合) はa-zA-Z, または0-9。さらに、属性 名は DynamoDB の予約語ではない必要があります。(詳細な一覧については、「」を参照してください。DynamoDB 予約語。) 属性名がこれらの要件を満た さない場合は、式の属性名を プレースホルダーとして定義する必要があります。詳細については、「」を参照してください。Expression Attribute Names in DynamoDB

特定のパーティションキー値を持つ項目については、DynamoDB は、ソートキーの値 で並べ替えられた順序で近くに配置されて保存されます。でQueryオペレーションを実行した場合、DynamoDB は並べ替えられた順序で項目を取得し、 KeyConditionExpressionおよび任意のFilterExpressionが存在 する可能性があります。そのときだけ、Queryの結果がクライアントに返されます。

AQueryオペレーションは常に結果セットを返します。一致する項目がない場合、結果セットは空になります。

Queryの結果は常にソートキーの値によってソートされます。ソートキーのデータ 型がNumber場合、結果は数値順で返されます。その他の場合は、UTF-8 バイトの順序で結果が返されます。デフォルトの並べ替え順序 は昇順です。順序を反転させるには、[] を設定します。ScanIndexForwardパラメータを false

1 つのテーブルQueryオペレーションで、最大 1 MB のデータを取得できます。この制限は、任意のFilterExpressionが 結果に適用されます。もしLastEvaluatedKeyレスポンスにが存在し、Null 以外の 場合、結果セットをページ分割する必要があります (テーブルクエリ結果をページ分割する).

クエリのフィルタ式

さらに絞り込む必要がある場合は、Query結果で、オプションでフィルタ式 を指定できます。Aフィルタ式内のどの 項目を決定するQuery結果が返されるはずです。他のすべての 結果は破棄されます。

フィルタ式は、[] の後に適用されます。Queryは完了しますが、 結果が返される前に表示されます。したがって、Queryフィルタ式があるかどうかにかかわらず、同じ量の読み込み キャパシティーを消費します。

AQueryオペレーションで、最大 1 MB のデータを取得できます。この制限は、フィルタ式を評価する前に適用されます。

フィルタ式には、パーティションキーまたはソートキーの属性を含めることはできません。フィルタ 式ではなく、キー条件式のこれらの属性 を指定する必要があります。

フィルタ式の構文は、キー条件式の構文と同じです。フィルタ式は、 キー条件式と同じコンパレータ、関数および論理演算子を使用できます。また、等しくない演算子 (<>). 詳細については、「」を参照してください。キー条件式

次の AWS CLI の例では、Thread特定ののテーブル。 ForumName(パーティションキー) とSubject(ソートキー)。見つかった 項目のうち、最もポピュラー なディスカッションスレッドのみが返される。つまり、一定数以上の Views

aws dynamodb query \ --table-name Thread \ --key-condition-expression "ForumName = :fn and Subject = :sub" \ --filter-expression "#v >= :num" \ --expression-attribute-names '{"#v": "Views"}' \ --expression-attribute-values file://values.json

の引数--expression-attribute-valuesに保存されます。 values.jsonファイルを開きます。

{ ":fn":{"S":"Amazon DynamoDB"}, ":sub":{"S":"DynamoDB Thread 1"}, ":num":{"N":"3"} }

なお、Viewsは DynamoDB の予約語です。DynamoDB 予約語)なので、この例では #vプレースホルダーとして使用します。詳細については、「」を参照してください。Expression Attribute Names in DynamoDB

注記

フィルタ式は、から項目を削除します。Query結果セットを実行します。 可能であれば、Query大量の 項目を取得してもそのほとんどを破棄する必要のあるような

結果セットの項目数の制限

-Queryオペレーションは、 読み取られる項目数を制限することができます。これを行うには、Limitパラメータを、必要な項目の 最大数に設定します。

たとえば、あなたがいるとします。QueryテーブルをLimit の値6で、フィルター式を使用しません。-Query結果 には、リクエストからのキー条件式に一致するテーブルからの 最初 6 つの項目が含まれます。

ここで、フィルタ式をQuery。この場合、 DynamoDB は最大 6 つの項目を読み取り、フィルタ 式と一致する項目だけを返します。最後のQuery結果に含まれる項目数は、DynamoDB が より多くの項目を読み続けた場合に、より多くの項目がフィルタ式にマッチしても 6 件以下です。

結果での項目のカウント

条件に一致する項目に加えて、Queryレスポンス には、次の要素が含まれます。

  • ScannedCount— キー 条件式と一致する項目数です。フィルタ 式 (存在する場合) が適用されました。

  • Count— 残っている項目の数です。フィルタ式 (存在する場合) が適用されました。

注記

フィルタ式を使用しない場合、ScannedCountおよび Countの値は同じです。

のサイズQuery結果セットが 1 MB より大きい場合、 ScannedCountおよびCountは、合計項目の部分的なカウントのみを表します。あなたは、複数の実行する必要がありますQuery すべての結果を取得します (テーブルクエリ結果をページ分割する).

Queryレスポンスの内容は次のとおりです。ScannedCountおよび Count特定のによって処理された項目の Queryリクエスト. すべての総計を取得するにはQuery リクエストで、両方の実行中の集計を維持することができます。ScannedCountおよび Count

クエリで消費されるキャパシティーユニット

以下の操作を実行できます。Query複合プライマリ キー (パーティションキーおよびソートキー) が存在する場合には、任意のテーブルまたはセカンダリインデックス。Queryオペレーションでは、次のように読み込みキャパシティー ユニットを消費します。

場合Querya... DynamoDB は... からの読み込みキャパシティーユニットを消費します。
テーブルのプロビジョニングされた読み込みキャパシティー。
グローバルセカンダリインデックス インデックスのプロビジョニングされた読み込みキャパシティー。
ローカルセカンダリインデックス ベーステーブルのプロビジョニングされた読み込みキャパシティー。

デフォルトでは、Queryオペレーションは、どのくらいの読み込み キャパシティーを消費するかについてのデータを返しません。ただし、指定することができます。ReturnConsumedCapacity パラメータをQueryリクエストで、この情報を取得します。有効な設定を 以下に示します。ReturnConsumedCapacity:

  • NONE— 消費されたキャパシティーデータは返されません。(これが デフォルトです)

  • TOTAL— レスポンスには消費された読み込み キャパシティーユニットの合計値が含まれます。

  • INDEXES— レスポンスは、アクセスする各テーブルと インデックスの消費される キャパシティーとともに、消費される読み込みキャパシティーユニットの合計値を示します。

DynamoDB はアプリケーションに返されるデータ量ではなく、項目サイズに基づいて消費される読み込みキャパシティーユニットの数を計算します。このため、消費される キャパシティーユニットの数は、(射影式を使用して) 属性のすべてをリクエストしても ( デフォルトの動作) 一部をリクエストしても、同じになります。数は 、フィルタ式を使用していてもいなくても同じです。

クエリの読み込み整合性

AQueryオペレーションは、デフォルトで結果整合性のある読み込みを実行します。 つまり、Query結果が、最近 完了したために変更を反映しない場合があります。PutItemまたはUpdateItemオペレーション. 詳細については、「」を参照してください。読み込み整合性

強力な整合性のある読み込みが必要な場合は、ConsistentRead パラメータをtrue()Queryリクエスト.