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