我正在用Python开发一个应用程序,它使用Azure Cosmos DB作为主数据库。在应用程序的某个时候,我需要将大量数据(一批项)插入Cosmos DB中。到目前为止,我一直在使用Azure Cosmos DB Python for SQL API与Cosmos DB通信;但是,它没有提供批量数据插入的方法。
据我所理解,这些是在这个SDK中提供的插入方法,这两种方法都只支持单个项插入,在for
循环中使用它时会非常慢:
.upsert_item()
.create_item()
是否有另一种方法可以使用此SDK插入大容量数据,而不是在for
循环中使用上述方法?如果没有,是否有可以处理大容量数据插入的Azure REST?
发布于 2022-08-03 19:40:40
Cosmos DB服务不通过其REST提供此功能。批量模式是在SDK层实现的,不幸的是,Python还不支持大容量模式。但是,它确实支持异步IO。这里有一个可能对你有帮助的例子。
from azure.cosmos.aio import CosmosClient
import os
URL = os.environ['ACCOUNT_URI']
KEY = os.environ['ACCOUNT_KEY']
DATABASE_NAME = 'myDatabase'
CONTAINER_NAME = 'myContainer'
async def create_products():
async with CosmosClient(URL, credential=KEY) as client:
database = client.get_database_client(DATABASE_NAME)
container = database.get_container_client(CONTAINER_NAME)
for i in range(10):
await container.upsert_item({
'id': 'item{0}'.format(i),
'productName': 'Widget',
'productModel': 'Model {0}'.format(i)
}
)
更新:我记得另一种方法,您可以在宇宙数据库中为Python做批量插入,即使用存储过程。有关于如何编写这些内容的示例,包括演示传递数组的示例,这正是您想要做的。我还想看看有限度的执行,因为您也希望实现这一点。您可以在这里学习如何编写它们,如何编写存储过程。那么如何在这里注册和呼叫他们,如何使用存储过程。注意:只有在传递分区键值时才能使用,因此只能在逻辑分区中执行批处理。
https://stackoverflow.com/questions/73225265
复制相似问题