说,在AWS Dynamo中,我有一个这样的表:
ID (HKey) Date (RKey) BoxName
0 1/1/2014 Box-1
1 2/1/2014 Box-1
2 3/1/2014 Box-2
3 4/1/2014 Box-3
4 5/1/2014 Box-3
5 5/1/2014 Box-1
我希望在单个查询中获取每个唯一Box的第一行。可能有数百个盒子我需要第一次进入,使个别请求效率低下。
我似乎无法在API中找到允许我这样做的任何内容。可能吗?我该怎么做?
答案 0 :(得分:2)
您可能需要考虑在Boxname(散列键)上创建全局二级索引(GSI),并将日期作为范围键。这将使您能够在二级索引上使用查询API,您可以在其中查询“使用Boxname = $框查找所有ID”。
希望这有帮助, 斯瓦米萨
答案 1 :(得分:0)
如果不像上面建议的那样为这些框创建索引,就无法查询每个框的首次出现。但是,如果您不介意读取整个表,然后选择正确的行,则将整个表读入数组,然后通过一些简单的代码使其变得唯一。例如,假设您已将表读入数组中(请注意,您可能必须多次调用扫描或查询才能获得全部信息),而数组就是这样的:
l = [
{"ID": "0", "Date": "1/1/2014", "BoxName": "Box-1"},
{"ID": "1", "Date": "2/1/2014", "BoxName": "Box-1"},
{"ID": "2", "Date": "3/1/2014", "BoxName": "Box-2"},
{"ID": "3", "Date": "4/1/2014", "BoxName": "Box-3"},
{"ID": "4", "Date": "5/1/2014", "BoxName": "Box-3"},
{"ID": "5", "Date": "5/1/2014", "BoxName": "Box-1"}
]
然后,在python中这样的简单代码将为您提供变量“ out”中的列表:
out = []
seen = []
for line in l:
if line["BoxName"] not in seen:
seen.append(line["BoxName"])
out.append(line)