Esta configuración está disponible en system.settings y se genera automáticamente a partir del código fuente.
analyzer_compatibility_allow_compound_identifiers_in_unflatten_nested
Historial de versiones
| Versión | Valor predeterminado | Comentario |
|---|---|---|
| 25.8 | 1 | Nueva configuración. |
Permite añadir identificadores compuestos a Nested. Esta es una configuración de compatibilidad porque cambia el resultado de la consulta. Cuando está deshabilitada, 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
Historial de versiones
| Versión | Valor predeterminado | Comentario |
|---|---|---|
| 26.7 | 0 | Nueva configuración de compatibilidad. Cuando está habilitada, el analizador imita la reescritura legacy de `HAVING` a `WHERE` para conjunciones no agregadas con AND, en lugar de generar `NOT_AN_AGGREGATE`. |
Cuando está habilitada, el analizador imita el comportamiento legacy de mover de 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
Historial de versiones
| Versión | Valor predeterminado | Comentario |
|---|---|---|
| 26.8 | 0 | Nueva configuración en master (el valor predeterminado false corresponde al comportamiento corregido). El cambio de comportamiento se registra en la 26.6 y la introducción para backports a ramas de lanzamiento anteriores (con el valor predeterminado true), en la 26.4. |
| 26.6 | 0 | Se corrigió un bug en el analizador por el que FINAL en la tabla más a la izquierda de un JOIN también se aplicaba incorrectamente a las demás tablas unidas. previous_value=true, por lo que `compatibility` con versiones anteriores a la 26.6 restaura el comportamiento anterior. |
| 26.4 | 1 | Nueva configuración de compatibilidad que controla si FINAL en la tabla más a la izquierda de un JOIN se aplica a las demás tablas unidas. Se introdujo con el valor predeterminado true (el comportamiento anterior) para backports a versiones anteriores a la 26.6. |
Restaura el comportamiento de las versiones anteriores a la 26.6, en las que el modificador 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
Historial de versiones
| Versión | Valor predeterminado | Comentario |
|---|---|---|
| 24.3 | 0 | Obliga a resolver el identificador en JOIN USING a partir de la proyección |
Obliga a resolver el identificador en JOIN USING a partir de la proyección (por ejemplo, en 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
Historial de versiones
| Versión | Valor predeterminado | Comentario |
|---|---|---|
| 26.8 | 0 | Nueva configuración de compatibilidad. Cuando está habilitada, el analizador reproduce los nombres cualificados de las columnas de resultado del analizador anterior para las consultas cuya cláusula FROM contiene dos o más JOIN. |
Cuando está habilitada y la cláusula 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).
Esto permite que funcionen las consultas externas que hacen referencia a dichas columnas mediante sus nombres cualificados, por ejemplo:
SELECT ll.Date FROM (SELECT * FROM t AS ll LEFT JOIN t1 ON ll.k = t1.k LEFT JOIN t2 ON ll.k = t2.k);Solo surte efecto cuando el analizador está habilitado (enable_analyzer = 1).
analyzer_compatibility_prefer_alias_over_subcolumn
Historial de versiones
| Versión | Valor predeterminado | Comentario |
|---|---|---|
| 26.6 | 0 | Nueva configuración de compatibilidad |
Cuando un identificador de varias partes como 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.