gpt4 book ai didi

c# - 在 x64 平台上执行聚合查询时出现异常

转载 作者:太空狗 更新时间:2023-10-29 22:36:01 27 4
gpt4 key购买 nike

使用聚合运行查询时,我收到以下异常:

Microsoft.Azure.Documents.BadRequestException: 
{"Errors":["Cross partition query only supports 'VALUE <AggreateFunc>' for aggregates."]}
---> System.Runtime.InteropServices.COMException: Exception from HRESULT: 0x800A0B00

我的查询代码是:

var store = "1234";
var sumResults = client.CreateDocumentQuery(
UriFactory.CreateDocumentCollectionUri("my-data-db", "my-collection"),
$"SELECT SUM(t.totalAmount) FROM t where t.siteData.siteID = '{store}'");

我花了一段时间才弄明白,当构建平台设置为 x86 时它工作正常,但当设置为 x64 时失败。

我使用的是最新版本的包 1.12.2

关于如何使 x64 版本工作的任何想法?

最佳答案

根据你的描述,我用了Microsoft.Azure.DocumentDB 1.12.2在 DocomentDB Emulator 和 Azure DocumentDB 上测试类似的查询。经过一些试验,我发现这个问题只发生在你对 DocomentDB Emulator(我当前的版本是 1.11.136.2)使用 SQL 聚合函数(例如 COUNT、MIN、MAX、SUM 和 AVG)并且你的项目构建在 x64 上时.

作为官方document提到了 Azure DocumentDB 的聚合:

Aggregate support has been rolled out to all DocumentDB production datacenters. You can start running aggregate queries against your existing DocumentDB accounts or provision new DocumentDB accounts via the SDKs, REST API, or the Azure Portal. You must however download the latest version of the SDKs in order to perform cross-partition aggregate queries or use LINQ aggregate operators in .NET.

我假设您可以按如下方式利用 LINQ 的聚合:

var amount=client.CreateDocumentQuery<DocEntity>("/dbs/{your-db-id}/colls/{your-collection-id}",
new FeedOptions { MaxDegreeOfParallelism = -1 })
.Where(r => r.siteID == "1234")
.Sum(r=>r.totalAmount);

我们可以发现上面的查询会生成以下查询:

{"query":"SELECT VALUE Sum(root[\"totalAmount\"]) FROM root WHERE (root[\"siteID\"] =\"1234\") "}

更多详情,可以引用这个tutorial .

关于c# - 在 x64 平台上执行聚合查询时出现异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42907875/

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