Essas configurações estão disponíveis em system.settings e são geradas automaticamente a partir do código-fonte.
analyzer_compatibility_allow_compound_identifiers_in_unflatten_nested
Histórico de versões
| Versão | Valor padrão | Comentário |
|---|---|---|
| 25.8 | 1 | Nova configuração. |
Permite adicionar identificadores compostos ao nested. Esta é uma configuração de compatibilidade porque altera o resultado da consulta. Quando desabilitada, SELECT a.b.c FROM table ARRAY JOIN a não funciona, e SELECT a FROM table não inclui a coluna a.b.c no resultado de Nested a.
analyzer_compatibility_allow_non_aggregate_in_having
Histórico de versões
| Versão | Valor padrão | Comentário |
|---|---|---|
| 26.7 | 0 | Nova configuração de compatibilidade. Quando habilitada, o analyzer reproduz a reescrita legada de `HAVING` para `WHERE` para conjunções com AND não agregadas, em vez de gerar `NOT_AN_AGGREGATE`. |
Quando habilitada, o analyzer reproduz o comportamento legado de mover conjunções com AND não agregadas de HAVING para WHERE, em vez de gerar NOT_AN_AGGREGATE. A rejeição em conformidade com o padrão é o comportamento padrão; esta configuração serve como auxílio de migração para consultas que eram aceitas silenciosamente pelo analyzer antigo (enable_analyzer = 0). Conjunções que contêm funções de agregação, grouping ou funções não determinísticas permanecem em HAVING. Se qualquer conjunção contiver uma função de janela ou uma função com estado (por exemplo, rowNumberInBlock), a reescrita será desabilitada para todo o HAVING, em linha com o comportamento legado do PredicateExpressionsOptimizer. A configuração também é ignorada quando GROUP BY usa WITH CUBE, WITH ROLLUP, WITH TOTALS ou GROUPING SETS.
analyzer_compatibility_apply_final_to_all_joined_tables
Histórico de versões
| Versão | Valor padrão | Comentário |
|---|---|---|
| 26.8 | 0 | Nova configuração na master (o padrão false corresponde ao comportamento corrigido). A alteração de comportamento em si está registrada na versão 26.6, e a introdução para backports a branches de lançamento anteriores (com padrão true), na 26.4. |
| 26.6 | 0 | Corrigido um bug no analyzer em que FINAL na tabela mais à esquerda de um JOIN era incorretamente aplicado também às demais tabelas unidas. previous_value=true; portanto, `compatibility` com versões anteriores à 26.6 restaura o comportamento antigo. |
| 26.4 | 1 | Nova configuração de compatibilidade que controla se FINAL na tabela mais à esquerda de um JOIN é aplicado às demais tabelas unidas. Introduzida com padrão true (o comportamento antigo) para backports a versões anteriores à 26.6. |
Restaura o comportamento das versões anteriores à 26.6, em que o modificador FINAL especificado na tabela mais à esquerda de um JOIN era incorretamente aplicado também a todas as demais tabelas unidas (para motores compatíveis com FINAL, como ReplacingMergeTree). Por padrão, FINAL se aplica apenas à tabela em que foi especificado. Habilite esta opção para compatibilidade com consultas que dependem do comportamento antigo; a correção recomendada é especificar FINAL explicitamente em cada tabela que precisar dele.
Valores possíveis:
- 0 -
FINALse aplica apenas à tabela em que foi especificado. - 1 -
FINALna tabela mais à esquerda de um JOIN é aplicado a todas as tabelas unidas.
analyzer_compatibility_join_using_top_level_identifier
Histórico de versões
| Versão | Valor padrão | Comentário |
|---|---|---|
| 24.3 | 0 | Força a resolução do identificador em JOIN USING a partir da projeção |
Força a resolução do identificador em JOIN USING a partir da projeção (por exemplo, em SELECT a + 1 AS b FROM t1 JOIN t2 USING (b), o join será realizado por t1.a + 1 = t2.b, em vez de t1.b = t2.b). Aliases definidos em subexpressões na lista SELECT também são considerados (por exemplo, em SELECT uniqExact(a + 1 AS b) FROM t1 JOIN t2 USING (b), o join é realizado por t1.a + 1 = t2.b). Quando o alias correspondente é definido em uma subexpressão na lista SELECT, em vez de como um alias de nível superior, as réplicas paralelas são desativadas para a consulta. Para consultas enviadas a servidores remotos (tabelas Distributed, a função de tabela remote), essa consulta é rejeitada com uma exceção somente quando o identificador não pode ser resolvido no servidor remoto; se o alias mascarar uma coluna real da tabela à esquerda, o servidor remoto realizará o join por essa coluna, portanto os resultados poderão diferir da execução local.
analyzer_compatibility_multiple_joins_qualify_column_names
Histórico de versões
| Versão | Valor padrão | Comentário |
|---|---|---|
| 26.8 | 0 | Nova configuração de compatibilidade. Quando ativada, o analyzer reproduz os nomes qualificados das colunas de resultado usados pelo analyzer antigo em consultas cuja cláusula FROM tem duas ou mais JOINs. |
Quando ativada e a cláusula FROM de uma consulta contém dois ou mais JOINs (tabelas separadas por vírgulas contam; ARRAY JOIN não), o analyzer nomeia as colunas de resultado da mesma forma que a reescrita de múltiplas junções do analyzer antigo:
- as colunas produzidas pela expansão de
*,<table>.*ouCOLUMNS('<regexp>')recebem nomes no formato<alias-or-table>.<column>(o qualificador é o alias da expressão de tabela, se houver; caso contrário, o nome da tabela sem o banco de dados; ou, se aplicável, o nome da CTE; colunas de uma subconsulta incluída em uma junção sem alias permanecem não qualificadas). Dois tipos de coluna mantêm seu nome simples porque pertencem à junção, e não a uma única expressão de tabela: uma coluna produzida porARRAY JOINe uma chave mesclada porJOIN ... USING. Portanto, referências externas comoSELECT ll.arrouSELECT ll.knão são resolvidas nessas duas formas; - a forma de lista de identificadores
COLUMNS(col1, col2)não é uma expansão de correspondência: cada coluna mantém o nome exatamente como seu identificador foi escrito; assim,COLUMNS(x)produzxeCOLUMNS(a.x)produza.x; - uma referência de coluna sem alias na lista
SELECTmantém o nome exatamente como foi escrita (por exemplo,SELECT a.xproduz uma coluna chamadaa.xmesmo quandoxnão é ambígua).
Isso permite que consultas externas que referenciam essas colunas pelos nomes qualificados funcionem, por exemplo:
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);Tem efeito apenas quando o analyzer está habilitado (enable_analyzer = 1).
analyzer_compatibility_prefer_alias_over_subcolumn
Histórico de versões
| Versão | Valor padrão | Comentário |
|---|---|---|
| 26.6 | 0 | Nova configuração de compatibilidade |
Quando um identificador composto como b.id pode se referir tanto à coluna id de uma tabela com alias b quanto à subcoluna Tuple b.id de alguma outra coluna, prefira a interpretação com prefixo de alias (coluna id de b). Por padrão, o analyzer prefere a subcoluna. Ative esta opção para corresponder à resolução do analyzer antigo.