Dremio Data Reflections. Необходимый минимум для быстродействия

Все мы хотим, чтобы наши дашборды и отчеты работали как можно быстрее. И одним из главных способов для достижения этой цели при работе с Dremio является создание «Отражений данных» (с англ. Data Reflections, далее – просто Reflections, рис.1).

Рисунок 1. Раздел Reflections в Dremio.

Reflection является физически оптимизированной репрезентацией (физический кэш/копия) таблицы (table) или представления (view). Отражения (reflections) данных незаметны для конечных пользователей, поэтому их можно добавлять и редактировать без изменения SQL клиентских источников. Для одного датасета в Dremio (таблицы или представления) можно создать 1 и более Reflections. Оптимизатор запросов может ускорить выполнение запроса, используя один или несколько Reflections (рис. 2) для частичного или полного удовлетворения этого запроса вместо обработки необработанных данных в базовом источнике данных.

Рисунок 2. Набор из двух Reflections.

Существует несколько типов Data Reflections: Raw Reflections, Aggregation Reflections и External Reflection (данный тип в этой статье мы рассматривать не будем).

Raw Reflections – включает одно или несколько полей из датасета, отсортированного (например, по ID, дате и т.д.), партиционированного (разделенного на подразделы, например, по категории, отделу, году и т.д.) и распределенного по определенным полям (рис. 3). Данный тип Reflections можно условно разделить на 2 подвида: Basic (это необходимый минимум, Reflection с самыми базовыми параметрами; верхняя картинка на рис. 3) и Advanced (можно выбирать необходимые поля, включаемые в Reflection, настроить сортировку и партиционирование; нижняя картинка на рис. 3).

Для создания Reflection необходимо активировать соответствующий ползунок рядом с нужным типом Reflection .

Рисунок 3. Raw Reflection.

Raw Reflections обычно используются для ускорения поиска диапазона (н-р, диапазона дат: с 01-01-2023 по 31-01-2023), общих соединений (join, н-р, если запрос содержит joins, которые есть в другом датасете), повторяющихся преобразований или просто медленных датасетов (например, файлов csv). Эти виды reflections определяются путем предоставления набора полей, которые должны быть включены в reflection — они называются полями отображения (Display, рис. 4).

Желательно всегда включать все поля в reflection, т.к. Большой выгоды reflection с отдельными полями не принесет. Даже если сейчас вы точно знаете, что будете использовать в запросах только некоторые поля, в будущем вам могут пригодится поля, не включенные в reflection изначально.

Рисунок 4. Поля, выбранные в Raw Reflection.

Aggregation Reflections – включает одно или несколько полей измерений (dimensions) и полей мер (measures) из датасета (рис. 5). Здесь также есть выбор между Basic (можно выбирать поля для Измерений и Метрик) и Advanced (дополнительно можно настроить агрегации).

Для создания Reflection необходимо активировать соответствующий ползунок рядом с нужным типом Reflection .

Aggregation reflections обычно используются для ускорения агрегационных запросов для нужд BI (отчеты, графики, дашборды). Эти виды reflections определяются набором полей измерений (dimensions) и полей мер (measures) (рис. 5).

Рисунок 5. Aggregation Reflections.

При создании aggregation reflection Dremio автоматически выполняет предварительный расчет и сводит значения выбранных показателей (типов агрегаций) selected measures (по умолчанию или включенные пользователем, рис. 6) по выбранным мерам measures для всех комбинаций указанных значений измерений dimensions. Таким образом, во время запроса Dremio может предоставлять результаты из предварительно рассчитанной версии данных (aggregation reflection) вместо сканирования и сведения необработанных данных.

Рисунок 6. Выбранные типы агрегации.

В заключение для демонстрации необходимости создания Reflections приведу пример выполнения запроса без Reflection и с ним. На рисунках 7 и 8 приведены результаты выполнения одного и того же запроса и отсутствии одного из набора Reflections (рис. 7) и со всеми включенными Reflections (рис. 8). Отсутствие всего одного Reflection из нескольких привело к увеличению времени запроса более, чем в 3 раза, не говоря уже о многократном увеличении «стоимости» запросов.

Поэтому настоятельной рекомендацией является создание хотя бы одного Raw Reflection для каждого датасета.

Рисунок 7. Выполнение запросов с удалением одного из Reflections.

Рисунок 8. Выполнение запросов с полным набором Reflections.

Более подробно ознакомиться с Data Reflections в Dremio можно в нашей Wiki по ссылке: data_reflections.

6 Likes