10

次のようなテーブルをクエリするために、gem aws-sdk-rubyを使用しています。

hk (Hashkey)  |  guid(Rangekey)  |  Timestamp (Secondary Range index)  |  other attributes
aaaa          |  50              |  2013-02-04T12:33:00Z               |
aaaa          |  244             |  2013-04-22T04:54:00Z               |
aaaa          |  342             |  2013-05-18T06:52:00Z               |
bbbb          |  243             |  2013-06-21T13:17:00Z               |

私がやろうとしているのは、特定の日付以降に作成されたすべての「aaaa」行を取得することです。元:

AWS.config(access_key_id: 'xxx', secret_access_key: 'xxx', :dynamo_db => { :api_version => '2012-08-10' })
client = AWS::DynamoDB::Client.new
client.query(
{
  table_name: 'table',
  select: 'ALL_ATTRIBUTES',
  key_conditions: {
    'hk' => {
      comparison_operator: 'EQ',
      attribute_value_list: [
        {'s' => 'aaaa'}
      ]
    },
    'timestamp' => {
      comparison_operator: 'GE',
      attribute_value_list: [
        {'s' => Time.now.utc.iso8601}
      ]
    }
  }
})

上記のコードを実行すると、次のようになります。

Query condition missed key schema element guid (AWS::DynamoDB::Errors::ValidationException)

hashKey と RangeKey を使用してクエリを実行すると機能しますが、rangeKey をセカンダリ レンジ インデックスに置き換えると、rangeKey が必要であることがわかりません。

次に範囲キーを追加すると(意味がありません)、代わりに次のエラーが表示されます。

Conditions can be of length 1 or 2 only (AWS::DynamoDB::Errors::ValidationException)

何が起こっているのか知っている人はいますか?

4

2 に答える 2

0

「クエリ」の代わりに「スキャン」を使用できます http://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/DynamoDB/DocumentClient.html#scan-property

スキャンはクエリよりも遅いことを強調できます。スキャンは大量のデータの取得にはお勧めできません。

次のスキーマでこれを行いました

DB Schema Where Primary partition key id (文字列)

  //JavaScript EXAMPLE-1  
var params = {
        TableName : 'users',
        FilterExpression : 'isActive = :isActive',
        ExpressionAttributeValues : {':isActive' : true}
    };


        dynamoDBClient.scan(params, function(err, data){
            if(err){
                return console.error(err);
            }
            console.log(data.Items);

        });

お役に立てれば幸いです。

よろしく。

于 2017-03-30T10:24:32.603 に答える