Skip to content

Перекрестные проверки между источниками

DQ позволяет создавать проверки с произвольной бизнес-логикой, в которых построчно сравниваются данные из разных БД или разных инстансов БД.

Данный функционал базируется на интеграции с инструментом Trino

Пример проверки:

Имеем 2 таблицы: clients_db.client_orders в ClickHouse и stats_db.client_stats в Greenplum.

Колонка client_id есть в обоих таблицах 

Задача: нужно найти кол-во client_id, которые есть в client_orders, но отсутствуют в client_stats.

Для реализации такой проверки нужно выполнить join таблиц в разных источниках.

Пререквизиты

  1. У вас должен быть установлен 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 и убедиться, что они не создают избыточную нагрузку на ваши источники.