0

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

我已经使用 azure 函数 cosmos DB 触发器解决了上述问题(它将捕获对记录在 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 触发器不会捕获所有记录的更改,它只捕获很少的记录。

那么脚本有问题吗?

4

1 回答 1

0

首先,我认为客户端没有“QueryItems”。

其次,您的文档没有任何变化。

你应该像下面这样:

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)
于 2020-07-13T10:21:12.500 回答