Привет, Хабр!

Совсем недавно у нас вышла подробная книга о работе с хранилищем данных Google BigQuery. Сегодня мы решили вновь кратко затронуть эту тему и опубликовать небольшой кейс о выполнении запросов к данным BigQuery на Python и R.

Сообщите в комментариях, интересует ли публикация на тему машинного обучения с применением BigQuery



Обзор


В этой статье мы рассмотрим, как загружать данные Google BigQuery при помощи Python и R, а потом поговорим о запросах к данным, позволяющим делать полезные выводы. Мы воспользуемся библиотекой Google Cloud BigQuery для подключения к BigQuery Python и библиотекой bigrquery, чтобы добиться того же на языке R.

Также обсудим два этапа операций с данными BigQuery при помощи Python/R:

  • Подключение к Google BigQuery и доступ к данным
  • Запрашивание данных при помощи Python/R

В этой статье предполагается, что все ваши пользовательские данные сохранены в Google BigQuery.

Python


Python – один из самых популярных универсальных языков для обращения с данными. Он пользуется вниманием и востребованностью благодаря гибкости и легкости в обращении, а в data science может похвастаться самыми разнообразными библиотеками и инструментами для взаимодействия со сторонними системами.

Подключение к Google BigQuery при помощи Python


Чтобы запрашивать данные Google BigQuery при помощи Python, необходимо подключить клиент Python к инстансу BigQuery. При этом используется облачная клиентская библиотека для Google BigQuery API. Также существуют и альтернативные решения для подключения к BigQuery при помощи Python; например, отлично подойдет библиотека BigQuery-Python от tylertreat.

Мы будем работать с библиотекой Google Cloud BigQuery, так как она стабильна и официально поддерживается Google.

Здесь предполагается, что у вас уже настроена среда разработки для Python.
Чтобы установить библиотеку, запустите в командной строке следующую команду:

pip install --upgrade google-cloud-bigquery

Далее подключаем клиент к базе данных. Для этого потребуется скачать файл JSON, содержащий учетные данные к сервису BigQuery. Если у вас нет такого аккаунта, здесь описано, как его создать. Далее скачайте этот файл JSON на вашу локальную машину.

Теперь, когда у нас все настроено, переходим к инициализации соединения. Для этого используется следующий код Python:

rom google.cloud import bigquery
	from google.oauth2 import service_account
	credentials = service_account.Credentials.from_service_account_file(
	'path/to/file.json')
	

	project_id = 'my-bq'
	client = bigquery.Client(credentials= credentials,project=project_id)

В вышеприведенном фрагменте вам потребуется указать project_id и местоположение JSON-файла с ключом, заменив 'path/to/file.json' на фактически верный путь к сохраненному на локальной машине файлу JSON.

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

Выполнение запросов к данным BigQuery при помощи Python


Теперь, когда наш клиент BigQuery настроен и готов к использованию, можно выполнять запросы к множеству данных BigQuery.

Для этого используется метод запроса, помещающий задание запроса в очередь BigQuery. Затем запросы выполняются асинхронно — это означает, что мы не указываем никаких задержек, а клиент дожидается, пока задание будет выполнено. Как только это произойдет, метод возвращает экземпляр Query_Job, содержащий результаты.

Подробнее о том, как работает этот метод, рассказано в официальной документации здесь.

Вот как выглядит интересующий нас код Python:

query_job = client.query("""
	   SELECT *
	   FROM dataset.my_table
	   LIMIT 1000 """)
	

	results = query_job.result() # Дожидаемся завершения задания.

Обратите внимание: в вышеприведенном запросе по умолчанию используется стандартный синтаксис SQL. Если вы желаете пользоваться унаследованным SQL, то код будет таким:

job_config.use_legacy_sql = True
	query_job = client.query("""
	   SELECT *
	   FROM dataset.my_table
	   LIMIT 1000""", job_config = job_config)
	

	results = query_job.result() # Дожидаемся завершения задания.

R


Язык R – популярная альтернатива Python, активно применяется в data science. Если вас интересует детальный и методичный статистический анализ данных, то мало найдется языков, способных потягаться в этом с R.

При работе с Google BigQuery язык R также предлагает надежную и удобную в использовании библиотеку для запрашивания данных и для операций с ними. Здесь мы будем работать с библиотекой bigrquery, которую создал и поддерживает Хадли Уикем, директор по исследовательской работе из RStudio.

Здесь предполагается, что вы уже настроили среду для разработки в R. Если нет – воспользуйтесь этим руководством для настройки RStudio.

Подключение к Google BigQuery при помощи R


Для установки bigrquery запускаем следующую команду из консоли R:

install.packages(“bigrquery”)

Вот так просто! Мы готовы к работе.

Как и в случае с Python, требуется авторизация нашего клиента R для доступа к Google Cloud Services. Как следует из документации по bigrquery, проследуем по приглашению из консоли R, чтобы открыть URL для авторизации, после чего скопируем код в консоль.

Обратите внимание: такую авторизацию необходимо выполнить всего один раз. Все последующие запросы будут автоматически обновлять учетные данные для доступа.

Выполнение запросов к данным BigQuery при помощи R


Чтобы запрашивать данные BigQuery на языке R, выполним следующие шаги:

  • Укажем ID проекта из консоли Google Cloud, так, как это делалось в Python.
  • Сформируем строку запроса, при помощи которой запросим данные.
  • Вызовем query_exec с ID нашего проекта и строкой запроса.

Вот код, при помощи которого все это реализуется:

# импортируем библиотеку
	library(bigrquery)
	

	# здесь идет ID нашего проекта
	project_id <- "your-project-id" 
	

	# пример запроса
	sql_string <- "SELECT * FROM dataset.my_table LIMIT 1000"
	

	# выполняем запрос и сохраняем результат
	query_results <- query_exec(sql_string, project = project_id, useLegacySql = FALSE)

Как и в случае с Python, можно выполнять запросы, написанные на унаследованном SQL. Также можно изменить значение useLegacySql на TRUE в вашей функции query_exec.

Заключение


Итак, мы рассмотрели, как легко и просто работать с данными, сохраненными в Google BigQuery, обращаясь к ним на языках Python и R.

На двух этих языках не составляет труда построить статистическую модель на основе данных, обработанных таким образом, а саму модель задействовать в различных целях: понимать, как ведет себя пользователь в приложении, прогнозировать коэффициент оттока (churn rate), т.д.