Новости

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

Автор Дата 05.01.2019

Лёня Макаров
Product analyst CoMagic

Автор Telegram-канала Datalytics

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