簡體   English   中英

從 Azure 表存儲中獲取 1000 多個數據集

[英]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);

你不能。 可能是為了避免長時間運行的查詢。

您可以在此處閱讀其他限制: https ://docs.microsoft.com/en-us/rest/api/storageservices/Query-Timeout-and-Pagination?redirectedfrom =MSDN

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM