2017-02-28 13 views
2

DynamoDBでは、パーティションキーと範囲キーを使用してLSI(ローカルセカンダリインデックス)を設定しました。パーティションキーと範囲キーでLSIを使用したDynamodbのクエリ

Partition Key値とRange Key値を使用してDynamoDBテーブルをクエリするにはどうすればよいですか?

SQLでは、私は IN演算子を使用することができます。

SELECT * 
    FROM genericTable 
WHERE partionKey = "foo" 
    AND rangeKey IN ("bar1", "bar11", "bar5") 

どのように私はDynamoDBの中にこの機能を実現できますか?クエリは、同じパーティションキーの値が、別の種類のキー値を持っている...いくつかの項目 を取得するためにKeyConditionExpressionを使用することができます

Documentation of Amazon query

のとおり。

しかし、有効な比較演算子のリストには、SQL "IN"に類似するものはありません。

以下のような複数のキー条件式を使用する方法はありますか?

SELECT * 
    FROM genericTable 
WHERE partionKey = "foo" 
    AND (rangeKey = "bar1" 
    OR rangeKey = "bar5" ....) 
+0

私は、パーティション・キーとキーの範囲の値のリストを照会する方法、特に求めています、私の元の質問の編集に反対します。質問のタイトルはその区別を失います。指定したパーティションキーと単一の範囲キーの照会はサポートされていますが、範囲キー値のリストを照会することはできません。これは私が求めていたものです –

答えて

0
Local Search Indexes - PHP Low Level APIのAWSドキュメント内の指定されたパー例として

次のようにソートキー条件の有効な比較は以下のとおりです。

  • sortKeyName =:sortkeyval - 真のソートキー場合値は次のようになります。sortkeyval。
  • sortKeyName <:sortkeyval - ソートキーの値がsortkeyvalより小さい場合はtrueです。
  • sortKeyName < = sortkeyval - ソートキーの値が以下の場合はtrue:sortkeyval。
  • sortKeyName>:sortkeyval - ソートキーの値がsortkeyvalより大きい場合はtrueです。
  • sortKeyName> =:sortkeyval - ソートキーの値がより大きいか等しい場合はtrue:sortkeyval。
  • sortKeyName BETWEEN:sortkeyval1 AND:sortkeyval2 - ソートキーの値がsortkeyval1以上で、 以下、つまりsortkeyval2以下の場合はtrueです。
  • starts_with(sortKeyName、:sortkeyval) - ソートキーの値が特定のオペランドで始まる場合はtrueです。 (あなたはNumber型でソートキーと、この機能 を使用することはできません。)

関数名BEGINS_WITHは、大文字と小文字が区別されていること。

したがって、の範囲のみがサポートされています。 ORはありません。また、beginning_withを試してみることもできます。あなたのシナリオは、次のコードに変換することができ

$tableName = "genericTable"; 
$response = $dynamodb->query([ 
    'TableName' => $tableName, 
    'IndexName' => 'OrderCreationDateIndex', 
    'KeyConditionExpression' => 'partionKey = :p_key and begins_with(rangekey, :range)', 
    'ExpressionAttributeValues' => [ 
     ':p_key' => ['S' => 'foo'], 
     ':range' => ['S' => 'bar'] 
    ], 
    'Select' => 'ALL_PROJECTED_ATTRIBUTES', 
    'ScanIndexForward' => false, 
    'ConsistentRead' => true, 
    'Limit' => 5, 
    'ReturnConsumedCapacity' => 'TOTAL' 
]); 
+0

確認していただきありがとうございます。 begin_withは、テーブルにbar1、bar2、bar3、bar4という項目がある可能性があるため動作しませんが、パラメータリストには[bar1、bar2、someotherId] –

関連する問題