gpt4 book ai didi

azure - 如何跨 azure 存储表中的多个分区键进行查询?

转载 作者:行者123 更新时间:2023-12-02 23:36:22 25 4
gpt4 key购买 nike

我有以下用例:

  • 用户请求创建一个小部件。将使用我的存储表中“请求”分区中的详细信息创建一条新记录。
  • 当请求得到满足时 - 原始请求将从“请求”分区中删除,并在“已配置”分区中重新创建。

当涉及到查询小部件时 - 我需要搜索请求分区和预配置分区。从阅读文档来看,我似乎可以创建过滤器?但这似乎是很大的开销,因为我知道我只会返回 1 条记录(希望如此,除非我有错误)。但看来我必须添加很多逻辑来处理分页。

到目前为止,这就是我要离开的地方:

 entity = tableClient.GetEntity<TableEntity>(
"requested",
requestId);

对于这样的事情:

            //entity = tableClient.GetEntity<TableEntity>(
// "requested",
// requestId);

List<string> filters = new List<string>();
filters.Add($"PartitionKey eq '{"requested"}'");
filters.Add($"PartitionKey eq '{"provisioned"}'");
filters.Add($"RowKey eq '{requestId}'");
string filter = String.Join(" and ", filters);
//should only ever return one ... but ...
var entities = tableClient.QueryAsync<TableEntity>(filter);

await foreach (Page<TableEntity> page in entities.AsPages())
{
Console.WriteLine("This is a new page!");
foreach (TableEntity qEntity in page.Values)
{
Console.WriteLine($"i found this request: {qEntity.GetString("requestId")} with status: {"status"}");
}
}

此代码目前无法工作 - 需要对其进行调试。但我想我应该检查一下是否有更简单的方法来做到这一点。

谢谢。

最佳答案

我建议首先编写一个 TryGetEntityAsync 扩展方法:

public static async Task<Response<T>?> TryGetEntityAsync<T>(this TableClient tableClient, string partitionKey, string rowKey, IEnumerable<string>? select = default, CancellationToken cancellationToken = default) where T : class, ITableEntity, new()
{
try
{
return await tableClient.GetEntityAsync<T>(partitionKey, rowKey, select, cancellationToken);
}
catch (RequestFailedException ex) when (ex.Status == 404)
{
return null;
}
}

然后,您可以一次执行两个点查询:

var entity =
(await tableClient.TryGetEntityAsync<TableEntity>("requested", requestId)) ??
(await tableClient.TryGetEntityAsync<TableEntity>("provisioned", requestId));

或同时:

var requestedEntityTask = tableClient.TryGetEntityAsync<TableEntity>("requested", requestId);
var provisionedEntityTask = tableClient.TryGetEntityAsync<TableEntity>("provisioned", requestId);
var entities = await Task.WhenAll(requestedEntityTask, provisionedEntityTask);
var entity = entities[0] ?? entities[1];

关于azure - 如何跨 azure 存储表中的多个分区键进行查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71271486/

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