Как выполнить быстрое объединение в BigQuery с Apache BEAM - PullRequest
1 голос
/ 19 июня 2019

Согласно руководству по программированию BEAM и многим потоков join может быть достигнуто с помощью CoGropByKey или KeyedPCollectionTuple ( coockbook ).

Никто не говорит о производительности такого рода преобразований.

Мой поток должен быть очень простым: ввод пакета строк из таблицы BQ (TableRow) и соединение их (или "enrich ") другим значением из другой таблицы BQ по тому же ключу.Таким образом, конечный вывод также должен иметь тип TableRow.

Я хочу понять, как будет лучше объединять 2 таблицы в BEAM с таблицами BQ.

Например, я мог бы создать View в BQ и заменить весь этот конвейер и выполнить более эффективную операцию соединения, но я хочу обработать всю логику в коде

Что происходит под капотомкогда обрабатывается операция join?

Будет ли DirectRunner выполнять n запросов ко второй таблице BQ, чтобы объединить все пакеты конвейера (элемент за элементом)?или BEAM достаточно умен, чтобы объединить его и выполнить 1 запрос из всей партии?

Работает ли Google DataflowRunner по-другому?

Как проверить производительность этого конвейера, кроме проверки времени работы?

1 Ответ

1 голос
/ 20 июня 2019

TTBOMK вы не хотите писать полный SQL в коде, например, предложения WHERE. Лучи или действительно любые SQL-соединения, основанные на коде, не смогут работать с существенными данными, которые хранятся в BQ. Таким образом, любое такое «обогащение» действительно должно выполняться базовым решением для обработки данных, будь то SQL поверх BQ ИЛИ Spark поверх RDD / DataFrames / и т. Д.

Обратите внимание, что он менее подходит для потоковой передачи, больше для пакетных потоков. Если вы хотите следовать по принципу чистого потокового вещания, вы должны использовать быстрые БД для каждого домена и избегать БД в стиле OLAP (истинно столбчатых). BQ имеет существенную задержку на запрос.

Расскажите нам, как это происходит:)

...