DynamoDB でのクエリオペレーションのキー条件式
最初の文字が a-z
または A-Z
であり、残りの文字 (ある場合、2 番目以降の文字) が a-z
、A-Z
、または 0-9
である場合は、キー条件式で任意の属性値を使用できます。さらに、属性名は DynamoDB の予約語であってはいけません。(詳細リストについては、「DynamoDB の予約語」を参照してください) 属性名がこれらの要件を満たさない場合は、式の属性名をプレースホルダーとして定義する必要があります。詳細については、「DynamoDB の式の属性名 (エイリアス)」を参照してください。
特定のパーティションキー値を持つ項目は、DynamoDB によってソートキーの値で並べ替えられた順序で近くに配置されて保存されます。Query
オペレーションでは、並べ替えられた順序でDynamoDB によって項目が取得され、KeyConditionExpression
や存在する任意の FilterExpression
を使用して処理されます。その時初めて、Query
の結果がクライアントに返されます。
Query
オペレーションは常に結果セットを返します。一致する項目がない場合、結果セットは空になります。
Query
の結果は常にソートキーの値によってソートされます。ソートキーのデータ型が Number
である場合は、結果が番号順で返されます。その他の場合は、UTF-8 バイトの順序で結果が返されます。デフォルトの並べ替え順序は昇順です。順序を反転させるには、ScanIndexForward
パラメータを false
に設定します。
1 回の Query
オペレーションで、最大 1 MB のデータを取得できます。この制限は、FilterExpression
または ProjectionExpression
が結果に適用される前に適用されます。レスポンスに LastEvaluatedKey
が存在し、Null 以外の場合、結果セットをページ分割する必要があります (DynamoDB でテーブルクエリ結果をページ分割する を参照)。
キー条件式の例
検索条件を指定するには、キー条件式 (テーブルまたはインデックスから読み取る項目を決定する文字列) を使用します。
等価条件としてパーティションキーの名前と値を指定する必要があります。キー条件式では、非キー属性を使用することはできません。
オプションで、ソートキーに 2 番目の条件を指定できます (存在する場合)。ソートキーの条件では、次の比較演算子を 1 つ使用する必要があります。
-
— 属性a
=b
a
が値b
と等しい場合、true -
—a
<b
a
がb
未満の場合、true -
—a
<=b
a
がb
以下である場合、true -
—a
>b
a
がb
より大きい場合、true -
—a
>=b
a
がb
以上である場合、true -
—a
BETWEENb
ANDc
a
がb
以上で、c
以下である場合、true。
次の関数もサポートされます。
-
begins_with (
— 属性の値a
,substr
)
が特定のサブ文字列から始まる場合、true。a
キー条件式の使用方法を示す AWS Command Line Interface (AWS CLI) の例を次に示します。これらの式では、実際の値の代わりにプレースホルダー (:name
や :sub
など) を使用しています。詳細については、「DynamoDB の式の属性名 (エイリアス)」および「DynamoDB での式属性値の使用」を参照してください。
例
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"} }