【问题标题】:Get more than 1000 datasets from an Azure Table Storage从 Azure 表存储中获取 1000 多个数据集
【发布时间】:2020-05-18 01:09:24
【问题描述】:

我有一个 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);

【问题讨论】:

    标签: c# .net-core azure-functions azure-table-storage azure-tablequery


    【解决方案1】:

    如果您的查询未在特定限制内完成(最多 5 秒,最多 1000 行,请参阅 here),您将在结果对象中收到 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);
    

    【讨论】:

      【解决方案2】:

      你不能。可能是为了避免长时间运行的查询。

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-12-27
        • 2016-03-16
        • 1970-01-01
        • 2013-05-27
        • 2015-10-02
        • 2013-09-04
        • 1970-01-01
        • 2020-10-17
        相关资源
        最近更新 更多