Тестируйте умнее, а не усерднее: Где должны находиться тесты в вашем конвейере?
👋 Приветствуем, dbt’еры! Это Фейт и Джерри, и мы снова здесь, чтобы предложить тактические советы о том, где разместить тесты в вашем конвейере.
В нашем первом посте о совершенствовании лучших практик тестирования мы разработали приоритетный список проблем с качеством данных. Мы также задокументировали первые шаги по отладке каждой проблемы. Этот пост поможет вам определить, где конкретные тесты должны находиться в вашем конвейере данных.
Обратите внимание, что мы строим это руководство на основе того, как мы структурируем данные в dbt Labs. Вы можете использовать другой подход к моделированию — это нормально! Примените наши рекомендации к форме ваших данных и дайте нам знать в комментариях, какие изменения вы внесли.
Сначала вот наши мнения о том, где должны находиться конкретные тесты:
- Тесты источников должны касаться проблем с качеством данных, которые можно исправить. См. вставку ниже для пояснения, что мы имеем в виду под "исправимыми".
- Тесты на этапе подготовки должны быть ориентированы на бизнес-аномалии, специфичные для отдельных таблиц, такие как допустимые диапазоны или обеспечение последовательных значений. В дополнение к этим тестам, ваш слой подготовки должен очищать любые null, дубликаты или выбросы, которые вы не можете исправить в вашей системе источника. Обычно вам не нужно тестировать ваши усилия по очистке.
- Тесты промежуточного и витринного слоев должны быть ориентированы на бизнес-аномалии, возникающие в результате объединений или вычислений. Вы также можете рассмотреть возможность добавления дополнительных тестов на первичный ключ и отсутствие null в столбцах, где особенно важно защитить зернистость.
Где должны находиться тесты в вашем конвейере?
Диаграмма выше показывает, где вы можете разместить конкретные тесты данных в вашем конвейере. Давайте расширим это и обсудим, где каждый тип проблемы с качеством данных должен быть протестирован.
Источники
Тесты, применяемые к вашим источника м, должны указывать на проблемы, которые можно исправить в системе источника. Если ваши тесты источников указывают на проблемы системы источника, которые нельзя исправить, удалите тест и смягчите проблему на этапе подготовки.
Мы считаем, что проблема, которую можно "исправить в системе источника", это что-то, что:
- Вы сами можете исправить в системе источника.
- Вы знаете правильного человека, который может это исправить, и у вас достаточно хорошие отношения с ним, чтобы вы знали, что можете добиться исправления.
У вас могут быть проблемы, которые технически можно исправить в источнике, но это не произойдет до следующего цикла планирования, или вам нужно развивать лучшие отношения, чтобы исправить проблему, или что-то подобное. Это требует более тонкого подхода, чем мы рассмотрим в этом посте. Если у вас есть мысли по этому поводу, дайте нам знать!
Вот наша рекомендация по тому, какие тесты должны быть на ваших источниках.
- Свежесть источника: тестирование свежести данных для источников, которые критически важны для ваших конвейеров.
- Если какие-либо источники подпадают под любую из "топ-3" приоритетных категорий в нашем последнем посте, используйте
dbt source freshness
в ваших командах выполнения заданий и установите уровень серьезности наerror
. Таким образом, если свежесть источника не удается, то и ваше задание тоже. - Если ни один из ваших источников не подпадает под высокоприоритетные категории, установите уровень серьезности свежести источника на
warn
и добавьте свежесть источника в ваши команды выполнения заданий. Таким образом, вы все равно получаете информ ацию о свежести источника, но устаревшие данные не приведут к сбою вашего конвейера.
- Если какие-либо источники подпадают под любую из "топ-3" приоритетных категорий в нашем последнем посте, используйте
- Гигиена данных: тесты, которые можно исправить в системе источника (см. нашу заметку выше о "исправимости").
- Примеры:
- Дублирующиеся записи клиентов, которые можно удалить в системе источника
- Null записи, такие как имя клиента или адрес электронной почты, которые можно ввести в систему источника
- Тестирование первичного ключа, где дубликаты можно удалить в системе источника
- Примеры:
Подготовка
На этапе подготовки ваши модели должны очищать или смягчать проблемы с данными, которые нельзя исправить в источнике. Ваши тесты должны быть сосредоточены на обнаружении бизнес-аномалий.
- Очистка данных и смягчение проблем: Используйте наши лучшие практики для слоев подготовки для очистки данных. Не добавляйте тесты к вашим усилиям по очистке. Если вы фильтруете null в столбце, добавление теста not_null будет избыточным! 🌶️
- Примеры бизнес-ориентированных аномалий: это проблемы с качеством данных, которые вы должны тестировать на этапе подготовки, потому что они выходят за рамки определенных норм вашего бизнеса. Это могут быть:
- Значения внутри одного столбца, которые выходят за пределы допустимого диапазона. Например, магазин, продающий больше ограниченных по количеству товаров, чем они получили в своей поставке.
- Значения, которые всегда должны быть положительными, являются положительными. Это может выглядеть как отрицательная сумма транзакции, которая не классифицируется как возврат. Этот неудачный тест затем побудит к дальнейшему расследованию проблемной транзакции.
- Неожиданный рост объема в столбце количества, превышающий предопределенный процент. Это может выглядеть как неожиданный всплеск объема клиентов в магазине, выходящий за пределы ожидаемых сезонных норм. Это аномалия, которая может указывать на ошибку или проблему с моделированием.
Промежуточный (если применимо)
На промежуточном этапе сосредоточьтесь на гигиене данных и тестах на аномалии для новых столбцов. Не повторяйте тестирование проходных столбцов из источников или подготовки. Вот несколько примеров тестов, которые вы можете разместить на промежуточном этапе, основываясь на случаях использования промежуточных моделей, которые мы описываем в этом руководстве.
- Промежуточные модели часто изменяют зернистость моделей, чтобы подготовить их для витрин.
- Добавьте тест на первичный ключ к любым моделям с измененной зернистостью.
- Кроме того, рассмотрите возможность добавления теста на первичный ключ к моделям, где зернистость осталась прежней, но была обогащена. Это помогает защитить ваши обогащенные модели от будущих разработчиков, которые могут не понять ваше намерение только из SQL.
- Промежут очные модели могут выполнять первый набор объединений или агрегаций, чтобы уменьшить сложность в конечной витрине.
- Добавьте простые тесты на аномалии, чтобы проверить поведение ваших наборов объединений и агрегаций. Это может выглядеть как:
- Тест accepted_values на вновь рассчитанный категориальный столбец.
- Тест mutually_exclusive_ranges на два столбца, значения которых ведут себя по отношению друг к другу (например, утверждение, что возрастные диапазоны не пересекаются).
- Тест not_constant на столбец, значение которого должно постоянно изменяться (например, количество просмотров страниц в аналитике веб-сайта).
- Добавьте простые тесты на аномалии, чтобы проверить поведение ваших наборов объединений и агрегаций. Это может выглядеть как:
- Промежуточные модели могут изолировать сложные операции.
- Тесты на аномалии, перечисленные выше, могут быть достаточными здесь.
- Вы также можете рассмотреть возможность юнит-тестирования любых особенно сложных частей SQL-логики.