У меня есть сценарий использования, в котором я должен читать выбранные данные из BigQuery, применяя левые объединения к 20 различным таблицам BQ, применять преобразования к этим данным и, наконец, выводить данные в окончательную таблицу BQ.
Я имел в виду два подхода для достижения этой цели, которые я попробовал на выборочных данных (всего 10-12 миллионов строк из 20 таблиц) и получил следующие результаты:
Подход 1 - написать BQ-совместимый запрос для всего процесса и запустить его через Apache Beam (используя BigQueryIO.readTableRows ()) и, наконец, сбросить данные в целевую таблицу BigQuery.
- Выполните задание, используя тип машины n1-standard-4, и задание завершится через 6:24 мин.
Подход 2 - Напишите весь процесс в Apache Beam и избегайте использования большого количества слотов в BQ.
- Выполните задание, используя тип машины n1-standard-4, и задание завершится в 14:50 минут.
Здесь важно учитывать, что 20 исходных таблиц, к которым нужно присоединиться, будут расти с течением времени, и, возможно, в ближайшем будущем у нас будут ТБ данных.
Какой будет более эффективный способ сделать это, учитывая увеличение объема данных, которое у нас будет в будущем?