SQL – это нескучно. С современными инструментами возможности языка кратно возросли. Мультитул для моделирования данных dbt, современные колоночные аналитические СУБД позволяют буквально творить с данными чудеса. Меня зовут Артемий и я Analytics Engineer. И сегодня я подготовил небольшой экскурс в реальные и интересные сценарии использования гибридного SQL: Операции Pivot и Unpivot для табличных данных Генерирование суррогатного ключа и ключа конкатенации Гибкая фильтрация записей из таблиц-источников Автоматизация экспорта данных из Хранилища в S3 Валютные курсы, Continuous Integration, Data Quality Операция pivot позволяет повернуть плоскую двумерную таблицу таким образом, что значения в строках образуют новые колонки. Операция unpivot позволит выполнить обратное действие и уменьшить размерность таблицы, превратив колонки в строки. Иначе это можно назвать манипуляциями со сводными таблицами (сross-tables).  Соответствующие макросы dbt, реализующие преобразования данных через SQL, позволяют просто и гибко сформировать результирующий набор данных требуемого формата, без привязки к используемой СУБД. Реальная ситуация, в которой это может применяться – подготовка выгрузки по заранее оговоренной структуре для внешних пользователей. Например, выгрузка пользовательских атрибутов в формате ключ-значение. Исходный набор данных: Результирующий набор данных: Макрос, используемый в SQL-скрипте выглядит довольно просто: Преимущество такого подхода в том, что сколько бы дополнительных атрибутов не появилось, это не потребует ни единого изменения в существующий код, что очень удобно. Использование суррогатных ключей – важнейший аспект любого хранилища данных. Это ключи, позволяющие однозначно идентифицировать строки и соединять таблицы фактов и измерений. Обычно я использую хэш-функции, подавая на вход значения бизнес-ключей из систем-источников. Эта практика также широко распространена в Data Vault 2.0 и позволяет иметь согласованные результаты между данными из различных источников. Но иногда в случае составного ключа вы хотели бы сохранить интерпретируемость и читаемость (human-readable) всех значений. В частности это особенно актуально в маркетинговой аналитике, где ключ строки может содержать набор меток: utm_source, utm_medium, utm_campaign, ads_group_id, keyword_id.  Удобочитаемые (human-readable) значения помогают быстро отслеживать источники и исправлять баги, в то время как хешированные суррогатные ключи используются для оптимальных соединений таблиц: Генерация этих ключей выполняется с помощью макросов hash(), concat(), surrogate_key() (адаптер MS SQL):  Следует обратить особое внимание на следующие моменты: Преобразование составных значений атрибутов в текстовую форму Обработка значений null, если таковые присутствуют Последовательность соединения атрибутов ключа Использование разделителя между значениями ключа (тире, подчеркивания или любого другого) Вызов макросов в коде выглядит следующим образом: Актуальный код, который будет запущен в СУБД (скомпилированная версия): Как правило Хранилище Данных объединяет информацию из десятков или даже сотен источников. Каждый из них обладает своими особенностями и в разных случаях имеет смысл ограничивать выборки, обращаясь к исходным данным. Имейте в виду следующие сценарии: Чтение актуальных данных (deleted_flag is not true) Формирование ограниченной выборки для разработки и Continuous Integration Поиск дельты для инкрементального наполнения витрин При этом помните, что названия колонок, по которым мы фильтруем данные могут отличаться от источника к источнику. Различаться могут также и типы данных – epoch (bigint) vs timestamp. Все эти вводные хорошо ложатся на шаблонизированное формирование выражений в конструкции WHERE. Сам макрос может выглядеть следующим образом (с пояснениями):  Результат для первого (с нуля) формирования таблицы в dev-контуре:   А теперь давайте вспомним первый пример, где мы формировали unpivot-таблицу для внешних пользователей. Предположим, что в этот раз они обратились к нам с просьбой сформировать выгрузку не внутри Хранилища, но как плоские файлы в Object Storage (S3). Вполне реальный сценарий. Мы могли бы начать думать об инструментах, которые способны это сделать, выстраивать пайплайны, выбирать языки программирования, но не следует привлекать новые сущности без крайней на то необходимости. Воспользуемся тем, что умеет сама СУБД. Операция UNLOAD (синтаксис Amazon Redshift), выполняемая как post-hook модели dbt:  Таким образом, на каждый регулярный расчет (раз в сутки, раз в час) будет сформирована и сохранена в S3 по указанному пути csv-выгрузка. А чтобы не хранить данные в СУБД, материализуем выгрузку как представление (view, виртуальная таблица). 8 файлов по количеству узлов в кластере (принцип MPP-базы данных) Ранее я писал о других интересных сценариях и использовании современного аналитического стека: Интеграционные тесты для Хранилища Данных – Настраиваем Slim CI для DWH Формирование окружения для CI Гибкое управление схемой, использование идентификатора Pull Request Курсы валют и аналитика – использование обменных курсов в Хранилище Данных Макросы для работы с внешними данными (External Tables) Автоматизация пересчета курсов валют на лету ​​Кто ответит за качество аналитики: QA для Хранилища Данных Тестирование ожиданий (expectations) от данных Формирование тестов на бизнес-логику Между тем, если вас интересует не только чтение, но и практика вкупе с получением знаний из первых уст, ознакомьтесь с платформой ОТУС и занятиями, в рамках которых я и мои коллеги делимся всех тем, что умеем и любим делать. Data Engineer – один из самых успешных тиражных курсов, в запусках которого я участвую уже более 2-х лет. К новому старту готовы кардинальные обновления по содержанию, используемым инструментам, инфраструктуре, включая выделенные вебинары на разбор домашних заданий. Analytics Engineer – попытка закрыть потребность на людей-мультиинструменталистов, которые сильны и в понимании специфики бизнеса, моделировании и в инженерной части. Львиная доля курса посвящена современным аналитическим СУБД, BI-инструментам, практикам продвинутой аналитики и моделирования в dbt. Спасибо за внимание! Материал подготовлен в рамках курса Data Engineer. Если вас интересует развитие в сфере работы с данными с нуля до Pro, предлагаем узнать про специализацию Data Engineer.Также приглашаем всех желающих на Demo-урок «Введение в оркестрацию». На этом занятии подробно разберем, что такое платформы оркестрации, какие решения есть сегодня на рынке и даже углубимся в практический пример использования одной из самых распространенных платформ на сегодня: Apache Airflow.  →  РЕГИСТРАЦИЯ  Analytics Engineer / Data / Cloud