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

Команды 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.

В dbt Cloud запускайте команды MetricFlow непосредственно в dbt Cloud IDE или в dbt Cloud CLI.

Для пользователей dbt Cloud CLI команды MetricFlow встроены в dbt Cloud CLI, что означает, что вы можете сразу их запускать после установки dbt Cloud CLI и не нужно устанавливать MetricFlow отдельно. Вам не нужно управлять версиями, потому что ваш аккаунт dbt Cloud будет автоматически управлять версиями за вас.

Команды MetricFlow

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

Вы можете использовать префикс 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 IDEdbt 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 parse как минимум, чтобы обновить Семантический слой dbt. Это обновляет файл semantic_manifest.json, отражая ваши изменения при запросе метрик. Запустив dbt parse, вам не нужно будет перестраивать все модели.

 Как я могу запросить или предварительно просмотреть метрики с помощью dbt Cloud CLI?

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 Показать это сообщение и выйти.

Примеры запросов

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

Используйте этот пример, чтобы запросить несколько метрик по измерению и вернуть метрики 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 |

Дополнительные примеры запросов

Следующие вкладки представляют дополнительные примеры запросов, такие как экспорт в 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

Гранулярность времени

При желании вы можете указать гранулярность времени, на которую вы хотите агрегировать ваши данные, добавив два подчеркивания и единицу гранулярности к 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 

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

 Как я могу добавить фильтр измерения к фильтру where?
 Почему мой запрос ограничен 100 строками в dbt Cloud CLI?
 Как я могу запросить несколько метрик, группировок или условий where?
 Как я могу отсортировать мой запрос в порядке возрастания или убывания?
0