Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/352.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用QuerySpec从DynamoDB获取记录_Java_Database_Amazon Web Services_Datatable_Amazon Dynamodb - Fatal编程技术网

Java 使用QuerySpec从DynamoDB获取记录

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

在DynamoDB表格中,CustomerStatus是一列,其中项目可能包含“活动”、“非活动”或“已删除”作为CustomerStatus。我想获取状态为“活动”和“非活动”的所有客户。 这是我正在使用的代码示例,但我不确定如何完成它

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未被“删除”的表中的所有项目