У меня есть вариант использования, в котором мне нужно прочитать выбранные данные из 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 исходных таблиц, к которым необходимо присоединиться, будут продолжать расти с течением времени, и, возможно, в ближайшем будущем у нас будут ТБ данных.
Какой будет более эффективный способ сделать это, учитывая рост данных, который у нас будет в будущем?