Меню Закрыть

Как развернуть Airbyte и подключить к нему Facebook API?

В этой статье мы покажем, как развернуть open-source сервис Airbyte на вашем компьютере и с его помощью подключиться к Facebook Marketing API.

Что такое Airbyte?

Airbyte — это платформа интеграции данных с открытым исходным кодом для создания ELT пайплайнов, которая помогает вам реплицировать данные в ваших хранилищах, озерах и базах данных. Кроме того, она имеет удобный интерфейс, который очень красиво оформлен (вы только посмотрите на эту осьминожку)!

Разворачиваем Airbyte

Установка Airbyte на машину выполняется достаточно просто. В этом можно убедиться, заглянув в официальную документацию. Для этого выполнить несколько шагов:

  1. Установить Docker (см. Инструкции) и убедиться, что у вас стоит последняя версия docker-compose.
  2. Выполнить следующие команды в терминале:
  • git clone
  • cd airbyte
  • docker-compose up
    Как только в выводе терминала появится баннер Airbyte, UI станет доступен по адресу http://localhost:8000.

Подключаем Facebook

С полной документацией по работе с Facebook Marketing из Airbyte можно ознакомиться по ссылке. Мы же дадим выжимку из нее. Итак, для того, чтобы подключить Facebook в Airbyte, надо учесть следующие условия:

  • Наличие Facebook Ad Account ID (где его найти?)
  • Наличие Facebook App с включенным Marketing API (подробнее)
  • Наличие Facebook Marketing API Access Token (подробнее)
  • Ограничения на увеличение скорости: Facebook сильно ограничивает токены API, сгенерированные из приложений Facebook с уровнем «Стандартный доступ» (по умолчанию для новых приложений именно такой уровень доступа), что делает невозможным использование токена для синхронизации с Airbyte. Вам нужно будет запросить обновление до расширенного доступа для вашего приложения со следующими разрешениями (подробнее):
    • Ads Management Standard Access
    • ads_read
    • Ads_management
      Перед этим вам нужно будет пройти бизнес-процесс проверки (подробнее).

После этого можно подключить Facebook в Airbyte.

  1. Заходим в UI на вкладку Sources и нажимаем ‘+ new source’
  2. Выбираем в качестве источника Facebook Marketing и прописываем конфигурации подключения:
    • Название источника, под которым он будет отображаться в Airbyte
    • Facebook Ad Account ID
    • Дата начала — с этого момента будут грузиться данные из Facebook (⚠️WARNING: Insight tables are only able to pull data from 37 months)
    • Дата окончания — до этого момента будут грузиться данные из Facebook (можно оставить пустым, чтобы получать последние данные из аккаунта)
    • Facebook Marketing API Access Token
  3. Также имеются несколько дополнительных конфигурационных опций:
    • Включение удаленных данных Campaigns, Ads и AdSets
    • Сохранение миниатюр изображений
    • Настройка кастомных Insignts
  4. После заполнения полей нажимаем ‘Set up source’ и ждем, пока процесс подключения не завершится
  5. При необходимости настройки подключения к источнику можно поменять на его вкладке ‘Settings’

Может возникнуть ошибка в связи с тем, что версия фреймворка устарела. Тогда надо будет перейти в основную вкладку ‘Settings’ (шестеренка в левом нижнем углу), там выбрать ‘Sources’, в списке найти Facebook Marketing и нажать кнопку ‘Change’ (или нажать ‘Upgrade all’, чтобы загрузить все доступные обновления).

Подключаем хранилище данных

После того, как мы подключили Facebook Marketing, нам необходимо связать этот источник с нашим хранилищем данных.

  1. Нажимаем ‘add destination’ на вкладке с настроенным источником (см. предыдущий скриншот) либо идем на вкладку ‘Destinations’ и там нажимаем ‘+ new destination’.
  2. Далее выбираем тип хранилища, с которым будем работать. Airbyte может подключаться к большому количеству популярных СУБД. Опишем необходимые шаги конфигурации на примере работы с PostgreSQL. Заполняем следующие поля:
    • Название хранилища, под которым оно будет отображаться в Airbyte
    • Хост
    • Порт
    • База данных
    • Схема
    • Пользователь
    • Пароль
    • Нужно ли использовать SSL
    • Параметры SSH туннеля (опционально)

  1. После заполнения полей нажимаем ‘Set up destination’ и ждем, пока процесс подключения не завершится
  2. Если вы выполняли подключение к хранилищу отдельно с вкладки ‘Destinations’, то надо связать с ним источник, нажав на ‘add source’
  3. При необходимости настройки подключения к хранилищу можно поменять на его вкладке ‘Settings’
  4. Версию образа для работы с хранилищем можно обновить при необходимости (по аналогии с тем, что мы писали в конце предыдущего раздела)

Настраиваем связь источника и  хранилища данных

После всех проделанных шагов у нас открывается вкладка ‘Set up connection’, на которой мы можем настроить то, как и какие данные мы будем грузить с помощью Airbyte:

  • Как часто будет происходить загрузка
  • Куда именно мы будем помещать данные в хранилище
  • Какие данные из источника мы будем брать и каким образом (Full refresh | Increment, Overwrite | Append)
  • Надо ли нормализовывать данные (сырые данные все равно останутся в хранилище)
  • Настройка кастомных трансформаций (опционально)


После заполнения полей, нажимаем ‘Set up connection’. Далее откроется страница настроенного подключения, где мы можем наблюдать историю выгрузок данных, а также вносить изменения в установленную связь Источник-Хранилище.

Если нажать на Sync, то будут показаны логи исполнения.

Результаты

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

Сразу можно обратить внимание на количество сгенерированных таблиц.

Так как мы указали, что нам необходима нормализация данных, то у нас в результате получилось чуть меньше 400 таблиц для streams [activities, ‘ad_account’, ‘ad_creatives’, ‘ad_sets’, ‘ads’, ‘ads_insights’, ‘campaigns’], причем многие из них оказались пустыми (так сгенерировал Airbyte).

Сырые данные содержатся в таблицах с именами ‘_airbyte_raw_*’. В таких таблицах имеется всего 3 поля — ‘_airbyte_ab_id’, ‘_airbyte_data’ и ‘_airbyte_emmited_at’. Столбец ‘_airbyte_data’ имеет тип jsonb.
Пример для ‘_airbyte_raw_ads_insights’:

В процессе нормализации каждое поле из json выносится в отдельную колонку. Пример: часть списка колонок из таблицы ‘ads_insignts’:

После получения основной нормализованной таблицы для каждого stream создаются различные breakdowns, например, для тех же ‘ads_insights’:

Читать дальше