Как прочитать данные
Общий принцип
История данных (за исключением удаленных) проекта доступна для чтения с помощью интеграции Данные для аналитики.
Данные хранятся в delta-формате в parquet-файлах. Обновление данных происходит к 03:00 UTC ежедневно. Получение доступа к данным происходит по протоколу delta-sharing — это open-source протокол для обмена большим объемом данных, с его документацией можно ознакомиться здесь. Можно воспользоваться REST API или готовыми библиотеками для python.
Для доступа к данным нужны секретный ключ и URL сервиса созданной интеграции «Данные для аналитики».
Ниже подробнее описаны методы получения данных по REST API и методы python из библиотеки delta-sharing.
Особенности и ограничения интеграции
- Можно создать не более одной интеграции;
- Данные для аналитики обновляются раз в сутки к 03:00 UTC;
- Можно запросить не более 10 версий данных за один запрос. Передача параметров startingVersion и endingVersion обязательна;
- Данные из автоудаления попадают в аналитику, удаленные вручную данные будут помечены флагом
__isDeleted = TRUE_; - Точность данных для аналитики составляет 99%. Это означает, что не менее 99% данных, которые есть на проекте, доступны для экспорта.
Структура таблиц может меняться
В таблицы могут добавляться новые поля, а также новые таблицы и схемы. Учитывайте это при настройке загрузки данных.
Зашифрованные данные
В некоторых таблицах данные шифруются. Для расшифровки потребуется Ключ шифрования
Ключ шифрования: можно посмотреть в административной панели Mindbox в настройках интеграции
Пример скрипта на Python для расшифровки нужных колонок
Code
REST API
Общая информация
- share — логическая группировка схем, по сути — БД. На данный момент существует одна - “exports”;
- schema — логическая группа таблиц. На данный момент существуют следующие группы: CDP, ProcessingOrders, Mailings, AbTests
- table — Delta Lake таблица или представление.
Метод для получения доступных БД
Метод
GET {URL сервиса}/shares
Заголовки
- Authorization: Bearer {token}
QueryString параметры
- maxResults (type: Int32, optional): Максимальное количество БД, которые будут возвращены в ответе. Если существует больше БД, чем указано в maxResults, то в ответе будет получен параметр nextPageToken - токен следующей страницы
- pageToken (type: String, optional): Передайте в параметре токен страницы
Пример ответа
Заголовки
- Content-Type: application/json; charset=utf-8
Тело
Code
items - массив доступных БД. Может быть пустым
nextPageToken - токен следующей страницы
Метод для получения доступных схем
Метод
GET {URL сервиса}/shares/{share}/schemas
Заголовки
- Authorization: Bearer {token}
Параметры запроса
- {share} - название БД
QueryString параметры
- maxResults (type: Int32, optional): Максимальное количество схем, которые будут возвращены в ответе. Если существует больше схем, чем указано в maxResults, то в ответе будет получен параметр nextPageToken - токен следующей страницы
- pageToken (type: String, optional): Передайте в параметре токен страницы
Пример ответа
Заголовки
- Content-Type: application/json; charset=utf-8
Тело
Code
items - массив доступных схем. Может быть пустым
name - имя схемы
share - имя БД, которой принадлежит схема
nextPageToken - токен следующей страницы
Метод для получения таблиц в схеме
Метод
GET {URL сервиса}/shares/{share}/schemas/{schema}/tables
Заголовки
- Authorization: Bearer {token}
Параметры запроса
- {share} - название БД
- {schema} - название схемы
QueryString параметры
- maxResults (type: Int32, optional): Максимальное количество схем, которые будут возвращены в ответе. Если существует больше схем, чем указано в maxResults, то в ответе будет получен параметр nextPageToken - ссылка на следующую страницу
- pageToken (type: String, optional): Передайте в параметре токен страницы
Пример ответа
Заголовки
- Content-Type: application/json; charset=utf-8
Тело
Code
items - массив доступных схем. Может быть пустым
name - имя таблицы
schema - имя схемы, которой принадлежит таблица
share - имя БД, которой принадлежит схема
id - идентификатор таблицы
nextPageToken - токен следующей страницы
Метод для получения таблиц в БД
Метод
GET {URL сервиса}/shares/{share}/all-tables
Заголовки
- Authorization: Bearer {token}
Параметры запроса
- {share} - название БД
QueryString параметры
- maxResults (type: Int32, optional): Максимальное количество схем, которые будут возвращены в ответе. Если существует больше схем, чем указано в maxResults, то в ответе будет получен параметр nextPageToken - ссылка на следующую страницу
- pageToken (type: String, optional): Передайте в параметре токен страницы
Пример ответа
Заголовки
- Content-Type: application/json; charset=utf-8
Тело
Code
items - массив доступных схем. Может быть пустым
name - имя таблицы
schema - имя схемы, которой принадлежит таблица
share - имя БД, которой принадлежит схема
id - идентификатор таблицы
nextPageToken - токен следующей страницы
Метод для получения файлов в таблице
Метод
GET {URL сервиса}/shares/{share}/schemas/{schema}/tables/{table}/changes
Заголовки
- Authorization: Bearer {token}
Параметры запроса
- {share} - название БД
- {schema} - название схемы
- {table} - название таблицы
QueryString параметры
- startingVersion (type: Long): стартовая версия, с которой нужно получить данные. Обязательный параметр
- endingVersion (type: Long): финальная версия, по которую нужно получить данные. Обязательный параметр
Пример ответа
Заголовки
- Content-Type: application/json; charset=utf-8
Тело
Code
Первый JSON объект в ответе содержит информацию о протоколе.
Второй JSON объект в ответе содержит информацию о метаданных таблицы:
schemaString- схема таблицыversion- максимальная версия данных в таблице. При этом таблица обновляется каждый день, то есть версия таблицы увеличивается на один. Если за какой-то день не было событий, то данных в версии не будет.
Третий JSON объект в ответе содержит:
url- подписанная ссылка на файл формата parquet с данными (подпись живет 10 минут)size- размер файла (в байтах)version- версию данных в файлеtimestamp- время подписи файлаexpirationTimestamp- время истечения подписи
Python коннектор
Подробнее со спецификацией методов можно ознакомиться здесь.
Не поддерживается чтение всей таблицы сразу
Так как таблицы могут быть большого размера, то не поддерживаются методы для чтения всей таблицы: load_as_pandas и load_as_spark
Коннектор получает доступ к данным с помощью файла профиля Profile.json с учетными данными для подключению к сервису.
Как выглядит файл Profile.json
С помощью этого файла аутентифицируемся в delta-sharing сервисе. Формат файла:
Code
URL сервиса: можно посмотреть URL в административной панели Mindbox в настройках интеграции
Секретный ключ: можно посмотреть или сбросить секретный ключ в административной панели Mindbox в настройках интеграции
shareCredentialsVersion: сейчас используется 1 версия. Если будет изменен формат файла с учетными данными, то будет возвращена соответствующая ошибка.
Чтение данных
Чтобы получить список доступных таблиц с данными можно использовать следующий код:
Code
Получение доступа к данным осуществляется с помощью создания REST клиента, который получает доступ к изменениям таблицы:
Code
Переменная res содержит массив actions, который содержит ссылки на parquet файлы с изменениями таблицы. Далее можно работать с этими файлами, прочитав их в датафрейм.
Чтение данных с помощью spark
Также прочесть данные можно с помощью spark
Не поддерживается чтение всей таблицы сразу
Обратите внимание, что для чтения используется опция readChangeFeed - чтение изменений в таблице
Code
Полный пример кода для чтения данных и сохранения их в dwh смотрите здесь.