Команды MetricFlow
После того как вы определите метрики в вашем проекте dbt, вы сможете запрашивать метрики, измерения и значения измерений, а также проверять ваши конфигурации с помощью команд MetricFlow.
MetricFlow позволяет вам определять и запрашивать метрики в вашем проекте dbt в dbt Cloud или dbt Core. Чтобы испытать мощь универсального Семантического слоя dbt и динамически запрашивать эти метрики в инструментах нижнего уровня, вам понадобится аккаунт dbt Cloud Team или Enterprise.
MetricFlow совместим с версиями Python 3.8, 3.9, 3.10 и 3.11.
MetricFlow
MetricFlow — это пакет dbt, который позволяет вам определять и запрашивать метрики в вашем проекте dbt. Вы можете использовать MetricFlow для запроса метрик в вашем проекте dbt в dbt Cloud CLI, dbt Cloud IDE или dbt Core.
Использование MetricFlow с dbt Cloud означает, что вам не нужно управлять версиями — ваш аккаунт dbt Cloud будет автоматически управлять версиями.
Задания dbt Cloud поддерживают команду dbt sl validate
для автоматического тестирования ваших семантических узлов. Вы также можете добавить проверки MetricFlow с вашим git-провайдером (например, GitHub Actions), установив MetricFlow (python -m pip install metricflow
). Это позволяет вам запускать команды MetricFlow как часть ваших проверок непрерывной интеграции на PR.
- MetricFlow с dbt Cloud
- MetricFlow с dbt Core
В dbt Cloud запускайте команды MetricFlow непосредственно в dbt Cloud IDE или в dbt Cloud CLI.
Для пользователей dbt Cloud CLI команды MetricFlow встроены в dbt Cloud CLI, что означает, что вы можете сразу их запускать после установки dbt Cloud CLI и не нужно устанавливать MetricFlow отдельно. Вам не нужно управлять версиями, потому что ваш аккаунт dbt Cloud будет автоматически управлять версиями за вас.
Вы можете установить MetricFlow из PyPI. Вам нужно использовать pip
для установки MetricFlow на операционных системах Windows или Linux:
Примечание, вам нужно будет управлять версиями между dbt Core, вашим адаптером и MetricFlow.
Обратите внимание, команды MetricFlow mf
возвращают ошибку, если у вас установлен пакет Metafont latex. Чтобы запустить команды mf
, удалите этот пакет.
Команды MetricFlow
MetricFlow предоставляет следующие команды для получения метаданных и запроса метрик.
- Команды для dbt Cloud
- Команды для dbt Core
Вы можете использовать префикс dbt sl
перед именем команды, чтобы выполнить их в dbt Cloud IDE или dbt Cloud CLI. Например, чтобы перечислить все метрики, выполните dbt sl list metrics
.
Пользователи dbt Cloud CLI могут выполнить dbt sl --help
в терминале для полного списка команд и флагов MetricFlow.
Следующая таблица перечисляет команды, совместимые с dbt Cloud IDE и dbt Cloud CLI:
Команда | Описание | dbt Cloud IDE | dbt Cloud CLI |
---|---|---|---|
list metrics | Перечисляет метрики с измерениями. | ✅ | ✅ |
list dimensions | Перечисляет уникальные измерения для метрик. | ✅ | ✅ |
list dimension-values | Перечисляет изм ерения с метриками. | ✅ | ✅ |
list entities | Перечисляет все уникальные сущности. | ✅ | ✅ |
list saved-queries | Перечисляет доступные сохраненные запросы. Используйте флаг --show-exports , чтобы отобразить каждый экспорт, перечисленный под сохраненным запросом, или --show-parameters , чтобы показать полные параметры запроса, которые использует каждый сохраненный запрос. | ✅ | ✅ |
query | Запрос метрик, сохраненных запросов и измерений, которые вы хотите увидеть в интерфейсе командной строки. Обратитесь к примерам запросов, чтобы помочь вам начать. | ✅ | ✅ |
validate | Проверяет конфигурации семантической модели. | ✅ | ✅ |
export | Запускает экспорты для одного сохраненного запроса для тестирования и генерации экспортов в вашей среде разработки. Вы также можете использовать флаг --select , чтобы указать конкретные экспорты и з сохраненного запроса. | ❌ | ✅ |
export-all | Запускает экспорты для нескольких сохраненных запросов одновременно, экономя время и усилия. | ❌ | ✅ |
Когда вы вносите изменения в метрики, убедитесь, что вы запускаете dbt parse
как минимум, чтобы обновить Семантический слой dbt. Это обновляет файл semantic_manifest.json
, отражая ваши изменения при запросе метрик. Запустив dbt parse
, вам не нужно будет перестраивать все модели.
Используйте префикс mf
перед именем команды, чтобы выполнить их в dbt Core. Например, чтобы перечислить все метрики, выполните mf list metrics
.
list metrics
— Перечисляет метрики с измерениями.list dimensions
— Перечисляет уникальные измерения для метрик.list dimension-values
— Перечисляет измерения с метриками.list entities
— Перечисляет все уникальные сущности.validate-configs
— Проверяет конфигурации семантической модели.health-checks
— Выполняет проверку состояния платформы данных.tutorial
— Посвященный учебник MetricFlow, чтобы помочь вам начать.query
— Запрос метрик и измерений, которые вы хотите увидеть в интерфейсе командной строки. Обратитесь к примерам запросов, чтобы помочь вам начать.
List metrics
Эта команда перечисляет метрики с их доступными измерениями:
dbt sl list metrics <metric_name> # В dbt Cloud
mf list metrics <metric_name> # В dbt Core
Опции:
--search TEXT Фильтровать доступные метрики по этому поисковому запросу
--show-all-dimensions Показать все измерения, связанные с метрикой.
--help Показать это сообщение и выйти.
List dimensions
Эта команда перечисляет все уникальные измерения для метрики или нескольких метрик. Она отображает только общие измерения при запросе нескольких метрик:
dbt sl list dimensions --metrics <metric_name> # В dbt Cloud
mf list dimensions --metrics <metric_name> # В dbt Core
Опции:
--metrics SEQUENCE Перечислить измерения по заданным метрикам (пересечение). Например, --metrics bookings,messages
--help Показать это сообщение и выйти.
List dimension-values
Эта команда перечисляет все значения измерений с соответствующей метрикой:
dbt sl list dimension-values --metrics <metric_name> --dimension <dimension_name> # В dbt Cloud
mf list dimension-values --metrics <metric_name> --dimension <dimension_name> # В dbt Core
Опции:
--dimension TEXT Измерение для запроса значений [обязательно]
--metrics SEQUENCE Метрики, связанные с измерением
[обязательно]
--end-time TEXT Необязательная метка времени iso8601 для ограничения конечного времени
данных (включительно)
*Пока недоступно в dbt Cloud
--start-time TEXT Необязательная метка времени iso8601 для ограничения начального времени
данных (включительно)
*Пока недоступно в dbt Cloud
--help Показать это сообщение и выйти.
List entities
Эта команда перечисляет все уникальные сущности:
dbt sl list entities --metrics <metric_name> # В dbt Cloud
mf list entities --metrics <metric_name> # В dbt Core
Опции:
--metrics SEQUENCE Перечислить сущности по заданным метрикам (пересечение). Например, --metrics bookings,messages
--help Показать это сообщение и выйти.
List saved queries
Эта команда перечисляет все доступные сохраненные запросы:
dbt sl list saved-queries
Вы также можете добавить флаг (или опцию) --show-exports
, чтобы показать каждый экспорт, перечисленный под сохраненным запросом:
dbt sl list saved-queries --show-exports
Вывод
dbt sl list saved-queries --show-exports
Список доступных сохраненных запросов:
- new_customer_orders
экспорты:
- Export(new_customer_orders_table, exportAs=TABLE)
- Export(new_customer_orders_view, exportAs=VIEW)
- Export(new_customer_orders, alias=orders, schemas=customer_schema, exportAs=TABLE)
Validate
Следующая команда выполняет проверки против определенных конфигураций семантической модели.
dbt sl validate # Для пользователей dbt Cloud
mf validate-configs # Для пользователей dbt Core
Опции:
--timeout # Только для dbt Cloud
Необязательное время ожидания для проверки в хранилище данных в dbt Cloud.
--dw-timeout INTEGER # Только для dbt Core
Необязательное время ожидания для шагов проверки в хранилище данных. По умолчанию None.
--skip-dw # Только для dbt Core
Пропустить проверки в хранилище данных.
--show-all # Только для dbt Core
Показать предупреждения и будущие ошибки.
--verbose-issues # Только для dbt Core
Показать дополнительные детали о проблемах.
--semantic-validation-workers INTEGER # Только для dbt Core
Использовать указанное количество рабочих для больших конфигураций.
--help Показать это сообщение и выйти.
Health checks
Следующая команда выполняет проверку состояния платформы данных, которую вы указали в конфигурациях.
Обратите внимание, в dbt Cloud команда health-checks
не требуется, так как она использует учетные данные dbt Cloud для выполнения проверки состояния.
mf health-checks # В dbt Core
Tutorial
Следуйте посвященному учебнику MetricFlow, чтобы помочь вам начать:
mf tutorial # В dbt Core
Query
Создайте новый запрос с помощью MetricFlow и выполните его на вашей платформе данных. Запрос возвращает следующий результат:
dbt sl query --metrics <metric_name> --group-by <dimension_name> # В dbt Cloud
dbt sl query --saved-query <name> # В dbt Cloud
mf query --metrics <metric_name> --group-by <dimension_name> # В dbt Core
Опции:
--metrics SEQUENCE Синтаксис для запроса одной метрики: --metrics metric_name
Например, --metrics bookings
Чтобы запросить несколько метрик, используйте --metrics, за которым следуют имена метрик, разделенные запятыми без пробелов.
Например, --metrics bookings,messages
--group-by SEQUENCE Синтаксис для группировки по одному измерению/сущности: --group-by dimension_name
Например, --group-by ds
Для нескольких измерений/сущностей используйте --group-by, за которым следуют имена измерений/сущностей, разделенные запятыми без пробелов.
Например, --group-by ds,org
--end-time TEXT Необязательная метка времени iso8601 для ограничения конечного
времени данных (включительно).
*Пока н едоступно в dbt Cloud
--start-time TEXT Необязательная метка времени iso8601 для ограничения начального
времени данных (включительно)
*Пока недоступно в dbt Cloud
--where TEXT SQL-подобное условие where, предоставленное в виде строки и заключенное в кавычки: --where "condition_statement"
Например, чтобы запросить одно условие: --where "revenue > 100"
Чтобы запросить несколько условий: --where "revenue > 100 and user_count < 1000"
Чтобы добавить фильтр измерения к фильтру where, убедитесь, что элемент фильтра является частью вашей модели.
Обратитесь к FAQ для получения дополнительной информации о том, как это сделать с помощью обертки шаблона.
--limit TEXT Ограничить количество строк, используя int, или оставить
пустым для отсутствия ограничения. Например: --limit 100
--order-by SEQUENCE Укажите метрики, измерения или группировки для сортировки.
Добавьте префикс `-`, чтобы отсортировать запрос в порядке убывания (DESC).
Оставьте пустым для сортировки в порядке возрастания (ASC).
Например, чтобы отсортировать metric_time в порядке убывания: --order-by -metric_time
Чтобы отсортировать metric_time в порядке возрастания и revenue в порядке убывания: --order-by metric_time,-revenue
--csv FILENAME Укажите путь к файлу для вывода фрейма данных в csv
--compile (dbt Cloud) В выводе запроса показать запрос, который был
--explain (dbt Core) выполнен против хранилища данных
--show-dataflow-plan Показать план потока данных в выводе объяснения
--display-plans Показать планы (например, поток данных метрик) в браузере
--decimals INTEGER Выберите количество десятичных знаков для округления
числовых значений
--show-sql-descriptions Показать встроенные описания узлов в отображаемом SQL
--help Показат ь это сообщение и выйти.
Примеры запросов
Следующие вкладки представляют различные типы примеров запросов, которые вы можете использовать для запроса метрик и измерений. Выберите вкладку, которая лучше всего соответствует вашим потребностям:
- Метрики
- Измерения
- Порядок/ограничение
- условие where
- Фильтр по времени
- Сохраненные запросы
Используйте этот пример, чтобы запросить несколько метрик по измерению и вернуть метрики order_total
и users_active
по metric_time.
Запрос
dbt sl query --metrics order_total,users_active --group-by metric_time # В dbt Cloud
mf query --metrics order_total,users_active --group-by metric_time # В dbt Core
Результат
✔ Успех 🦄 - запрос завершен через 1.24 секунды
| METRIC_TIME | ORDER_TOTAL |
|:--------------|---------------:|
| 2017-06-16 | 792.17 |
| 2017-06-17 | 458.35 |
| 2017-06-18 | 490.69 |
| 2017-06-19 | 749.09 |
| 2017-06-20 | 712.51 |
| 2017-06-21 | 541.65 |
Вы можете включить несколько измерений в запрос. Например, вы можете сгруппировать по измерению is_food_order
, чтобы подтвердить, были ли заказы на еду или нет. Обратите внимание, что при запросе измерения вам нужно указать основную сущность для этого измерения. В следующем примере основной сущностью является order_id
.
Запрос
dbt sl query --metrics order_total --group-by order_id__is_food_order # В dbt Cloud
mf query --metrics order_total --group-by order_id__is_food_order # В dbt Core
Результат
Успех 🦄 - запрос завершен через 1.70 секунды
| METRIC_TIME | IS_FOOD_ORDER | ORDER_TOTAL |
|:--------------|:----------------|---------------:|
| 2017-06-16 | True | 499.27 |
| 2017-06-16 | False | 292.90 |
| 2017-06-17 | True | 431.24 |
| 2017-06-17 | False | 27.11 |
| 2017-06-18 | True | 466.45 |
| 2017-06-18 | False | 24.24 |
| 2017-06-19 | False | 300.98 |
| 2017-06-19 | True | 448.11 |
Вы можете добавить функции порядка и ограничения, чтобы отфильтровать и представить данные в читаемом формате. Следующий запрос ограничивает набор данных до 10 записей и упорядочивает их по metric_time
в порядке убывания. Обратите внимание, что использование префикса -
отсортирует запрос в порядке убывания. Без префикса -
запрос сортируется в порядке возрастания.
Обратите внимание, что при запросе измерения вам нужно указать основную сущность для этого измерения. В следующем примере основной сущностью является order_id
.
Запрос
# В dbt Cloud
dbt sl query --metrics order_total --group-by order_id__is_food_order --limit 10 --order-by -metric_time
# В dbt Core
mf query --metrics order_total --group-by order_id__is_food_order --limit 10 --order-by -metric_time
Результат
✔ Успех 🦄 - запрос завершен через 1.41 секунды
| METRIC_TIME | IS_FOOD_ORDER | ORDER_TOTAL |
|:--------------|:----------------|---------------:|
| 2017-08-31 | True | 459.90 |
| 2017-08-31 | False | 327.08 |
| 2017-08-30 | False | 348.90 |
| 2017-08-30 | True | 448.18 |
| 2017-08-29 | True | 479.94 |
| 2017-08-29 | False | 333.65 |
| 2017-08-28 | False | 334.73 |
Вы можете дополнительно отфильтровать набор данных, добавив условие where
в ваш запрос. Следующий пример показывает, как запросить метрику order_total
, сгруппированную по is_food_order
с несколькими условиями where (заказы, которые являются заказами на еду, и заказы с недели, начинающейся с 1 февраля 2024 года или позже). Обратите внимание, что при запросе измерения вам нужно указать основную сущность для этого измерения. В следующем примере основной сущностью является order_id
.
Запрос
# В dbt Cloud
dbt sl query --metrics order_total --group-by order_id__is_food_order --where "{{ Dimension('order_id__is_food_order') }} = True and metric_time__week >= '2024-02-01'"
# В dbt Core
mf query --metrics order_total --group-by order_id__is_food_order --where "{{ Dimension('order_id__is_food_order') }} = True and metric_time__week >= '2024-02-01'"
Результат
✔ Успех 🦄 - запрос завершен через 1.06 секунды
| METRIC_TIME | IS_FOOD_ORDER | ORDER_TOTAL |
|:--------------|:----------------|---------------:|
| 2017-08-31 | True | 459.90 |
| 2017-08-30 | True | 448.18 |
| 2017-08-29 | True | 479.94 |
| 2017-08-28 | True | 513.48 |
| 2017-08-27 | True | 568.92 |
| 2017-08-26 | True | 471.95 |
| 2017-08-25 | True | 452.93 |
| 2017-08-24 | True | 384.40 |
| 2017-08-23 | True | 423.61 |
| 2017-08-22 | True | 401.91 |
Для фильтрации по времени существуют специальные опции начала и конца времени. Использование этих опций для фильтрации по времени позволяет MetricFlow дополнительно оптимизировать производительность запроса, когда это уместно.
Обратите внимание, что при запросе измерения вам нужно указать основную сущность для этого измерения. В следующем примере основной сущностью является order_id
.
Запрос
# В dbt Core
mf query --metrics order_total --group-by order_id__is_food_order --limit 10 --order-by -metric_time --where "is_food_order = True" --start-time '2017-08-22' --end-time '2017-08-27'
Результат
✔ Успех 🦄 - запрос завершен через 1.53 секунды
| METRIC_TIME | IS_FOOD_ORDER | ORDER_TOTAL |
|:--------------|:----------------|---------------:|
| 2017-08-27 | True | 568.92 |
| 2017-08-26 | True | 471.95 |
| 2017-08-25 | True | 452.93 |
| 2017-08-24 | True | 384.40 |
| 2017-08-23 | True | 423.61 |
| 2017-08-22 | True | 401.91 |
Вы можете использовать это для часто используемых запросов. Замените <name>
на имя вашего сохраненного запроса.
Запрос
dbt sl query --saved-query <name> # В dbt Cloud
mf query --saved-query <name> # В dbt Core
Например, если вы используете dbt Cloud и у вас есть сохраненный запрос с именем new_customer_orders
, вы бы выполнили dbt sl query --saved-query new_customer_orders
.
При запросе сохраненных запросов вы можете использовать такие параметры, как where
, limit
, order
, compile
и так далее. Однако имейте в виду, что вы не можете получить доступ к параметрам metric
или group_by
в этом контексте. Это связано с тем, что они являются предопределенными и фиксированными параметрами для сохраненных запросов, и вы не можете изменить их во время запроса. Если вы хотите запросить больше метрик или измерений, вы можете построить запрос, используя стандартный формат.
Дополнительные примеры запросов
Следующие вкладки представляют дополнительные примеры запросов, такие как экспорт в CSV. Выберите вкладку, которая лучше всего соответствует вашим потребностям:
- Флаг --compile/--explain
- Экспорт в CSV
Добавьте --compile
(или --explain
для пользователей dbt Core) в ваш запрос, чтобы увидеть SQL, сгенерированный MetricFlow.
Запрос
# В dbt Cloud
dbt sl query --metrics order_total --group-by metric_time,is_food_order --limit 10 --order-by -metric_time --where "is_food_order = True" --start-time '2017-08-22' --end-time '2017-08-27' --compile
# В dbt Core
mf query --metrics order_total --group-by metric_time,is_food_order --limit 10 --order-by -metric_time --where "is_food_order = True" --start-time '2017-08-22' --end-time '2017-08-27' --explain
Результат
✔ Успех 🦄 - запрос завершен через 0.28 секунды
🔎 SQL (удалите --compile, чтобы увидеть данные, или добавьте --show-dataflow-plan, чтобы увидеть сгенерированный план потока данных):
select
metric_time
, is_food_order
, sum(order_cost) as order_total
from (
select
cast(ordered_at as date) as metric_time
, is_food_order
, order_cost
from analytics.js_dbt_sl_demo.orders orders_src_1
where cast(ordered_at as date) between cast('2017-08-22' as timestamp) and cast('2017-08-27' as timestamp)
) subq_3
where is_food_order = True
group by
metric_time
, is_food_order
order by metric_time desc
limit 10
Добавьте флаг --csv file_name.csv
, чтобы экспортировать результаты вашего запроса в csv.
Запрос
# В dbt Cloud
dbt sl query --metrics order_total --group-by metric_time,is_food_order --limit 10 --order-by -metric_time --where "is_food_order = True" --start-time '2017-08-22' --end-time '2017-08-27' --csv query_example.csv
# В dbt Core
mf query --metrics order_total --group-by metric_time,is_food_order --limit 10 --order-by -metric_time --where "is_food_order = True" --start-time '2017-08-22' --end-time '2017-08-27' --csv query_example.csv
Результат
✔ Успех 🦄 - запрос завершен через 0.83 секунды
🖨 Успешно записан вывод запроса в query_example.csv
Гранулярность времени
При желании вы можете указать гранулярность времени, на которую вы хотите агрегировать ваши данные, добавив два подчеркивания и единицу гранулярности к metric_time
, глобальному временному измерению. Вы можете группировать гранулярность по: day
, week
, month
, quarter
и year
.
Ниже приведен пример запроса данных метрики на месячной основе:
dbt sl query --metrics revenue --group-by metric_time__month # В dbt Cloud
mf query --metrics revenue --group-by metric_time__month # В dbt Core
Export
Запустите экспорты для конкретного сохраненного запроса. Используйте эту команду для тестирования и генерации экспортов в вашей среде разработки. Вы также можете использовать флаг --select
, чтобы указать конкретные экспорты из сохраненного запроса. Обратитесь к экспортам в разработке для получения дополнительной информации.
Экспорт доступен в dbt Cloud.
dbt sl export
Export-all
Запустите экспорты для нескольких сохраненных запросов одновременно. Эта команда предоставляет удобный способ управления и выполнения экспортов для нескольких запросов одновременно, экономя время и усилия. Обратитесь к экспортам в разработке для получения дополнительной информации.
Экспорт доступен в dbt Cloud.
dbt sl export-all