我的问题如下,我有一个Azure Table Storage,设置如下:
我想进行一个查询,给定一个数字X,我想为每个分区键返回小于X的最高编号行键。这有点令人困惑,所以这里有一个例子:
分区键,行键
“你好”,7
“你好”,9
“你好”,12
“其他”,6
如果我用数字10查询,我想返回一个像[(“hello”,9),(“other”,6)]这样的列表。请注意,我只需要唯一的分区键和最小的小于10的数字。
我可以用特定的名字来做这件事(为了简洁而留下一些东西):
string orderFilter = TableQuery.GenerateFilterConditionForLong("RowKey", "le", 10);
string nameFilter = TableQuery.GenerateFilterCondition("PartitionKey", "eq", "hello");
TableQuery query = new TableQuery().Where(TableQuery.CombineFilters(orderFilter, "and", nameFilter));
IEnumerable<NameEntity> names = await nameTable.ExecuteQuerySegmentedAsync<NameEntity>(query, entityResolver, continuationToken);
// Get newest name
NameEntity newestName = names.Last();
但我似乎无法弄清楚如何使用所有不同的分区键执行此操作。这可能在一个查询中吗?谢谢你的帮助!
答案 0 :(得分:2)
无法枚举分区键(不进行表扫描),因此您可以:
对于后者,另一个答案建议同时写入该分区键的最大值。当然可行。但是你需要记住你需要维护这些元数据。
答案 1 :(得分:1)
非常确定你不能这样做 - Azure表只是没有设置为做这类事情的AFAIK。另一种解决方案是使用基于数字的分区键创建第二个表,并为每个分区的每个最大值创建一行(换句话说,急切地计算它),或类似的东西。