我有以下要求,我想从cosmosDB中捕获记录并将其推送到博客存储中。
我已经用azure函数cosmos DB触发器解决了上述问题(它将捕获对cosmos DB容器中记录的任何更改(。
如何获取满载
要求是我必须从cosmos DB容器中获取所有记录,并将其推送到博客存储中。
所以问题是只有当记录发生变化时,cosmosDB才会触发捕获,那么我如何才能实现这个满载。
对于Full-load,我还创建了一个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触发器不会捕获所有记录的更改,它只捕获少数记录。
那么剧本有问题吗?
首先,我认为客户端没有"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)