Azure Cosmos DB .NET批量执行器响应显示导入的文档少于Cosmos中实际显示的文档

问题描述 投票:2回答:1

目标

使用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.
}

问题

我对相同的源数据多次运行导入。

  • [导入后,Cosmos集合具有正确数量的文档(即1237278)。
  • 但是,bulkImportResponse.NumberOfDocumentsImported通常(但并非总是)小于此值约一千或0.1%。例如。上次运行的时间是1236175。bulkImportResponse.BadInputDocuments始终为null。

问题

Q1:是否有人知道导入是否出了问题,或者只是bulkImportResponse.NumberOfDocumentsImported值不正确。

问题2:如果这1000个文档出了问题,有什么方法可以获取有关哪些文档可能出错的日志。在上面的导入过程中,没有写任何消息-我浏览了Microsoft.Azure.CosmosDB.BulkExecutor.BulkExecutor的源代码,但看不到任何可提供额外功能的内容。

文档和目标的属性

谢谢。

c# azure-cosmosdb bulkinsert azure-cosmosdb-sqlapi
1个回答
0
投票

无法重现您的问题。以下是一些个人建议:

  1. 您可以将文档分成较小的集合。然后运行多个任务,最后将结果组合在一起。

  2. 要验证是否所有文件都已导入,您可以按SELECT VALUE Count(1) from c检查文件总数。然后,您将获得导入文档的实际数量。基本上,如果数字正确,则所有文档都应该可以。您还可以将云上的每个文档与本地文档进行比较。

  3. 对于此类SDK问题,由于它部分成功并且没有错误,因此很难确定根本原因。更好的方法是在its Github项目中打开问题。项目贡献者可能会进一步帮助您。

© www.soinside.com 2019 - 2024. All rights reserved.