Azure Table 唯一分区键的存储查询

Azure Table Storage Query For Unique Partition Key

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

我想进行查询,这样给定一个数字 X,我想 return 每个分区键的小于 X 的最高数字行键。这有点令人困惑,所以这里有一个例子:

分区键、行键

"hello", 7

"hello", 9

"hello", 12

"other", 6

如果我用数字 10 查询,我想 return 一个列表,如 [("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();

但我似乎无法弄清楚如何使用所有不同的分区键执行此操作。这可能在单个查询中吗?感谢您的帮助!

很确定您不能执行此操作 - Azure 表并未设置为执行此类操作 AFAIK。另一种解决方案是创建第二个 table 和基于数字的分区键和每个分区的最大值一行(换句话说,急切地计算这个),或类似的东西。

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

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

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