问题描述
我使用 dynamodb 来存储数据,它可以有各种数据类型,如字符串、数字和 json。地图可以根据 id 有不同的键,因此,它的结构是事先不知道的。
有没有办法通过 Dynamodbmapper 检索它?对于其他属性,String
、Long
之类的 Java 数据类型有效,但对于 Map
或更确切地说是 json
,我最终会遇到解析错误。我尝试过像 JsonNode
是否有可能做到这一点的注释或 java 数据类型?或者我应该回滚到原始的 dynamodb 客户端而不是使用映射器?
解决方法
使用 DynamoDB 增强型客户端是与 DynamoDB 交互的绝佳方式,如下所述:
Introducing enhanced DynamoDB client in the AWS SDK for Java v2
(如果您使用的是 Java V1,则应考虑迁移到 V2 和增强客户端,如本链接中所述。)
然而,正如您发现的那样,在使用此功能时,如果了解数据结构并且您可以创建具有映射到表列的数据成员的 Java 类,则效果会更好。
例如,假设您正在处理客户数据。您可以像这样创建一个 Java 类:
new_data = []
with open("data.csv","r") as f:
# f.readline() if the csv has a header (skips first line)
for line in f:
split_kv = line.split(',')
split_v = split_kv[1].split(';')
for v in split_v:
new_data.append((split_kv[0],v))
如果您不了解高级数据结构(即您不了解 Customer 表),那么使用 Enhanced Client 效率不高。