如何从数据工厂中清除 CosmosDB?
Posted
技术标签:
【中文标题】如何从数据工厂中清除 CosmosDB?【英文标题】:How can I clean out a CosmosDB from Data Factory? 【发布时间】:2022-01-08 02:32:53 【问题描述】:我正在构建一个中间件,在其中我从一个系统中获取所有未解决的问题,并在不同的系统中为此类问题创建票证。然后当第一个系统中的问题关闭时,中间件将关闭另一个系统中的票证。
我每天都会收到来自第一个系统的未解决问题列表。我将它们放入 CosmosDB (SQL) 表中,对它们施以魔法以在另一个系统中打开票证,然后将它们复制到历史存储中。 为了能够关闭工单,我想清空 CosmosDB 表,以便可以关闭下一个每日加载中的任何工单非。
我尝试设置一个 DataFlow,其中我使用 CosmosDB 表作为源,然后不选择任何内容并使用相同的 CosmosDB 表作为接收器,但使用“重建”选项。这样桌子应该被完全清空。这会产生一个奇怪的错误(“作业失败,原因是:Conversion from StructType(StructField(data,StructType(StructField(id,StringType,true),.....)几行)。
在数据工厂中清理 CosmosDB 表的最佳方法是什么?
【问题讨论】:
这个问题似乎相当广泛,因为从 Cosmos DB 容器中删除内容的潜在方法有很多(仅供参考,Cosmos DB 没有表)。这也有点不清楚,因为您根本没有提供任何具体的示例数据。 Cosmos DB 具有内置的 TTL 来老化旧数据,这可能对您有帮助,也可能没有帮助。您始终可以手动删除具有特定状态的文档(例如,标记为closed
的工单)。也不需要数据工厂来做这件事(我什至不确定数据工厂是否适合这样的事情)。
@DavidMakogon 因为它是自动化过程的一部分,所以数据工厂是当前的首选工具。如果您知道可以从数据工厂触发的更好的选项,那么我会全力以赴。 TTL 不是一个选项,因为我们希望选择或多或少地运行批处理。手动删除也不是一种选择,因为它是一个自动化过程。特定状态不是一个选项,因为我只收到未结票。这个问题真的不是那么广泛。示例数据不会为问题添加信息。这一切都归结为:我可以使用数据工厂清除容器中的所有数据吗?
【参考方案1】:
据我所知,仅使用 ADF 无法做到这一点。您需要将其与逻辑应用、databricks 笔记本或 Azure 函数等内容结合使用。 您可以查看 this 文章,该文章显示了 Logic 应用程序方法。在这种方法中,您需要编写一个存储过程来删除文档。逻辑应用仅触发该存储过程。您也可以使用 azure 函数来执行此操作。
只是添加,使用存储过程删除将花费您的 RU/s。使用 TTL 只会使用任何剩余的未使用的 RU/s。
【讨论】:
以上是关于如何从数据工厂中清除 CosmosDB?的主要内容,如果未能解决你的问题,请参考以下文章
从 Azure Block 到 CosmosDB 的 Azure 数据工厂复制速度很慢