Тактическая терминология
Оставшаяся часть этого руководства будет посвящена процессу миграции вашего существующего кода dbt в Semantic Layer. Для этого нам потребуется ввести некоторые новые термины и понятия, которые характерны именно для Semantic Layer.
Мы хотим определить их заранее, так как вкладываем в них конкретный смысл применительно к процессу миграции кода в Semantic Layer. Эти термины могут означать разные вещи в разных контекстах, но в рамках этого руководства мы будем понимать под ними следующее:
- 🔲 Нормализованный — может быть определен с различной степенью технической строгости, но здесь мы имеем в виду что-то, что содержит уникальные данные, хранящиеся только один раз в одном месте, чтобы их можно было эффективно объединять и агрегировать в различные формы. Вы можете думать об этом как о таблицах, которые функционируют как концептуальные строительные блоки в вашем бизнесе, не в смысле строгой третьей нормальной формы Кодда.
- 🛒 Март — также имеет множество определений, но здесь мы имеем в виду таблицу, которая относительно нормализована и функционирует как источник истины для ключевой концепции в вашем бизнесе.
- 🕸️ Денормализованный — когда мы храним одни и те же данные в нескольких местах для более легкого доступа без объединений. Наиболее денормализованная система моделирования данных — это OBT (One Big Table), где мы стараемся собрать все возможные интересные столбцы, связанные с концепцией (например, клиенты), в одну большую таблицу, чтобы аналитик мог просто использовать
select. - 🗞️ Свертка — используется здесь как общий термин, означающий как денормализованные таблицы, построенные на основе нормализованных мартов, так и те, которые выполняют агрегации до определенного уровня. Например,
active_accounts_per_weekможет агрегировать данныеcustomersиordersдо недельного уровня. Другим примером может бытьcustomer_metrics, который может денормализовать множество данных изcustomers, а также агрегированные данные изorders. Для краткости в этом руководстве мы будем называть все эти типы продуктов, построенных на основе ваших нормализованных концепций, свертками.
Мы также будем использовать пару новых терминов для краткости. Это не стандартные и не официальные термины dbt, но они удобны для передачи смысла в контексте рефакторинга кода под Semantic Layer:
- 🧊 Frozen (замороженный) — условное обозначение кода, который статически формируется в логическом слое трансформаций dbt. Это не относится к типу материализации: представления (views), инкрементальные модели и обычные таблицы — всё это считается frozen, поскольку они статически генерируют данные или код, которые сохраняются в хранилище данных, в отличие от динамических запросов, как в случае с Semantic Layer. Это не плохо! Мы хотим, чтобы часть нашей логики трансформаций была замороженной и стабильной: логика трансформаций обычно не меняется быстро, и мы получаем преимущества в тестировании, производительности и стабильности.
- 🫠 Melting (размораживание) — процесс разбиения замороженных структур на гибкий код Semantic Layer. Это позволяет динамически создавать максимально возможное количество комбинаций и агрегаций в ответ на запросы и потребности стейкхолдеров.
🏎️ Semantic Layer — это движок денормализации. dbt трансформирует ваши данные в чистые, нормализованные витрины (marts). Semantic Layer — это движок денормализации, который динамически соединяет и «лепит» из этих строительных блоков максимально возможное количество форм на лету.