Открыть сервис

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 хранит данные в оперативной памяти в колоночном формате. В отличие от строковых баз данных, где все значения одной строки хранятся вместе, колоночный формат хранит все значения одного столбца (колонки) последовательно. Это даёт два главных преимущества:

  1. Высокая степень сжатия. Значения одного столбца часто повторяются или изменяются в узком диапазоне, что позволяет применять эффективные алгоритмы сжатия (кодирование, дельта-сжатие, словарное сжатие). В результате объём данных в памяти может уменьшиться в 5–10 раз по сравнению с исходным размером.
  2. Скорость работы запросов. Для агрегаций (сумма, среднее, количество) движку не нужно считывать целые строки — достаточно прочитать только нужные колонки. Это радикально ускоряет выполнение аналитических запросов.

Колоночное сжатие

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 →