Глоссарий — Trino
Справочник ключевых терминов курса Trino.
Термины
Trino
Распределённый SQL query engine для интерактивной аналитики над data lake и федерации источников. НЕ база данных: своего хранилища нет, данные живут в подключённых источниках. Понимает ANSI SQL, заточен под OLAP. Актуальная версия — 481 (релиз 11 мая 2026); номер версии целочисленный и монотонно растёт.
Presto
Движок распределённых SQL-запросов, созданный в 2012 в Facebook (Martin Traverso, Dain Sundstrom, David Phillips, Eric Hwang) для интерактивной аналитики поверх Hadoop-хранилища Facebook. Общий предок современных PrestoDB и Trino.
PrestoSQL
Имя форка Presto, который в конце 2018 создали ушедшие из Facebook авторы движка. 27 декабря 2020 PrestoSQL был переименован в Trino из-за trademark-спора вокруг имени «Presto».
PrestoDB
Оригинальный репозиторий Presto, развивается Facebook/Meta при Linux Foundation. Имеет общий исторический код с Trino, но проекты сильно разошлись. Это два разных движка с общим прошлым, не синонимы.
Distributed SQL query engine
Распределённый движок SQL-запросов — система, которая исполняет SQL поверх внешних источников данных на кластере машин, не имея собственного хранилища. Trino относится к этому классу: он считает, а хранят данные коннекторы.
MPP
Massively Parallel Processing — модель массово-параллельной обработки на кластере независимых нод (shared-nothing). Запрос разбивается на части, исполняемые параллельно на множестве воркеров. Архитектурная основа масштабируемости Trino.
Coordinator
Сервер Trino, который парсит statement'ы, планирует запросы и управляет воркерами. Точка входа для клиентов. Сам данные не обрабатывает, если явно не включён как воркер через node-scheduler.include-coordinator. В кластере ровно один.
Worker
Сервер Trino, исполняющий задачи и обрабатывающий данные: забирает данные из коннекторов и обменивается промежуточными результатами с другими нодами. Воркеров в кластере ноль или больше; они дают горизонтальную масштабируемость.
Discovery service
Сервис обнаружения, встроенный в coordinator. При старте воркеры регистрируются в нём, чтобы координатор знал актуальный список нод и кому раздавать работу.
Client protocol
REST-протокол общения клиента с координатором. Клиент отправляет statement, получает nextUri и опрашивает (polling) его, постранично забирая результат. На этом протоколе работают Trino CLI, JDBC-драйвер и trino-python-client.
Connector
Реализация Trino SPI, адаптирующая конкретный тип источника данных к стандартному API движка. По коннектору на каждый тип источника: Hive, Iceberg, PostgreSQL, Kafka и так далее. Коннектор делает источник «видимым» для SQL.
Connector SPI
Service Provider Interface — набор интерфейсов, которые реализует коннектор, чтобы движок мог с ним работать. Ключевые части: Metadata (метаданные схем и таблиц), SplitManager (генерация сплитов), PageSource (чтение Page), PageSink (запись).
Catalog
Набор свойств конфигурации, определяющий доступ к конкретному источнику данных: какой коннектор использовать плюс параметры подключения и креды. Описывается catalog properties file. В кластере может быть много каталогов.
Schema
Способ группировки таблиц внутри каталога. Обычно мапится на аналогичное понятие в источнике (database или schema). Полное имя таблицы в Trino — catalog.schema.table.
Table
Набор неупорядоченных строк, организованных в именованные типизированные столбцы. Базовая единица данных в модели Trino, доступная через SQL.
Statement
Текст SQL, переданный в Trino. Statement — это просто строка запроса; при его обработке создаётся рантайм-объект query.
Query
Рантайм-инстанс, созданный при парсинге statement'а. Объединяет stages, tasks, splits, операторы и задействованные коннекторы — всё, что работает на кластере ради одного запроса.
Stage
Фаза распределённого плана запроса. Стадии образуют дерево: корневая агрегирует вывод дочерних. Stage — концептуальная модель и НЕ исполняется напрямую на воркерах; её реализуют task'и.
Task
Исполняемая реализация стадии на конкретном воркере — «рабочая лошадка» исполнения. Стадия распараллеливается на множество задач на разных воркерах; задача обрабатывает один или несколько сплитов.
Split
Секция (кусок) большого набора данных, над которой работает одна задача. Сплиты для source-стадий поставляет коннектор (файл, row-group, диапазон), для промежуточных — вышестоящие стадии.
Driver
Последовательность инстансов операторов — физический набор операторов в памяти. Наименьший уровень параллелизма в Trino: один вход, один выход. Задача исполняется параллельно множеством драйверов.
Operator
Элемент, который потребляет, трансформирует и производит данные. Примеры: table scan (чтение из коннектора), filter (предикат), project, aggregation, join, exchange. Операторы соединяются в драйвер.
Exchange
Механизм передачи данных между нодами Trino для разных стадий запроса. Использует output buffers на стороне продьюсера и exchange clients на стороне консьюмера. Бывает удалённым (между стадиями) и локальным (внутри задачи).
Page
Единица передачи данных между операторами — набор Block'ов. Операторы потребляют входящие Page и производят исходящие. Page-ориентированная обработка батчами лежит в основе векторизации Trino.
Block
Структура, хранящая данные одного столбца внутри Page. Бывают обычные, dictionary blocks (словарное/RLE-кодирование, экономят память и CPU) и колоночные ColumnarArray/ColumnarMap/ColumnarRow.
Output buffer
Буфер на стороне продьюсера в exchange-модели, куда задача складывает произведённые Page до того, как их заберут exchange clients консьюмера. Размер буфера создаёт backpressure: продьюсер тормозит, если буфер полон.
Fragment
Фрагмент распределённого плана, соответствующий стадии. Тип фрагмента задаёт, как он исполняется и как распределяются данные: SOURCE, HASH, BROADCAST, ROUND_ROBIN, SINGLE. Виден в выводе EXPLAIN.
SOURCE fragment
Тип фрагмента, исполняемого на нодах, где доступны входные сплиты, ради data locality. Обычно это нижние стадии плана, читающие данные из коннектора.
HASH fragment
Тип фрагмента (partitioned), исполняемого на фиксированном числе нод; входные данные распределены по хэш-функции от ключа. Применяется для partitioned join и hash-агрегаций.
BROADCAST fragment
Тип фрагмента, при котором данные транслируются (копируются целиком) на все ноды. Используется для broadcast join, когда build-side мал и помещается в память каждой ноды.
ROUND_ROBIN fragment
Тип фрагмента, при котором данные распределяются по нодам по кругу, равномерно и без привязки к ключу. Применяется, когда нужно просто сбалансировать нагрузку.
SINGLE fragment
Тип фрагмента, исполняемого ровно на одной ноде. Обычно это финальная стадия: завершающая агрегация и вывод результата клиенту.
Node scheduler
Компонент координатора, назначающий сплиты на ноды. Политика задаётся node-scheduler.policy: uniform (равномерное распределение с учётом локальности данных) или topology (по topology-расстоянию между нодами и сплитами).
SplitSource
Источник сплитов от коннектора. Генерирует сплиты лениво, батчами, а не материализует все сразу — это экономит память координатора и позволяет начать исполнение раньше.
Query lifecycle
Жизненный цикл запроса: SQL-текст -> AST (parser) -> Analysis (разрешение имён, типы) -> логический план (Plan IR) -> iterative optimizer -> CBO -> распределённый план (фрагментация на stages) -> tasks -> splits -> drivers -> operators -> exchanges -> результат клиенту.
Parser
Компонент, превращающий текст SQL-statement'а в AST (абстрактное синтаксическое дерево). Первый шаг обработки запроса на координаторе.
Analyzer
Этап семантического анализа: разрешение имён каталогов/схем/таблиц/столбцов, проверка типов, формирование объекта Analysis. Выполняется после парсинга, до логического планирования.
Logical plan
Логический план запроса — дерево PlanNode (Plan IR, intermediate representation), описывающее операции без привязки к распределённому исполнению. Вход для iterative optimizer.
Iterative optimizer
Rule-based оптимизатор Trino. Правило — это пара «паттерн в дереве плана + трансформация». Оптимизатор многопроходно применяет правила, пока план меняется, последовательно улучшая логический план.
Cost-Based Optimizer
CBO — оптимизатор, принимающий решения на основе оценки стоимости по статистике таблиц. Отвечает за join reordering и выбор join distribution. Из статистики (row count, NDV, nulls fraction) считает cardinality и cost альтернативных планов.
Table statistics
Статистика таблиц, используемая CBO: на уровне таблицы — total row count; на уровне столбца — data size, nulls fraction, number of distinct values (NDV), min/max. Собирается командой ANALYZE, показывается через SHOW STATS.
NDV
Number of Distinct Values — оценка числа уникальных значений в столбце. Ключевой вход CBO: по NDV оценивается селективность фильтров и кардинальность результата join. Неверный NDV ведёт к плохому плану.
Join reordering
Автоматическое переупорядочивание джойнов оптимизатором по статистике. Управляется optimizer.join-reordering-strategy: AUTOMATIC (полная enumeration, по умолчанию), ELIMINATE_CROSS_JOINS, NONE. Без статистики AUTOMATIC откатывается к ELIMINATE_CROSS_JOINS.
Join distribution
Способ распределения джойна по кластеру: BROADCAST или PARTITIONED. Управляется join-distribution-type (сессия join_distribution_type): AUTOMATIC (по умолчанию), BROADCAST, PARTITIONED.
Broadcast join
Стратегия джойна, при которой build-side (правая таблица) копируется целиком на каждую ноду как хэш-таблица. Быстро, без шаффла, но build-side должен влезать в память каждой ноды. Порог — join-max-broadcast-table-size (по умолчанию 100MB).
Partitioned join
Стратегия джойна (hash join), при которой обе таблицы перераспределяются по хэшу join-ключа. Медленнее из-за шаффла, но позволяет джойнить большие таблицы, используя суммарную память кластера.
Predicate pushdown
Оптимизация, при которой фильтрация строк (условие WHERE) проталкивается в источник данных, чтобы он вернул меньше строк. Поддержка специфична для коннектора и реализуется через SPI (applyFilter).
Projection pushdown
Оптимизация, ограничивающая набор читаемых из источника столбцов. Dereference pushdown — её разновидность: достаёт из ROW только нужные вложенные поля. Реализуется через SPI (applyProjection).
Aggregation pushdown
Оптимизация, при которой агрегатные функции вычисляются в источнике данных, если коннектор это поддерживает через SPI (applyAggregation). Снижает объём передаваемых в Trino данных.
Dynamic filtering
Механизм рантайм-фильтрации: Trino собирает значения join-ключей с отфильтрованной build-side, формирует динамический предикат и применяет его к scan'у fact-таблицы, чтобы не читать заведомо отсеиваемые данные. Включает dynamic partition pruning.
Lakehouse
Архитектура, объединяющая дешёвое object storage и открытые форматы таблиц (Iceberg, Delta Lake, Hudi) с возможностями warehouse: ACID, time travel, schema evolution. Trino — типичный движок запросов для lakehouse.
Hive Metastore
HMS — сервис каталога метаданных: хранит описания схем, таблиц, партиций, расположение файлов. Используется коннекторами Hive, Iceberg, Delta Lake для разрешения, где и в каком виде лежат данные.
AWS Glue
AWS Glue Data Catalog — управляемый облачный каталог метаданных, совместимая альтернатива Hive Metastore. Подключается к коннекторам Hive/Iceberg/Delta через hive.metastore=glue.
REST catalog
Тип каталога Iceberg, работающий по стандартному Iceberg REST API. Указывается через iceberg.catalog.type=rest. Не требует Hive Metastore, упрощает развёртывание lakehouse.
Iceberg connector
Коннектор Trino для таблиц Apache Iceberg. Поддерживает каталоги Hive Metastore, Glue, REST, Nessie, JDBC; snapshots, time travel, schema evolution, обслуживание таблиц через ALTER TABLE EXECUTE, metadata-таблицы.
Delta Lake connector
Коннектор Trino для таблиц Delta Lake. Полный read/write (INSERT, DELETE, UPDATE, MERGE), time travel, deletion vectors, change data feed, процедуры OPTIMIZE/VACUUM/register_table. Метасторы — HMS и Glue.
Hive connector
Коннектор Trino для таблиц Hive поверх object storage. Требует Hive Metastore или Glue. Форматы ORC, Parquet, Avro и другие; партиционирование и бакетинг; чтение/запись ACID-таблиц с HMS 3.x.
Lakehouse connector
Новый единый коннектор Trino, объединяющий функциональность Hive, Iceberg, Delta Lake и Hudi в одном каталоге. Позволяет работать с таблицами разных форматов через один коннектор вместо четырёх отдельных каталогов.
Time travel
Возможность читать таблицу в её прошлом состоянии. В Trino: SELECT ... FOR VERSION AS OF <snapshot_id> и FOR TIMESTAMP AS OF TIMESTAMP '...'. Iceberg также поддерживает branches и tags как версионные идентификаторы.
Snapshot
Снапшот — зафиксированное состояние таблицы Iceberg на момент коммита. Каждая запись создаёт новый снапшот; на снапшоты опираются time travel и инкрементальные операции. Видны в metadata-таблице $snapshots.
OPTIMIZE
Процедура обслуживания таблицы (ALTER TABLE ... EXECUTE optimize), выполняющая компакцию мелких файлов в крупные. Параметр file_size_threshold (по умолчанию 100MB), опциональный WHERE для фильтра партиций. Лечит проблему too many small files.
expire_snapshots
Процедура обслуживания Iceberg (ALTER TABLE ... EXECUTE expire_snapshots), удаляющая старые снапшоты и связанные метаданные и файлы данных. Минимальный retention по умолчанию 7 дней, параметр retain_last.
Hidden partitioning
Особенность Iceberg: партиционирование задаётся через transforms (year, month, day, hour, bucket, truncate) и не требует отдельного столбца в запросах. Движок сам сопоставляет фильтр по столбцу с партициями.
Schema evolution
Изменение схемы таблицы без перезаписи данных: добавление, удаление, переименование столбцов, type widening (INTEGER->BIGINT, REAL->DOUBLE, расширение DECIMAL precision), изменение схемы партиционирования. Полноценно поддержано в Iceberg.
Federation
Федерация запросов — выполнение одного SQL-запроса поверх нескольких разнородных источников (например, join таблицы PostgreSQL с Parquet на S3) без физического перемещения данных. Один из ключевых сценариев Trino.
JDBC connector
Семейство коннекторов Trino к реляционным источникам через JDBC (PostgreSQL, MySQL, SQL Server, Oracle и другие). Отвечает за маппинг типов, чтение метаданных, connection pooling и pushdown в источник.
User memory
Память, выделяемая запросом явно под свои нужды: хэш-таблицы джойнов, буферы сортировки и агрегации. Учитывается лимитами query.max-memory и query.max-memory-per-node.
Revocable memory
Память, которую движок может отозвать у запроса, выгрузив её содержимое на диск (spill). Даёт запросу шанс завершиться вместо падения по OOM ценой замедления на disk I/O.
Heap headroom
Резерв heap под неучтённые Trino аллокации (system memory). Задаётся memory.heap-headroom-per-node, по умолчанию 30% максимального heap. Сумма query.max-memory-per-node и headroom должна быть меньше -Xmx JVM.
Spilling
Выгрузка revocable memory на диск, когда запрос упирается в лимит памяти. Поддержан для aggregations, joins, sort, window functions. Узкое место — disk I/O; нельзя спилить на системный диск или диск с JVM-логами.
Resource groups
Механизм управления нагрузкой: иерархия групп с лимитами, очередями и приоритетами запросов. Позволяет изолировать нагрузки (например, дашборды от ad-hoc). Конфигурация file-based (JSON) или database-based.
Low-memory killer
Механизм, который при нехватке памяти на кластере выбирает запрос-жертву и убивает его, чтобы разгрузить кластер и дать остальным запросам завершиться.
Fault-tolerant execution
FTE — опциональный режим отказоустойчивости. Промежуточные данные обмена спулятся через exchange manager и могут быть переиспованы другим воркером при сбое. Покрывает инфраструктурные сбои, но не ошибки пользователя.
Retry policy
Политика повторов при FTE: NONE (по умолчанию, без отказоустойчивости), QUERY (ретрай всего запроса, для множества мелких запросов), TASK (ретрай отдельных задач, для больших batch-запросов; требует exchange manager).
Exchange manager
Компонент FTE, спулящий промежуточные данные обмена во внешнее надёжное хранилище. Настраивается в etc/exchange-manager.properties; хранилища: filesystem (S3, GCS, Azure Blob, HDFS, локальная ФС только не для прода).
Tardigrade
Кодовое имя проекта, в рамках которого в Trino реализовали fault-tolerant execution. Тихоходка (tardigrade) — символ выживаемости: запрос переживает сбой воркера.
Trino Gateway
Отдельный продукт (репозиторий trinodb/trino-gateway): балансировщик, прокси и routing-шлюз для нескольких кластеров Trino. Один URL для клиентов, маршрутизация по правилам, no-downtime blue/green апгрейды кластеров.
EXPLAIN ANALYZE
Команда, которая исполняет запрос и показывает распределённый план с фактической стоимостью операций: CPU-время по стадиям, объём данных, относительную стоимость нод. EXPLAIN ANALYZE VERBOSE добавляет низкоуровневую статистику операторов.
JMX
Java Management Extensions — стандартный механизм метрик JVM-приложения. Trino экспонирует через JMX большое число внутренних метрик; коннектор jmx позволяет запрашивать их прямо как SQL-таблицы.
Web UI
Веб-интерфейс координатора Trino: список запросов, их детали, стадии, статистика, live-план. Базовый инструмент наблюдаемости — позволяет увидеть очереди, прогресс и dynamicFiltersStats.
Polymorphic table function
PTF — полиморфная табличная функция: функция, возвращающая таблицу, чья схема определяется в момент вызова. Применяется в том числе для query pass-through — отправки нативного запроса прямо в источник.
SQL UDF
SQL user-defined function — пользовательская функция на SQL. Объявляется через WITH FUNCTION (inline в одном запросе) или CREATE FUNCTION (catalog routine, переиспользуемая). В старых материалах термин звучал как «SQL routines».
number type
Новый числовой тип данных, добавленный в Trino в релизе 480 (24 марта 2026). Часть развития системы типов наряду с DECIMAL и TIMESTAMP с precision.
OLAP
Online Analytical Processing — аналитическая нагрузка: тяжёлые сканирующие запросы, агрегации, join больших таблиц. Целевой класс задач для Trino. Противоположность OLTP (транзакционная нагрузка), для которой Trino не предназначен.
Shared-nothing
Архитектурный принцип: ноды кластера не делят между собой память и диск, общаются только по сети. Каждый воркер обрабатывает свою часть данных независимо. Основа горизонтальной масштабируемости MPP-систем.
ANALYZE
SQL-команда Trino, собирающая и обновляющая статистику таблицы (row count, NDV, nulls fraction, data size, min/max). Нужна, когда данные изменили в обход Trino, чтобы CBO строил планы по актуальным цифрам.
SHOW STATS
Команда SHOW STATS FOR <table>, выводящая текущую статистику таблицы, которую видит CBO. Первый инструмент диагностики, когда оптимизатор выбрал плохой join order.
remove_orphan_files
Процедура обслуживания Iceberg (ALTER TABLE ... EXECUTE remove_orphan_files), удаляющая из хранилища файлы, не связанные ни с одним снапшотом таблицы. Освобождает место после сбоев и откатов.
Deletion vectors
Механизм row-level удаления без перезаписи файлов данных: позиции удалённых строк хранятся отдельно. Поддержаны в Delta Lake (deletion_vectors_enabled) и в Iceberg v3 (binary deletion vectors).
Change data feed
CDC-возможность Delta Lake: при записи фиксируются change-события (вставки, удаления, обновления строк), которые потом можно прочитать. У Iceberg аналогичную роль играет функция table_changes().
Metadata table
Системная таблица Iceberg, дающая доступ к метаданным через SQL: $snapshots, $files, $history, $partitions, $manifests, $properties и другие. Инструмент инспекции состояния и обслуживания таблицы.
Iceberg v3
Версия формата таблиц Iceberg (экспериментальная в актуальных релизах Trino): column default values, шифрование, тип VARIANT, binary deletion vectors, nanosecond timestamps, row lineage. v2 остаётся версией по умолчанию.
VARIANT
Полуструктурированный тип данных для Iceberg v3, добавленный в Trino экспериментально (чтение — с релиза 471, развитие — в 481). Хранит произвольные JSON-подобные структуры без фиксированной схемы.
ORC
Optimized Row Columnar — колоночный формат файлов хранения. Поддержан коннекторами Hive и другими; в ORC и Parquet работают динамические фильтры с stripe/row-group pruning. Транзакционные Hive ACID-таблицы используют ORC.
Parquet
Широко распространённый колоночный формат файлов хранения. Основной формат для таблиц Iceberg и Delta Lake, поддержан Hive. В Parquet динамические фильтры дают row-group pruning, экономя дисковый I/O.
Pipelined execution
Модель исполнения Trino: данные стримятся через цепочку операторов Page за Page, не материализуясь целиком между стадиями. Вместе с MPP и векторизацией даёт низкую латентность интерактивных запросов.
node.properties
Файл etc/node.properties: настройки конкретной ноды. node.environment одинаков для всего кластера, node.id уникален, node.data-dir — путь к данным. Обязателен на каждой ноде.
config.properties
Файл etc/config.properties: конфигурация сервера Trino. Ключевые свойства: coordinator (true/false), node-scheduler.include-coordinator, http-server.http.port, discovery.uri, лимиты памяти.
jvm.config
Файл etc/jvm.config: опции JVM по одной на строку (-Xmx, настройки GC, -XX:...). Для прода heap обычно 32GB и больше; каталог временных файлов JVM не должен иметь флаг noexec.
TPC-H
Системный коннектор tpch, генерирующий на лету данные одноимённого аналитического бенчмарка. Не требует внешнего источника — удобен для обучения, демонстраций и проверки кластера без настройки хранилища.
Faker connector
Системный коннектор Trino, генерирующий правдоподобные синтетические данные по описанию схемы. Полезен для лаб, тестов и демонстраций, когда нужен датасет без подключения реального источника.
query.max-memory
Свойство, ограничивающее максимум распределённой user memory на один запрос по всему кластеру. По умолчанию 20GB. При превышении запрос убивается с ошибкой нехватки памяти.
EXCEEDED_LOCAL_MEMORY_LIMIT
Код ошибки Trino: запрос превысил лимит user memory на одной ноде (query.max-memory-per-node, по умолчанию 30% heap). Типичная причина — broadcast join слишком большой build-side. Лечится статистикой, PARTITIONED join или spill.
dbt-trino
Адаптер dbt для Trino: позволяет описывать аналитические трансформации как dbt-модели и материализовать их через Trino. Один из стандартных клиентов в data-engineering-стеке поверх Trino.