Перейти к основному содержимому

О MetricFlow

Это руководство знакомит с базовыми идеями MetricFlow для тех, кто только начинает работать с этой функциональностью. MetricFlow, который лежит в основе Semantic Layer, помогает определять и управлять логикой метрик в вашей компании. Это набор абстракций с чётко заданным подходом, который помогает потребителям данных быстро и эффективно получать датасеты метрик из платформы данных.

MetricFlow берёт на себя построение SQL-запросов и определяет спецификацию семантических моделей и метрик dbt. Он позволяет описывать метрики в вашем dbt‑проекте и выполнять к ним запросы с помощью команд MetricFlow как в dbt, так и в dbt Core.

Перед началом работы учтите следующие рекомендации:

  • Определяйте метрики в YAML и выполняйте запросы к ним, используя эти новые спецификации метрик.
  • Для использования MetricFlow у вас должна быть версия dbt 1.6 или выше.
  • Используйте MetricFlow с Snowflake, BigQuery, Databricks, Postgres (только dbt Core) или Redshift.
  • Исследуйте данные и выполняйте запросы к метрикам с помощью Semantic Layer и широкого набора доступных интеграций.

MetricFlow

MetricFlow — это инструмент генерации SQL-запросов, предназначенный для упрощения создания метрик по различным измерениям данных под разные бизнес-задачи.

  • Он работает на основе YAML-файлов, в которых семантический граф связывает бизнес-термины с данными. Этот граф состоит из семантических моделей (точек входа в данные) и метрик (функций для расчёта количественных показателей).
  • MetricFlow разрабатывается и поддерживается в рамках инициативы Open Semantic Interchange (OSI).
  • MetricFlow совместим с dbt версии 1.6 и выше.
  • MetricFlow распространяется по лицензии Apache 2.0. Специалистов по данным и энтузиастов активно приглашают к участию в разработке. Подробнее читайте об истории лицензирования MetricFlow.
  • Являясь частью Semantic Layer, MetricFlow позволяет организациям определять метрики с использованием YAML-абстракций.
  • Для выполнения запросов к измерениям метрик, значениям измерений и проверки конфигураций используйте команды MetricFlow.
примечание

В настоящее время MetricFlow не поддерживает встроенные функции или пакеты dbt, однако поддержка планируется в будущем.

  • Гибкость с полнотой: Определяйте логику метрик, используя гибкие абстракции на любой модели данных.
  • DRY (Don't Repeat Yourself): Минимизируйте избыточность, позволяя определять метрики, где это возможно.
  • Простота с постепенной сложностью: Подходите к MetricFlow, используя знакомые концепции моделирования данных.
  • Производительность и эффективность: Оптимизируйте производительность, поддерживая централизованную инженерию данных и распределенное владение логикой.

Семантический граф

Мы вводим новую концепцию: "семантический граф". Это отношение между семантическими моделями и конфигурациями YAML, которое создает ландшафт данных для построения метрик. Вы можете думать о нем как о карте, где таблицы подобны местам, а связи между ними (ребра) подобны дорогам. Хотя это скрыто, семантический граф является подмножеством DAG, и вы можете видеть семантические модели как узлы на DAG.

Семантический граф помогает нам решить, какая информация доступна для использования и какая нет. Связи между таблицами в семантическом графе больше касаются отношений между информацией. Это отличается от DAG, где связи показывают зависимости между задачами.

Когда MetricFlow генерирует метрику, он использует свой SQL-движок, чтобы определить лучший путь между таблицами, используя фреймворк, определенный в YAML-файлах для семантических моделей и метрик. Когда эти модели и метрики правильно определены, они могут быть использованы далее с интеграциями семантического слоя dbt.

Когда MetricFlow генерирует метрику, он использует свой SQL‑движок, чтобы определить оптимальный путь между таблицами, опираясь на фреймворк, заданный в YAML‑файлах семантических моделей и метрик. Если эти модели и метрики определены корректно, их можно использовать далее вместе с интеграциями Semantic Layer.

Семантические модели являются отправными точками данных и соответствуют моделям в вашем проекте dbt. Вы можете создать несколько семантических моделей из каждой модели. Семантические модели имеют метаданные, такие как таблица данных, которые определяют важную информацию, такую как имя таблицы и первичные ключи, чтобы граф мог быть правильно навигационным.

Для семантической модели есть три основных элемента метаданных:

  • Сущности — Ключи соединения вашей семантической модели (думайте о них как о путях перемещения или ребрах между семантическими моделями).
  • Измерения — Это способы, которыми вы хотите группировать или разбивать ваши метрики.
  • Меры — Функции агрегации, которые дают вам числовой результат и могут быть использованы для создания ваших метрик.
Семантическая модель состоит из различных компонентов: Сущности, Меры и Измерения.Семантическая модель состоит из различных компонентов: Сущности, Меры и Измерения.

Метрики

Метрики, являющиеся ключевой концепцией, это функции, которые объединяют меры, ограничения или другие математические функции для определения новых количественных показателей. MetricFlow использует меры и различные типы агрегации, такие как среднее, сумма и количество уникальных, для создания метрик. Измерения добавляют контекст к метрикам, и без них метрика просто число за все время. Вы можете определять метрики в тех же YAML-файлах, что и ваши семантические модели, или создать новый файл.

MetricFlow поддерживает различные типы метрик:

  • Конверсия — Помогает отслеживать, когда базовое событие и последующее событие конверсии происходят для сущности в заданный период времени.
  • Кумулятивная — Агрегирует меру за заданное окно.
  • Производная — Выражение других метрик, которое позволяет выполнять вычисления на основе метрик.
  • Отношение — Создает отношение из двух мер, например, доход на клиента.
  • Простая — Метрики, которые напрямую ссылаются на одну меру.

Пример использования

В следующих разделах мы покажем, как специалисты по данным в настоящее время рассчитывают метрики и сравним это с тем, как MetricFlow упрощает и делает более гибким определение метрик.

Следующий пример данных основан на репозитории Jaffle Shop. Вы можете просмотреть полный проект dbt. Таблицы, которые мы используем в нашем примерной модели:

  • orders — это экспорт производственной платформы данных, который был очищен и организован для аналитического потребления.
  • customers — это частично денормализованная таблица в данном случае с колонкой, полученной из таблицы заказов через некоторый процесс на более высоком уровне.

Чтобы сделать это более конкретным, рассмотрим метрику order_total, которая определяется с использованием SQL-выражения:

select sum(order_total) as order_total from orders Это выражение вычисляет общий доход от всех заказов, суммируя колонку order_total в таблице orders. В бизнес-среде метрика order_total часто рассчитывается по различным категориям, таким как:

  • Время, например date_trunc(ordered_at, 'day')
  • Тип заказа, используя измерение is_food_order из таблицы orders.

Расчет метрик

Далее мы сравним, как специалисты по данным в настоящее время рассчитывают метрики с помощью нескольких запросов, и как MetricFlow упрощает и оптимизирует этот процесс.

Следующий пример показывает, как специалисты по данным обычно рассчитывают метрику order_total в агрегированном виде. Также вероятно, что аналитиков просят предоставить больше деталей по метрике, например, сколько дохода поступило от новых клиентов.

Использование следующего запроса создает ситуацию, когда несколько аналитиков работают с одними и теми же данными, каждый используя свой метод запроса — это может привести к путанице, несоответствиям и головной боли для управления данными.

select
date_trunc('day',orders.ordered_at) as day,
case when customers.first_ordered_at is not null then true else false end as is_new_customer,
sum(orders.order_total) as order_total
from
orders
left join
customers
on
orders.customer_id = customers.customer_id
group by 1, 2

Часто задаваемые вопросы

 Нужно ли нормализовать мои наборы данных?
 Почему нормализованные данные являются идеальным входом?
 Почему бы просто не сделать метрики такими же, как меры?
 Как dbt Semantic Layer обрабатывает join-ы?
 Являются ли сущности и ключи соединения одним и тем же?
 Может ли таблица без первичных или уникальных сущностей иметь измерения?

Нашли ошибку?

0
Loading