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)。
对于后者,另一个答案建议同时写入该分区键的最大值。当然可行。但是您需要记住,您需要维护这一点元数据。
我的问题如下,我有一个这样设置的 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)。
对于后者,另一个答案建议同时写入该分区键的最大值。当然可行。但是您需要记住,您需要维护这一点元数据。