java - 使用 QuerySpec 从 DynamoDB 获取记录

标签 java database amazon-web-services datatable amazon-dynamodb

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

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;
}

最佳答案

您无法根据 HASH 键进行过滤。

我需要知道哪个属性是 HASH 键,哪个是 RANGE 键。

如果CustomerStatus不是HASH键,最好的方法是为此属性创建二级索引并执行2个不同的查询:

  • 一个为活跃
  • 另一份给不活跃的人。

这是执行此类查询的最有效方法。

另一种方法是使用 IN 操作数进行扫描并过滤属性,如 Syntax for Condition Expressions 中所述。 。但这将从表中读取所有数据,速度可能很慢,并且会消耗大量容量。

关于java - 使用 QuerySpec 从 DynamoDB 获取记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60544563/

相关文章:

java - 将通知置于分隔线 android java 下方

java - JScrollPane 格式化以显示 Pascals 三角形

ruby-on-rails - RDS 故障转移时 Rails Postgres 重新连接

php - Cakephp 3中配置Redis EC Amazon

java - 多个 DAO 与带有配置文件的一个 DAO

linux - Chef 在 AWS Linux AMI 上构建错误

java - 在某些数据之后插入数据(双向链表)

java - Android 文本转语音功能无法在设备上运行

database - 如何锁定数据库表或一系列行以进行写入?

python - Python 中的 Sybase IQ 连接