Перейти к основному содержанию
Эти настройки доступны в system.settings и автоматически сгенерированы на основе исходного кода.

analyzer_compatibility_allow_compound_identifiers_in_unflatten_nested

Разрешает добавлять составные идентификаторы в Nested. Это настройка совместимости, поскольку она меняет результат запроса. Когда она отключена, SELECT a.b.c FROM table ARRAY JOIN a не работает, а SELECT a FROM table не включает столбец a.b.c в результат Nested a.

analyzer_compatibility_allow_cte_redefinition

Разрешает определять имя общего табличного выражения (CTE) более одного раза в одном предложении WITH. Ссылка на такое имя связывается с последним определением, которое в данный момент не находится в процессе разрешения: переопределение может обращаться к предыдущему определению того же имени, а тело запроса использует последнее. Это соответствует анализу запросов в ClickHouse до версии v24.3, при котором более позднее определение без предупреждения затеняло предыдущие. Отличие от прежнего анализа есть в одном случае: CTE, объявленное между двумя определениями имени, также связывается с последним определением, тогда как раньше оно связывалось с определением, видимым в точке его объявления. По умолчанию переопределение отклоняется с ошибкой MULTIPLE_EXPRESSIONS_FOR_ALIAS. CTE, объявленное как MATERIALIZED, и CTE в предложении WITH RECURSIVE нельзя переопределить, даже если настройка включена. Возможные значения:
  • 0 — имя CTE может быть определено в предложении WITH только один раз.
  • 1 — более позднее определение имени CTE затеняет предыдущие.

analyzer_compatibility_allow_non_aggregate_in_having

Если параметр включен, анализатор имитирует прежнее поведение, при котором неагрегатные AND-конъюнкты переносятся из HAVING в предложение WHERE вместо выдачи NOT_AN_AGGREGATE. Отклонение в соответствии со стандартом используется по умолчанию; эта настройка помогает при миграции запросов, которые молча принимал механизм анализа запросов, использовавшийся в ClickHouse до версии 24.3. Конъюнкты, содержащие агрегатные функции, grouping или недетерминированные функции, остаются в HAVING. Если хотя бы один конъюнкт содержит window function или функцию с сохранением состояния (например, rowNumberInBlock), преобразование отключается для всего HAVING, что соответствует поведению прежнего механизма анализа. Эта настройка также игнорируется, если в GROUP BY используются WITH CUBE, WITH ROLLUP, WITH TOTALS или GROUPING SETS.

analyzer_compatibility_apply_final_to_all_joined_tables

Восстанавливает поведение версий до 26.6, при котором модификатор FINAL, указанный для самой левой таблицы в JOIN, ошибочно применялся также ко всем остальным таблицам в JOIN (для движков, поддерживающих FINAL, например ReplacingMergeTree). По умолчанию FINAL применяется только к таблице, для которой он указан. Включите настройку для совместимости с запросами, зависящими от прежнего поведения; рекомендуется явно указывать FINAL для каждой таблицы, которой он требуется. Возможные значения:
  • 0 — FINAL применяется только к таблице, для которой он указан.
  • 1 — FINAL для самой левой таблицы в JOIN применяется ко всем таблицам в JOIN.

analyzer_compatibility_join_using_top_level_identifier

Принудительно разрешать идентификатор в JOIN USING по проекции (например, в SELECT a + 1 AS b FROM t1 JOIN t2 USING (b) JOIN будет выполняться по условию t1.a + 1 = t2.b, а не t1.b = t2.b). Также учитываются псевдонимы, определённые в других местах запроса: в конструкции WITH, для подвыражений внутри списка SELECT или в других секциях (например, в WITH a + 1 AS b SELECT count() FROM t1 JOIN t2 USING (b) и в SELECT uniqExact(a + 1 AS b) FROM t1 JOIN t2 USING (b) JOIN выполняется по условию t1.a + 1 = t2.b). В запросе с несколькими JOIN только самый внешний JOIN разрешает свой идентификатор USING по псевдониму; внутренние JOIN разрешают его по своей левой таблице, как это делал старый анализатор. Если соответствующий псевдоним не является псевдонимом верхнего уровня списка SELECT, для запроса отключаются параллельные реплики. Для запросов, отправляемых на удалённые серверы (таблицы Distributed, табличная функция remote), такой запрос отклоняется с исключением, только если идентификатор вообще не может быть разрешён на удалённом сервере; если псевдоним затеняет реальный столбец левой таблицы, удалённый сервер вместо этого выполняет JOIN по этому столбцу, поэтому результаты могут отличаться от локального выполнения.

analyzer_compatibility_multiple_joins_qualify_column_names

Если настройка включена и предложение FROM запроса содержит два или более JOIN (таблицы, перечисленные через запятую, учитываются; ARRAY JOIN — нет), анализатор присваивает результирующим столбцам имена так же, как это делало преобразование с несколькими JOIN в старом анализаторе:
  • столбцы, полученные при раскрытии *, <table>.* или COLUMNS('<regexp>'), получают имена вида <alias-or-table>.<column> (квалификатором служит псевдоним табличного выражения, если он задан, иначе имя таблицы без указания базы данных, иначе имя CTE; столбцы присоединённого подзапроса без псевдонима остаются неквалифицированными). Два типа столбцов сохраняют имя без квалификатора, поскольку относятся к JOIN, а не к отдельному табличному выражению: столбец, полученный с помощью ARRAY JOIN, и ключ, объединённый с помощью JOIN ... USING. Поэтому внешние ссылки, такие как SELECT ll.arr или SELECT ll.k, в этих двух случаях не разрешаются;
  • форма со списком идентификаторов COLUMNS(col1, col2) не является раскрытием по сопоставлению: каждый столбец сохраняет имя в точности в том виде, в котором записан его идентификатор, поэтому COLUMNS(x) создаёт x, а COLUMNS(a.x) создаёт a.x;
  • ссылка на столбец без псевдонима в списке SELECT сохраняет имя в точности в записанном виде (например, SELECT a.x создаёт столбец с именем a.x, даже если x однозначен).
Благодаря этому внешние запросы могут ссылаться на такие столбцы по их квалифицированным именам, например:

analyzer_compatibility_prefer_alias_over_subcolumn

Если составной идентификатор, такой как b.id, может ссылаться либо на столбец id таблицы с псевдонимом b, либо на подстолбец b.id типа Tuple другого столбца, будет выбрана интерпретация с префиксом-псевдонимом (столбец id таблицы b). По умолчанию анализатор предпочитает подстолбец. Включите эту настройку, чтобы использовать правила разрешения имен старого анализатора.