Amazon dynamodb DynamoDB如何仅按范围查询?
我有一个带有散列和范围主键的表。我需要按eventDate和customerId进行查询。结构如下。哈希是一个格式类似UUID的唯一ID,范围是customerId。我还有一个LSI,其范围键为eventDate。我想用param进行查询:Amazon dynamodb DynamoDB如何仅按范围查询?,amazon-dynamodb,aws-sdk,Amazon Dynamodb,Aws Sdk,我有一个带有散列和范围主键的表。我需要按eventDate和customerId进行查询。结构如下。哈希是一个格式类似UUID的唯一ID,范围是customerId。我还有一个LSI,其范围键为eventDate。我想用param进行查询: 'KeyConditionExpression'=>“customerId=:customer\u id” 但我有一个错误: 查询条件缺少关键架构元素:uniqueId 你可能会说我不应该使用无用的散列,但我应该怎么做呢?在此之前,我尝试使用hash和ran
'KeyConditionExpression'=>“customerId=:customer\u id”
但我有一个错误:
查询条件缺少关键架构元素:uniqueId
你可能会说我不应该使用无用的散列,但我应该怎么做呢?在此之前,我尝试使用hash和range customerId、eventDate,但我无法使用它们,因为无法保证eventDate是唯一的。这意味着如果同时生成三个事件,则只保存最后一个事件
有没有办法将这种结构与dynamodb结合起来?您可以执行以下操作之一:
// Using DynamoDBMapper in AWS SDK Java
DynamoDBQueryExpression<YourClass> query =
new DynamoDBQueryExpression<YourClass>();
YourClass hashKeyValues = new YourClass();
hashKeyValues.setCustomerId(customerId);
Map<String, Condition> rangeKeyConditions =
new HashMap<String, Condition>();
rangeKeyConditions.put("EventDate",
new Condition()
.withConditionalOperator(ConditionalOperator.EQ)
.withAttributeValue(new AttributeValue(eventDate)));
query.setHashKeyValues(hashKeyValues);
query.setRangeKeyConditions(rangeKeyConditions);
query.setIndexName(LSI_CUSTOMER_ID_EVENT_DATE);
// Execute the query using DynamoDBMapper.
//在AWS SDK Java中使用DynamoDBMapper
DynamoDBQueryExpression查询=
新的DynamoDBQueryExpression();
YourClass hashKeyValues=新建YourClass();
setCustomerId(customerId);
映射范围键条件=
新的HashMap();
rangeKeyConditions.put(“EventDate”,
新条件()
.带条件运算符(条件运算符EQ)
.带有AttributeValue(新AttributeValue(eventDate));
query.setHashKeyValues(hashKeyValues);
query.setRangeKeyConditions(rangeKeyConditions);
query.setIndexName(LSI\u客户\u ID\u事件\u日期);
//使用DynamoDBMapper执行查询。
// Using DynamoDBMapper in AWS SDK Java
DynamoDBQueryExpression<YourClass> query =
new DynamoDBQueryExpression<YourClass>();
YourClass hashKeyValues = new YourClass();
hashKeyValues.setCustomerId(customerId);
Map<String, Condition> rangeKeyConditions =
new HashMap<String, Condition>();
rangeKeyConditions.put("EventDate",
new Condition()
.withConditionalOperator(ConditionalOperator.EQ)
.withAttributeValue(new AttributeValue(eventDate)));
query.setHashKeyValues(hashKeyValues);
query.setRangeKeyConditions(rangeKeyConditions);
query.setIndexName(GSI_CUSTOMER_ID_EVENT_DATE);
// Execute the query using DynamoDBMapper.
//在AWS SDK Java中使用DynamoDBMapper
DynamoDBQueryExpression查询=
新的DynamoDBQueryExpression();
YourClass hashKeyValues=新建YourClass();
setCustomerId(customerId);
映射范围键条件=
新的HashMap();
rangeKeyConditions.put(“EventDate”,
新条件()
.带条件运算符(条件运算符EQ)
.带有AttributeValue(新AttributeValue(eventDate));
query.setHashKeyValues(hashKeyValues);
query.setRangeKeyConditions(rangeKeyConditions);
query.setIndexName(GSI\u客户\u ID\u事件\u日期);
//使用DynamoDBMapper执行查询。