在Azure表存储中,是否可以使用StartsWith或其他一些运算符来查询PartitionKey,例如包含等等。
我知道我可以使用RowKeys执行此操作,但是可以使用PartitionKeys吗?
后续问题是:即使它可行,是否可取? PartitionKey应该是完全匹配 - 比如,出于性能原因吗?
答案 0 :(得分:16)
以下是使用docker-machine ip default
和GreaterThanOrEqual
运算符作为目标列名称的扩展名的示例。
过滤器结合了两个部分:
例如,LessThan
前缀" CAR"将准备类似startsWith
的内容。
s >= "CAR" && s < "CAS"
用法:
public static string GetStartsWithFilter(this string columnName, string startsWith)
{
var length = startsWith.Length - 1;
var nextChar = startsWith[length] + 1;
var startWithEnd = startsWith.Substring(0, length) + (char)nextChar;
var filter = TableQuery.CombineFilters(
TableQuery.GenerateFilterCondition(columnName, QueryComparisons.GreaterThanOrEqual, startsWith),
TableOperators.And,
TableQuery.GenerateFilterCondition(columnName, QueryComparisons.LessThan, startWithEnd));
return filter;
}
答案 1 :(得分:4)
在Azure表存储中,是否可以使用a查询PartitionKey StartsWith或其他一些运算符,例如包含等等。
不可以使用Azure表格使用StartsWith或Contains查询运算符进行查询。要模拟StartsWith
,您需要使用Greater Than Equal To
和Less Than
运算符的组合。您无法使用Contains
运营商。您需要做的是首先获取客户端上的所有数据,然后使用Contains
仅过滤客户端上的数据。
有关支持的查询运算符列表,请参阅以下链接:https://msdn.microsoft.com/en-us/library/azure/dd135725.aspx。
我知道我可以用RowKeys做到这一点,但有可能做到这一点 PartitionKeys?
我认为这是不可能的。我很想知道你为什么这么说。
后续问题是:即使它可行,是否可取?应该 PartitionKey总是完全匹配 - 比如,出于性能原因?
我强烈建议您阅读以下优秀指南:https://azure.microsoft.com/en-in/documentation/articles/storage-table-design-guide/。
答案 2 :(得分:-3)
我可以尝试总结一篇关于此的优秀文章,但它已经写好了,所以如果你将浏览器指向以下链接,你应该学习所有关于分区,rowkeys和预期性能的知识:< / p>
https://msdn.microsoft.com/en-us/library/azure/hh508997.aspx