gpt4 book ai didi

Azure 表存储 API 使用连续 token 返回 0 个结果

转载 作者:行者123 更新时间:2023-12-03 04:51:34 27 4
gpt4 key购买 nike

我们正在使用 .net Azure 存储客户端库从服务器检索数据。但是当我们尝试检索数据时,结果只有 0 个带有延续标记的项目。当我们使用此继续标记获取下一页时,我们再次得到相同的结果。然而,当我们使用像这样获取的第四个延续 token 时,我们将获得包含 15 个项目的正确结果。(所有请求的项目计数为 15)。仅当我们尝试应用过滤条件时才会出现此问题。下面给出了用于获取结果的代码

    var tableReference = _tableClient.GetTableReference(tableName);
var query = new TableQuery();
query.Where("'DeviceId' eq '99'"); // DeviceId is of type Int32
query.TakeCount = 15;

var resultsQuery = tableReference.ExecuteQuerySegmented(query, token);
var nextToken = resultsQuery.ContinuationToken;
var results = resultsQuery.ToList();

最佳答案

这是预期的行为。来自 Query Timeout and Pagination :

A query against the Table service may return a maximum of 1,000 items at one time and may execute for a maximum of five seconds. If the result set contains more than 1,000 items, if the query did not complete within five seconds, or if the query crosses the partition boundary, the response includes headers which provide the developer with continuation tokens to use in order to resume the query at the next item in the result set. Continuation token headers may be returned for a Query Tables operation or a Query Entities operation.

我注意到您在查询中没有使用 PartitionKey。这将导致全表扫描。建议始终在查询中使用 PartitionKey(可能还使用 RowKey)以避免全表扫描。我强烈推荐阅读Azure Storage Table Design Guide: Designing Scalable and Performant Tables充分利用 Azure Tables。

更新:解释“如果查询跨越分区边界”

让我尝试举一个例子来说明我对分区边界的理解。假设您的表中有 100 万行,均匀分布在 10 个分区中(假设您的 PartitionKey 为 001、002、003、...010)。现在我们知道Azure Tables中的数据是按PartitionKey组织的,然后按RowKey组织在Partition中。由于在您的查询中您没有指定 PartitionKey,表服务将从第一个分区(即 PartitionKey == 001)开始,并尝试在那里查找匹配的数据。如果它在该分区中找不到任何数据,则它不知道该数据是否存在于另一个分区中,因此它不会转到下一个分区,而是简单地返回一个继续 token 并将其留给使用 API 的客户端决定他们是否要使用相同的参数+继续 token 继续搜索或修改搜索以重新开始。

关于Azure 表存储 API 使用连续 token 返回 0 个结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35402494/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com