Новости

Как использовать Google BigQuery с помощью Python

Автор Дата 17.01.2019

Google BigQuery — сие безсерверное масштабируемое хранилище данных. Использование безсерверного (облачного) решения — хорошая помысел, если у вас нет серьезного бэкграунда в администрировании баз данных. Экий подход позволяет сосредоточиться только на анализе данных и неважный (=маловажный) думать об инфраструктуре хранения данных (шардировании, индексации, компрессии). BigQuery поддерживает стереотипный диалект SQL, так что любой, кто когда-либо пользовался SQLными СУБД, с легкостью может инициализировать им пользоваться.

Начало работы с Google BigQuery и основание ключа для сервисного аккаунта

Я не буду до малейших подробностей объяснять, как начать работу с Google Cloud Platform и взбудоражить первый проект, об этом хорошо написано в статье Алексея Селезнева в блоге Netpeak. Идеже у нас уже есть проект в Cloud Platform с подключенным API BigQuery, следующим медленно нужно добавить учетные данные.

1. Переходим в раздел «API и сервисы > Учетные данные»:

2. Нажимаем «Создать учетные данные» > «Ключ сервисного аккаунта»:

3. Заполняем объем: пишем название сервисного аккаунта; выбираем роль (ни дать ни взять показано на скриншоте ниже, но роль может быть обусловленным от уровня доступов, которые вы хотите обеспечить сервисному аккаунту); выбираем тип ключа JSON; нажимаем «Создать»:

4. Переходим в раздел «IAM и администрирование» > «Сервисные аккаунты»

5. В колонке «Действия» в (видах созданного нами сервисного аккаунта выбираем «Создать ключ»:

6. Выбираем параметры ключа «JSON» и нажимаем «Создать», после чего перестань скачан JSON-файл, содержащий авторизационные данные пользу кого аккаунта:

Полученный JSON с ключом нам понадобится в дальнейшем. В среднем что не теряем.

Использование pandas-gbq для импорта данных с Google BiqQuery

Первый способ, с помощью которого допускается загружать данные из BigQuery в Pandas-датафрейм, — библиотечка pandas-gbq. Эта библиотека представляет собой обертку по-над API Google BigQuery, упрощающую работу с данными BigQuery от датафреймы.

Сначала нужно поставить библиотеку pandas-gbq. Сие можно сделать через pip или conda:

Я решил посмотреть основы работы с Google BigQuery с помощью Python в примере публичных датасетов. В качестве интересного примера возьмем датасет с данными о вопросах для сервисе Stackoverflow.

Дальше немного поиграем с обработкой данных. Выделим с даты месяц и год.

Cгруппируем данные по годам и месяцам и запишем полученные эмпирика в датафрейм stats.

Посчитаем суммарное количество вопросов в время, а также среднее количество запросов в месяц для каждого лета, начиная с января 2013 и по август 2018 (задний полный месяц, который был в датасете на фаза написания статьи). Запишем полученные данные в новый датафрейм year_stats

Приблизительно как 2018 год в наших данных неполный, ведь мы можем посчитать оценочное количество вопросов, которое предвидится в 2018 году.

На основе данных от StackOverflow разрешено сказать, что популярность pandas из года в годик растет хорошими темпами 🙂

Запись данных из dataframe в Google BigQuery

Следующим медленный я хотел бы показать, как записывать свои цифирь в BigQuery из датафрейма с помощью pandas_gbq.

В датафрейме year_stats получился multiindex изо-за того, что мы применили две агрегирующие функции (mean и sum). Чтоб нормально записать такой датафрейм в BQ надо убрать multiindex. С целью этого просто присвоим dataframe новые колонки.

Затем этого применим к датафрейму year_stats функцию to_gbq. Параметр if_exists = ’fail’ означает, точно при существовании таблицы с таким именем передача никак не выполнится. Также в значении этого параметра можно обратить append и тогда к существующим данным в таблице будут добавлены новые. В параметре private_key указываем конец к ключу сервисного аккаунта.

После выполнения функции в BigQuery появятся наши документация:

Итак, мы рассмотрели импорт и экспорт данных в BiqQuery с Pandas’овского датафрейма с помощью pandas-gbq. Но pandas-gbq разрабатывается сообществом энтузиастов, в ведь время как существует официальная библиотека для работы с Google BigQuery с через Python. Основные сравнения pandas-gbq и официальной библиотеки разрешается посмотреть тут.

Использование официальной библиотеки для импорта данных изо Google BiqQuery

Прежде всего стоит поблагодарить Google ради то, что их документация содержит множество понятных примеров, в часть числе на языке Python. Поэтому я бы рекомендовал войти в курс дела с документацией в первую очередь.

Ниже рассмотрим как востребовать данные с помощью официальной библиотеки и передать их в dataframe.

На правах видно, по простоте синтаксиса, официальная библиотека один-два чем отличается от использования pandas-gbq. При этом я заметил, как некоторые функции (например, date_trunc) не работают насквозь pandas-gbq. Так что я предпочитаю использовать официальное Python SDK про Google BigQuery.

Чтобы импортировать данные из датафрейма в BigQuery, нужно назначить pyarrow. Эта библиотека обеспечит унификацию данных в памяти, чтоб dataframe соответствовал структуре данных, нужных для загрузки в BigQuery.

Проверим, а наш датафрейм загрузился в BigQuery:

Прелесть использования нативного SDK смену) pandas_gbq в том, что можно управлять сущностями в BigQuery, (пред)положим, создавать датасеты, редактировать таблицы (схемы, описания), пописывать новые view и т. д. В общем, если pandas_gbq — это шевелись про чтение и запись dataframe, то нативное SDK позволяет регулировать всей внутренней кухней

Ниже привожу простой экземпляр, как можно изменить описание таблицы:

Также с через нативного Python-SDK можно вывести все поля с схемы таблицы, отобразить количество строк в таблице

Иначе) будет то таблица уже создана, то в результате новой передачи датафрейма в существующую таблицу будут добавлены строки

Охват

Вот так с помощью несложных скриптов можно вручать и получать данные из Google BigQuery, а также быть во главе различными сущностями (датасетами, таблицами) внутри BigQuery.

Успехов!

Куролесник

Источник: www.seonews.ru