我正在尝试使用pydocumentdb使用python将CSV文档自动上载到Azure Cosmos SQL API DB。我正在使用熊猫执行一些数据预处理,然后以JSON格式转换每一行。最后,我为CSV的每个转换行创建一个文档。
原始csv约为431 MB和5173620个寄存器(行),这意味着我需要将每个寄存器(行)作为新文档提取。我发现createDocument()函数的运行速度非常慢(所有寄存器要花一天以上的时间才能完成)。虽然单分区Cosmos db限制为10000 RU,但“对所有文档进行计数”查询花费了29025.92 RU,结果似乎是毫无用处的。
我想知道是否有一种方法可以增强createDocument函数的性能。我也想知道如何在createCollection函数上定义RU。任何提示都将受到欢迎。
# create document
coll_link = createColl(client, db_link, coll_id)
... preprocess a pandas Dataframe df...
# create a collection
for index, row in df.iterrows():
doc = row.to_dict()
client.CreateDocument(coll_link, doc)
答案 0 :(得分:0)
1。我想知道如何在createCollection函数上定义RU。
添加offerThroughput
参数。
databaseLink = "dbs/db"
coll = {
"id": "testCreate",
"indexingPolicy": {
"indexingMode": "lazy",
"automatic": False
},
"partitionKey": {
"paths": [
"/AccountNumber"
],
"kind": "Hash"
}
}
collection_options = { 'offerThroughput': 2000}
client.CreateCollection(databaseLink , coll, collection_options)
2。我想知道是否有一种方法可以增强createDocument函数的性能。
首先,我不认为createDocument()
函数的运行速度很慢,相反,由于数据的原因,整个导入过程应该很慢。根据您的描述,您
不要遇到像Request rate is too large这样的错误。考虑到您的经济问题,我们不建议您不断增加RU设置。您可以考虑使用存储过程批量导入数据。请参考{{3 }}。
3。其他选择。
您可以使用official doc将csv文件中的数据直接导入cosmos db。请参考我先前的回答:Azure Data Factory中的步骤。只需转换输入和输出即可。
更新:
使用批量导入程序有哪些好处?
Cosmos db存储过程是在cosmos db服务器端运行的js代码片段。因此,如果使用它批量导入数据,则可能会减轻客户端的压力。
我可以在Python代码上添加Java编码的存储过程吗?
Cosmos DB存储过程是在cosmos db服务器端运行的js代码片段。您可以在Convert JSON to CSV in Azure Cosmos DB or Azure Blob中调用存储过程。
关于Data Factory,可以自动执行以下过程: 推广到不同的集合和数据库?
基于cosmos db python sdk,您需要配置集合名称。因此,您无法为不同的集合创建数据集。当然,您可以根据需要在sdk中更改集合名称,而不用创建多个数据集。
任何担心,请随时让我知道。