VertiPaq
VertiPaq — это технология сжатия и хранения данных в памяти (in-memory), разработанная корпорацией Microsoft и используемая в аналитических сервисах, таких как Microsoft Analysis Services (в режиме Tabular), Power BI и Power Pivot для Excel. VertiPaq лежит в основе так называемого «табулярного движка», который обеспечивает высокую скорость работы с большими объёмами данных за счёт колоночного хранения, эффективного сжатия и специализированных алгоритмов запросов.
История
Технология VertiPaq была анонсирована компанией Microsoft в конце 2000-х годов как часть нового поколения средств бизнес-аналитики. Первоначально она появилась в Microsoft SQL Server 2012 в составе служб Analysis Services в табулярном режиме. Разработка велась с целью преодоления ограничений традиционных многомерных (OLAP) кубов, которые требовали длительного проектирования схем типа «звезда» и сложного администрирования.
VertiPaq стала ответом на рост популярности колоночных баз данных и необходимость работы с моделями данных, которые могут быть как импортированными из различных источников, так и динамически обновляемыми. С выходом Power Pivot для Excel 2010 технология стала доступна для массового пользователя, а в Power BI (с 2015 года) она превратилась в стандартный механизм хранения и обработки данных. С тех пор VertiPaq постоянно совершенствуется: в неё добавляются новые алгоритмы сжатия, улучшается поддержка DirectQuery (гибридный режим работы) и оптимизируется производительность запросов языка DAX (Data Analysis Expressions).
Устройство и принципы работы
VertiPaq хранит данные в оперативной памяти в колоночном формате. В отличие от строковых баз данных, где все значения одной строки хранятся вместе, колоночный формат хранит все значения одного столбца (колонки) последовательно. Это даёт два главных преимущества:
- Высокая степень сжатия. Значения одного столбца часто повторяются или изменяются в узком диапазоне, что позволяет применять эффективные алгоритмы сжатия (кодирование, дельта-сжатие, словарное сжатие). В результате объём данных в памяти может уменьшиться в 5–10 раз по сравнению с исходным размером.
- Скорость работы запросов. Для агрегаций (сумма, среднее, количество) движку не нужно считывать целые строки — достаточно прочитать только нужные колонки. Это радикально ускоряет выполнение аналитических запросов.
Колоночное сжатие
VertiPaq использует несколько методов сжатия в зависимости от типа данных столбца:
- Кодирование (Encoding). Для целочисленных и датовых типов применяется кодирование с фиксированной длиной (Value Encoding), когда каждое значение представляется числом фиксированного размера. Для строковых и иных типов — хэш-кодирование (Hash Encoding), где каждому уникальному значению сопоставляется числовой идентификатор (индекс).
- Словарное сжатие (Dictionary Compression). Для столбцов с небольшим количеством уникальных значений (например, пол, статус заказа) строится словарь, который хранит все возможные значения, а в основной памяти лежат только индексы этих значений.
Кроме того, VertiPaq применяет алгоритмы Run-Length Encoding (RLE) и дельта-сжатие для последовательностей повторяющихся значений. Все эти механизмы работают прозрачно для пользователя и не требуют настройки.
Табулярная модель
VertiPaq оперирует понятием «табулярной модели» — набора таблиц (связанных или не связанных друг с другом), которые загружены в память. Каждая таблица может быть как целиком импортирована из источника (например, из SQL Server, Oracle, CSV-файла), так и быть результатом вычислений (вычисляемые таблицы, созданные на языке DAX). Модель данных может включать миллиарды строк и тысячи столбцов, ограничиваясь только доступной оперативной памятью сервера или клиентского компьютера.
Запросы на языке DAX
Основным языком для обращения к данным, хранящимся в VertiPaq, является DAX (Data Analysis Expressions) — язык формул, напоминающий синтаксис Excel. DAX позволяет выполнять сложные вычисления, фильтрацию, создание мер и колонок. VertiPaq интерпретирует DAX-выражения, генерируя внутренние запросы к колоночным хранилищам. Благодаря колоночной архитектуре, типичные операции типа SUM, COUNT, AVERAGE выполняются за доли секунды даже на многомиллионных наборах данных.
Классификация режимов работы
VertiPaq может работать в двух основных режимах, определяющих способ загрузки данных:
- Импортный режим (Import). Данные копируются из источника и сжимаются в оперативную память. Это обеспечивает максимальную производительность запросов, но требует достаточного объёма ОЗУ и периодического обновления данных.
- DirectQuery. Запросы не переводят данные в память, а отправляются напрямую к исходной базе данных (например, SQL Server, Azure Synapse). VertiPaq в этом случае выступает как посредник, транслирующий DAX в SQL и возвращающий результат. Такой режим подходит для очень больших объёмов данных, которые невозможно или нецелесообразно загружать в память полностью, но он медленнее и имеет некоторые ограничения (например, по поддерживаемому синтаксису DAX).
Также существует гибридный режим — Composite Models, где часть таблиц загружается в память, а часть остаётся в режиме DirectQuery.
Применение
VertiPaq широко применяется в корпоративной аналитике и самообслуживаемой бизнес-аналитике. Основные сценарии:
- Power BI Desktop и Service (Microsoft). Весь аналитический движок Power BI основан на VertiPaq. Пользователи создают отчёты и дашборды, используя импортированные данные. При публикации в облачный сервис Power BI данные хранятся на серверах Microsoft в сжатом виде, что обеспечивает низкую стоимость хранения и быструю визуализацию.
- Power Pivot для Excel. Надстройка Excel, позволяющая загружать и анализировать данные в таблицах большого объёма (до десятков миллионов строк) прямо в книге Excel.
- Microsoft Analysis Services Tabular. Профессиональное решение для разработки корпоративных баз данных аналитических моделей, которые могут обслуживать сотни пользователей и интегрироваться с SQL Server Reporting Services (SSRS) и другими BI-инструментами.
- Azure Analysis Services (AAS). Облачная версия табулярного движка, полностью совместимая с VertiPaq. Позволяет разворачивать аналитические модели в облаке Microsoft Azure, масштабируя вычислительные ресурсы по необходимости.
Преимущества и ограничения
Преимущества
- Скорость. Агрегации и вычисления на сжатых колоночных данных выполняются на порядок быстрее, чем в традиционных строковых СУБД.
- Компактность. Высокая степень сжатия позволяет хранить в памяти объёмы данных, которые в противном случае потребовали бы значительно больше ресурсов.
- Простота использования. Табулярные модели создаются без необходимости проектирования сложных схем, а DAX-формулы знакомы пользователям Excel.
- Интеграция. Полная совместимость с современными BI-инструментами Microsoft (Power BI, Excel, SSRS).
Ограничения
- Потребление ОЗУ. Все импортированные данные должны помещаться в оперативной памяти. Для очень больших наборов данных (сотни миллиардов строк) необходимы серверы с объёмом памяти в терабайты, что дорого.
- Ограничения DirectQuery. В этом режиме теряются некоторые возможности VertiPaq (например, не работают вычисляемые в памяти таблицы), а производительность запросов зависит от источника.
- Сложность оптимизации. Хотя VertiPaq автоматически сжимает данные, некоторые типы данных (длинные строки текста, GUID) сжимаются плохо и увеличивают объём памяти. Оптимизация модели (удаление ненужных столбцов, правильный выбор типов данных) остаётся задачей разработчика.
Сравнение с другими технологиями
VertiPaq часто сравнивают с другими колоночными движками, такими как Oracle In-Memory Database, SAP HANA, Apache Parquet (формат хранения) и ClickHouse. Ключевое отличие VertiPaq — тесная интеграция с DAX и экосистемой Microsoft BI. В отличие от ClickHouse, который оптимизирован для real-time агрегаций больших объёмов логов, VertiPaq лучше подходит для аналитики с реляционными, но большими наборами данных, где важна поддержка сложных вычислений на лету.
Интересные факты
- Слово «VertiPaq» является портманто от «vertical» (вертикальный, колоночный) и «pack» (упаковка, сжатие).
- В Power BI значение сжатия (соотношение размера исходных данных к размеру в модели) отображается в инструменте VertiPaq Analyzer, входящем в состав DAX Studio — бесплатного стороннего приложения для анализа и отладки DAX-запросов.
- По состоянию на 2023 год, корпорация Microsoft продолжает активно развивать VertiPaq: в каждом обновлении Power BI добавляются новые оптимизации алгоритмов сжатия и поддержка более сложных сценариев (например, вычисления на уровне партиций).
Источники
- Microsoft Docs: Understanding VertiPaq (SQL Server Analysis Services Tabular)
- SQLBI.com: “Optimizing DAX” by Alberto Ferrari and Marco Russo
- Microsoft Power BI Documentation: Data Storage and Compression
- Техническая документация Microsoft — Power Pivot and VertiPaq Architecture
- Книга “The Definitive Guide to DAX” (Alberto Ferrari, Marco Russo) — глава о VertiPaq
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →