Автоматизация импорта данных в Google BigQuery с помощью Google Cloud Functions

от автора

Мы постоянно работаем с Google BigQuery – импортируем данные о пользователях, их заказах и расходах на рекламу из разных источников, чтобы иметь возможность объединять их между собой. Что нам это дает? Например, если у вас интернет-магазин и клиент делает заказ по телефону, а потом авторизовывается на сайте, то с помощью Google BigQuery можно связать все его действия задним числом. Можно отслеживать весь путь клиента по маркетинговой воронке – от первого попадания на сайт до покупки в brick and mortar магазине, и оценивать рекламные кампании с учетом таких офлайн-продаж.

В этой подборке у нас 6 python-скриптов для автоматизации импорта данных в Google BigQuery с помощью Google Cloud функции: FTP; FTPS; HTTP(s); Intercom; MySQL и SFTP. Принцип работы один: с помощью HTTP POST запроса вызывается Cloud-функция, которая получает данные из источника и загружает их в таблицу Google BigQuery. Если таблица уже существует в выбранном датасете, то она будет перезаписана.

Основные требования

  1. Проект в Google Cloud Platform с активированным биллингом.
  2. Доступ на редактирование (роль «Редактор» данных BigQuery) и выполнение заданий (роль Пользователь заданий BigQuery) для сервисного аккаунта Cloud-функции в проекте BigQuery, куда будет загружена таблица;
  3. HTTP-клиент для выполнения POST запросов, вызывающих Cloud-функцию.

Этапы настройки

  • Перейдите в Google Cloud Platform Console и авторизуйтесь с помощью Google аккаунта, или зарегистрируйтесь, если аккаунта еще нет.
  • Перейдите в проект с активированным биллингом или создайте новый биллинг-аккаунт для проекта.
  • Перейдите в раздел Cloud Functions и нажмите «Создать функцию». Обратите внимание, что за использование Cloud-функций взимается плата.
  • Заполните следующие поля:

Название: например, ftp-bq-integration или любое другое подходящее название;

Выделенный объем памяти: 2 ГБ или меньше, в зависимости от размера обрабатываемого файла;

Триггер: HTTP;

Исходный код: Встроенный редактор;

Среда выполнения: Python 3.X.

  • Скопируйте содержимое файла main.py в встроенный редактор, вкладка main.py.
  • Скопируйте содержимое файла requirements.txt в встроенный редактор, вкладка requirements.txt.
  • В качестве вызываемой функции укажите ftp/ftps/https и так далее, в зависимости от модуля, который вы используете.
  • В дополнительных параметрах увеличьте время ожидания с 60 сек. до 540 сек. или меньшее, в зависимости от размеров обрабатываемого файла.
  • Завершите создание Cloud-функции, нажав на кнопку «Создать».

FTP / FTPS / SFTP

Этот модуль предназначен для передачи файлов с FTP (FTPS, SFTP) — серверов в Google BigQuery с помощью Google Cloud функции. Решение позволяет автоматически выполнять загрузку данных в Google BigQuery из файла, который регулярно обновляется на FTP-сервере.

Файл, который нужно получить с соответствующего сервера, может иметь любое подходящее расширение (.json, .txt, .csv), но должен быть в одном из следующих форматов: JSON (newline-delimited) или Comma-separated values (CSV).

Пример использования

from urllib import urlencode from httplib2 import Http  trigger_url = "https://REGION-PROJECT_ID.cloudfunctions.net/ftp/" headers = { "Content-Type": "application/json" } payload = {                "ftp":                          {                           "user": "ftp.user_name",                           "psswd": "ftp.password",                           "path_to_file": "ftp://server_host/path/to/file/"                         },                "bq":                          {                           "project_id": "my_bq_project",                           "dataset_id": "my_bq_dataset",                           "table_id": "my_bq_table",                           "delimiter": ",",                           "source_format": "NEWLINE_DELIMITED_JSON",                           "location": "US"                         }             } Http().request(trigger_url, "POST", urlencode(payload), headers = headers)

HTTP(s)

Модуль для передачи файлов с HTTPS-серверов в Google BigQuery.

Пример использования

from urllib import urlencode from httplib2 import Http  trigger_url = "https://REGION-PROJECT_ID.cloudfunctions.net/https/" headers = { "Content-Type": "application/json" } payload = {                 "https":                          {                             "path_to_file": "https://server_host/path/to/file/",                             "user": "https.user_name",                             "psswd": "https.password"                         },                 "bq":                         {                             "project_id": "my_bq_project",                             "dataset_id": "my_bq_dataset",                             "table_id": "my_bq_table",                             "delimiter": ",",                             "source_format": "CSV",                             "location": "US"                         }             }  Http().request(trigger_url, "POST", urlencode(payload), headers = headers)

Intercom

Модуль для автоматизации передачи данных из Intercom в Google BigQuery с помощью Google Cloud функции. В настоящее время модуль позволяет импортировать из Intercom такие сущности, как: users, companies, contacts, admins, conversations, teams, tags, segments. При этом модуль не поддерживает custom attributes.

Пример использования

from urllib import urlencode from httplib2 import Http  trigger_url = "https://REGION-PROJECT_ID.cloudfunctions.net/intercom/" headers = { "Content-Type": "application/json" } payload = {           "intercom": {             "accessToken": "INTERCOM ACCESS TOKEN",             "entities": [                     "users",                      "companies",                      "contacts",                      "admins",                     "conversations",                     "teams",                     "tags",                     "segments"                     ]                 },             "bq": {                 "project_id": "YOUR GCP PROJECT",                 "dataset_id": "YOUR DATASET NAME",                 "location": "US"              } } Http().request(trigger_url, "POST", urlencode(payload), headers = headers)

MySQL

Используется для передачи файлов с MySQL-серверов в Google BigQuery с помощью Google Cloud функции. Это решение позволяет автоматически выполнять загрузку данных в Google BigQuery из таблиц, которые регулярно обновляются на MySQL-сервере.

Пример использования

from urllib import urlencode from httplib2 import Http  trigger_url = "https://REGION-PROJECT_ID.cloudfunctions.net/mysql/" headers = { "Content-Type": "application/json" } payload = {             "mysql":                      {                         "user": "mysql.user",                         "psswd": "mysql.password",                         "host": "host_name",                         "port”: 3306,                         "database": "database_name",                         "table_id": "table_name",                         "query": "SELECT * FROM table_name"                     },             "bq":                      {                         "project_id": "my_bq_projec",                         "dataset_id": "my_bq_dataset",                         "table_id": "my_bq_table"                     } }  Http().request(trigger_url, "POST", urlencode(payload), headers = headers)

Более подробную документацию для каждого модуля можно найти в файлах readme в каждом из разделов.

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


ссылка на оригинал статьи https://habr.com/post/426647/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *