tgoop.com/big_data_systems_analysis/170
Last Update:
NULL_COUNT и NULL_PERCENT для мониторинга качества данных в Snowflake
Я уже много раз упоминала, что от данных в DWH не будет никакого смысла, если мы не сможем им доверять. Что нужно для доверия? Регулярный мониторинг за качеством данных. Data quality должно пронизывать все этапы жизни данных в хранилище. И об этом говорить мы будем ещё очень много. Но сегодня я хочу рассказать о классных плюшках в Snowflake, которые чуть упрощают нам некоторые проверки.
В Snowflake есть много встроенных встроенных метрик помогающих отслеживать качество данных. И функция SYSTEM$DATA_METRIC_SCAN
как раз одна из них. Она упрощает получение метрик качества данных без необходимости писать сложные запросы.
Например, функция NULL_COUNT
возвращает строки в таблице, которые содержат значение NULL в определенном столбце. А NULL_PERCENT
помогает посчитать % NULL-значений от общего количества строк. Почему не использовать выборку по условию WHERE column_name is NULL
? В рамках разовых точечных расчётов, использование этих встроенных метрик не даёт заметного прироста производительности. А вот вывести несколько метрик разом по одной таблице или одним запросом по нескольким быстрее-проще, используя функции.
Какие метрики можно посмотреть в рамках SYSTEM$DATA_METRIC_SCAN
?
Рассмотрим пример. Есть таблица с данными о заказах, куда через ELT-процесс регулярно льются свежие данные:
CREATE TABLE orders (
order_id NUMBER,
customer_id NUMBER,
product_id NUMBER,
order_date DATE,
delivery_date DATE,
amount NUMBER,
promo_code STRING
);
-- Для нашего примера заполним её тестовыми данными:
INSERT INTO orders VALUES
(1, 100, 500, '2024-01-01', '2024-01-03', 1500, NULL),
(2, 101, 501, '2024-01-01', NULL, 2000, 'WINTER24'),
(3, 102, 502, '2024-01-02', '2024-01-04', 1800, ''),
(4, NULL, 501, '2024-01-02', NULL, 2000, NULL);
-- Посчитаем какой % NULL-значений в поле customer_id и % пустых строк в promo_code
SELECT
SNOWFLAKE.CORE.NULL_PERCENT(SELECT customer_id
FROM orders) as null_percent_customer_id,
SNOWFLAKE.CORE.BLANK_PERCENT(SELECT promo_code
FROM orders) as blank_percent_promo_cd;
--Выведем все строки с BLANK-значениями в поле promo_code
SELECT *
FROM TABLE(SYSTEM$DATA_METRIC_SCAN(
REF_ENTITY_NAME => 'orders',
METRIC_NAME => 'snowflake.core.blank_count',
ARGUMENT_NAME => 'promo_code'
));
Результат первого запроса покажет:
| null_percent_customer_id | blank_percent_promo_cd |
|--------------------------|------------------------|
| 25 | 33,33 |
А второй выведет строки таблицы с promo_code = '' целиком.
Как всё это применять?
Использование этой функции (с умом) позволяет нам быстро и просто находить аномалии в данных и реагировать на проблемы до того, как они повлияют на бизнес-процессы. Но даже если вы не используете Snowflake, не забывайте строить метрики качества другими методами.
#snowflake #data_quality