Сравнение чтения BigQueryIO и fromQuery

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

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

or

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

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

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


person Roshan Fernando    schedule 29.01.2019    source источник


Ответы (1)


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

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

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

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

person Graham Polley    schedule 29.01.2019
comment
Спасибо, да, я знаю об этом, но на самом деле не знал, что fromQuery() также сбрасывает данные в GCS. Можете ли вы подтвердить, действительно ли вы имели в виду, что fromQuery() также экспортирует необходимые данные столбца в GCS, используя тот же API экспорта, который используется для from() - person Roshan Fernando; 30.01.2019
comment
Оба они сначала выгружают данные в GCS, а затем считывают их в конвейер. - person Graham Polley; 30.01.2019