我有一个 Windows Azure 存储表,其中存储了超过 1000k+ 行(实体)。我想在表上执行一些聚合函数,例如对特定条件的特定列进行计数,average
, total
, min
, max
and group by
(如在普通 SQL 中一样)。如何在 Windows Azure 存储表中执行此操作?
2 回答
唯一的方法几乎是拉下所有实体并在内存中对它们运行聚合。
如果您必须使这些信息保持最新,我会将这些聚合存储在另一个地方,并在每次添加新实体时更新它们。例如,平均值是 ,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 实现)。
也就是说(以及关于 OP 的问题)几乎相同的状态适用于表存储。这个建议:'为 Select、Count 和 Contains 添加 TableStorage LINQ 查询支持'虽然与 OP 所追求的不同,但我想这是朝着正确的大方向迈出的一步。不幸的是,尽管他们似乎已经开始实现这些功能,但您仍然需要自己进行大量手动编码。
查询投影功能
投影是指查询一个或多个实体属性的子集。这类似于在 LINQ 中查询时选择某个表的列/属性的子集。它是一种机制,允许应用程序通过指定在响应中仅返回某些属性来减少查询返回的数据量。有关详细信息,您还可以参考 Windows Azure 表:查询实体、Windows Azure 表:编写 LINQ 查询、WCF 数据服务:查询投影和 OData:选择系统查询选项 ($select)。
感谢@abatishchev 礼貌地指出我无法阅读。