如何从azure cloud函数cosmos数据库查询中获得一致的结果



我正在尝试使用azure python云函数v2对cosmos数据库运行查询,并将查询作为json blob返回到存储容器。问题是,我在输出中得到了不一致的结果。查询应该返回c 4-5000条记录,我想将它们整理成一个json文件。

如何每次从数据库中获得查询的一致结果?

init.py看起来像这样:

import azure.functions as func
import json
import logging
def main(msgIn: func.QueueMessage, documents: func.DocumentList) -> str:
if documents:
logging.info('documents found in cosmosdb, saving to blob...')
#serialize as a string to output to blob
complete_docs_str = ','.join([doc.to_json() for doc in documents])
complete_docs_str = "[" + complete_docs_str
complete_docs_str = complete_docs_str + "]"
logging.info('wrote to site.json blob in documents container')
returnDoc = complete_docs_str
return returnDoc

function.json看起来像:

{
"scriptFile": "__init__.py",
"bindings": [
{
"name": "msgIn",
"type": "queueTrigger",
"direction": "in",
"queueName": "documents-queue",
"connection": "AzureWebJobsStorage"
},
{
"type": "cosmosDB",
"name": "documents",
"direction": "in",
"leaseCollectionName": "leases",
"connectionStringSetting": "AzureCosmosDBConnectionString",
"databaseName": "documentsdb",
"collectionName": "documentscollection",
"sqlQuery": "SELECT * FROM c WHERE c.site = {site}",
},
{
"name": "$return",
"type": "blob",
"direction": "out",
"connection": "MyStorageConnectionString",
"path": "documents/{site}.json"
}]
}

Azure函数在执行时间等方面存在限制。在函数终止并显示结果之前,您确定DB查询已完成执行吗?函数中也存在有效载荷限制。

有关详细信息,请参阅下面的链接:https://learn.microsoft.com/en-us/azure/azure-functions/functions-scale#:~:text=A%20single%20function%20app%20only,在%20most%2C%20once%20per%20second。

我的另一个建议是将要拉的列数限制为一个小数字,并查看是否得到所有行。因为我怀疑这可能是规模或执行时间之间的斗争。

好的,所以在我的情况下,我似乎能够通过将集合分区键从/id更改为/site来获得一致的结果。该数据库有大约25000个单独的条目,所有条目都有唯一的ID。整个集合中每个site大约有20个不同的值。

我的查询有时会查找多达4000个结果(从c中选择*,其中c.site="foo"(,现在每次都会产生一致的结果。

最新更新