Материализация CTE#

CedrusData может материализовывать CTE (common table expressions) в процессе выполнения запроса.

Материализованные CTE могут быть использованы для:

  1. Ускорения запросов за счет избавления от повторяющихся вычислений в рамках одного запроса или между запросами

  2. Выполнения сложных запросов с высоким потреблением памяти, обработка которых в противном случае возможна только средствами 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 с модификатором MATERIALIZED

  • AUTOMATIC — материализовывать 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 в качестве metastore

  • CTE должно содержать только таблицы 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 может быть удалено в момент выполнения запроса, что приведет к ошибке выполнения.