Java 从DynamoDB表//重复条目生成CSV

Java 从DynamoDB表//重复条目生成CSV,java,amazon-dynamodb,aws-java-sdk,aws-java-sdk-dynamodb,Java,Amazon Dynamodb,Aws Java Sdk,Aws Java Sdk Dynamodb,我正在浏览一个DynamoDB表,并创建一个包含所有表行的csv文件。但是,csv中的大多数条目都是重复的。DynamoDB表中大约有350K条唯一记录(所有记录都是唯一的)。生成的文件(使用以下代码)只有大约4K个唯一条目,其余的条目都是重复的 public void fetchItems() throws IOException { AmazonDynamoDB amazonDynamoDB = DynamoDBClient.getInstance().getConnection()

我正在浏览一个DynamoDB表,并创建一个包含所有表行的csv文件。但是,csv中的大多数条目都是重复的。DynamoDB表中大约有350K条唯一记录(所有记录都是唯一的)。生成的文件(使用以下代码)只有大约4K个唯一条目,其余的条目都是重复的

public void fetchItems() throws IOException {
    AmazonDynamoDB amazonDynamoDB = DynamoDBClient.getInstance().getConnection();
    ScanResult result = null;
    ScanRequest req = new ScanRequest().withTableName("TABLE_NAME");
    List<Map<String, AttributeValue>> records = new ArrayList<Map<String, AttributeValue>>();
    do {
        if (result != null) {
            req.setExclusiveStartKey(result.getLastEvaluatedKey());
        }
        result = amazonDynamoDB.scan(req);
        List<Map<String, AttributeValue>> rows = result.getItems();
        Map<String, AttributeValue> staticColumnRecord = new HashMap<String, AttributeValue>();
        for (Map<String, AttributeValue> map : rows) {
            List<String> snowFlakeColumnsListApparel = new ArrayList<String>(Arrays.asList(apparelColumns));
            for (String key : snowFlakeColumnsListApparel) {
                AttributeValue value = map.get(key);
                if (value != null) {
                    staticColumnRecord.put(key, value);
                } else {
                    staticColumnRecord.put(key, new AttributeValue().withS("null"));
                }
            }
            records.add(staticColumnRecord);
        }
        
    } while (result.getLastEvaluatedKey() != null);
    buildCSV(records);
}

private void buildCSV(List<Map<String, AttributeValue>> changedRecords) throws IOException {
    List<String> headers = changedRecords.stream().flatMap(map -> map.keySet().stream()).distinct()
            .collect(Collectors.toList());
    try (FileOutputStream fos = new FileOutputStream(file);
            OutputStreamWriter bwr = new OutputStreamWriter(fos, StandardCharsets.UTF_8)) {
        StringBuffer headerContent = new StringBuffer();
        for (String string : headers) {
            headerContent.append(string);
            headerContent.append(",");
        }
        StringBuffer strBuilder = new StringBuffer();
        for (Map<String, AttributeValue> lmap : changedRecords) {
            StringBuilder stringBuilder = new StringBuilder("");
            String sep = "";
            for (Entry<String, AttributeValue> string2 : lmap.entrySet()) {
                String value = string2.getValue().getS();
                stringBuilder.append(sep).append("\"").append(value).append("\"");
                sep = ",";
            }
            if (!stringBuilder.toString().isEmpty()) {
                strBuilder.append(stringBuilder).append(System.getProperty("line.separator"));
            }
        }
        headerContent.append("\n");
        headerContent.append(strBuilder);
        bwr.write(headerContent.toString());

    } catch (IOException e) {
        e.printStackTrace();
    }
}
public void fetchItems()引发IOException{
AmazonDynamoDB AmazonDynamoDB=DynamoDBClient.getInstance().getConnection();
ScanResult结果=空;
ScanRequest req=新的ScanRequest()。带有TableName(“TABLE_NAME”);
列表记录=新的ArrayList();
做{
如果(结果!=null){
req.setExclusiveStartKey(result.getLastEvaluatedKey());
}
结果=amazonDynamoDB.scan(请求);
列表行=result.getItems();
Map staticColumnRecord=新建HashMap();
用于(地图:行){
List snowFlakeColumnsListApparel=newarraylist(Arrays.asList(apparelColumns));
for(字符串键:snowFlakeColumnsListApparel){
AttributeValue=map.get(键);
if(值!=null){
staticColumnRecord.put(键、值);
}否则{
staticColumnRecord.put(key,new AttributeValue().withS(“null”);
}
}
记录。添加(静态列记录);
}
}while(result.getLastEvaluatedKey()!=null);
建立CSV(记录);
}
私有void buildCSV(列表更改记录)引发IOException{
列表标题=changedRecords.stream().flatMap(map->map.keySet().stream()).distinct()
.collect(Collectors.toList());
try(FileOutputStream fos=新的FileOutputStream(文件);
OutputStreamWriter bwr=新的OutputStreamWriter(fos,StandardCharsets.UTF_8)){
StringBuffer headerContent=新StringBuffer();
for(字符串:标题){
headerContent.append(字符串);
标题内容。追加(“,”);
}
StringBuffer strBuilder=新StringBuffer();
用于(地图lmap:changedRecords){
StringBuilder StringBuilder=新StringBuilder(“”);
字符串sep=“”;
对于(条目string2:lmap.entrySet()){
String value=string2.getValue().getS();
stringBuilder.append(sep.append(\).append(value.append(\);
sep=“,”;
}
如果(!stringBuilder.toString().isEmpty()){
strBuilder.append(stringBuilder.append(System.getProperty(“line.separator”));
}
}
headerContent.append(“\n”);
headerContent.append(strBuilder);
bwr.write(headerContent.toString());
}捕获(IOE异常){
e、 printStackTrace();
}
}