YardalGedal
@YardalGedal
yeah boy

Как правильно работать с Postgresql -> BigQuery?

И так, есть некоторое приложение на Python которое собирает данные в базу данных Postgresql. Данных не много (около гигабайта = миллион записей) и проблемы бы не было, если бы некоторые данные не могли устаревать - то есть их нужно иногда обновлять. Клиент для анализа данных хочет использовать BigQuery. Видимо, у него есть ещё какие-то данные, с которыми он хочет эти данные сравнивать или работать вместе с ними.
Какой самый верный путь обновления данных в базе данных и далее в BigQuery?
У меня есть несколько вариантов:

1. Python в течение дня собирает новые данные, обновляет те данные, которые ему нужно обновить, в момент завершения своей работы данные выгружаются из postgresql в csv или json, далее загружаются в BigQuery через библиотеку google-cloud-bigquery, дропается основная таблица, загруженная таблица переименовывается.
Очевидные минусы - отсутствие транзакций у бигквери.
2. Python в течение дня собирает новые данные, обновляет те данные, которые ему нужно обновить. Один или два раза в день данные выгружаются из Postgresql в csv или json ... и так далее как и у предыдущего варианта, минусы те же, но тут есть ещё минус, что выгрузка может совпасть с моментом работы скрипта.
3. Python в течение дня собирает новые данные, обновляет те данные, которые ему нужно обновить. По запросу к API (грубо говоря по тыку на кнопку), данные выгружаются из postgresql в csv ... и так далее как и раньше. Минусы такие же, но добавляется узколобость клиента, который получает возможность тыкать на кнопку раз в секунду, из чего ничего хорошего не выйдет.

Если бы данные не нужно было обновлять - всё было бы очевидно, но ведь BigQuery не рассчитан на обновление данных - таких запросов (UPDATE) можно сделать всего 1000 в сутки, а это довольно мало, ведь если хоть раз у нас обновится больше тысячи строк из миллиона (а это 0.1%), смысла так работать с данными уже нет.

Может быть кто-то решал уже такую проблему? Какие существуют интересные библиотеки для работы с BigQuery, кроме google-cloud-bigquery?
  • Вопрос задан
  • 358 просмотров
Пригласить эксперта
Ответы на вопрос 1
dimonchik2013
@dimonchik2013
non progredi est regredi
Если бы данные не нужно было обновлять - всё было бы очевидно, но ведь BigQuery не рассчитан на обновление данных - таких запросов (UPDATE) можно сделать всего 1000 в сутки, а это довольно мало, ведь если хоть раз у нас обновится больше тысячи строк из миллиона (а это 0.1%), смысла так работать с данными уже нет.


смотрите: если где-то сделано что-то именно ТАК, всегда думайте - а ПОЧЕМУ так?
и как только поймете - горизонты сознания расширятся и мир заиграет новыми красками

Бигквери не предназначен для Update - ну был курс доллара на сейчас 65,25 , а через секудну 65,26 - что вы обновлять тут собрались? фины позавчера стали чемпионами мира, тут что менять? пришел посетитель- вписался лог, потом еще один - а тут что обновлять? или он не пришел?

в BigQuery тупо складываете сырые данные, и обрабатываете их аггрегацией, оконными функциями и всем таким - вот так работу и постройте , не нужно копировать SQL базу
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы