在Azure表存儲中,是否可以使用StartsWith或其他某個操作符(例如,包含等可以用StartsWith查詢PartitionKey嗎?
我知道我可以用RowKeys做到這一點,但是可以用PartitionKeys做到嗎?
後續問題是:即使可行,是否明智? PartitionKey應該總是完全匹配 - 例如,出於性能原因?
在Azure表存儲中,是否可以使用StartsWith或其他某個操作符(例如,包含等可以用StartsWith查詢PartitionKey嗎?
我知道我可以用RowKeys做到這一點,但是可以用PartitionKeys做到嗎?
後續問題是:即使可行,是否明智? PartitionKey應該總是完全匹配 - 例如,出於性能原因?
好吧,好消息是你可以做部分匹配,只要被擊中的分區數很少,你就會獲得「好」的表現。如果你有很多分區鍵,性能會受到影響。
我可以嘗試總結一下,但它已經寫好了,所以如果你把瀏覽器指向下面的鏈接,你應該知道關於分區,行鍵和預期表現的所有信息:
https://msdn.microsoft.com/en-us/library/azure/hh508997.aspx
在天青表寄存,是有可能與 StartsWith或一些其它操作者例如查詢PartitionKey包含等
不,不可以使用StartsWith或Contains查詢運算符與Azure表執行查詢。要模擬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/。
下面是使用GreaterThanOrEqual
和LessThan
運算符作爲目標列名稱的擴展的示例。
過濾器結合了兩個部分:
例如,startsWith
前綴 「CAR」 將準備像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;
}
用法:
var query = new TableQuery<MyTableEntity>().Where(myColumnName.GetStartsWithFilter(prefix));
這個答案是不正確!使用諸如StartsWith或Contains之類的運算符不能使用Azure Tables進行部分搜索。 –
我們更喜歡這裏沒有投票請求的答案 - 帖子最好是有機地吸引+/-投票。謝謝! – halfer