如何在 Cosmos DB 中查找重复文档

Ant*_*ony 3 azure azure-stream-analytics stream-analytics azure-cosmosdb azure-cosmosdb-sqlapi

我已经看到在特定日期从流分析作业向 Cosmos DB 写入大量数据。它不应该在一天内写出大量的文件。我必须检查那天是否有重复的文件。

是否有任何查询/任何方法可以在 Cosmos DB 中查找重复记录?

Mor*_*ana 7

如果您知道检查重复项的属性,则有可能。我们有一个令人讨厌的生产问题,也导致了许多重复的记录。在联系 MS 支持以帮助我们识别重复文档后,他们给了我们以下查询;

请记住:在我们的案例中,属性AB 共同定义了唯一性。因此,如果两个文档对 A 和 B 具有相同的值,则它们是重复的。然后,您可以使用此查询的输出,例如,删除最旧的但保留最近的(基于 _ts)

SELECT d.A, d.B From 
   (SELECT c.A, c.B, count(c._ts) as counts FROM c
    GROUP BY c.Discriminator, c.EndDateTime) AS d
WHERE d.counts > 1
Run Code Online (Sandbox Code Playgroud)

  • 您将如何列出这些文档的唯一 ID?如果您想查找重复项然后删除重复项? (2认同)

Jay*_*ong -1

有没有任何查询/任何方法可以找出cosmos DB中的重复记录?

快速回答是肯定的。请在 cosmos db 查询 sql 中使用distinct关键字_ts。并过滤(系统生成的 unix 时间戳:https://learn.microsoft.com/en-us/azure/cosmos-db/databases-containers-items#物品的属性

就像是:

Select distinct c.X,c.Y,C.Z....(all columns you want to check) from c where c._ts = particular day
Run Code Online (Sandbox Code Playgroud)

然后,您可以使用此批量删除库删除重复数据:https://github.com/Azure/azure-cosmosdb-bulkexecutor-dotnet-getting-started/tree/master/BulkDeleteSample

  • 但 DISTINCT 关键字将仅检索唯一(非重复)记录。我如何从中找到重复的记录?@Jay Kong (2认同)