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

标签 c# azure-cosmosdb bulkinsert azure-cosmosdb-sqlapi

目标

使用 C#、.NET Core 2.2 将超过 100 万个文档导入 Azure Cosmos DB。

我尝试过的

我正在使用 Azure Cosmos Bulk Executor 库。我在这里关注示例 - https://learn.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。

问题

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

Q2:如果这1000个文档有问题,有什么办法可以得到哪些文档可能有问题的日志。在上面的导入过程中没有写入任何消息 - 我查看了 Microsoft.Azure.CosmosDB.BulkExecutor.BulkExecutor 的源代码,但没有看到任何提供额外内容的东西。

文档和目标的属性

谢谢。

最佳答案

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

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

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

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

关于c# - Azure Cosmos DB .NET 批量执行器响应显示导入的文档少于 Cosmos 中实际出现的文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59106322/

相关文章:

c# - ASP.NET MVC RequireHttps 属性不起作用

c# - 从字符串中检索文本的正则表达式

c# - Azure cosmos db 中的 CreateDatabaseIfNotExistsAsync 时应用程序退出

azure - Cosmos db 删除文档的最佳方法

azure - 在 Azure BLOB 或 CosmosDB 上将超过 500k 个图像作为 varbinary blob 存储?

sql - 批量插入时出现错误

c# - WPF DataGrid 和 IAsyncEnumerable 项目

c# - Swagger Swashbuckle 抽象类文档

c#-4.0 - C#批量插入SQLBulkCopy-如果存在则更新

python - 在 django bulk_create 中获取 IntegrityError 的 key