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