使用 Azure 数据工厂复制防止空文件生成 Activity

Prevent empty file generation using Azure Data Factory Copy Activity

我正在使用 Azure 数据工厂将数据从 Azure Cosmos DB 复制到 Azure Data Lake。我的管道包含一个副本 activity,它将数据复制到数据湖接收器。

这是我对源数据集的查询:

select * from c 
where c.data.timestamp >= '@{formatDateTime(addminutes(pipeline().TriggerTime, -15), 'yyyy-MM-ddTHH:mm:ssZ' )}' 
AND c.data.timestamp < '@{formatDateTime(pipeline().TriggerTime, 'yyyy-MM-ddTHH:mm:ssZ' )}'

我正在获取触发时间前最后 15 分钟的数据。

现在,如果查询没有检索到数据,那么副本 activity 会生成一个空文件并将其存储在数据湖中。我想阻止这种情况。有什么办法可以实现吗?

您可以使用 lookup activity 然后使用 if activity 来决定是否需要 运行 副本 activity.

在查询 activity 中,您可以将 firstRowOnly 设置为 true,因为您只想检查是否有数据。

我尝试了以下方法并且有效:我正在检查查找条目 returns 是否超过 0 行。

这是一个较旧的线程,但有人可能有更优雅的方法来处理上面的问题,即使有 0 条记录,ADF 也会生成一个文件。以下是我对查找方法或使用 post 进程清理空文件的担忧。

  1. 为了第一次检查是否有行而查询数据库两次是低效的。
  2. 如果您已经在 ADF 的 [if 组件] 或 [case] 组件中,则无法使用 [IF 条件] 组件。 (这也是 ADF constraint/shortcoming)。
  3. 清理空文件也是低效的,如果您触发正在创建文件的事件,则不是一个选项,因为它会导致误报,因为它是在您可以清理它之前写入的。