[英]How to get more than 1000 entities from an azure table storage query?
[英]Get more than 1000 datasets from an Azure Table Storage
我有一個 Azure 函數來對 Azure 表存儲中的數據集執行一些操作。
由於分組在 Azure 表存儲中不起作用,我必須在我的表中獲取所有數據集並在我的 C# 代碼中執行我想要的操作(分組、過濾)。
但是每個查詢只檢索前 1000 個數據集。 我怎樣才能得到我所有的數據集 - 或者批量迭代 1000 個表以在最后獲取所有數據集?
TableQuery<Models.product_item> query = new TableQuery<Models.product_item>()
.Where(TableQuery.GenerateFilterCondition("PartitionKey", QueryComparisons.Equal, myPartitionKey));
var queryResult = myTable.ExecuteQuery(query);
當您的查詢未在特定限制內完成時(最多 5 秒,最多 1000 行,請參閱此處),您將在結果對象中收到一個ContinuationToken
。 將此令牌傳遞給另一個查詢以繼續您的第一個查詢並獲取下一組行。
此擴展方法為您完成工作:
public static class QueryExtensions
{
public static async Task<IEnumerable<TElement>> ExecuteQueryAllElementsAsync<TElement>(this CloudTable table, TableQuery<TElement> tableQuery)
where TElement : ITableEntity, new()
{
TableContinuationToken continuationToken = default(TableContinuationToken);
var results = new List<TElement>(0);
tableQuery.TakeCount = 500;
do
{
//Execute the next query segment async.
var queryResult = await table.ExecuteQuerySegmentedAsync(tableQuery, continuationToken);
//Set exact results list capacity with result count.
results.Capacity += queryResult.Results.Count;
results.AddRange(queryResult.Results);
continuationToken = queryResult.ContinuationToken;
} while (continuationToken != null);
return results;
}
}
然后你可以在你的代碼中使用它
var queryResult = await myTable.ExecuteQueryAllElementsAsync(query);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.