azure - Azure CosmosDB 查询资源管理器与数据资源管理器
问题描述
我正在对我的 CosmosDB 实例运行相同的查询(使用 SQL API):
SELECT c.partition, COUNT(1) AS total
FROM c
WHERE c.system = "SF"
GROUP BY c.partition
我有点惊讶我从数据资源管理器中获得了预期的结果,而在查询资源管理器选项卡下我收到了400 Bad Request并带有以下消息:
{"code":400,"body":"{\"code\":\"BadRequest\",\"message\":\"Message: {\\"Errors\\":[\\"跨分区查询仅支持聚合的 'VALUE'。\\"]}\r\nActivityId: d8523615-c2ff-47cf-8102-5256237c7024, Microsoft.Azure.Documents.Common/2.7.0\"}","activityId":" d8523615-c2ff-47cf-8102-5256237c7024"}
我知道我可以使用第一个,但是当我尝试从逻辑应用程序运行查询时会发生同样的异常:
所以问题很简单:该查询在语法上是否正确?
解决方案
根据您的要求,我认为我们可以尝试在您的逻辑应用程序中使用 azure 函数,而不是“查询文档 V2”操作。
这是我的功能代码:
using System;
using System.IO;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Extensions.Http;
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.Logging;
using System.Collections.Generic;
namespace HuryCosmosFun
{
public static class Function1
{
[FunctionName("Function1")]
public static IActionResult Run(
[HttpTrigger(AuthorizationLevel.Function, "get", "post", Route = null)] HttpRequest req,
[CosmosDB(
databaseName: "ToDoList",
collectionName: "Items",
SqlQuery = "SELECT c.partition, COUNT(1) AS total FROM c WHERE c.system = 'SF' GROUP BY c.partition",
ConnectionStringSetting = "CosmosDBConnection")]
IEnumerable<ResultsClass> results,
ILogger log)
{
log.LogInformation("C# HTTP trigger function processed a request.");
foreach (ResultsClass result in results)
{
log.LogInformation(result.partition);
log.LogInformation(result.total.ToString());
}
return new OkResult();
}
}
}
namespace HuryCosmosFun
{
public class ResultsClass
{
public string partition { get; set; }
public int total { get; set; }
}
}
有关上述代码的更多信息,您可以参考本教程。
发布到 azure 后,我们可以在逻辑应用中创建一个 azure 函数,它将帮助我们进行 sql 操作。
顺便说一句,由于本教程提到 azure cosmos db sdk 已经支持“group by”。
我想我们也可以在 azure function 中编写代码,通过本文档中的 sdk 连接和查询 cosmos db ,然后在 logic app 中创建 azure function 作为第一个解决方案。
希望对您的需求有所帮助~
推荐阅读
- r - 在数据框上使用 lappy() 函数后,列名发生变化,如何防止这种情况发生?
- r - 第一个观察没有行号
- html - 如何让 IE 中的文本大小和行为与仅使用 HTML/CSS/SVG 的其他浏览器相匹配?
- android - 由于 NullPointer,无法在 TextView 上设置文本()
- c++ - c++ Injector 运行但未注入 DLL
- android - 如何在 Flutter 中使用设备的默认字体?
- sql - SQL 选择从其他事务派生的事务并将它们与原始事务分组
- mongodb - MongoDB 分片键与查询索引
- php - PHP:如何从(多字节)字符串中提取所有预定义的子字符串?
- java - RecylerView 中带光标的部分