2

我的问题如下,我有一个这样设置的 Azure 表存储:

  • 分区键:字符串
  • 行键:数字

我想做一个查询,给定一个数字 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();

但我似乎无法弄清楚如何使用所有不同的分区键来做到这一点。这可能在单个查询中吗?谢谢你的帮助!

4

2 回答 2

3

无法枚举分区键(不进行表扫描),因此您可以:

  • 进行全表扫描,跟踪您在此过程中找到的各种分区键,以及最高值的行键
  • 在将分区键写入表存储时跟踪它们(例如,仅使用分区键创建另一个表)。

对于后者,另一个答案建议同时写入该分区键的最大值。当然可行。但是您需要记住,您需要维护这部分元数据。

于 2017-05-03T00:32:21.817 回答
1

很确定你不能这样做 - Azure Tables 只是没有设置来做这种事情 AFAIK。另一种解决方案是根据每个分区的最大值和一行创建带有分区键的第二个表(换句话说,急切地计算这个)或类似的东西。

于 2017-05-02T23:06:42.843 回答