我有一个Windows Azure存储表,我存储超过1000k+行(实体)。我想在表上执行几个聚合函数,例如计数针对特定条件average
、total
、min
、max
和group by
的特定列(与普通SQL一样)。我如何在windows Azure存储表中做到这一点?
唯一的方法就是拉下所有实体并在内存中对它们运行聚合。
如果你必须保持这些信息是最新的,我会将这些聚合存储在另一个地方,并在每次添加新实体时更新它们。例如,平均值是sum/count
,所以你可以有一个表项存储当前的总和和计数,当你添加一个新的实体时,也更新总和和计数值。
确保使用乐观并发,以便您可以捕获任何竞争条件等。如果您的表实体共享相同的分区键,那么您甚至可以在相同的事务上执行操作。
简短的答案(据我所知,截至2015年6月)是你不能。参见:http://feedback.azure.com/forums/263030-documentdb/suggestions/6333963-add-support-for-aggregate-functions-like-count-su
更新。上面链接的信息适用于DocumentDB,而不是表存储(doh) (DocumentDB,像ATS一样,也是一个NoSQL实现)。
也就是说(还有OPs问题),几乎相同的状态也适用于表存储。这个建议:"添加TableStorage LINQ查询支持选择,计数和包含",而不相同的OP之后,我想是在正确的一般方向移动。不幸的是,即使看起来他们已经开始实现这些功能,仍然有很多手工编码你必须自己做。
查询投影特征
投影是指查询一个或多个实体的子集。属性。这类似于选择的子集在LINQ中查询某个表的列/属性。这是一个允许应用程序减少数据量的机制通过指定只有某些属性是由查询返回的在响应中返回。更多信息,您也可以参考Windows Azure表:查询实体,Windows Azure表:写LINQ查询、WCF数据服务:查询投影和OData:选择系统查询选项($select).
感谢@abatishchev礼貌地指出我不识字