Azure CosmosDB查询资源管理器与数据资源管理器

时间:2019-12-13 21:27:51

标签: azure azure-cosmosdb azure-logic-apps azure-cosmosdb-sqlapi

我正在对CosmosDB实例运行相同的查询(使用SQL API):

SELECT c.partition, COUNT(1) AS total
FROM c 
WHERE c.system = "SF"
GROUP BY c.partition

我从数据资源管理器获得预期的结果感到很惊讶,而在查询资源管理器选项卡下却收到了 400错误的请求,并显示以下消息:

  

{“代码”:400,“正文”:“ {\”代码\“:\” BadRequest \“,\”消息\“:\”消息:{\\“错误\\”:[\\ “跨分区查询仅支持'VALUE'用于聚合。\\“]} \ r \ nActivityId:d8523615-c2ff-47cf-8102-5256237c7024,Microsoft.Azure.Documents.Common / 2.7.0 \”}“,” activityId “:” d8523615-c2ff-47cf-8102-5256237c7024“}

我知道我可以使用第一个查询,但是当我尝试从Logic Apps运行查询时,会发生相同的异常:

enter image description here

问题很简单:查询在语法上是否正确?

1 个答案:

答案 0 :(得分:1)

根据您的要求,我认为我们可以尝试在您的逻辑应用程序中使用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; }
    }
}

有关上述代码的更多信息,您可以参考此tutorial

发布到天蓝色后,我们可以create an azure function in logic app,它将帮助我们执行sql操作。

顺便说一句,由于上述tutorial提到的azure cosmos db sdk支持“分组依据”。 enter image description here

我认为我们也可以在azure函数中编写代码以通过此document中的sdk连接和查询cosmos db,然后在逻辑应用程序中创建azure函数作为第一个解决方案。

希望对您的要求有所帮助〜