Облачная функция GCS триггер преждевременно отвечает на частичную загрузку файла - PullRequest
1 голос
/ 30 апреля 2020

Полный рабочий процесс:

  1. SFTP Mirror загружает новые файлы из SFTP в корзину GCS
  2. Новые объекты GCS запускают функцию Cloud
  3. Функция Cloud запускает Composer / Airflow DAG и отправляет ему путь к новому объекту GCS

Просмотр истории выполнения DAG в пользовательском интерфейсе Composer / Airflow, где происходит сбой задачи, а затем сразу же следует ее успех.

Цель задачи - загрузить файл в BQ. Путь к файлу предоставляется облачной функцией.

Существует четкий шаблон, в котором журналы невыполненной задачи показывают, что задача пыталась обработать файл с шаблоном, подобным my_timestamped_file_name.csv.part

Следующая задача, которая успешно выполняется, показывает в журналах, что файл, который он обработал, имел тот же шаблон без .part: my_timestamped_file_name.csv

Мне кажется, что функция облака (CF) запускается частично загруженный файл, созданный зеркалом SFTP, вместо ожидания завершения загрузки файла. Конечно, когда файл полностью загружен, файл .part исчезает, и задача не выполняется, потому что ей нечего обрабатывать.

Тип события My Cloud Function определяется как Finalize / Create. Есть ли способ избежать частично загруженных файлов? Кроме использования хакерского условного оператора внутри CF, чтобы избежать файлов, которые заканчиваются на .part?

1 Ответ

1 голос
/ 01 мая 2020

Правило, которое мы создаем, - когда файл создается, он должен запускать GCF, поэтому он выполняет свою работу правильно. Возможные решения:

  1. Фильтрация файла .part в GCF
  2. Если возможно, передайте временный каталог как другую папку зеркалу SFTP
...