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). По умолчанию анализатор предпочитает подстолбец. Включите эту настройку, чтобы использовать правила разрешения имен старого анализатора.