Часто задаваемые вопросы о семантическом слое dbt
Семантический слой dbt — это предложение dbt Cloud, которое позволяет пользователям централизованно определять свои метрики в рамках проекта dbt с использованием MetricFlow.
Семантический слой dbt предлагает:
- Динамическую генерацию SQL для вычисления метрик
- API для запроса метрик и измерений
- Первоклассные интеграции для запроса этих централизованных метрик в последующих инструментах
Семантический слой dbt работает на базе MetricFlow, который является компонентом с открытым исходным кодом.
Обзор семантического слоя dbt
Основная ценность семантического слоя dbt заключается в централизации и обеспечении согласованности ваших метрик по всей организации. Кроме того, он позволяет вам:
- Встречать ваших пользователей там, где они находятся, поддерживая различные API для интеграций, независимо от того, где ваши конечные пользователи потребляют данные.
- Оптимизировать затраты, тратя меньше времени на подготовку данных для потребления.
- Упростить ваш код, не дублируя логику метрик и позволяя MetricFlow выполнять сложные вычисления за вас.
- Уполномочить заинтересованных лиц с богатым контекстом и гибкими, но управляемыми возможностями.
Метрики dbt — это устаревший пакет dbt, который использовался для определения метрик в dbt. Метрики dbt были заменены MetricFlow, более гибким и мощным движком, который сегодня составляет основу семантического слоя dbt.
MetricFlow вводит генерацию SQL в семантический слой dbt и предлагает более продвинутые возможности, чем метрики dbt, например:
- Построение запросов — MetricFlow итеративно строит запросы, используя план потока данных, наш внутренний DAG для генерации SQL. В сравнении, метрики dbt полагались на шаблоны Jinja для построения SQL.
- Соединения — MetricFlow также имеет сложный способ обработки соединений, который не поддерживался в метриках dbt. С MetricFlow вы можете легко получить доступ ко всем допустимым измерениям для ваших метрик на лету, даже если они определены в разных семантических моделях.
Да, конечно! Присоединяйтесь к сообществу dbt в Slack и каналу #dbt-cloud-semantic-layer в Slack для всех вопросов, связанных с семантическим слоем dbt.
Семантический слой dbt достаточно гибок, чтобы работать с многими распространенными подходами к моделированию. Он ссылается на модели dbt, что означает, что то, как вы настраиваете свой семантический слой, будет отражать подход к моделированию, который вы выб рали для исходных данных.
Основное внимание уделяется гибкости и производительности базовых запросов. Например:
- Звездная схема модели данных предлагает больше гибкости для измерений, доступных для данной метрики, но потребует больше соединений.
- Полностью денормализованная модель данных проще, будет материализована до определенного уровня, но не сможет соединяться с другими таблицами.
Хотя семантический слой dbt будет работать в обоих случаях, лучше позволить MetricFlow обрабатывать некоторый уровень денормализации для вас, чтобы предоставить больше гибкости потребителям метрик.
Семантический слой dbt измеряет использование в уникальных 'Запрошенных Метриках'. Обратитесь к Биллинг, чтобы узнать больше о ценообразовании.
Доступность
Семантический слой dbt поддерживает следующие платформы данных:
- Snowflake
- BigQuery
- Databricks
- Redshift
Поддержка других платформ данных, таких как Fabric и Trino, в настоящее время недоступна. Если вы заинтересованы в использовании семантического слоя dbt с платформой данных, не указанной в списке, пожалуйста, свяжитесь с нами.
Да, семантический слой dbt совместим с dbt v1.6 или выше.
Да, клиенты плана dbt Cloud Enterprise или Team могут получить доступ к семантическому слою dbt.
Семантический слой dbt является собственностью dbt Cloud, однако некоторые его компоненты являются открытым исходным кодом. Пользователи dbt Core могут использовать функции MetricFlow, такие как определение метрик в своих проектах, без плана dbt Cloud.
Пользователи dbt Core также могут запрашивать свой семантический слой локально с помощью командной строки. Однако они не смогут использовать API или доступные интеграции для динамического доступа к метрикам.
Если вы заинтересованы в таком типе внедрения, пожалуйста, свяжитесь с нами здесь.
Как работает семантический слой dbt?
Вы можете использовать таблицы и модели dbt для вычисления метрик как вариант, но это статический подход, который жесткий и трудоемкий в обслуживании. Это потому, что метрики редко полезны сами по себе: они обычно нуждаются в измерениях, уровнях и атрибутах, чтобы бизнес-пользователи могли эффективно анализировать (или разрезать и нарезать) данные.
Если вы соз даете таблицу с метрикой, вам нужно будет создать множество других таблиц, производных от этой таблицы, чтобы показать желаемую метрику, разрезанную по желаемому измерению или временной шкале. Зрелые модели данных имеют тысячи измерений, так что вы можете увидеть, как это быстро приведет к ненужному дублированию, обслуживанию и затратам. Также невероятно сложно предсказать все разрезы данных, которые пользователю понадобятся заранее.
С семантическим слоем dbt вам не нужно предварительно соединять или строить какие-либо таблицы; вместо этого вы можете просто добавить несколько строк кода в свою семантическую модель, и эти данные будут вычислены только по запросу.
Нет, вы этого не делаете. При запросе семантического слоя dbt через API семантического слоя вы по умолчанию не материализуете никакие данные.
Семантический слой dbt динамически вычисляет метрику, используя базовые таблицы данных. Затем он возвращает результат конечному пользователю.
Семантический слой dbt не хранит физическую копию ваших данных. Он использует базовые таблицы для построения или вычисления запрашиваемого результата.
Семантический слой dbt является частью dbt Cloud. Он позволяет командам данных определять метрики один раз, централизованно, и получать к ним доступ из любого интегрированного аналитического инструмента, обеспечивая согласованные ответы на разнообразные наборы данных. Предоставляя эту услугу, dbt Labs позволяет клиентам получать доступ к метрикам семантического слоя. Данные клиента проходят через семантический слой на пути обратно из хранилища данных.
dbt Labs обрабатывает это безопасным образом, используя шифрование и аутентификацию из хранилища данных клиента. В некоторых случаях такие данные могут временно кэшироваться в системе dbt Labs (данные не хранятся постоянно).
Сотрудники dbt Labs не могут получить доступ к кэшированным данным в ходе обычных бизнес-операций и должны иметь деловую необходимость и/или одобрение непосредственного руководителя для доступа к базовой инфраструктуре. Доступ будет предоставляться только при необходимости для предоставления клиентских услуг и никогда с целью обогащения dbt Labs.
Никакие данные хранилища клиента не сохраняются в сис темах dbt Labs. Мы предлагаем решение для кэширования, чтобы оптимизировать производительность запросов. Функция кэширования использует хранилище данных клиента, а не хранится в системах dbt Labs. Кроме того, эта функция активируется только через согласие клиента. Таким образом, кэширование всегда находится в руках клиента и на его усмотрение.
Да, применяется.
MetricFlow размещен в dbt Cloud. Запросы из API семантического слоя направляются от нашего API-шлюза к MetricFlow, который генерирует SQL для вычисления того, что запрашивает пользователь. MetricFlow передает SQL обратно нашему шлюзу, который затем выполняет его на платформе данных.
-
Вы определяете семантические модели в YAML-файлах, которые описывают ваши данные, включая сущности (для соединений), меры (с типами агрегации как строительные блоки для ваших метрик) и измерения (для разрезания и нарезки ваших метрик).
-
Затем вы строите свои метрики на основе этих семантических моделей. Все это делается в конфигурациях
.yml
вместе с вашими моделями dbt в ваших проектах. -
После того как вы определили свои метрики и семантические модели, вы можете настроить семантический слой dbt в dbt Cloud.
Прочитайте наше руководство быстрого старта семантического слоя dbt для получения дополнительной информации.
Начиная с марта 2024 года, семантический слой dbt будет предлагать два уровня кэширования:
- Кэш результатов, который кэширует результаты запросов на платформе данных, чтобы последующие запуски того же запроса были быстрее.
- Декларативный кэш, который также находится на вашей платформе данных.
Нет, семантический слой dbt достаточно гибок, чтобы работать с многими подходами к моделированию данных, включая Snowflake, звездные схемы, хранилища данных или другие нормализованные таблицы.
MetricFlow всегда старается генерировать SQL наиболее производительным способом, обеспечивая при этом правильность значения метрики. Он генерирует SQL таким образом, чтобы мы м огли добавлять оптимизации, такие как проталкивание предикатов, чтобы избежать полных сканирований таблиц.
Задержка времени выполнения запросов низкая, порядка миллисекунд.
Если базовая агрегация метрики отличается, то это будут разные метрики. Однако, если у команд разные определения, потому что они используют определенные фильтры или измерения, это все равно одна и та же метрика. Они просто используют ее по-разному.
Это можно управлять, настраивая, как метрика отображается в последующих инструментах, или настраивая сохраненные запросы для обработки различных ее вариантов.
Создание метрик и семантических моделей
MetricFlow в настоящее время не поддерживает пользовательские агрегации на мерах. Вы можете найти поддерживаемые типы агрегации здесь.
Соединения идентифицируются через сущности, определенные в семантической модели. Это ключи в вашем наборе данных. Вы можете указать foreign
, unique
, primary
или natural
соединения.
С несколькими семантическими моделями и сущностями в них MetricFlow создает граф, использ уя семантические модели как узлы и пути соединений как ребра, чтобы автоматически выполнять соединения. MetricFlow выбирает подходящий тип соединения и избегает фан-аут или хазм соединений с другими таблицами на основе типов сущностей. Вы можете найти поддерживаемые типы соединений здесь.
Expr (сокращение от “expression”) позволяет вам вставлять любой произвольный SQL, поддерживаемый вашей платформой данных, в любое определение меры, сущности или измерения.
Это полезно, если вы хотите, чтобы имя объекта в семантической модели отличалось от того, как оно называется в базе данных. Или если вы хотите включить логику в определение компонента, который вы создаете.
Спецификация MetricFlow намеренно предвзята, и мы предлагаем “expr” как выход, чтобы позволить разработчикам быть более выразительными.
Да, хотя сущности должны быть определены под “entities”, они могут быть запрошены как измерения в последующих инструментах. Кроме того, если сущность не используется для выполнения соединений между вашими семантическими моделями, вы можете по желанию определить ее как измерение.
Да! Вы можете проверять свои семантические узлы (семантические модели, метрики, сохраненные запросы) несколькими способами:
- Запрашивайте и проверяйте свои метрики в вашем инструменте разработки перед отправкой изменений в коде.
- Проверяйте семантические узлы в CI, чтобы убедиться, что изменения в коде, внесенные в модели dbt, не нарушают эти метрики.
Доступные интеграции
Существует ряд приложений для работы с данными, которые имеют интеграции с семантическим слоем dbt, включая Tableau, Google Sheets, Hex и Mode, среди прочих.
Обратитесь к Доступные интеграции для получения дополнительной информации.
Вы можете использовать экспорты для материализации ваших метрик в таблицу или представление на вашей платформе данных. Оттуда вы можете подключить свой инструмент визуализации к вашей платформе данных.
Хотя этот подход не предоставляет динамических преимуществ семантического слоя dbt, вы все равно получаете выгоду от централизованных метрик и использования конфигураций MetricFlow для определения, генерации и вычисления SQL для ваших метрик.
Создание экспорта позволяет вам перенести ваши управляемые определения метрик в вашу платформу данных в виде таблицы или представления. Это означает, что ваша логика метрик управляется цент рализованно в dbt, а не как представление в вашей платформе данных, и гарантирует, что значения метрик остаются согласованными во всех интерфейсах.
Да, все наши интерфейсы или API предоставляют описания метрик, которые вы можете отобразить в последующих инструментах.
Разрешения и доступ
Семантический слой dbt использует сервисные токены для аутентификации, сопоставленные с учетными данными платформы данных. Эти учетные данные контролируют физический доступ к необработанным данным. Конфигурация учетных данных позволяет администраторам создавать учетные данные и сопоставлять их с сервисными токенами, которые затем могут быть переданы соответствующим командам для настройки подключения BI. Вы можете настроить учетные данные и сервисные токены, чтобы отразить ваши команды и их роли.
В настоящее время учетные данные, которые вы настраиваете при настройке семантического слоя dbt, используются для каждого запроса. Любые физические политики доступа, связанные с вашими учетными данными, будут соблюдаться.
Мы в настоящее время работаем над введением более детализированных средств управления доступом, включая доступ на уровне пользователя и групповые учетные данные, которые позволяют гибкие гранулярные разрешения.
Реализация
При использовании Семантического слоя dbt в контексте dbt Mesh, мы рекомендуем следующее:
- У вас должен быть один автономный проект, который содержит ваши семантические модели и метрики.
- Затем, по мере создания Семантического слоя, вы можете перекрестно ссылаться на модели dbt в различных проектах или пакетах, чтобы создавать свои семантические модели, используя функцию
ref
с двумя аргументами (ref('project_name', 'model_name')
). - Ваш проект Семантического слоя dbt служит глобальным источником истины для остальных ваших проектов.
Пример использования
Например, предположим, у вас есть публичная модель (fct_orders
), которая находится в проекте jaffle_finance
. При создании вашей семантической модели используйте следующий синтаксис для ссылки на модель:
semantic_models:
- name: customer_orders
defaults:
agg_time_dimension: first_ordered_at
description: |
Март на уровне клиентов, агрегирующий заказы клиентов.
model: ref('jaffle_finance', 'fct_orders') # ref('project_name', 'model_name')
entities:
...остальная часть конфигурации...
dimensions:
...остальная часть конфигурации...
measures:
...остальная часть конфигурации...
Обратите внимание, что в параметре model
мы используем функцию ref
с двумя аргументами для ссылки на пу бличную модель fct_orders
, определенную в проекте jaffle_finance
.
Мы рекомендуем строить ваш семантический слой поверх слоя витрин, который представляет собой чистые и преобразованные данные из ваших моделей dbt.
Учетные данные семантического слоя отличаются от учетных данных, которые вы используете для запуска моделей dbt. В частности, мы рекомендуем использовать менее привилегированный набор учетных данных, так как потребители только читают данные.
В настоящее время семантические модели могут быть созданы из моделей dbt, которые находятся в разных проектах (dbt Mesh). В будущем пользователи также смогут использовать концепции mesh на семантических объектах и определять метрики в разных проектах dbt.
Если вы используете устаревший семантический слой, мы настоятельно рекомендуем вам обновить вашу версию dbt до dbt v1.6 или выше, чтобы использовать последний семантический слой dbt. Обратитесь к специальному руководству по миграции для получения дополнительной информации.