目标
使用C#、. NET Core 2.2将超过100万个文档导入Azure Cosmos DB。
我尝试过的
我正在使用Azure Cosmos Bulk Executor库。我在这里关注示例-https://docs.microsoft.com/en-us/azure/cosmos-db/bulk-executor-dot-net,例如
// Set retry options high during initialization (default values).
client.ConnectionPolicy.RetryOptions.MaxRetryWaitTimeInSeconds = 30;
client.ConnectionPolicy.RetryOptions.MaxRetryAttemptsOnThrottledRequests = 9;
IBulkExecutor bulkExecutor = new BulkExecutor(client, dataCollection);
await bulkExecutor.InitializeAsync();
// Set retries to 0 to pass complete control to bulk executor.
client.ConnectionPolicy.RetryOptions.MaxRetryWaitTimeInSeconds = 0;
client.ConnectionPolicy.RetryOptions.MaxRetryAttemptsOnThrottledRequests = 0;
下一次我跑步
var bulkImportResponse = await bulkExecutor.BulkImportAsync(documents, true);
if ((bulkImportResponse.NumberOfDocumentsImported < documents.Count) ||
(bulkImportResponse.BadInputDocuments?.Count > 0))
{
// Logging, exception throwing, etc.
}
问题
我对相同的源数据多次运行导入。
bulkImportResponse.NumberOfDocumentsImported
通常(但并非总是)小于此值约一千或0.1%。例如。上次运行的时间是1236175。bulkImportResponse.BadInputDocuments
始终为null。问题
Q1:是否有人知道导入是否出了问题,或者只是bulkImportResponse.NumberOfDocumentsImported
值不正确。
问题2:如果这1000个文档出了问题,有什么方法可以获取有关哪些文档可能出错的日志。在上面的导入过程中,没有写任何消息-我浏览了Microsoft.Azure.CosmosDB.BulkExecutor.BulkExecutor
的源代码,但看不到任何可提供额外功能的内容。
文档和目标的属性
documents
有1237278个对象。id
字段和用作分区键的字段的值。 谢谢。
无法重现您的问题。以下是一些个人建议:
您可以将文档分成较小的集合。然后运行多个任务,最后将结果组合在一起。
要验证是否所有文件都已导入,您可以按SELECT VALUE Count(1) from c
检查文件总数。然后,您将获得导入文档的实际数量。基本上,如果数字正确,则所有文档都应该可以。您还可以将云上的每个文档与本地文档进行比较。
对于此类SDK问题,由于它部分成功并且没有错误,因此很难确定根本原因。更好的方法是在its Github项目中打开问题。项目贡献者可能会进一步帮助您。