# MATERIALIZE Материализует указанный источник или выражение на текущем или заданном кластере. В случае материализации выражения, его тип должен быть списком структур. Кластер для материализации берется из `ON` выражения или, при его отсутствии, из оператора [USE](use.md). Материализованный источник сохраняет все колонки и порядок сортировки. Он также создает барьер для оптимизаторов по возможному слиянию вычислений. ## Синтаксис ```yql MATERIALIZE -- в качестве источника может быть указано имя таблицы, именованное выражение, вложенный SELECT INTO $ -- имя параметра, по которому можно обращаться к результатам материализации в других местах запроса ON -- имя кластера, на котором будет материализован источник (опциональный) WITH -- дополнительные модификаторы (опциональные) ``` ## Доступность `MATERIALIZE` доступен начиная с версии языка [2026.02](../changelog/2026.02.md). ## Использование модификаторов Материализация может выполняться с одним или несколькими модификаторами. Модификатор указывается после ключевого слова `WITH`. Действуют следующие правила: - Если у модификатора есть значение, то оно указывается после знака `=`: `MATERIALIZE ... INTO ... WITH SOME_HINT=value`. - Если необходимо указать несколько модификаторов, то они заключаются в круглые скобки: `MATERIALIZE ... INTO ... WITH (SOME_HINT1=value, SOME_HINT2, SOME_HINT3=value)`. Общий список поддерживаемых модификаторов: * `prune_unused_columns` ‐ удалять из материализованного источника колонки, которые не используются потребителями. Системы, на кластерах которых выполняется материализация, могут иметь расширенный набор поддерживаемых модификаторов. ## Примеры ```yql USE cluster; MATERIALIZE (SELECT 1 as a, 2 as b) INTO $materialized; -- Материализует однострочное выражение на кластере cluster и делает его доступным по имени $materialized SELECT * FROM $materialized; -- Выборка из материализованного источника ``` ```yql USE cluster; $input = SELECT key, value FROM my_table ORDER BY key; MATERIALIZE $input INTO $materialized ON another_cluster; -- Материализует результат SELECT на кластере another_cluster и делает его доступным по имени $materialized. -- Материализованный источник сохраняет порядок сортировки по key. SELECT * FROM another_table AS a JOIN $materialized AS b USING key; -- JOIN с материализованным источником. Выбор стратегии JOIN учитывает сортировку материализованного источника ``` ```yql USE cluster; $input = SELECT a, b, c, d FROM my_table; MATERIALIZE $input INTO $materialized WITH prune_unused_columns; -- Материализует результат SELECT с итоговым набором колонок [a, b, c] после оптимизаций. SELECT a, b FROM $materialized; -- Выборка из материализованного источника с набором используемых колонок [a, b] SELECT c FROM $materialized; -- Выборка из материализованного источника с набором используемых колонок [c] ```