Индексы#
В процессе создания модели у пользователя есть возможность добавить индексы. Индексы помогают улучшить производительность, повысить скорость обработки запросов и в последствии ускорить построение отчетов.
Индексы делятся на:
базовый индекс с последующим делением на:
базовый агрегатный индекс;
базовый индекс таблицы.
агрегируемая группа;
индекс таблицы.
Базовый индекс – минимально необходимый индекс, включающий все столбцы таблицы фактов. Обеспечивает полное покрытие данных и служит резервным источником для запросов, которые не попадают ни под агрегатный, ни под индекс таблицы. Базовые индексы полезны в бизнес-сценариях, когда пользователь знает, какие измерения и меры нужны, но не знает, как правильно организовать их в индексы.
Индекс таблицы хранит строки в порядке определенных ключей. Он предназначен для выборки отдельных строк без агрегации с возможностью фильтрации и сортировки и позволяет эффективно запрашивать подробные записи данных. Например, если аналитику интернет-магазина необходимо запросить подробные данные о заказе, он может добавить в индекс таблицы такие параметры как: OrderKey, OrderDate, PartKey, CustomerKey, OrderQuantity, OrderAmount.
Применяется для запросов типа SELECT, например, SELECT FROM <id> WHERE <condition>.
Базовый индекс таблицы включает все столбцы, связанные с измерениями и мерами модели. Он может покрыть нестандартные запросы, но с увеличенным временем обработки запроса. В то время как индекс таблицы ориентирован на ускоренную выборку по заданным ключам и фильтрам.
Агрегируемая группа — группа комбинаций измерений, настроенных на конкретный бизнес-анализ. Например, аналитику интернет-магазина необходимо проанализировать покупательскую способность покупателей-мужчин и покупателей-женщин в разных городах, и комбинация измерений в индексе будет: «город», «пол покупателя». В это время другие измерения в индексе не нужны. Если не нужно анализировать товарную категорию, то нет необходимости включать ее в какой-либо индекс.
Используется для ускорения выполнения SQL-запросов с, например, GROUP BY, SUM, COUNT.
Базовый агрегатный индекс в отличие от агрегируемой группы включает все измерения и меры, используемые в модели. Он обеспечивает покрытие всех комбинаций, но за счет этого менее гибкий.
Ниже приведена таблица сравнения индексов:
Название |
Тип |
Содержимое |
Назначение |
Область применения |
Гибкость настройки |
Скорость выполнения запроса |
|---|---|---|---|---|---|---|
Агрегируемая группа |
Логическая структура |
Набор измерений и мер и правил агрегации |
Определяет, какие агрегаты будут построены |
Аналитика, упорядоченные отчеты, метрики |
Высокая |
Очень высокая |
Индекс таблицы |
Конкретный индекс |
Упорядоченные поля и меры |
Быстрые выборки по ключам, детализация |
Фильтрация, детализация, поиск |
Средняя |
Высокая |
Базовый агрегатный индекс |
Макет агрегационного типа |
Все измерения и меры модели |
Резервный агрегат для любых группировок |
Универсальная агрегация, непредусмотренные запросы |
Низкая |
Средняя |
Базовый индекс таблицы |
Макет табличного типа |
Все столбцы, связанные с измерениями и мерами |
Резервный источник данных без агрегаций |
Непредусмотренные детализированные выборки |
Низкая |
Средняя |
Чтобы начать работать с индексами:
Откройте вкладку Модель (1).
Откройте модель (2).
Откройте вкладку Индексы (3). Откроется вкладка Обзор индекса, где можно ознакомиться со списком индексов и с основной информацией по ним. Также, эта вкладка позволяет добавить группу агрегатов и индекс таблицы, и создать индекс или удалить его.
В разделе Индексы доступно три вкладки:
Обзор индексов (описание работы с вкладкой описано в разделе по работе с базовым индексом).
Важно
Создавать и редактировать индексы может технический администратор системы, администратор проекта, а также аналитик.
Базовый индекс#
Во вкладке Обзор индексов находится таблица, в которой приведен список всех существующих индексов. Но базовые индексы можно создавать, просматривать, редактировать и удалять только в этой вкладке. В таблице указаны следующие столбцы с данными по индексам (по некоторым из столбцов доступна фильтрация и сортировка):
ID индекса – уникальный идентификатор индекса.
Хранилище – объем занимаемой памяти индексом. При помощи стрелочек можно сортировать индексы от большего значения к меньшему и наоборот.
Использование – количество раз, когда использовался индекс. При помощи стрелочек можно сортировать индексы от большего значения к меньшему и наоборот.
Источник – тип индекса. При помощи выпадающего списка можно отфильтровать индексы по их типу.
Содержание – таблица фактов как источник данных индекса. Для этой колонки доступен предпросмотр содержания индекса. Чтобы открыть полный список элементов в индексе, нажмите кнопку Подробнее в окне предпросмотра или кнопку
справа от названия таблицы фактов.
Статус – статус индекса. При помощи выпадающего списка можно отфильтровать индексы по их статусу.
Примечание
Существуют следующие статусы:
НЕТ ПОСТРОЕНИЯ – в индекс не загружены данные и он недоступен для запросов.
ДОСТУПЕН – индекс полностью исправен и готов к обработке запросов.
ЗАБЛОКИРОВАН – произошли изменения в данных модели, индекс недоступен для запросов.
ПОСТРОЕНИЕ – идет загрузка данных, индекс недоступен для запросов.
Действия – содержит кнопку Создать индекс.
Индексы можно:
добавить;
Примечание
Добавление индексов описано в разных разделах ниже в соответствии с типом создаваемого индекса:
создать (построить);
Добавить индекс можно при помощи кнопки + Индекс. С ее помощью можно добавить базовые индексы, агрегируемые группы и табличные индексы.
Кнопка Создать индекс выполняет функцию загрузки данных в индекс. Ее можно найти как сверху над таблицей индексов, так и в последней колонке таблицы Действия. Эти кнопки выполняют создание индекса с типом построения Полная загрузка. Кнопка Создать справа от названия модели дает возможность выполнить инкрементальную загрузку, при этом предварительно выбирать индексы в таблице нет необходимости.
При помощи кнопки Создать индекс, расположенной над таблицей, можно загрузить данные в несколько выбранных индексов. Кнопка в последнем столбце таблицы загружает данные только в один индекс.
Поле поиска предназначено для поиска по содержимому индексов. Введите в поле нужное значение и нажмите кнопку Enter.
Создание базового индекса#
Ниже описано создание двух индексов: базового агрегатного и базового индекса таблицы.
Примечание
Если при создании модели была выбрана опция Добавить базовые индексы, то при сохранении модели отобразится уведомление о добавлении двух базовых индексов. Для просмотра индексов нажмите в уведомлении кнопку Просмотр индексов. В данном случае пропустите в алгоритме ниже шаги 1 и 2.
Чтобы создать базовый индекс:
Нажмите кнопку + Индекс (1).
В выпадающем списке выберите опцию Базовый индекс (2). В списке индексов появятся два индекса: базовый агрегатный индекс и базовый индекс таблицы.
Нажмите кнопку Создать (3).
Примечание
Создать индекс (построить) можно при помощи кнопок Создать индекс над таблицей и в последней колонке Действия. Но при использовании этих кнопок можно выполнить только полную загрузку.
В открывшемся окне выберите тип построения (4): полная или инкрементальная.
Если выбрана инкрементальная загрузка, укажите диапазон данных (5).
Нажмите кнопку Инкрементальная загрузка (6а) / Полная загрузка (6б) .
В результате индексы перейдут в статус ПОСТРОЕНИЕ. После построения статус изменится на ДОСТУПЕН.
Агрегируемая группа#
Агрегируемые группы используются для оптимизации вычислений. Они группируют измерения, которые часто запрашиваются вместе, чтобы предварительно вычислять агрегаты только для этих комбинаций. Это увеличивает количество индексов и размер занимаемого пространства, но ускоряет выполнение запросов.
Без агрегируемых групп OLAP отправляет все запросы в базовый агрегатный индекс. Агрегируемые группы позволяют:
снизить вычислительные затраты;
ускорить обработку запросов для часто используемых комбинаций измерений;
управлять сложностью модели, исключая ненужные комбинации.
Чтобы работать только с агрегируемыми группами, откройте вкладку Агрегируемая группа в разделе Индексы в выбранной модели. Область слева показывает список индексов по их ID. Область справа показывает список индексов с основной информацией по ним.
Агрегируемую группу можно создать при помощи кнопки Добавить агрегируемую группу над списком индексов или кнопки + Агрегируемая группа в поле справа (эта кнопка доступна, когда нет ни одной созданной агрегируемой группы).
Кнопка Расширенные настройки открывает доступ к настройкам кардинальности и сегментации индекса по измерениям. В модальном окне можно выбрать измерение для сегментации.
Также для удобства и простоты работы с большим количеством измерений в правом верхнем углу расположено поле поиска. Результаты поиска отображаются автоматически по ходу ввода значения в поле.
Создание агрегируемой группы#
Пример использования агрегируемых групп
Создана модель, в которую добавлены:
таблица Дата с измерениями год, месяц, день.
таблица География с измерениями страна, город.
таблица Продукт с измерениями категория, подкатегория.
Сценарий запросов:
Отчет по продажам, который содержит данные по году, стране и категории.
Отчет по продажам, который содержит данные по месяцу, городу и подкатегории.
Отчет по продажам, который содержит данные по дню, стране и подкатегории.
Первые два сценария используются часто, третий — редко. Если не использовать агрегируемые группы, OLAP будет вычислять все комбинации, включая редко используемые комбинации (то есть день, страна, подкатегория для третьего сценария), что увеличит размер занимаемого пространства.
В данном примере требуется создать две агрегируемые группы:
Первая агрегируемая группа будет содержать измерения для 1 и 3 отчетов, так как они частично пересекаются в одном из измерений: год, месяц, страна, город, категория.
Вторая агрегируемая группа будет содержать измерения только для 2 отчета, так как она не пересекается в измерениях с отчетами 1 и 2: месяц, город, категория.
При создании таких агрегируемых групп:
OLAP предвычислит указанные комбинации;
создаст дополнительные индексы;
запросы из сценариев будут выполняться быстрее.
В каждой агрегированной группе можно указать:
измерение, с которым в данной агрегируемой группе будут вычислены все агрегаты (обязательное измерение);
измерения, для которых существует иерархическая связь, например, год → месяц (иерархия).
измерение, которое является внешним ключом для связи с таблицей фактов (соединение).
Также агрегируемые группы используются для формирования MDX-запросов с использованием группировки GROUPING SETS в MDXK. Для корректной работы таких запросов при создании агрегируемой группы:
проверьте наличие обязательной меры COUNT_ALL;
выберите измерение, которое будет являться внешним ключом для соединения с таблицей фактов.
Внимание
Для корректной работы GROUPING SETS при создании модели на шаге Использование приложения оператором выберите в списке измерения, которые являются внешними ключами для связи с таблицей фактов. Эти измерения при создании агрегируемой группы укажите в поле Соединение при создании агрегируемой группы.
Пример использования GROUPING SETS
В алгоритме ниже создана агрегируемая группа для измерения DIM_DATE.
В MDXK построен отчет с использованием измерений из этой агрегируемой группы.
В OLAP во вкладке Запрос → История отображается использование группировки GROUPING SETS.
Примечание
В алгоритме «Создание агрегируемой группы» шаги, которые являются обязательными для корректной работы MDX-запросов с группировкой GROUPING SETS, отмечены фразой «Требуется для GROUPING SETS».
Создать агрегируемую группу можно как из вкладки Обзор индексов, так и Агрегируемая группа. В обоих случаях открывается одинаковый интерфейс создания агрегируемой группы. Шаги 1 и 2 будут отличаться в зависимости от того, из какой вкладки идет добавление агрегируемой группы. Начиная с шага 3, инструкция по добавлению будет единая для работы из любой вкладки.
Чтобы открыть интерфейс создания индекса из вкладки Обзор индексов:
Нажмите кнопку + Индекс (1).
В выпадающем списке выберите опцию Агрегируемая группа (2).
Чтобы открыть интерфейс создания индекса из вкладки Агрегируемая группа:
Откройте вкладку Агрегируемая группа.
Нажмите кнопку Добавить агрегируемую группу или + Агрегируемая группа.
Далее описана работа в интерфейсе создания индекса:
Нажмите кнопку Добавить (3) в поле Включить, чтобы добавить измерения в группу.
В отображающемся окне выберите измерения.
Внимание
Требуется для
GROUPING SETS. Выберите измерение, которое является внешним ключом для соединения с таблицей фактов.Нажмите кнопку ОК. Выбранные измерения отображаются в поле Включить.
Требуется для
GROUPING SETS. На вкладке Мера (4) убедитесь, что мера COUNT_ALL добавлена. При необходимости отредактируйте список используемых мер, нажав на кнопку Редактировать. Вернитесь на вкладку Измерение.Опционально. В поле Обязательное выберите измерение из выпадающего списка.
Примечание
Если указать обязательное измерение, то будут вычислены индексы только с этим измерением.
Опционально. В поле Иерархия выберите два и более измерений, для которых существует иерархическая связь (например, год → месяц).
Требуется для
GROUPING SETS. В поле Соединение (5) выберите размерность, которая является внешним ключом для соединения с таблицей фактов.Нажмите Сохранить (сохраняет индекс без построения) или Сохранить и создать индекс (запускает построение индекса) (6).
Во вкладке Агрегируемая группа появится новая запись в области справа и слева. Во вкладке Обзор индексов появится новая запись в таблице со списком всех существующих индексов.
Если индекс был сохранен без построения, его можно построить при помощи кнопки Создать справа от названия модели или во вкладке Обзор индексов при помощи кнопок Создать индекс.
Каждая запись эквивалентна одному табличному индексу. Для каждой записи есть кнопки Редактировать и Удалить. Кнопка Редактировать открывает модальное окно аналогичное тому, что открывается для создания агрегируемой группы. Удаление индексов описано в разделе «Удаление индекса».
Индекс таблицы#
Во вкладке Таблица индекса происходит работа только с табличными индексами. Здесь можно создать, отредактировать и удалить индекс таблицы. Левая область показывает список индексов по их ID. Справа область показывает список индексов с основной информацией по ним.
В этой вкладке можно создать индекс только типа Индекс таблицы при помощи кнопки Добавить табличный индекс над списком индексов или кнопки + Табличный индекс в поле справа (эта кнопка доступна, когда нет ни одной созданного индекса таблицы).
Создание табличного индекса#
Создать индекс таблицы можно как из вкладки Обзор индексов, так и Таблица индекса. В обоих случаях открывает одинаковый интерфейс создания индекса. Шаги 1 и 2 будут отличаться в зависимости от того из какой вкладки идет добавление индекса. Начиная с шага 3, инструкция по добавлению будет единая для работы из любой вкладки.
Чтобы открыть интерфейс создания индекса из вкладки Обзор индексов:
Нажмите кнопку + Индекс.
В выпадающем списке выберите опцию Индекс таблицы.
Чтобы открыть интерфейс создания индекса из вкладки Таблица индекса:
Откройте вкладку Таблица индекса.
Нажмите кнопку Добавить табличный индекс или + Табличный индекс.
Далее описана работа в интерфейсе создания индекса:
В модальном окне отметьте чек-боксы нужных столбцов таблицы. Столбцы будут перемещаться в начало таблицы по первоочередности их выбора.
Опционально. Укажите кардинальность.
Опционально. Отметьте необходимость сегментации столбцов.
Опционально. Поменяйте порядок столбцов при помощи стрелочек в столбце Порядок:
две стрелочки вверх переносят столбец в самое начало (делают его самым первым);
стрелочка вверх переносит столбец на одну позицию вверх;
стрелочка вниз переносит столбец на одну позицию вниз.
Нажмите кнопку Сохранить (сохраняет индекс без построения) или Сохранить и построить (запускает построение индекса).
Во вкладке Таблица индекса появится новая запись в области справа и слева. Во вкладке Обзор индексов появится новая запись в таблице со списком всех существующих индексов.
Если индекс был сохранен без построения, его можно построить при помощи кнопки Создать справа от названия модели или во вкладке Обзор индексов при помощи кнопок Создать индекс.
Каждая запись эквивалентна одному табличному индексу. Для каждой записи есть кнопки Редактировать и Удалить. Кнопка Редактировать открывает модальное окно аналогичное тому, что открывается для создания табличного индекса. Удаление индексов описано в разделе «Удаление индекса».
Удаление индекса#
Чтобы удалить индекс во вкладке Обзор индексов:
Откройте вкладку Активы данных → Модель.
Выберите нужную модель. В открывшемся меню выберите вкладку Индексы.
Выберите необходимые для удаления индексы и нажмите кнопку Удалить.
Подтвердите удаление, нажав кнопку Удалить в модальном окне.
В данной вкладке можно удалить индекс любого типа.
Примечание
Если индексы будут удалены из сегментов, это может повлиять на производительность запросов, так как некоторые из них могут попасть в механизм pushdown из-за отсутствия индекса.
Чтобы удалить агрегируемую группу из вкладки Агрегируемая группа:
Нажмите кнопку Удалить в правом верхнем углу записи.
Подтвердите удаление, нажав кнопку Удалить в модальном окне.
В данной вкладке можно удалить только агрегируемую группу.
Чтобы удалить индекс таблицы из вкладки Таблица индекса:
Нажмите кнопку Удалить в правом верхнем углу записи.
Подтвердите удаление, нажав кнопку Удалить в модальном окне.
В данной вкладке можно удалить только табличный индекс.