当前位置: 首页 > 知识库问答 >
问题:

如何使用Azure函数Cosmos DB触发器捕获更改?

严烨
2023-03-14

我有以下要求,我想从cosmosDB捕获记录,并将其推送到博客存储。

我已经用azure函数cosmos DB trigger解决了上面的问题(它将捕获对cosmos DB容器中的记录所做的任何更改)。

如何捕捉满负荷?

要求是我必须从cosmos DB容器中获取所有记录并将其推送到博客存储。

所以问题是cosmosDB触发器只有在记录有一定变化时才捕获,那么我该如何实现这个满载。

对于满载,我还创建了一个python脚本。

参考资料: https://github.com/Azure/azure-cosmos-python

参考脚本:如何使用python更新Cosmos Db中的记录?

query_data = client.QueryItems(collection_link,
                                   'SELECT * FROM ' + COSMOS_DB_COLLECTION_ID,
                                   {'enableCrossPartitionQuery': True})
    for item in query_data:
        client.ReplaceItem(item['_self'], item, options=None)

因此,我的脚本实际做的是获取所有记录,我为每个记录调用ReplaceItem,但我观察到azure函数cosmos DB触发器不会捕获所有记录的更改,它只捕获少数记录。

那么脚本有问题吗?

共有1个答案

郝修为
2023-03-14

首先,我认为客户没有“查询项目”。

其次,您的文档没有更改。

你应该这样做:

url = os.environ['ACCOUNT_URI']
key = os.environ['ACCOUNT_KEY']
client = cosmos_client.CosmosClient(url, {'masterKey': key})
database_name = "testbowman"
container_name = "testbowman"
database = client.get_database_client(database_name)
container = database.get_container_client(container_name)
for item in container.query_items('SELECT * FROM c', enable_cross_partition_query=True):
    logging.info("This is Query database!" + json.dumps(item))
    item['Description'] = "!!!!!!!!!!!!!!"
    container.replace_item(item['id'],item)
 类似资料:
  • 我将JSON文档上传到Azure Blob容器中,并编写了Azure Python函数将JSON写入CosmosDB。触发工作正常,但我出错了。下面是Python函数: 以下是function.json文件: 这是我在Azure门户中看到的错误: 结果:失败异常:函数加载错误:无法加载JsonBobTrigger1函数:以下参数在Python中声明,但在function.json中没有声明:{'d

  • 有没有人知道某种方法可以触发具有 Blob 触发器的 Azure 函数?无论是通过API还是使用“测试/运行”功能。 情况是,我需要在测试目的中这样做。目前我看到的是,可以在blob存储中提供要触发的文件的名称。但这是无用的,因为无论如何,将文件放在那里都会触发功能。我想做的是为文件的内容而不是名称提供功能,以避免不必要的操作。 不幸的是,微软在所有相关主题上的留档很差,但这个没有。在这个gith

  • 我是Azure Function应用程序中blob触发器的新手,需要一些帮助。我正在努力寻找有关如何重命名触发该函数的blob的资源。 我有一个函数应用程序,当一个新的blob被上传到容器时触发,文件被处理,我需要一种方法来将其“标记”为已处理,因此我想重命名blob。 这是我的职责: 我该如何重命名该文件?在这种情况下有可能吗?

  • 如果你使用blob存储触发器阅读Azure WebJobs上的留档,它们会提到这不是很可靠: WebJobs SDK扫描日志文件以查看新的或更改的blob。这个过程不是实时的;在创建blob后的几分钟或更长时间内,函数可能不会被触发。此外,存储日志是在“尽力而为”的基础上创建的;无法保证所有事件都将被捕获。在某些情况下,日志可能会丢失。如果您的应用程序无法接受blob触发器的速度和可靠性限制,建议

  • 我试图在Azure portal中开发一个Azure函数(node.js),它在创建文档时由Cosmos DB触发。Azure文档说,要做到这一点,首先我必须从模板中选择“Cosmos db触发器”,但没有模板出现在我的函数中...只出现HTTP an计时器触发器选项。我想使用CosmosDB和IoTHUB作为触发器,输入输出。有没有被忽略的要求?为什么我没有更多的触发器选项?需要指导。