1 of 42

Начальные шаги организации DQ в modern data stack

2 of 42

TALKING POINTS

  • Начало проекта
  • Первые шаги
  • Возникшие проблемы и как их разрешали
  • Дальнейшие направления

3 of 42

О NabuMinds

Предоставляем data и CRM решения в области iGaming и e-Commerce

Около 50 человек в компании

20+ человек в Data team

Core data team – 6 человек

4 of 42

О себе

Lead Data Engineer��7+ лет в обработке данных

5 лет преподавал в ВУЗе

5 of 42

Почему dbt cloud

DBT Core

Compilation & Execution

Open source, deployment agnostic

DBT Cloud

UI, Identity & Statefullness

The most stable, reliable and collaborative way to develop & deploy dbt projects

6 of 42

Как все начиналось

7 of 42

Как все начиналось

8 of 42

Слои Хранилища

9 of 42

Идея

  • Давайте наймем Data QA и все будет хорошо!

10 of 42

Архитектура AS IS

11 of 42

Работа с тестами

12 of 42

13 of 42

14 of 42

15 of 42

Monitoring

16 of 42

17 of 42

Notifications

18 of 42

Проблемы

  • Тесты писал не разработчик модели, а другой человек

19 of 42

Проблемы

  • Тесты писал не разработчик модели, а другой человек
  • DE было больше, чем Data Qa

20 of 42

Проблемы

  • Тесты писал не разработчик модели, а другой человек
  • DE было больше, чем Data Qa
  • Помимо dbt есть еще Tableau и Airflow

21 of 42

Проблемы

  • Тесты писал не разработчик модели, а другой человек
  • DE было больше, чем Data Qa
  • Помимо dbt есть еще Tableau и Airflow
  • Тест постоянно падает на конкретной строке, которую не планируют менять на источнике

22 of 42

Проблемы

  • Тесты писал не разработчик модели, а другой человек
  • DE было больше, чем Data Qa
  • Помимо dbt есть еще Tableau и Airflow
  • Тест постоянно падает на конкретной строке, которую не планируют менять на источнике
  • Слак Алерты не очень информативны

23 of 42

Проблемы

  • Тесты писал не разработчик модели, а другой человек
  • DE было больше, чем Data Qa
  • Помимо dbt есть еще Tableau и Airflow
  • Тест постоянно падает на конкретной строке, которую не планируют менять на источнике
  • Слак Алерты не очень информативны
  • Тесты стали очень дорогими

24 of 42

Тесты писал не разработчик модели

  • Вводим Code Review систему
  • И правило на Code Review: любая новая модель должна быть покрыта дата тестом, если существенно дорабатывается старая модель, то она также покрывается дата тестом
  • TODO: Сделать code coverage

25 of 42

Git, CI/CD

  • Интеграция с git-based платформами
  • Возможность CI/CD

26 of 42

DE было больше, чем Data Qa�

  • Передаем написание базовых тестов на DE
  • Data QA занимаются предоставлением фреймворка для тестов и ручными разборами проблем в случае возникновения вопросов от заказчиков

27 of 42

Помимо dbt есть еще Tableau и Airflow�

  • TODO: Общий Data Lineage, и система мониторинга

28 of 42

Тест постоянно падает на конкретной строке, которую не планируют менять на источнике�

  • Добавляем –store-failures
  • Делает таблицу исключений dq_test_ignore, которую заполняем как seed
  •  Переписываем базовые тесты на использование с dq_test_ignore

29 of 42

Тест постоянно падает на конкретной строке, которую не планируют менять на источнике�

  • Добавляем –store-failures
  • Делает таблицу исключений dq_test_ignore, которую заполняем как seed
  •  Переписываем базовые тесты на использование с dq_test_ignore

30 of 42

Слак Алерты не очень информативны�

  • Считываем загрузки из dbt cloud джобы
  • Смотрим последний запуск
  • Если есть ошибки качаем манифест, парсим и выдаем детали в слак

31 of 42

Слак Алерты не очень информативны�

  • Считываем загрузки из dbt cloud джобы
  • Смотрим последний запуск
  • Если есть ошибки качаем манифест, парсим и выдаем детали в слак

32 of 42

Слак Алерты не очень информативны�

33 of 42

Тесты стали очень дорогими�

  • С флагом store-failures базовые тесты (not null, accepted_values) и т.п. делают full scan, что в случае BQ дорого

34 of 42

Тесты стали очень дорогими�

  • С флагом store-failures базовые тесты (not null, accepted_values) и т.п. делают full scan, что в случае BQ дорого
  • Можно попытаться сделать инкрементальный тест из dbt_expectations

35 of 42

Тесты стали очень дорогими�

  • С флагом store-failures базовые тесты (not null, accepted_values) и т.п. делают full scan, что в случае BQ дорого
  • Переписываем логику базовых тестов
  • Not_null
    • Step 1. Получаем количество строк с пустыми значениями
    • Step 2. Только в случае наличия строк с пустыми значениями, делаем доп select к таблице
    • Вводим доп. параметр со списком столбцов для хранения

36 of 42

Тесты стали очень дорогими�

  • С флагом store-failures базовые тесты (not null, accepted_values) и т.п. делают full scan, что в случае BQ дорого
  • Переписываем логику базовых тестов
  • Not_null
    • Step 1. Получаем количество строк с пустыми значениями
    • Step 2. Только в случае наличия строк с пустыми значениями, делаем доп select к таблице
    • Вводим доп. параметр со списком столбцов для хранения

37 of 42

Тесты стали очень дорогими�

  • С флагом store-failures базовые тесты (not null, accepted_values) и т.п. делают full scan, что в случае BQ дорого
  • Переписываем логику базовых тестов
  • Not_null
    • Step 1. Получаем количество строк с пустыми значениями
    • Step 2. Только в случае наличия строк с пустыми значениями, делаем доп select к таблице
    • Вводим доп. параметр со списком столбцов для хранения

38 of 42

Тесты стали очень дорогими�

  • С флагом store-failures базовые тесты (not null, accepted_values) и т.п. делают full scan, что в случае BQ дорого
  • Переписываем логику базовых тестов
  • Not_null
    • Step 1. Получаем количество строк с пустыми значениями
    • Step 2. Только в случае наличия строк с пустыми значениями, делаем доп select к таблице
    • Вводим доп. параметр со списком столбцов для хранения

39 of 42

Тесты стали очень дорогими�

  • Делаем часть тестов редкими (вместо раз в час – раз в день)

40 of 42

TODO

  • Airflow Tests
  • Source <-> Target tests
  • DQ Data Mart
  • Monitoring
  • CI/CD
  • Documentation

41 of 42

CI/CD�

    • Добавляем pre-prod тесты

42 of 42

THANK YOU!