【问题标题】:DynamoDB Enhanced Client Error: Unable to unmarshall responseDynamoDB 增强型客户端错误:无法解组响应
【发布时间】:2022-04-09 02:47:53
【问题描述】:

我是 DynamoDB 的新手,我正在尝试编写一些 Java 代码来使用增强的 DynamoDB 客户端对具有 3 个线程的表进行并行扫描。我正在使用 AWS Java SDK v 2.17.85。

我的代码在启动后不久在每个线程中抛出以下错误:无法解组响应(null)。当我在单个线程中进行扫描时,一切正常。我在文档中看到的所有示例似乎都是针对旧客户的。我很感谢这里的专家提供一些见解。谢谢。

private static class ScanSegmentTask implements Runnable {

        private String tableName;
        private int itemLimit;
        private int totalSegments;
        private int segment;
        
        private long scannedItemCount = 0;

        public ScanSegmentTask(String tableName, int itemLimit, int totalSegments, int seg) {
            this.tableName = tableName;
            this.itemLimit = itemLimit;
            this.totalSegments = totalSegments;
            this.segment = seg;
        }

        @Override
        public void run() {
            System.out.println("Scanning " + tableName + " segment " + segment + " out of " + totalSegments
                + " segments " + itemLimit + " items at a time...");

            DynamoDbTable<TfProdHmiBean> hmiTable = enhancedClient.table(tableName, TableSchema.fromBean(TfProdHmiBean.class));
            try {

                ScanEnhancedRequest spec = ScanEnhancedRequest.builder().limit(itemLimit).segment(segment).totalSegments(totalSegments).build();
                Iterator<TfProdHmiBean> results = hmiTable.scan(spec).items().iterator();
                while (results.hasNext()) {
                    scannedItemCount++;
                    if (scannedItemCount % 1000000 == 0) {
                        System.out.println("Scanned " + scannedItemCount + " items from segment " + segment + " out of " + totalSegments);
                    }
                    results.next();
                }
            }
            catch (Exception e) {
                System.err.println("Error: " + e.getMessage() + " in segment " + segment);
            }
            finally {
                System.out.println("Scanned " + scannedItemCount + " items from segment " + segment + " out of "
                    + totalSegments + " of " + tableName);
            }
        }
        
    }

【问题讨论】:

    标签: java amazon-web-services amazon-dynamodb


    【解决方案1】:

    看来问题出在我提供给 SDK 进行映射的 bean 类上。

    我更改了通话来源

    DynamoDbTable<TfProdHmiBean> hmiTable = enhancedClient.table(tableName, TableSchema.fromBean(TfProdHmiBean.class));
    

    DynamoDbTable<TfProdHmiBean> hmiTable = enhancedClient.table(tableName, TableSchema.fromClas(TfProdHmiBean.class));
    

    然后我用 @DynamoDbAttribute(value="dynamo field name") DynamoDB 中的源字段注释了每个字段的 get 方法

    这行得通。现在这对我的目的来说已经足够了。

    【讨论】:

      猜你喜欢
      • 2023-02-03
      • 1970-01-01
      • 1970-01-01
      • 2019-08-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-03
      • 1970-01-01
      • 2020-11-10
      相关资源
      最近更新 更多