Перекрестные проверки между источниками
DQ позволяет создавать проверки с произвольной бизнес-логикой, в которых построчно сравниваются данные из разных БД или разных инстансов БД.
Данный функционал базируется на интеграции с инструментом Trino
Пример проверки:
Имеем 2 таблицы: clients_db.client_orders в ClickHouse и stats_db.client_stats в Greenplum.
Колонка client_id есть в обоих таблицах
Задача: нужно найти кол-во client_id, которые есть в client_orders, но отсутствуют в client_stats.
Для реализации такой проверки нужно выполнить join таблиц в разных источниках.
Пререквизиты
- У вас должен быть установлен Trino.
Доступные варианты установки, самый простой из которых - просто запуск в docker - есть в документации к Trino https://trino.io/download
Настройка и отладка запросов в Trino
1. Добавить источники в Trino
Предварительно нужно убедиться, что требуемые источники данных подключены в качестве каталогов к системе Trino.
2. Отладить запрос для метрики в Trino
Запрос для проверки можно попробовать выполнить под своей учетной записью через сам Trino.
Для подключения к Trino можно воспользоваться стандартными JDBC клиентами, например DBeaver.
Драйвер для подключения можно скачать с сайта trino - https://trino.io/docs/current/client/jdbc.html
3. Подобрать учетку для выполнения запросов на источниках через Trino
Для последующей настройки проверок в DQ NEO, необходимо создать учетную запись, которая будет иметь доступ ко всем БД из ваших проверок.
Credentials от учетной записи нужно сохранить в Vault стандартным способом
Создание проверки в DQ Neo
Пример:
dq_checks.yaml
sources:
- name: test_trino_source
type: trino
parameters:
extra_params:
timezone: Europe/Moscow
credentials:
type: vault
path: platform/dq/trino_path
user: product_user_2
port: 8443
host: trino
owners:
- product_user_2
- mylogin
check_objects:
- name: test_trino_object
table: test_trino_table
source: test_trino_source
metrics:
- name: test_trino_multisource_count
type: custom_sql
check_object: test_trino_object
parameters:
sql: |+
select count(*) from ch_cat.clients_db.client_orders co
left join gp_cat.stats_db.client_stats cs on co.client_id = cs.client_id
where cs.client_id is null
compares:
...
1) В данный момент поддерживается только тип метрики custom_sql
2) Атрибуты check_object несут чисто описательный характер. Т.е. вы можете вписать любые значения.
Но в метрике можно использовать плэйсхолдеры {database}, {schema}, {table} из check_object.
3) ch_cat и gp_cat в metric.sql - это названия соответствующих каталогов в Trino
⚠️ Важно:
Для выполнения кросс запросов к нескольким источникам из метрик (Federated Query) необходимо, чтобы учетка из Source существовала во всех системах источниках.
В данном примере УЗ product_user_2 должна существовать в обоих базах (ClickHouse и Greenplum) и обладать нужными правами на select.
Примечание
Запрос с join к нескольким источникам (Federated Query) происходит на стороне системы Trino.
Такой запрос может создать более высокую нагрузку на источник, чем запросы из стандартных DQ метрик.
Ресурсоемкость запроса зависит от множества факторов (типа СУБД, наличия фильтров в запросе, и т.д.).
Trino поддерживает EXPLAIN для запросов.
Поэтому перед созданием проверок и постановкой их на регулярный запуск мы рекомендуем отладить запрос через Trino и убедиться, что они не создают избыточную нагрузку на ваши источники.