Материализация CTE#
CedrusData может материализовывать CTE (common table expressions) в процессе выполнения запроса.
Материализованные CTE могут быть использованы для:
Ускорения запросов за счет избавления от повторяющихся вычислений в рамках одного запроса или между запросами
Выполнения сложных запросов с высоким потреблением памяти, обработка которых в противном случае возможна только средствами FTE
Для материализации CTE в рамках одного запроса необходимо задать каталог, в котором будет происходить материализация. В настоящее время материализацию CTE поддерживает коннектор Iceberg.
Материализация CTE с возможностью переиспользования между запросами возможна только для коннектора Iceberg, где в качестве каталога используется CedrusData Catalog.
Материализация CTE может происходить принудительно с помощью синтаксического выражения WITH ... MATERIALIZED
,
или автоматически на основе эвристической оценки перспективности материализации заданного выражения.
См. параметр конфигурации cedrusdata_cte_materialization_strategy
ниже.
cedrusdata.cte-materialization.strategy
#
Тип: string
Значение по умолчанию:
EXPLICIT
Свойство сессии:
cedrusdata_cte_materialization_strategy
Определяет, когда необходимо материализовывать CTE:
EXPLICIT
— материализовывать только CTE с модификатором MATERIALIZEDAUTOMATIC
— материализовывать CTE, которые имеют модификаторMATERIALIZED
или встречаются в запросе более одного раза и имеют агрегацииEAGER
— безусловно материализовывать все CTE.
cedrusdata.cte-materialization.catalog
#
Тип: string
Свойство сессии:
cedrusdata_cte_materialization_catalog
Имя каталога, в котором будут сохранены временные таблицы с результатами вычисления CTE.
cedrusdata.cte-materialization.ttl
#
Тип: duration
Значение по умолчанию:
2h
(два часа)Свойство сессии:
cedrusdata_cte_materialization_ttl
Срок жизни таблицы с материализованным CTE. По истечению данного периода каталог имеет право удалить материализованное CTE.
cedrusdata.cte-materialization.predicate-pushdown-enabled
#
Тип: boolean
Значение по умолчанию:
true
Свойство сессии:
cedrusdata_cte_materialization_predicate_pushdown_enabled
Осуществлять ли pushdown предикатов в CTE до материализации.
Повышает производительность вычисления CTE, но снижает вероятность переиспользования CTE между запросами,
когда задан параметр cedrusdata.cte-materialization.reuse.enabled
.
cedrusdata.cte-materialization.column-pruning-enabled
#
Тип: boolean
Значение по умолчанию:
true
Свойство сессии:
cedrusdata_cte_materialization_column_pruning_enabled
Осуществлять ли удаление неиспользуемых колонок CTE до материализации.
Повышает производительность вычисления CTE, но снижает вероятность переиспользования CTE между запросами,
когда задан параметр cedrusdata.cte-materialization.reuse.enabled
.
cedrusdata.cte-materialization.reuse.enabled
#
Тип: boolean
Значение по умолчанию:
false
Свойство сессии:
cedrusdata_cte_materialization_reuse_enabled
Разрешать ли переиспользование CTE между запросами.
При включении данного режима временные таблицы с результатами вычисления CTE
будут сохранены в течении периода времени, заданного параметром cedrusdata.cte-materialization.ttl
.
Чтобы CTE можно было переиспользовать, необходимо выполнение следующих условий:
В качестве
cedrusdata.cte-materialization.catalog
должен быть задан каталог Iceberg, который использует CedrusData Catalog в качестве metastoreCTE должно содержать только таблицы Iceberg
Оставшееся время жизни CTE, определяемое параметром
cedrusdata.cte-materialization.ttl
должно превышать значение параметраcedrusdata.cte-materialization.reuse.min-remaining-ttl
Планы CTE в текущем запросе и уже материализованного CTE должны полностью совпадать. Обратите внимание, что включенные по умолчанию параметры
cedrusdata.cte-materialization.predicate-pushdown-enabled
иcedrusdata.cte-materialization.column-pruning-enabled
могут менять планы идентичных CTE от запроса к запросу, снижая вероятность переиспользования. Отключите данные параметры для отдельных запросов, если переиспользование CTE важнее скорости его вычисления.
cedrusdata.cte-materialization.reuse.min-remaining-ttl
#
Тип: duration
Значение по умолчанию:
1h
(один час)Свойство сессии:
cedrusdata_cte_materialization_reuse_min_remaining_ttl
Минимальное значение оставшегося TTL временной таблицы при котором разрешено переиспользование материализованного CTE. Значение данного параметра должно отражать максимальное предполагаемое время выполнения запроса, который собирается переиспользовать CTE. В противном случае CTE может быть удалено в момент выполнения запроса, что приведет к ошибке выполнения.