MATERIALIZE
Материализует указанный источник или выражение на текущем или заданном кластере. В случае материализации выражения его тип должен быть списком структур. Кластер для материализации берется из выражения ON или, при его отсутствии, из оператора USE.
Материализованный источник сохраняет все колонки и порядок сортировки. Он также создает барьер, который не позволяет оптимизаторам объединять вычисления по разные стороны материализации.
Синтаксис
MATERIALIZE
<source> -- имя таблицы, именованное выражение или вложенный SELECT
INTO $<bind_name> -- имя параметра для обращения к результату материализации
ON <cluster> -- кластер, на котором материализуется источник (опционально)
WITH <hints> -- дополнительные модификаторы (опционально)
Доступность
MATERIALIZE доступен начиная с версии языка 2026.02.
В Query Tracker для использования MATERIALIZE выберите версию языка 2026.02 или новее.
Модификаторы
Модификатор указывается после ключевого слова WITH. Значение отделяется знаком =. Несколько модификаторов заключаются в круглые скобки: WITH (SOME_HINT1=value, SOME_HINT2).
Поддерживается модификатор prune_unused_columns: он удаляет из материализованного источника колонки, которые не используются потребителями. Системы, на кластерах которых выполняется материализация, могут поддерживать дополнительные модификаторы.
Примеры
USE cluster;
MATERIALIZE (SELECT 1 AS a, 2 AS b) INTO $materialized;
SELECT * FROM $materialized;
USE cluster;
$input = SELECT key, value FROM my_table ORDER BY key;
MATERIALIZE $input INTO $materialized ON another_cluster;
SELECT * FROM another_table AS a
JOIN $materialized AS b USING key;
Материализованный источник во втором примере сохраняет сортировку по key, поэтому выбор стратегии JOIN может учитывать эту сортировку.
USE cluster;
$input = SELECT a, b, c, d FROM my_table;
MATERIALIZE $input INTO $materialized WITH prune_unused_columns;
SELECT a, b FROM $materialized;
SELECT c FROM $materialized;
После оптимизации последний пример материализует только колонки a, b и c.