Создание семантических моделей
Как создать семантическую модель
Семантическая модель в семантическом слое эквивалентна модели логического слоя (то, что исторически называлось просто "моделью" в dbt). Так же, как конфигурации для моделей определяются в ключе YAML models:
, конфигурации для семантических моделей находятся под semantic models:
. Ключевое отличие заключается в том, что в то время как логическая модель состоит из конфигурации и SQL или Python кода, семантическая модель определяется исключительно через YAML. Вместо кодирования конкретного набора данных, семантическая модель описывает отношения и выражения, которые позволяют вашим конечным пользователям выбирать и уточнять свои собственные наборы данных динамично и надежно.
- ⚙️ Семантические модели состоят из трех компонентов:
- 🫂 сущности: они описывают отношения между различными семантическими моделями (подумайте об идентификаторах)
- 🔪 измерения: это столбцы, по которым вы хотите разбивать, группировать и фильтровать (подумайте о временных метках, категориях, булевых значениях).
- 📏 меры: это количественные значения, которые вы хотите агрегировать
- 🪣 Мы определяем столбцы как сущность, измерение или меру. Столбцы обычно попадают в одну из этих 3 категорий, или, если это сложное выражение агрегации, они могут составлять метрику.
Определение заказов
Давайте подробнее рассмотрим, как мы можем определить семантическую модель заказов.
- 📗 Мы определяем ее как YAML-словарь в списке
semantic_models
. - 📑 Она будет иметь имя, список сущностей, список измерений и список мер.
- ⏬ Мы рекомендуем определять их в этом порядке последовательно как лучшую практику стиля.
semantic_models:
- name: orders
entities: ... # мы определим их позже
dimensions: ... # мы определим их позже
measures: ... # мы определим их позже
- Далее мы укажем на соответствующую логическую модель, предоставив
ref
в свойствеmodel:
, иdescription
для документации.
semantic_models:
- name: orders
description: |
Модель, содержащая данные о заказах. Зерно таблицы — идентификатор заказа.
model: ref('stg_orders')
entities: ...
dimensions: ...
measures: ...