Согласно руководству по программированию BEAM и многим потоков join
может быть достигнуто с помощью CoGropByKey
или KeyedPCollectionTuple
( coockbook ).
Никто не говорит о производительности такого рода преобразований.
Мой поток должен быть очень простым: ввод пакета строк из таблицы BQ (TableRow
) и соединение их (или "enrich ") другим значением из другой таблицы BQ по тому же ключу.Таким образом, конечный вывод также должен иметь тип TableRow
.
Я хочу понять, как будет лучше объединять 2 таблицы в BEAM с таблицами BQ.
Например, я мог бы создать View в BQ и заменить весь этот конвейер и выполнить более эффективную операцию соединения, но я хочу обработать всю логику в коде
Что происходит под капотомкогда обрабатывается операция join
?
Будет ли DirectRunner
выполнять n запросов ко второй таблице BQ, чтобы объединить все пакеты конвейера (элемент за элементом)?или BEAM достаточно умен, чтобы объединить его и выполнить 1 запрос из всей партии?
Работает ли Google DataflowRunner
по-другому?
Как проверить производительность этого конвейера, кроме проверки времени работы?