Java 使用QuerySpec从DynamoDB获取记录
在DynamoDB表格中,CustomerStatus是一列,其中项目可能包含“活动”、“非活动”或“已删除”作为CustomerStatus。我想获取状态为“活动”和“非活动”的所有客户。 这是我正在使用的代码示例,但我不确定如何完成它Java 使用QuerySpec从DynamoDB获取记录,java,database,amazon-web-services,datatable,amazon-dynamodb,Java,Database,Amazon Web Services,Datatable,Amazon Dynamodb,在DynamoDB表格中,CustomerStatus是一列,其中项目可能包含“活动”、“非活动”或“已删除”作为CustomerStatus。我想获取状态为“活动”和“非活动”的所有客户。 这是我正在使用的代码示例,但我不确定如何完成它 private Object data(MuleEventContext eventContext) { List<Object> finalJson = new ArrayList<Object>(); S
private Object data(MuleEventContext eventContext) {
List<Object> finalJson = new ArrayList<Object>();
String tableName = "Customers";
NameMap nameMap = new NameMap();
nameMap.put("#v_status", "CustomerStatus");
ValueMap valueMap = new ValueMap();
valueMap.put(":v_statusval", "Deleted");
BasicAWSCredentials cre = new BasicAWSCredentials(accesKey,secretKey);
AmazonDynamoDB dynamoDB1 = AmazonDynamoDBClientBuilder.standard()
.withCredentials(new AWSStaticCredentialsProvider(cre)).withRegion(Regions.EU_WEST_1).build();
DynamoDB dynamoDB = new DynamoDB(dynamoDB1);
Table table = dynamoDB.getTable(tableName);
QuerySpec querySpec = new QuerySpec().withKeyConditionExpression("#v_status != :v_statusval")
.withNameMap(nameMap)
.withValueMap(valueMap);
ItemCollection<QueryOutcome> items = null;
Iterator<Item> iterator = null;
Item item = null;
try {
items = table.query(querySpec);
iterator = items.iterator();
while (iterator.hasNext()) {
item = iterator.next();
finalJson.add(item.asMap());
}
} catch (Exception e) {
logger.info(e.getMessage());
}
return finalJson;
}
私有对象数据(MuleEventContext事件上下文){
List finalJson=new ArrayList();
String tableName=“客户”;
NameMap NameMap=新的NameMap();
nameMap.put(“#v#u status”,“CustomerStatus”);
ValueMap ValueMap=新的ValueMap();
valueMap.put(“:v_statusval”,“Deleted”);
BasicAWSCredentials cre=新的BasicAWSCredentials(accesKey、secretKey);
AmazonDynamoDB dynamoDB1=AmazonDynamoDBClientBuilder.standard()
.withCredentials(新AWSStaticCredentialsProvider(cre)).withRegion(Regions.EU_WEST_1).build();
DynamoDB DynamoDB=新的DynamoDB(dynamoDB1);
Table Table=dynamoDB.getTable(tableName);
QuerySpec QuerySpec=new QuerySpec()。带KeyConditionExpression(“#v#u status!=:v#u statusval”)
.withNameMap(nameMap)
.使用valueMap(valueMap);
ItemCollection items=null;
迭代器迭代器=null;
Item=null;
试试{
items=table.query(querySpec);
迭代器=items.iterator();
while(iterator.hasNext()){
item=iterator.next();
add(item.asMap());
}
}捕获(例外e){
logger.info(例如getMessage());
}
返回finalJson;
}
不能对哈希键进行筛选
我需要知道哪个属性是散列键,哪个是范围键
如果CustomerStatus不是哈希键,最好的方法是为此属性创建一个二级索引,并执行两个不同的查询:
- 一个是主动的李>
- 另一个是非活动的
另一种方法是使用操作数中的进行扫描并过滤属性,如中所述。但这将读取表中的所有数据,速度可能很慢,并消耗大量容量。该表包含JSON格式的数据。像
{“CustomerName”:“Alex Parker”,“CustomerDescription”:“Retailer”,“CustomerStatus”:“Active”,“profileID”:“CUST001”}
CustomerStatus可能是“Active”,“inactive”,“expired”和“deleted”。我想获取customerStatus未被“删除”的表中的所有项目