Cloud Function GCS 触发器过早响应部分文件上传

Cloud Function GCS trigger is prematurely responding to partial file upload

完整工作流程:

  1. SFTP 镜像将新文件从 SFTP 上传到 GCS 存储桶
  2. 新的 GCS 对象触发 Cloud Function
  3. Cloud Function 触发 Composer/Airflow DAG 并将其发送到新 GCS 对象的路径

查看 Composer/Airflow UI 中的 DAG 运行 历史记录,其中有一个任务失败,然后紧接着是任务成功。

任务的目的是上传一个文件到BQ。文件路径由 Cloud Function 提供。

有一个清晰的模式,其中失败任务的日志显示该任务试图处理具有 my_timestamped_file_name.csv.part

等模式的文件

以下成功的任务在日志中显示它处理的文件具有相同的模式但没有 .partmy_timestamped_file_name.csv

在我看来,云功能 (CF) 是由 SFTP 镜像创建的部分上传文件触发的,而不是等待文件完成上传。当然,当文件完全上传后,.part文件消失,任务失败,因为它没有任何处理。

我的云函数的事件类型定义为 Finalize/Create。有没有办法避免部分上传的文件?除了在 CF 中使用 hacky 条件语句来避免以 .part?

结尾的文件之外

我们正在创建的规则是,无论何时创建文件,它都应该触发 GCF,因此它可以正确地完成工作。可能的解决方案是

  1. 在 GCF 中过滤 .part 文件
  2. 如果可能,将临时目录作为不同的文件夹传递给 SFTP 镜像