Я успешно выбрал вариант 1: Big Query очень способен выполнять очень сложное преобразование с SQL, кроме того, вы также можете запускать их постепенно с помощью декораторов временного диапазона. Обратите внимание, что для передачи данных в BigQuery требуется много времени и ресурсов. При запуске BigQuery SQL данные никогда не покидают BigQuery, и у вас уже есть все необработанные журналы. Поэтому до тех пор, пока ваша проблема может быть решена с помощью серии SQL, я считаю, что это лучший способ для go.
Мы переехали из кластера отчетности Vertica, успешно переписав ETL в прошлом году, с вариантом 1.
Примерно за год go я написал PO C, сравнивающий DataFlow и серию заданий BigQuery SQL, организованных с помощью potens.io рабочего процесса, позволяющего SQL распараллеливать в шкала.
У меня был хороший месяц, чтобы написать DataFlow в Java с 200+ точками данных и сложным преобразованием с ужасной возможностью отладки одновременно. И неделю, чтобы сделать то же самое, используя серию SQL с potens.io , используя облачную функцию для Оконных таблиц и распараллеливание с кластеризацией временных таблиц. Я знаю, что с тех пор в CloudDataFlow было много улучшений, но в то время DataFlow работал нормально только в миллионном масштабе и никогда не завершался при вводе миллиардов записей (основная причина, по которой количество случайных чисел перемешивалось чуть меньше миллиардов записей, причем каждая запись имела более 200 записей колонны). И подход SQL произвел всю необходимую агрегацию за 2 часа для десятка миллиардов. Отладка и простота устранения неполадок с potens.io тоже очень помогли.