Можно ли использовать Cloud Data Fusion FTP -> GCS -> BQ

#google-cloud-platform #google-cloud-data-fusion

#google-облачная платформа #google-cloud-data-fusion

Вопрос:

Я новичок в GCP и Cloud Data Fusion. Я вижу, что вы можете использовать эту службу для интеграции данных из разных источников данных в озеро данных.

У меня есть несколько поставщиков sftp, предлагающих файлы в разных структурированных форматах, например. csv, json, parquet и avro

В конечном счете, я бы хотел, чтобы эти данные были доступны в BQ.

Перед загрузкой в BQ моей первой остановкой должно было стать облачное хранилище Google, таким образом, у меня есть неизменяемая копия данных.

На сайте sftp будет несколько файлов, представляющих несколько таблиц.

 /root/table_1
/root/table_2
/root/table_3
  

Сначала я пытаюсь выяснить, использую ли я конвейер Cloud Data Fusion для копирования файлов из SFTP в GCS. Это оказалось сложной задачей.

  1. Могу ли я использовать Fusion для этого?
  2. Нужно ли мне предоставлять схему для каждого файла или ее можно вывести?
  3. Нужно ли мне вручную перечислять каждую таблицу? В идеале я хотел бы скопировать все файлы как есть из SFTP в GCS
  4. Однажды в GCS я хотел бы создать внешний источник данных в BigQuery для каждого файла. Возможно ли это?

Комментарии:

1. Для приема файлов, полученных с помощью FTP, в GCS, это может быть полезным соображением: console.cloud.google.com/marketplace/details/trillo-vm-prod /…

Ответ №1:

Пожалуйста, учтите, что Cloud Datafusion — это инструмент ETL (извлечение-преобразование-загрузка); в этом случае конвейер будет обрабатывать данные в файлах, а не файлы как таковые; поэтому сложно определить простой конвейер для загрузки файлов в хранилище.

Чтобы решить эту проблему, я подумал об использовании преобразования Javascript для использования клиентских библиотек; однако это не позволяет импортировать зависимости; таким образом, вы не можете их использовать, поэтому этап аутентификации в службах может быть сложным.

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

С другой стороны, я понимаю, что ваш сценарий использования:

  1. Извлекать файлы с одного или нескольких SFTP-серверов
  2. Файлы имеют разные форматы (csv, json, parquet и avro)
  3. Файлы необходимо загрузить в облачное хранилище
  4. Каждый файл хранилища связан с таблицей BigQuery в качестве внешнего источника

Исходя из этого, я считаю лучшим вариантом использовать инструмент оркестровки, такой как Cloud Composer.

Airflow использует DAG (ориентированный ациклический граф) как совокупность всех задач, которые вы хотите запустить, организованных таким образом, чтобы отражать их взаимосвязи и зависимости; в этом случае в вашем DAG будут эти задачи:

  1. Используйте sftp_operator для получения файлов с серверов sftp внутри рабочих
  2. После того, как файлы находятся в workers, вы можете использовать PythonOperator для использования библиотеки облачного хранилища для загрузки файлов в корзину в вашем проекте.
  3. После того, как файлы находятся в хранилище, вы можете использовать PythonOperator для использования библиотеки BigQuery или BashOperator для использования bq load для создания таблиц с каждым файлом в качестве внешнего источника

Еще одним преимуществом является то, что вам больше не нужно беспокоиться о типе файла, поскольку все упомянутые вами форматы в настоящее время поддерживаются для создания таблицы непосредственно из них.

Комментарии:

1. Ваша рекомендация — это то, как я решил проблему. Ваша оценка того, что Composer является инструментом, лучше подходящим для такого рода работ, также согласуется с моими выводами. Когда я писал этот вопрос, я не знал, что Data Fusion в первую очередь касается содержимого файла, а не только файлов. Спасибо!