Skip to content

Базовые проверки в Postgres

---
sources:
- name: dq-course-main-db                # придумайте имя для своего источника. Имена всех сущностей должны быть уникальными.
  type: postgres                         # тип нашего источника
  parameters:
    host: 127.0.0.1                   # хост (ip адрес или доменное имя)
    port: 5432                           # порт
    database: dq_course                  # имя базы
    credentials:
      type: vault                        # тип хранилища секретов
      path: platform/dq/demo/ocean_demo  # путь в Vault, где лежат credentials подключения к источнику
      user: dq_course_user               # наш логин к базе (должен совпадать с полем key в Vault)
  owners:                               # Владельцы источника, которые могут редактировать и запускать проверки на этой БД, более подробно читай в описании Ролевой модели
   - user1                             #   владельцем может быть как ваша собственная УЗ
   - tech_user_2                       #   так и технический пользователь
   - ad_group_name                     #   или AD группа

check_objects:
  - name: datagov_products.public.dq_course.dq-course-main-db  # имя таблицы, старайтесь придерживаться naming convention <Table name>.<DB name>.<Source name>
    source: dq-course-main-db # имя из блока Source
    database: dq_course       # база
    schema: public            # схема
    table: datagov_products   # таблица


metrics:
  - name: total_records_count.datagov_products.public.dq_course.dq-course-main-db  # имя согласно конвенции <Metric_name>.<Check_object>
    type: row_count              # тип метрики
    check_object: datagov_products.public.dq_course.dq-course-main-db  # имя объекта проверки из предыдущего блока
    parameters:
      column: "*"                # столбец, по которому считаем
      date_column_name: Date     # столбец с бизнес датой, по которой фильтруем

  - name: product_name_distinct.datagov_products.public.dq_course.dq-course-main-db
    type: row_count_distinct
    check_object: datagov_products.public.dq_course.dq-course-main-db
    parameters:
      column: "product_name"
      date_column_name: Date

  - name: product_name_nulls.datagov_products.public.dq_course.dq-course-main-db
    type: row_count_null
    check_object: datagov_products.public.dq_course.dq-course-main-db
    parameters:
      column: "product_name"
      date_column_name: Date

compares:
  - name: Timeliness.datagov_products.public.dq_course.dq-course-main-db  # имя проверки <Compare_name>.<Check_object>
    type: compare_with_static_values   # тип проверки
    metric: total_records_count.datagov_products.public.dq_course.dq-course-main-db # имя метрики из блока metrics
    parameters:
      min_value: 1      # есть хотя бы 1 запись за бизнес-дату
      max_value: inf    # можно использовать значения inf и -inf, чтобы поставить порог в +/- Бесконечность
    description: 'Актуальность: проверка на наличие новых данных'  # Добавляем краткое описание нашей проверки

  - name: Uniqueness.datagov_products.public.dq_course.dq-course-main-db
    type: absolute_ratio
    metric: total_records_count.datagov_products.public.dq_course.dq-course-main-db
    parameters:
      reference_metric: product_name_distinct.datagov_products.public.dq_course.dq-course-main-db  # имя второй метрики из блока метрики, с которой будем сравнивать
      min_value: 1
      max_value: 1
    description: 'Уникальность: отсутствие дублей в колонке product_name'

  - name: Completeness_product_name.datagov_products.public.dq_course.dq-course-main-db
    type: percent_delta
    metric: product_name_nulls.datagov_products.public.dq_course.dq-course-main-db
    parameters:
      reference_metric: total_records_count.datagov_products.public.dq_course.dq-course-main-db
      min_value: 0
      max_value: 0      # ожидаем, что в поле нет NULL значений
    description: 'Полнота: заполненность product_name'


groups:                                                        # группа для запуска проверок (обычно одна проверка это редкость)
  - name: datagov_products.public.dq_course.dq-course-main-db  # имя группы <Group_name>.<Check_object>
    compares: # перечисляем наши проверки
      - Timeliness.datagov_products.public.dq_course.dq-course-main-db
      - Uniqueness.datagov_products.public.dq_course.dq-course-main-db
      - Completeness_product_name.datagov_products.public.dq_course.dq-course-main-db
    run:
      schedule: '0 1 * * *'  # расписание запуска, ежедневно в 01:00
      days_data_lag: 1       # метрики будут вычисляться за предыдущую дату (по полю Date)


alerts:
  - name: datagov_products.dq-course-main-db
    annotations:
      summary: 'Не прошли проверки по {check_object} за {compare_date}' # Описание сообщения в алерте с плейсхолдерами в фигурных скобках
    channels:            # каналы отправки алерта
      - smtp             # на email
    emails:
      - user@gmail.com    # адреса получателей
    groups:
      - datagov_products.public.dq_course.dq-course-main-db
    fields:              # список полей, которые будут показаны в письме с алертом
      - description
      - status
      - value
      - min_value
      - max_value
    statuses: [-1, -2]   # статусы срабатывания "-1" — проверка прошла не успешно (выявилось несоответствие пороговым значениям из правила проверки). "-2" — возникла ошибка при вычислении метрики.