Я пытаюсь автоматизировать задачу загрузки базы данных postgres в BigQuery как ежедневную работу.База данных postgres представлена в виде одного файла sql со всеми таблицами и данными внутри него.Этот файл размещен в Google Cloud Storage (GCS).Я хочу взять этот файл sql и загрузить каждую таблицу из него в свою отдельную соответствующую таблицу в BigQuery.
Большинство вопросов и ответов в StackOverflow об этом предполагают, что файл sql содержит только одну таблицу, а не несколькостолы.К сожалению, на данный момент, похоже, что BigQuery не поддерживает один файл с несколькими таблицами внутри себя.Кроме того, я также ищу автоматизированные решения, а не разовые вещи.Итак, я ищу другие решения.
Есть две проблемы, которые я хочу решить:
- Как разделить отдельный файл дампа sql, содержащий всю базу данных, на отдельные файлы csv для каждой таблицы?
- Какой инструмент следует использовать для автоматизации каждого шага в конвейере данных?
У меня есть несколько вариантов для каждой проблемы.Я ожидаю услышать отзывы о том, какой вариант кажется наиболее жизнеспособным, а также о любых дополнительных стратегиях, о которых вы, возможно, слышали или использовали раньше.
Для разбиения файла на отдельные файлы CSVдля каждой таблицы:
- Использование сценариев для разделения файла на несколько файлов CSV, по одному для каждой таблицы.(Наименьший масштабируемость, особенно по мере роста базы данных)
- Загрузить файл sql в Cloud SQL.Экспортируйте каждую таблицу как отдельный CSV-файл в GCS.Загрузите каждый файл в BigQuery.(Источник: Лучший способ импортировать данные Google Cloud SQL в BigQuery ) (Источник: Загрузить резервную копию Google Cloud SQL в Bigquery )
Для инструментов для автоматизации каждого шага в конвейере данных: (Я не очень знаком с ними, и надеюсь, что меня исправят, если ни один из инструментов ниже не является правильным выбором.)
- Облачная функция - этот инструмент может подключаться к различным API GCP и обладает наибольшим потенциалом, но я хотел подтвердить, является ли это правильным инструментом, прежде чем начать этот путь.( Автоматическая загрузка файлов из Google Cloud Storage в Bigquery )
- Cloud Composer - этот инструмент кажется немного дорогим из того, что я до сих пор собирал, но на тот момент это единственныйинструмент возможен, я могу изучить его.
- DataFlow - у меня сложилось впечатление, что этот инструмент предназначен только для преобразования данных для таблиц, которые уже были разделены, и не обладает способностью выполнять импорт / экспортзадания, например, сохранение таблицы из Cloud SQL в GCS в виде файла csv.
- Существуют ли какие-либо другие инструменты, которые вызывают API-интерфейсы GCP и могут запускать ежедневные задания, которые я не перечислил здесь?
Сейчас я думаю об использовании облачных функций для организации следующего конвейера: GCS -> Cloud SQL -> разделить на отдельные CSV-файлы -> загрузить в GCS -> принестив BigQuery.Если есть какие-либо другие альтернативные стратегии, о которых вы знаете, это было бы очень полезно.