【问题标题】:DynamoDB Enhanced - No result from queryDynamoDB 增强 - 查询没有结果
【发布时间】:2021-01-09 10:44:19
【问题描述】:

我实现了以下两个测试用例来测试 DynamoDB 增强库。

测试用例 1:使用表“digital_form”上的 Get Item,PK =“FORM#ABC123”和 SK =“INFO#ABC123”。可以返回结果

    @Test
    public void testGetItemWithPKSK() throws ExecutionException, InterruptedException {
        DynamoDbAsyncTable<DigitalFormDao> digitalformTable = dynamoDbEnhancedAsyncClient
                .table("digital_form", TableSchema.fromBean(DigitalFormDao.class));

        DigitalFormDao form = digitalformTable.getItem(
                Key.builder().partitionValue("FORM#ABC123").sortValue("INFO#ABC123").build()).get();

        System.out.println(form.getSk());
    }

测试用例 2:在同一张表上使用 Query,PK=“FORM#ABC123”,SK 以“INFO”开头。假设它将返回一组结果,包括测试用例 1。但是,没有返回任何结果。

    @Test
    public void testQueryWithPKandSKBegin(){
        DynamoDbAsyncTable<DigitalFormDao> digitalformTable = dynamoDbEnhancedAsyncClient
                .table("digital_form", TableSchema.fromBean(DigitalFormDao.class));

        PagePublisher<DigitalFormDao> digitalForms = digitalformTable.query(
                r -> r.queryConditional(
                    sortBeginsWith(k -> k.partitionValue("FORM#ABC123").sortValue("INFO"))));
        
        AtomicInteger atomicInteger = new AtomicInteger();
        atomicInteger.set(0);

        digitalForms.subscribe(page -> {
            DigitalFormDao digitalFormDao = (DigitalFormDao) page.items().get(atomicInteger.get());
            System.out.println(digitalFormDao.getSk());
            atomicInteger.incrementAndGet();
        });
    }

我的查询语句有问题吗?

【问题讨论】:

  • 当您只提供分区键值FORM#ABC123(未指定排序键)时,它是否会为您提供所有结果
  • PageIterable&lt;DigitalFormDao&gt; customers = digitalformTable.query(keyEqualTo(k -&gt; k.partitionValue("FORM#ABC123")));

标签: java amazon-dynamodb dynamodb-queries aws-java-sdk-2.x


【解决方案1】:

这行得通吗?

public static void queryTableSortKeyBetween(DynamoDbEnhancedClient enhancedClient) {

        try {
            DynamoDbTable<Customer> mappedTable =
                    enhancedClient.table("DigitalForm", TableSchema.fromBean(DigitalFormDao.class));

            // Querying the sort key Name between two values
            Key key = Key.builder().partitionValue("FORM#ABC123").sortValue("INFO").build();

            QueryConditional queryConditional = QueryConditional.sortBeginsWith(key);

            PageIterable<DigitalFormDao> forms  =
                    mappedTable.query(r -> r.queryConditional(queryConditional));

            forms.stream()
                     .forEach(p -> p.items().forEach(item -> System.out.println(item.getCustName())));

        } catch (DynamoDbException e) {
            System.err.println(e.getMessage());
            System.exit(1);
        }
        System.out.println("Done");
}

【讨论】:

  • 是的,这个可以获取结果。 Async 方法有问题吗?
猜你喜欢
  • 2013-11-30
  • 2013-06-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-26
  • 1970-01-01
相关资源
最近更新 更多