BI Consult Desktop Logo BI Consult Mobile Logo
  • Russian BI Исследование российских bi
  • Перейти на Fine BI
  • Контакты
  • +7 812 334-08-01
    +7 499 608-13-06
  • Отправить сообщение
  • Главная
  • Продукты Эксперт-BI
    • Дистрибуция
    • Розничная торговля
    • Производство
    • Операторы связи
    • Страхование
    • Банки
    • Лизинг
    • Логистика
    • Нефтегазовый сектор
    • Медицина
    • Сеть ресторанов
    • E-Commerce
    • Сельское хозяйство
    • Энергетика
    • FMCG
    • Девелоперы
    • Маркетплейсы
    • Пищевая промышленность
    • Фармацевтика
    • Построение Data Platform
    • Цифровая трансформация
    • Управление по KPI
    • Финансы
    • Продажи
    • Склад
    • HR
    • Маркетинг
    • Внутренний аудит
    • Категорийный менеджмент
    • S&OP и FP&A
    • Геоаналитика
    • Цепочки поставок (SCM)
    • AutoML
    • Process Mining
    • IBP
    • ИТ (CIO)
    • Закупки
  • Платформы
    • Системы бизнес-анализа (BI)
    • Интегрированное бизнес-планирование (IBP)
    • Хранилища данных (DWH / Lakehouse)
    • Каталоги данных (Data Catalog)
    • Системы ETL и ELT
    • AI / Исскуственный интеллект
    • Шина данных (ESB)
    • Система управления мастер-данными (MDM)
    • Семантический слой
  • Услуги
    • Переход на отечественные BI и DWH системы
    • Консалтинг
    • Пилотный проект
    • Обучение и сертификация
    • Бесплатное обучение
    • Поддержка
    • Технические задания
    • Сбор требований для проекта внедрения BI-системы
    • CI/CD для DWH
    • Аудит BI приложений и DWH
    • Выделенная команда
    • Настойка и поддержка баз данных
    • Разработка BI Стратегии
    • Styleguide для BI-системы
    • Как выбрать BI-систему
  • Курсы
    • Учебный курс Информационная грамотность (Data Literacy)
    • Учебный курс для бизнес-аналитиков
    • Учебный курс для системных аналитиков
    • Учебный курс по Data Governance
    • Учебный курс Как стать CDO
    • Учебный курс Современная архитектура хранилища данных
    • Учебный курс по Fine BI
    • Учебный курс по FineReport
    • Учебный курс по DWH
    • Учебный курс по Data Science (ML, AI)
    • Учебный курс по PostgreSQL
    • Учебный курс по Greenplum
    • Учебный курс по Apache Airflow и NiFi
    • Учебный курс по Open-source BI
    • Учебный курс по ClickHouse
    • Учебный курс по DataLens
    • Учебный курс по Loginom
    • Учебный курс по Modus BI и ETL
    • Учебный курс по Visiology
    • Учебный курс по dbt (Data Build Tool)
  • Компания
    • Руководство
    • Новости
    • Клиенты
    • Карьера
    • Скачать
    • Контакты

BI

  • FineBI
  • FineReport
  • FineDataLink
  • FineChatBI (FineAI)
  • Коннекторы данных из 1С в BI
  • Airflow / Nifi
  • Visiology
  • PIX BI
  • Modus BI
  • Yandex.DataLens
  • Open-source BI: Superset/Metabase
  • Luxms BI
  • AW BI + Alpha BI
  • FlyBI + Форсайт. Аналитическая Платформа
  • Loginom
  • Триафлай
  • AI / Исскуственный интеллект
  • Optimacros
  • Навигатор BI
  • Семантический слой

СУБД

  • Arenadata
  • ClickHouse
  • Greenplum
  • Postgres Professional
  • TData

Другое

  • Построение Data Platform
    • Аналитическое хранилище данных
    • Data Lake и Data Engineering
    • Подробнее про Data Lake
    • Внедрение Lakehouse
      • Apache Doris
      • StarRocks
      • Trino
    • Миграция витрин из пропиетарных DWH на новый стек
    • Учебный курс "Современная архитектура хранилища данных"
Главная » Решения Эксперт-BI на российских BI-платформах » Построение Data Platform: комплексный подход к современной работе с данными » Внедрение Lakehouse » Ускорение выполнения аналитических SQL-запросов в Data Lakehouse на базе Trino + Iceberg + S3

Ускорение выполнения аналитических SQL-запросов в Data Lakehouse на базе Trino + Iceberg + S3

Архитектура Data Lakehouse на базе Trino + Iceberg + S3 стала стандартом для современных аналитических платформ, где требуется гибкость, масштабируемость и работа с большими объемами данных без жёсткой привязки к проприетарным DWH.

Однако при переходе от тестовых наборов данных к многотерабайтным таблицам возникает проблема: даже относительно простые аналитические SQL-запросы начинают выполняться слишком долго или вовсе падают с ошибками из-за недостатка памяти на воркерах Trino.

В реальных проектах оптимизация производительности часто сводится не только к настройкам Trino, но и к комплексной переработке хранения и логики запросов. На практике применяются четыре основных направления:

  1. Оптимизация джоинов.
  2. Изменение структуры хранения данных.
  3. Партиционирование.
  4. Переписывание запросов под лимиты кластера.

 

Архитектура и узкие места

Компоненты

  • Trino (PrestoSQL) — распределённый движок выполнения запросов.
  • Iceberg — формат хранения с поддержкой транзакций, эволюции схемы и оптимизированных сканов.
  • S3 — объектное хранилище, физический слой данных.

 

Основные узкие места

  1. Сетевые задержки при чтении большого количества мелких файлов с S3.
  2. Объём данных, попадающий в память воркеров — особенно при широких джоинах и агрегациях.
  3. Отсутствие эффективного фильтрации на уровне метаданных при плохом партиционировании.
  4. Неоптимальная организация Iceberg-таблиц (слишком мелкие или слишком крупные партиции).
  5. Неэффективный план выполнения из-за некорректных статистик в метаданных.

 

Оптимизация джоинов

Проблема

Trino по умолчанию использует hash join, который требует полной загрузки одной из таблиц в память. При джоинах «факт ↔ факт» или при соединении огромных таблиц это приводит к OOM (out of memory).

Решения

3.2.1. Broadcast join только для малых таблиц

SELECT /*+ BROADCAST(dim) */
       f.date, f.sales, d.category
FROM fact_sales f
JOIN dim_products d ON f.product_id = d.id;
  • Когда использовать: размер таблицы dim < 10% от памяти воркера.
  • Риск: если таблица окажется больше — Trino свалится.

 

Join reordering и фильтрация до джоина

Вместо:

SELECT *
FROM big_fact f
JOIN big_dim d ON f.id = d.id
WHERE d.category = 'Electronics';

 

— лучше:

WITH filtered_dim AS (
    SELECT * FROM big_dim WHERE category = 'Electronics'
)
SELECT *
FROM big_fact f
JOIN filtered_dim d ON f.id = d.id;
  • Плюс: фильтрация уменьшает объём данных до джоина.
  • Риск: при неправильной статистике Trino может всё равно переставить порядок операций.

 

Bucket join

  • Разбиение таблиц по одинаковым бакетам (bucketed tables) в Iceberg.
  • Пример DDL:
CREATE TABLE big_fact (
    id BIGINT,
    ...
)
WITH (
    bucketed_by = ARRAY['id'],
    bucket_count = 32
);
  • Плюс: Trino будет джоинить по бакетам, минимизируя shuffle.
  • Риск: жёсткая привязка к числу бакетов, изменение требует полной переразметки данных.

 

Изменение структуры хранения

Укрупнение файлов

Мелкие Parquet-файлы (по 5–10 МБ) приводят к тысячам запросов к S3. Решение — компакция:

CALL system.optimize('my_table');
  • Оптимальный размер файла: 512 МБ – 1 ГБ для S3.
  • Риск: слишком крупные файлы → длинные чтения и перерасход памяти.

 

Минимизация ненужных колонок

Iceberg хранит данные по колонкам, но Trino всё равно сканирует нужные файлы. Если таблица широка, стоит вынести редко используемые поля в отдельную таблицу.

 

Партиционирование

Правильный выбор ключа

  • Дата — классический вариант (например, event_date).
  • Сложный ключ — region + month или category + week для бизнес-аналитики.

Пример:

CREATE TABLE fact_sales (
    date DATE,
    region STRING,
    sales DOUBLE
)
WITH (
    partitioning = ARRAY['region', 'date_trunc(''month'', date)']
);

 

Динамическое партиционирование при записи

Trino + Iceberg позволяют задавать партиции прямо в INSERT ... SELECT.

 

Переписывание запросов

Избегание SELECT *

— всегда выбирайте только нужные поля, особенно при работе с широкими фактами.

 

Замена CTE на временные таблицы

Вместо:

WITH t1 AS (...)
SELECT ...
FROM t1 JOIN ...

— можно материализовать результат во временную Iceberg-таблицу и потом использовать.

 

Лимитирование оконных функций

При больших данных оконные функции (ROW_NUMBER, RANK) перегружают shuffle. Иногда их можно заменить агрегацией + join.

 

Пример комплексной оптимизации

До оптимизации:

SELECT d.region, SUM(f.sales)
FROM big_fact f
JOIN big_dim d ON f.id = d.id
WHERE d.category = 'Electronics'
  AND f.date BETWEEN DATE '2024-01-01' AND DATE '2024-03-31'
GROUP BY d.region;
  • Выполнение: 17 минут, OOM на двух воркерах.

 

После оптимизации:

  1. Вынесена фильтрация по категории до джоина.
  2. Применено партиционирование по date.
  3. Укрупнены файлы.
  4. Переписан join на bucket join.
WITH filtered_dim AS (
    SELECT id, region
    FROM big_dim
    WHERE category = 'Electronics'
)
SELECT d.region, SUM(f.sales)
FROM big_fact f
JOIN filtered_dim d ON f.id = d.id
WHERE f.date BETWEEN DATE '2024-01-01' AND DATE '2024-03-31'
GROUP BY d.region;
  • Выполнение: 2 мин 30 сек.

 

Как избежать рисков при оптимизации

  1. Тестируйте на продоподобных данных. Оптимизация на малых выборках может не сработать на полных объёмах.
  2. Следите за статистикой Iceberg. Обновляйте метаданные, иначе Trino примет неверный план.
  3. Используйте отдельный dev-кластер для экспериментов с bucket join и партиционированием.
  4. Делайте резервную копию таблицы перед массовой компакцией.
  5. Логируйте планы выполнения (EXPLAIN и EXPLAIN ANALYZE). Это поможет понять, где узкое место.

 

Оптимизация аналитических SQL-запросов в Lakehouse на Trino + Iceberg + S3 — это не только тюнинг движка, но и грамотная работа с данными:

  • Джоины должны быть минимальны по объёму данных.
  • Iceberg-таблицы должны иметь оптимальный размер файлов и партиционирование.
  • Запросы должны быть переписаны так, чтобы нагрузка на shuffle и память была минимальной.

Применяя эти подходы в комплексе, можно сократить время выполнения тяжёлых запросов в 5–10 раз, а иногда и просто «спасти» их от падения по памяти.

 

Узнать стоимость решенияЗапросить видео презентацию

Следующая статья →
Data Lakehouse: опыт, технические нюансы и как избежать рисков

Решения

Анализировать ФинансыУвеличивайте ПродажиОптимальный Склад и ЛогистикаМаркетинговые Метрики

Клиенты
  • Группа компаний «Невский кондитер» основана в 1996 году в Санкт-Петербурге и на сегодняшний день является одним из крупнейших производителей кондитерских изделий в России.

     

  • АО «НСПК» - оператор национальной системы платежных карт, который предоставляет операционные услуги и услуги платежного клиринга операторам платежных систем, в том числе Банку России и кредитным организациям. В задачи АО «НСПК» входит обеспечение бесперебойного доступа к переводам денежных средств в Российской Федерации с использованием платежных инструментов.  Также компания является оператором национальной платёжной системы «Мир» и операционным и платёжным клиринговым центром Системы быстрых платежей (СБП).

  • Компания "Норникель" - лидер горно-металлургической отрасли в России и мире. Она производит металлы, необходимые для развития экологичной экономики и транспорта.

  • СберКорус (Группа компаний Сбербанка) – это ИТ‑компания, ИТ‑интегратор, SaaS-провайдер. Является разработчиком цифровых сервисов и услуг для автоматизации широкого диапазона бизнес-процессов юридических лиц. В 2004 году компания стала первым в России оператором электронного документооборота, а в 2012 году вошла в экосистему Сбера. 

  • Решения
    • Дистрибуция
    • Розничная торговля
    • Производство
    • Операторы связи
    • Страхование
    • Банки
    • Лизинг
    • Логистика
    • Нефтегазовый сектор
    • Медицина
    • Сеть ресторанов
    • E-Commerce
    • Энергетика
    • Фармацевтика
  • Услуги
    • Переход на отечественные BI и DWH
    • Консалтинг
    • Пилотный проект
    • Обучение и сертификация
    • Бесплатное обучение
    • Техническая поддержка
    • Технические задания
    • Сбор требований для проекта внедрения BI-системы
    • CI/CD для DWH
    • Аудит BI приложений
    • Выделенная команда
    • Настойка и поддержка баз данных
    • Разработка BI Стратегии
    • Styleguide для BI-системы
    • Как выбрать BI-систему
  • Платформы
    • FineBI
    • FineReport
    • FineDataLink
    • Коннекторы данных из 1С в BI
    • Airflow + NiFi
    • Visiology
    • Luxms BI
    • Modus BI
    • PIX BI
    • Arenadata
    • ClickHouse
    • Greenplum
    • Postgres Professional
    • Open-source BI: Superset/Metabase
    • Loginom
    • Yandex.DataLens
    • AI / Исскуственный интеллект
    • Optimacros
    • Шины данных
  • Курсы
    • Учебный курс Информационная грамотность
    • Учебный курс для бизнес-аналитиков
    • Учебный курс для системных аналитиков
    • Учебный курс по Data Governance
    • Учебный курс Как стать CDO
    • Учебный курс Современная архитектура хранилища данных
    • Учебный курс по Fine BI
    • Учебный курс по FineReport
    • Учебный курс по DWH
    • Учебный курс по Data Science (ML, AI)
    • Учебный курс по PostgreSQL
    • Учебный курс по Apache Airflow и NiFi
    • Учебный курс по Open-source BI
    • Учебный курс по ClickHouse
    • Учебный курс по DataLens
    • Учебный курс по Loginom
    • Учебный курс по Modus BI и ETL
    • Учебный курс по Visiology
    • Учебный курс по dbt
  • Функциональные решения
    • Создание Data Lake
    • Цифровая трансформация
    • Управление по KPI
    • Финансы
    • Продажи
    • Склад
    • HR
    • Маркетинг
    • Внутренний аудит
    • Категорийный менеджмент
    • S&OP и прогнозная аналитика
    • Геоаналитика
    • Цепочки поставок (SCM)
    • AutoML
    • Process Mining
    • Сквозная аналитика
  • Компания
    • О нас
    • Руководство
    • Новости
    • Клиенты
    • Скачать
    • Контакты
    • Политика конфиденциальности
RutubeVkontakteLinkedInYouTube
ООО "Би Ай Консалт",
ИНН: 7811437757,
ОГРН: 1097847154184
199178, Россия,
Санкт-Петербург,
6-ая линия В.О., Д. 63, 4 этаж
Тел: +7 (812) 334-08-01
Тел: +7 (499) 608-13-06
E-mail: info@biconsult.ru

 

 

 

 

 

×

Пользуясь сайтом, вы соглашаетесь с использованием cookies и политикой конфиденциальности.