我正在尝试在我的dynamodb中建立特定属性的直方图。
我可以通过运行多个scan count
查询并每次更改范围
aws dynamodb scan --table-name test --select "COUNT" \
--filter-expression "(score between :s and :s1)" \
--expression-attribute-values '{ ":s": { "N": "0" }, ":s1": { "N": "10" } }'
我的问题是:我可以在一次一次扫描中完成所有操作,获取计数值0-9、10-19,... 90-100吗?
答案 0 :(得分:1)
简短的答案是否-您无法一次扫描。
要对此进行扩展,可以通过两种方法来实现所需的目标:
1)一次扫描一次扫描最多返回1MB的数据(请参阅per-api limits section in the docs),因此从一般意义上讲,您将需要一系列的Scan调用才能从表中读取所有数据>
2)DynamoDB不支持您真正要求的聚合查询。这意味着您不能要求它为您将数据分组到存储桶中,也不能要求它给您计数或项目总和
因此,您必须做的是运行没有任何过滤器的扫描,然后在应用程序中实现分组和聚合。本质上,这是一种映射/归约操作:将基于得分的项目映射到存储桶中,并使用计数进行减少以生成直方图。
答案 1 :(得分:1)
正如Mike指出的那样,DynamoDB不支持聚合查询。
但是,有一个宝贵的提示:MapReduce
hive> select score, count(score) from (select score from hive_my_table limit 300000000) as t1 GROUP by score;
提示:不要害怕增加读取容量,您将节省群集运行时。使用100的读取容量,我计算出查询将需要一天的时间才能完成。