Мы постоянно работаем с 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. Если таблица уже существует в выбранном датасете, то она будет перезаписана.
Название: например, ftp-bq-integration или любое другое подходящее название;
Выделенный объем памяти: 2 ГБ или меньше, в зависимости от размера обрабатываемого файла;
Триггер: HTTP;
Исходный код: Встроенный редактор;
Среда выполнения: Python 3.X.
Этот модуль предназначен для передачи файлов с FTP (FTPS, SFTP) — серверов в Google BigQuery с помощью Google Cloud функции. Решение позволяет автоматически выполнять загрузку данных в Google BigQuery из файла, который регулярно обновляется на FTP-сервере.
Файл, который нужно получить с соответствующего сервера, может иметь любое подходящее расширение (.json, .txt, .csv), но должен быть в одном из следующих форматов: JSON (newline-delimited) или Comma-separated values (CSV).
Модуль для передачи файлов с HTTPS-серверов в Google BigQuery.
Модуль для автоматизации передачи данных из Intercom в Google BigQuery с помощью Google Cloud функции. В настоящее время модуль позволяет импортировать из Intercom такие сущности, как: users, companies, contacts, admins, conversations, teams, tags, segments. При этом модуль не поддерживает custom attributes.
Используется для передачи файлов с MySQL-серверов в Google BigQuery с помощью Google Cloud функции. Это решение позволяет автоматически выполнять загрузку данных в Google BigQuery из таблиц, которые регулярно обновляются на MySQL-сервере.
Более подробную документацию для каждого модуля можно найти в файлах readme в каждом из разделов.
Это только начало, и сейчас мы работаем над скриптами для Bitrix и amoCRM, потому что видим, что они самые востребованные среди наших клиентов. Поделитесь, какие способы вы используете для объединения данных и каких интеграций вам не хватает для этого.
В этой подборке у нас 6 python-скриптов для автоматизации импорта данных в Google BigQuery с помощью Google Cloud функции: FTP; FTPS; HTTP(s); Intercom; MySQL и SFTP. Принцип работы один: с помощью HTTP POST запроса вызывается Cloud-функция, которая получает данные из источника и загружает их в таблицу Google BigQuery. Если таблица уже существует в выбранном датасете, то она будет перезаписана.
Основные требования
- Проект в Google Cloud Platform с активированным биллингом.
- Доступ на редактирование (роль «Редактор» данных BigQuery) и выполнение заданий (роль Пользователь заданий BigQuery) для сервисного аккаунта Cloud-функции в проекте BigQuery, куда будет загружена таблица;
- 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, потому что видим, что они самые востребованные среди наших клиентов. Поделитесь, какие способы вы используете для объединения данных и каких интеграций вам не хватает для этого.
