BigQueryIO Читать против Query - PullRequest
0 голосов
/ 29 января 2019

Скажем, в программе Dataflow / Apache Beam я пытаюсь прочитать таблицу с экспоненциально растущими данными.Я хочу улучшить производительность чтения.

BigQueryIO.Read.from("projectid:dataset.tablename")

или

BigQueryIO.Read.fromQuery("SELECT A, B FROM [projectid:dataset.tablename]")

Улучшится ли производительность моего чтения, если я выбираю только необходимые столбцы в таблице, а нечем вся таблица выше?

Мне известно, что выбор нескольких столбцов приводит к снижению затрат.Но хотелось бы узнать производительность чтения выше.

1 Ответ

0 голосов
/ 29 января 2019

Вы правы, что это снизит стоимость вместо ссылки на все столбцы в SQL / запросе.Кроме того, когда вы используете from() вместо fromQuery(), вы не платите за сканы таблиц в BigQuery.Я не уверен, знали ли вы об этом или нет.

Под капотом всякий раз, когда Dataflow читает из BigQuery, он фактически вызывает свой API экспорта и инструктирует BigQuery выгрузить таблицы (ы) в GCS как осколочные.файлы.Затем Dataflow читает эти файлы параллельно в ваш конвейер.Он не готов "напрямую" из BigQuery.

Как таковой, да, этот может повысить производительность, поскольку объем данных, которые необходимо экспортировать в GCS изнутри и прочитать вваш конвейер будет меньше, т.е. меньше столбцов = меньше данных.

Однако я бы также подумал об использовании секционированных таблиц, а затем даже подумал о их кластеризации.Кроме того, используйте пункты WHERE, чтобы еще больше сократить объем данных, которые будут экспортироваться и считываться.

...