如何在AWS Dynamo中获取列的唯一值?

时间:2014-09-01 23:33:30

标签: amazon-web-services amazon-dynamodb

说,在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中找到允许我这样做的任何内容。可能吗?我该怎么做?

2 个答案:

答案 0 :(得分:2)

您可能需要考虑在Boxname(散列键)上创建全局二级索引(GSI),并将日期作为范围键。这将使您能够在二级索引上使用查询API,您可以在其中查询“使用Boxname = $框查找所有ID”。

请参阅documentation for GSI

希望这有帮助, 斯瓦米萨

答案 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)