analyzer_compatibility_allow_compound_identifiers_in_unflatten_nested
SELECT a.b.c FROM table ARRAY JOIN a no funciona, y SELECT a FROM table no incluye la columna a.b.c en el resultado de Nested a.
analyzer_compatibility_allow_non_aggregate_in_having
HAVING a WHERE las conjunciones no agregadas con AND, en lugar de generar NOT_AN_AGGREGATE. El rechazo conforme al estándar es el comportamiento predeterminado; esta opción sirve como ayuda para la migración de consultas que el analizador anterior (enable_analyzer = 0) aceptaba silenciosamente. Las conjunciones que contienen funciones de agregación, grouping o funciones no deterministas permanecen en HAVING. Si alguna conjunción contiene una función de ventana o una función con estado (por ejemplo, rowNumberInBlock), la reescritura se desactiva para todo el HAVING, en consonancia con el comportamiento legacy de PredicateExpressionsOptimizer. La configuración también se ignora cuando GROUP BY usa WITH CUBE, WITH ROLLUP, WITH TOTALS o GROUPING SETS.
analyzer_compatibility_apply_final_to_all_joined_tables
FINAL especificado en la tabla más a la izquierda de un JOIN también se aplicaba incorrectamente a todas las demás tablas unidas (en motores compatibles con FINAL, como ReplacingMergeTree). De forma predeterminada, FINAL se aplica únicamente a la tabla en la que se especifica. Habilite esta opción para mantener la compatibilidad con consultas que dependan del comportamiento anterior; la corrección recomendada es escribir FINAL explícitamente en cada tabla que lo necesite.
Valores posibles:
- 0 -
FINALse aplica únicamente a la tabla en la que se especifica. - 1 -
FINALen la tabla más a la izquierda de un JOIN se aplica a todas las tablas unidas.
analyzer_compatibility_join_using_top_level_identifier
SELECT a + 1 AS b FROM t1 JOIN t2 USING (b), el JOIN se realizará mediante t1.a + 1 = t2.b, en lugar de t1.b = t2.b). También se tienen en cuenta los alias definidos en subexpresiones dentro de la lista SELECT (por ejemplo, en SELECT uniqExact(a + 1 AS b) FROM t1 JOIN t2 USING (b), el JOIN se realiza mediante t1.a + 1 = t2.b). Cuando el alias coincidente se define en una subexpresión dentro de la lista SELECT en lugar de como alias de nivel superior, las réplicas paralelas se deshabilitan para la consulta. En las consultas enviadas a servidores remotos (tablas Distributed, función de tabla remote), la consulta se rechaza con una excepción solo cuando el identificador no se puede resolver en absoluto en el servidor remoto; si el alias oculta una columna real de la tabla izquierda, el servidor remoto realiza el JOIN usando esa columna, por lo que los resultados pueden diferir de la ejecución local.
analyzer_compatibility_multiple_joins_qualify_column_names
FROM de una consulta contiene dos o más JOIN (se cuentan las tablas separadas por comas; ARRAY JOIN no), el analizador asigna nombres a las columnas de resultado como lo hacía la reescritura para múltiples joins del analizador anterior:
- las columnas generadas al expandir
*,<table>.*oCOLUMNS('<regexp>')reciben nombres con la forma<alias-or-table>.<column>(el calificador es el alias de la expresión de tabla, si lo tiene; de lo contrario, el nombre de la tabla sin la base de datos; de lo contrario, el nombre de la CTE; las columnas de una subconsulta unida sin alias se dejan sin calificar). Dos tipos de columnas conservan su nombre sin calificar porque pertenecen al join y no a una única expresión de tabla: una columna generada porARRAY JOINy una clave fusionada medianteJOIN ... USING. Por tanto, las referencias externas comoSELECT ll.arroSELECT ll.kno se resuelven en esos dos casos; - la forma de lista de identificadores
COLUMNS(col1, col2)no es una expansión de patrones: cada columna conserva el nombre exactamente como se escribió su identificador, por lo queCOLUMNS(x)producexyCOLUMNS(a.x)producea.x; - una referencia de columna sin alias en la lista
SELECTconserva su nombre exactamente como se escribió (por ejemplo,SELECT a.xproduce una columna llamadaa.xincluso cuandoxes inequívoca).
enable_analyzer = 1).
analyzer_compatibility_prefer_alias_over_subcolumn
b.id podría referirse tanto a la columna id de una tabla con alias b como a una subcolumna b.id de tipo Tuple de alguna otra columna, se prefiere la interpretación con prefijo de alias (la columna id de b). De forma predeterminada, el analizador prefiere la subcolumna. Actívalo para que coincida con la resolución del analizador anterior.