Alterações incompatíveis com versões anteriores
Mudanças em consultas e sintaxe
- O operador
INagora usa semântica de valores exatos para o tipoBool: apenas0e1no conjunto correspondem a valoresBool. Antes, valores numéricos maiores que255no conjuntoINeram incorretamente convertidos para true, entãoSELECT CAST(1, 'Bool') IN (256)retornava1. Agora, retorna corretamente0. #93115 (Ashrith Bandla). - Corrigida a precedência do operador
NOTpara corresponder ao padrão SQL:NOTagora tem precedência menor queIS NULL,BETWEEN,LIKEe operadores aritméticos. Por exemplo,NOT (x) IS NULLagora é interpretado comoNOT (x IS NULL)em vez de(NOT x) IS NULL. Isso pode alterar o resultado de consultas que dependiam do comportamento anterior (fora do padrão). #97680 (Alexey Milovidov). SELECTnão é mais permitido como identificador sem aspas em um elemento da lista de expressõesWITH. #101059 (Aruj Bansal).- O operador
INagora rejeita conversões com perda deDecimaldentro de tipos compostos (Tuple,Array,Map), tornando seu comportamento consistente com comparações escalares no nível superior. Antes, as verificações de precisão eram aplicadas apenas a valores escalares no nível superior: por exemplo,CAST('33.3', 'Decimal64(1)') IN (33.33)retornava corretamente0, masCAST(['33.3'], 'Array(Decimal64(1))') IN ([33.33])retornava incorretamente1. Agora, ambos os casos retornam corretamente0. #101812 (Nihal Z. Miaji).
Alterações em tipos de dados
- As versões de serialização dos tipos de dados agora são propagadas para tipos de dados aninhados. Por exemplo, a versão de serialização
with_size_streamde String antes era aplicada apenas a colunas String de nível superior e a elementos de Tuple; agora, ela é aplicada a qualquer tipo String dentro de qualquer tipo aninhado, como Array, Map, Variant ou JSON. Isso é controlado pela configuração do MergeTreepropagate_types_serialization_versions_to_nested_types, que agora vem habilitada por padrão. Após essa alteração, partes de dados recém-criadas não podem ser lidas por versões mais antigas, mas partes antigas podem ser lidas na nova versão. As atualizações são seguras, mas as reversões para versões anteriores não. #94859 (Pavel Kruglov). - Corrigida a ordem dos bytes da serialização binária de
QBitpara usar o formato little-endian. #101378 (Raufs Dunamalijevs).
Alterações em armazenamento e índices
- Corrigidos os metadados das projeções normais para que projeções com chaves de ordenação de várias colunas sejam reconhecidas corretamente. #91352 (Amos Bird).
- Corrigidos os arquivos de skip index que não respeitavam a configuração
replace_long_file_name_to_hash, o que causava erros de “Nome de arquivo muito longo” e falhas nas leituras de índice para índices com nomes longos. Os nomes de arquivo de skip index agora passam por hash quando excedemmax_file_name_length, de forma semelhante aos arquivos de coluna. Isso é retrocompatível (novos servidores leem partes antigas), mas fazer downgrade (ou usar servidores antigos durante um rolling upgrade) pode fazer com que índices com nomes longos sejam ignorados. #97128 (Raúl Marín).
Funcionalidades removidas
- Removido o tipo de
skip indexhypothesis. Era uma funcionalidade experimental pouco conhecida, com utilidade prática limitada. Criar tabelas comINDEX ... TYPE hypothesisagora gera um erro. #96874 (Alexey Milovidov). - Removida a função experimental
detectProgrammingLanguage. #99567 (Alexey Milovidov).
Alterações em Settings e na configuração
- O valor padrão de
mysql_datatypes_support_levelfoi alterado de vazio paradecimal,datetime64,date2Date32, habilitando por padrão o mapeamento correto deDATEdo MySQL paraDate32, deDECIMAL/NUMERICparaDecimale deDATETIME/TIMESTAMPcom precisão paraDateTime64. Anteriormente, colunasDATEdo MySQL eram mapeadas paraDate, que não consegue representar datas anteriores a 1970-01-01, causando corrupção de dados. #97716 (Alexey Milovidov).
Alterações em inserção e desduplicação
- A inserção assíncrona agora vem ativado por padrão — o ClickHouse agrupa todas as inserções pequenas em lotes por padrão. Isso é controlado pela configuração
compatibility: definircompatibilitycomo uma versão inferior a 26.2 restaura o valor padrão anterior,false. As inserções assíncronas podem ser ativadas ou desativadas em vários níveis: nos perfis de usuário da config, na sessão, na consulta ou na tabela MergeTree. #97590 (Sema Checherinda).
Alterações em tabelas de sistema
- A coluna
skip_indexesemsystem.query_logfoi revertida. #101018 (Alexey Milovidov).
Outras alterações incompatíveis
mergeTreeAnalyzeIndexes{,UUID}agora aceita um array de nomes de partes em vez de uma regexp, já que expressões regulares são lentas (funcionalidade experimental). #98474 (Azat Khuzhin).- A biblioteca H3 foi atualizada para a v4, o que melhora a precisão dos cálculos de comprimento, área e outras métricas. Esta alteração não é compatível com versões anteriores porque os novos resultados diferem dos anteriores. #100348 (Alexey Milovidov).
- Foi alterada a forma como a tabela
Mergelida com colunas virtuais. Se a tabela subjacente contiver_tableou_database, essas colunas serão lidas do armazenamento; caso contrário, serão preenchidas após a etapa de leitura, usando a etapa de expressão. #101742 (Mikhail Artemenko).
Novos recursos
Funções
- Adicionada a função
naturalSortKey(s)para chaves de ordenação natural. #90322 (Nazarii Piontko). - Adicionada a função
arrayAutocorrelation(arr [, max_lag]), que calcula a autocorrelação normalizada de um array numérico para cada defasagem. Suporta arrays dos tipos inteiro, Float e Decimal. #94776 (Wenyu Chen). - A função
has()agora é compatível com o tipo JSON para verificar a existência de caminhos, de forma semelhante aMap. #96927 (DQ). - Adicionada a table function
mergeTreeTextIndex(database, table, index), que lê dados diretamente de um índice de texto. Ela pode ser usada para introspecção ou para executar agregações sobre dados do índice de texto. #97003 (Anton Popov). - Adicionada a função SQL
obfuscateQuery. #98305 (Xuewei Wang). - Adicionadas as funções
caseFoldUTF8eremoveDiacriticsUTF8para case folding de Unicode e remoção de marcas diacríticas. #98973 (George Larionov). - A função
printfagora suporta format strings não constantes, permitindo um padrão de formato diferente por linha com base nos valores das colunas. #98991 (Yash). - Adicionada a função
highlight(), que envolve ocorrências de termos de busca em uma string de texto com tags HTML (por padrão,<em>/</em>). Suporta correspondência ASCII sem diferenciar maiúsculas de minúsculas, mesclagem automática de correspondências sobrepostas e tags personalizadas de abertura/fechamento. #99131 (Peng). - Adicionada a função de string
normalizeUTF8NFKCCasefoldpara normalização Unicode NFKC_Casefold, que combina a normalização NFKC com case folding. #99276 (George Larionov). - Adicionado o tokenizer
unicode_wordpara full-text indexes e a funçãotokens. Ele divide o texto usando regras de fronteira de palavras do Unicode: palavras ASCII são formadas com caracteres conectores (underscore, dois-pontos, ponto, aspas simples), enquanto caracteres Unicode não ASCII se tornam tokens de um único caractere. As stop words configuráveis usam, por padrão, pontuação CJK comum. #99357 (Amos Bird). - Adicionada a função
arrayTranspose, que recebe um array bidimensional (matriz) e o transpõe. #101214 (Vitaly Baranov). - Adicionada a função
hasPhrase(aliasmatchPhrase) para busca por frase (sequências contínuas de tokens). A busca é por brute-force e ainda não é compatível com o índice de texto. #101997 (Elmi Ahmadov). - Adicionado
dotProductcomo função de distância compatível para índices de similaridade vetorial. A direção de ordenação agora é validada para todas as funções de distância para evitar resultados silenciosamente incorretos. #102254 (Renzo). - A função
stemagora pode aplicar stemming a todas as palavras/tokens em colunasString,FixedString,Array([Fixed]String),Nullable,LowCardinalityeConst. #99137 (Jimmy Aguilar Mena). - A função
stemdeixou de ser experimental (antes, era necessário habilitarallow_experimental_nlp_functions). #102399 (Jimmy Aguilar Mena). - Adicionada a função
JSONAllValues, que retorna todos os valores de uma colunaJSONcomoArray(String), com os valores serializados em representação textual e ordenados pelos nomes de seus caminhos. Também foi adicionado suporte a índice de texto para a expressãoJSONAllValuesem colunasJSON: quando um índice de texto é criado emJSONAllValues(json_column), ele é usado automaticamente para filtrar consultas em subcolunasJSON(por exemplo,json_column.key1 = 'value'). #100730 (Anton Popov). - Adicionadas unidades compatíveis com PostgreSQL ao operador
EXTRACT:EPOCH,DOW,DOY,ISODOW,ISOYEAR,WEEK,CENTURY,DECADEeMILLENNIUM. Também foi corrigidoEXTRACT(WEEK FROM date), que antes gerava um erro. #100274 (Alexey Milovidov). - Adicionado suporte à função
toDaysInMonth()por meio de açúcar sintático no parser para a sintaxe da funçãoOVERLAYpadrão SQL. A funçãooverlayjá existe; isso adiciona suporte à forma baseada em palavras-chave usandoPLACING,FROMeFORcomo separadores. #101681 (Desel72). - Valores
DateeDate32agora podem ser somados a valoresTimeeTime64usando o operador+, produzindo um resultadoDateTimeouDateTime64. Por exemplo,SELECT toDate('2024-01-15') + toTime('14:30:25')retorna2024-01-15 14:30:25. O resultado é calculado no fuso horário da sessão, e resultados fora do intervalo são tratados de acordo com a configuraçãodate_time_overflow_behavior. #102421 (Nihal Z. Miaji).
Recursos de SQL e de consultas
- Quando um parâmetro tem o tipo
Nullablee não é especificado, agora presume-se que seu valor sejaNULL. #93869 (Vikash Kumar). - O ClickHouse agora pode descartar partes de dados inteiras em consultas
SELECTcom base em estatísticas de mín./máx. #94140 (zoomxi). - Adicionado suporte a CTEs materializadas, que avaliam CTEs apenas uma vez durante a execução da consulta e armazenam seus resultados em tabelas temporárias. #94849 (Dmitry Novik).
- Certas funções agora podem ser usadas sem parênteses em SQL. #95949 (Aly Kafoury).
- Adicionada a sintaxe combinada de subcoluna
json.@pathpara o tipoJSON. Ela retorna o valor literal comoDynamicse o caminho apontar para um escalar, o subobjeto comoDynamicse o caminho apontar para um objeto aninhado, ouNULLse o caminho não existir. #98788 (Pavel Kruglov). - Adicionada a palavra-chave
SOMEpara expressões de subconsulta. Ela se comporta de forma idêntica aANY. #99842 (Artem Kytkin). - Adicionado suporte a
SET TIME ZONE 'tz'como alias deSET session_timezone. #99883 (phulv94). - Adicionado suporte à cláusula padrão SQL
VALUEScomo expressão de tabela emFROM, por exemploSELECT * FROM (VALUES (1, 'a'), (2, 'b')) AS t(id, val). #100143 (Desel72). - Adicionado suporte a literais compostos de intervalos no padrão SQL com qualificadores de intervalo
TO, por exemploINTERVAL '1:30' HOUR TO MINUTE, decompostos internamente em somas de intervalos. #100453 (Desel72). - Adicionado o comando
SYSTEM FLUSH OBJECT STORAGE QUEUE db.table PATH 'x'para os modos ordered e unordered. #100709 (Bharat Nallan).
Motores de tabela e armazenamento
- Adicionado suporte à leitura incremental para o motor de tabela
Paimon, com rastreamento do progresso de snapshots baseado em Keeper, incluindo leituras direcionadas de delta de snapshot viapaimon_target_snapshot_id. #93655 (XiaoBinMu). - Adicionado suporte a auxiliary ZooKeeper em
DatabaseReplicated. #95590 (RinChanNOW). - Adicionado suporte para ler tipos de timestamp em nanossegundos do Iceberg v3 (
timestamp_nsetimestamptz_ns), mapeados paraDateTime64(9)eDateTime64(9, 'UTC'). Isso permite que o ClickHouse leia dados Iceberg com esses tipos no schema; isso não constitui suporte completo ao Iceberg v3 nem gravação em Iceberg v3 com esses tipos. #97132 (Dmitry Kovalev). - Adicionado
ALTER TABLE ... EXECUTE expire_snapshots('<timestamp>')para tabelas Iceberg. #97904 (murphy-4o). - Adicionado um novo cache SLRU para metadados do Parquet para melhorar o desempenho de leitura, eliminando a necessidade de baixar novamente arquivos apenas para ler os metadados. #98140 (Grant Holly).
- Adicionado suporte a skip index do MergeTree para colunas JSON usando
JSONAllPathscom os tipos de índicebloom_filter,tokenbf_v1,ngrambf_v1etext(invertido), permitindo o salto de grânulos com base no conjunto de JSON paths presentes em cada grânulo. #98886 (Pavel Kruglov). - Adicionado o índice de projeção
commit_order, que reorganiza os dados na ordem de inserção. #99004 (Mikhail Artemenko). - Adicionada serialização em buckets para colunas
Mapno MergeTree (map_serialization_version = 'with_buckets'). As chaves são divididas em buckets baseados em hash, de modo que a leitura de uma única chave (m['key']) leia apenas um bucket em vez da coluna inteira, proporcionando um ganho de desempenho de 2 a 49 vezes em lookup de chave única, dependendo do tamanho do map. O número de buckets e a estratégia de distribuição em buckets podem ser controlados pelas novas configurações do MergeTreemap_serialization_version,max_buckets_in_map,map_buckets_strategy,map_buckets_coefficientemap_buckets_min_avg_size. A configuraçãomap_serialization_version_for_zero_level_partsmantém a serialização básica para inserts, a fim de evitar sobrecarga de gravação, enquanto as partes mescladas usam buckets. Há suporte a skip indexes emmapKeys/mapValuescom serialização em buckets, eoptimize_functions_to_subcolumnsreescrevem['key']para uma leitura de subcoluna por chave quando buckets estão disponíveis. #99200 (Pavel Kruglov).
Inserção e desduplicação
- Implementado um novo comportamento de
max_insert_block_size_rows,max_insert_block_size_bytes,min_insert_block_size_rowsemin_insert_block_size_bytesno processo de combinação de blocos, controlado pela configuração de compatibilidadeuse_strict_insert_block_limits. #94207 (Kirill Kopnev).
Configurações e definições
- Adicionada a configuração do MergeTree
table_readonlypara marcar tabelas como somente leitura, impedindo inserções e modificações. #97652 (Alexey Milovidov). - Adicionada a configuração
use_partition_pruning(aliasuse_partition_key). Defina-a comofalsepara desativar a poda de partições com base na chave de partição. #97888 (Nihal Z. Miaji). - Cada entrada
type=httpem<protocols>agora pode especificar uma chave<handlers>personalizada apontando para uma seção de configuração<http_handlers_*>separada, permitindo regras de roteamento HTTP diferentes para cada porta. #98414 (Amos Bird). - Adicionadas duas configurações do MergeTree —
replicated_fetches_min_part_levelereplicated_fetches_min_part_level_timeout_seconds— que permitem que réplicas evitem buscar partes recém-inseridas (ainda não mescladas) de outras réplicas, reduzindo a sobrecarga de replicação durante ingestão intensa. #98625 (tanner-bruce). - Adicionada a configuração de servidor
restore_access_entities_with_current_grants. Quando habilitada, usuários/funções restaurados têm seus grants limitados ao que o usuário que está restaurando tem permissão para conceder (com a mesma semântica deGRANT CURRENT GRANTS), em vez de falhar comACCESS_DENIED. #98795 (pufit). - Adicionadas as configurações
max_skip_unavailable_shards_numemax_skip_unavailable_shards_ratiopara limitar quantos shards podem ser ignorados silenciosamente quandoskip_unavailable_shardsestá habilitada. Se o número ou a proporção de shards indisponíveis exceder o limite configurado, uma exceção será lançada em vez de retornar silenciosamente resultados incompletos. #99369 (Alexey Milovidov). - Implementadas quotas por hash de consulta normalizada para proteger serviços públicos do ClickHouse contra abuso.
NORMALIZED_QUERY_HASHé compatível como um tipo de quota key — um bucket de quota separado para cada consulta normalizada única, de modo queCREATE QUOTA q KEYED BY normalized_query_hashrastreia cada consulta distinta de forma independente.QUERIES_PER_NORMALIZED_HASHé compatível como um tipo de recurso de quota — limitando o número máximo de execuções de qualquer consulta normalizada dentro de um intervalo, de modo queMAX queries_per_normalized_hash = 100impede que qualquer padrão de consulta seja executado mais de 100 vezes. #99586 (Alexey Milovidov). - A configuração do MergeTree
auto_statistics_typesagora usaminmax, uniqpor padrão, de modo que estatísticas minmax e uniq são criadas automaticamente para todas as colunas adequadas em novas tabelas.materialize_statistics_on_insertagora usafalsepor padrão, de modo que as estatísticas são geradas durante as mesclagens em vez de no momento da inserção, reduzindo a sobrecarga das inserções. Definamaterialize_statistics_on_insert = 1para restaurar o comportamento antigo. #101275 (Han Fei). - Adicionada a configuração de refresh
prefer_dependency_replicapara cadeias de dependência de visão materializada, reduzindo dados ausentes causados por atraso de replicação entre réplicas. #101591 (Seva Potapov).
Autenticação
- Adicionada a opção de configuração LDAP por servidor
<follow_referrals>(padrãofalse) para controlar se o cliente LDAP segue redirecionamentos. Desabilitar o seguimento de redirecionamentos evita timeouts e travamentos ao pesquisar a partir de uma base DN da raiz do domínio do Active Directory, além de gerar menos ruído nos logs. #96765 (paf91).
Tabelas de sistema
- Foi adicionada a
system.histogram_metric_log, uma nova tabela de sistema que gera periodicamente snapshots de todas as métricas de histograma (por exemplo, latências de S3/Azure e durações dos estágios de processamento de solicitações do Keeper). A colunavaluedesystem.histogram_metricsagora éFloat64, para maior flexibilidade e compatibilidade com o modelo de dados do Prometheus. #103046 (Miсhael Stetsyuk).
Recursos experimentais
- Adicionado o codec de compressão de ponto flutuante ALP (sem fallback ALP_rd para valores double não compressíveis). #91362 (Nazarii Piontko).
- Adicionadas lazy type hints experimentais para colunas JSON. Quando habilitado por
allow_experimental_json_lazy_type_hints,ALTER TABLE ... MODIFY COLUMN json JSON(path TypeName)que apenas adiciona ou modifica type hints é concluído instantaneamente como uma operação apenas de metadados, sem reescrever dados históricos. As type hints são aplicadas no momento da consulta para partes antigas e materializadas durante INSERTs e mesclagens em segundo plano. #97412 (tanner-bruce). - Adicionado suporte a dialetos SQL externos usando a biblioteca
polyglot. #99496 (Alexey Milovidov). - Adicionada a configuração
query_plan_optimize_join_order_randomize, que randomiza as estatísticas usadas para reordenar joins, útil para testes. #100643 (Vladimir Cherkasov). - Adicionado suporte a funções de IA no ClickHouse, permitindo que os usuários chamem endpoints da OpenAI e da Anthropic usando SQL.
aiGenerateestá incluída como a primeira função desse tipo. #100831 (George Larionov). - Adicionadas as funções de IA
aiClassify,aiExtracteaiTranslatepara usar APIs de LLM no ClickHouse. #100832 (George Larionov). - Adicionado suporte a lagos de dados no Azure com Delta Kernel. #102202 (Smita Kulkarni).
Melhorias de desempenho
Desempenho de JOIN
- Pequenas melhorias em
HashJoineConcurrentHashJoin. #96663 (Yarik Briukhovetskyi). - Adicionado suporte para trocar os lados das junções
ANTI,SEMIeFULLcom base nas estatísticas do otimizador. #97498 (Hechem Selmi). - Reduzida a contenção de cache nas junções
RIGHTeFULLao verificar seJoinUsedFlagsestá definido antes de gravar. #99274 (Hechem Selmi). - Aceleradas as junções hash com chaves
Int32eInt64de pequeno intervalo usando uma tabela hash com índice direto. #99275 (Hechem Selmi).
Otimização de consultas
- Otimizado o skipping de grânulos para
pointInPolygonem polígonos grandes e corrigido o problema em que a análise de índice depointInPolygonlançava erro durante o pruning da chave primária. #91633 (Nihal Z. Miaji). optimize_read_in_orderagora é respeitado na leitura de projeções. #95885 (Andrey Zvonov).- A leitura do dicionário do text index foi levemente otimizada, melhorando o desempenho geral da análise do text index. #97519 (Anton Popov).
- Melhorado o desempenho da análise do text index para queries com condições combinadas envolvendo colunas indexadas e não indexadas. Antes, a otimização de saída antecipada durante a análise de índice era desabilitada incorretamente nesses casos. #98096 (Anton Popov).
- Melhorado o desempenho de queries com expressões constantes que geram arrays ou maps muito longos. #98287 (Alexey Milovidov).
- Corrigida a análise da condição de chave para chaves primárias
DateTime64comparadas com constantes inteiras, o que antes resultava na ausência de pruning de grânulos. #98410 (Amos Bird). - A configuração
optimize_syntax_fuse_functionsagora está habilitada por padrão. #98424 (Alexey Milovidov). - O partition pruning agora é permitido quando o predicado contém qualquer operador de comparação (
=,<,>,!=) e a chave de partição está envolvida em uma cadeia determinística de funções (por exemplo, comPARTITION BY x, predicados comocityHash64(x) % 5 > 2,toYYYYMM(x) < 2026,toYYYYMM(x) = 2026outoYYYYMM(x) != 2026agora usarão a chave de partição para pruning). #98432 (Nihal Z. Miaji). - A otimização read-in-order e o pruning da chave primária agora são permitidos quando o tipo de destino de
CASTéNullablee a conversão é monotônica; por exemplo, comPRIMARY KEY x, o ClickHouse pode usar a otimização read-in-order paraORDER BY x::Nullable(UInt64)e o pruning da chave primária para predicados comoWHERE x::Nullable(UInt64) > 500000. #98482 (Nihal Z. Miaji). - O pruning de índice e o pushdown de filtro agora são permitidos quando uma coluna inteira é comparada com um literal float; por exemplo, predicados como
WHERE x < 10.5agora podem usar a chave primária para pruning, e filtros comoprime < 1e9ounumber < 1e5agora são aplicados por pushdown às table functionsprimes()enumbers(), em vez de causar execução ilimitada. #98516 (Nihal Z. Miaji). - Queries que filtram colunas de chave primária do MergeTree com alternâncias regex sobre strings literais, como
^(abc-1|abc-2), agora podem usar o pruning da chave primária quando as alternativas compartilham um prefixo em comum. #98988 (Yash). - Otimizados
INTERSECT ALLeEXCEPT ALL. #99097 (Raufs Dunamalijevs). - Adicionado suporte à otimização
read_in_order_use_virtual_rowpara leituras em ordem reversa. #99198 (Vladimir Cherkasov). - Consultas descontínuas mais rápidas para colunas
LowCardinalitycom um único dicionário. #99285 (Ivan Babrou). - Corrigida a escalabilidade negativa de consultas curtas com agregação em máquinas com muitos núcleos. Quando uma consulta lê poucas marcas, o pipeline não é mais expandido para
max_threadsapós a agregação, evitando a sobrecarga de streams quase vazios. #99493 (Alexey Milovidov). - Melhorado o desempenho de consultas com réplicas paralelas por meio da seleção correta do tamanho da tarefa de leitura. #99801 (Nikita Taranov).
- Removidos elementos redundantes no final de
ORDER BYquando todas as chaves deGROUP BYjá estão cobertas pelo prefixo deORDER BY. #100157 (Alexey Milovidov). - Consultas otimizadas ao levar a cláusula
LIMITpara dentro deUNION ALL. #100364 (Alexey Milovidov). - Adicionado suporte à compilação JIT para comparações de colunas
StringeFixedStringemORDER BY, melhorando em 6–17% o desempenho da ordenação na fase de merge para chaves de ordenação com muitas strings. #100577 (Raúl Marín). - Quando
read_in_order_use_virtual_rowestá habilitado junto com a nova configuraçãoread_in_order_use_virtual_row_per_block, as informações de limite de linha virtual agora são emitidas após cada bloco lido do MergeTree, permitindo que o merge repriorize fontes no meio do stream para partes cujos dados são totalmente filtrados porWHERE/PREWHERE/JOIN. #100603 (Vladimir Cherkasov). - Melhor paralelização de consultas com views simples (sobre uma tabela MergeTree subjacente) executadas com réplicas paralelas. #100815 (Igor Nikonov).
- Adicionado suporte a réplicas paralelas sobre views simples (incluindo views
UNION ALLelegíveis sobre tabelasMergeTree) quandoparallel_replicas_allow_view_over_mergetree=1. Isso paraleliza a consulta externa da view em vez da interna, aumentando a paralelização da consulta entre nós. #100958 (Igor Nikonov). - Otimizada a leitura na ordem da chave primária para
full_sorting_mergequando há filtros comINno plano da consulta. #101261 (Nikita Taranov). - Melhorado o desempenho de
INSERT VALUESpara colunasMap,ArrayeTuplequando os valores são passados como strings com escape (por exemplo,'{\'key\':1}'), evitando fallback desnecessário para o parser de expressões SQL. #102119 (Joanna Hulboj).
Desempenho de funções e agregação
- Melhorado o desempenho da função
levenshteinDistance. #94543 (Joanna Hulboj). - Otimizadas as conversões em lote do tipo Decimal, evitando chamadas de função por elemento. #95923 (Konstantin Bogdanov).
- Melhorado o desempenho de consultas
LIKE. #98149 (Elmi Ahmadov). - Otimizada a função de agregação
avgWeightedcom o uso de acumuladores locais em vez de store-forwarding por linha via estado de agregação, melhorando o desempenho em até 27% para entradasNullable. #98793 (Antonio Andelic). - Aceleradas as funções
var*Stableestddev*Stablepara colunasFloat64com a desvirtualização do loop interno. Isso permite otimizações do compilador (FMA/registers) que alteram os resultados de ponto flutuante no nível de ULP. #99460 (Riyane El Qoqui). - Passa a usar a codificação base58 otimizada do Firedancer para entradas de 32/64 bytes (automaticamente em
base58Encode) e permite usar a decodificação base58 otimizada se o resultado decodificado tiver 32/64 bytes (explicitamente combase58Decode('...', 32)). #99461 (Joanna Hulboj). - Otimizada a função
cutURLParametercom a eliminação de deslocamentos de memória desnecessários. #100218 (Nikita Semenov). - Conversão mais rápida de float para string para valores inteiros grandes, estendendo o caminho rápido de
itoacom arredondamento compatível com dragonbox. #100649 (Raúl Marín). - Substituído dragonbox por zmij para uma conversão de float para string de 1,5x a 3x mais rápida. #100650 (Raúl Marín).
- Conversão mais rápida de
Int128/UInt128para string ao substituir a divisão por software pela redução de Barrett e desenrolar o loop de conversão. #100671 (Raúl Marín). - Evitada a criação de threads redundantes na mesclagem paralela de
UniqExactSet. #100686 (Jiebin Sun). - Adicionada mesclagem paralela em lote para
UniqExactSet. #100687 (Jiebin Sun).
Desempenho de armazenamento e E/S
- Redução da contenção de bloqueios durante operações somente leitura em tabelas ReplicatedMergeTree com mutações concluídas. #95771 (Eduard Karacharov).
- O Iceberg agora pode pré-carregar metadados no cache de forma assíncrona, ao definir
iceberg_metadata_async_prefetch_period_msna criação da tabela. ConsultasSELECTem tabelas Iceberg agora podem especificar o parâmetroiceberg_metadata_staleness_ms, o que permite ao ClickHouse usar a versão em cache dos metadados se ela estiver mais atual do que o limite de desatualização especificado; caso contrário, o catálogo Iceberg remoto será consultado para obter os metadados mais recentes. Isso pode eliminar chamadas ao catálogo Iceberg durante o processamento das solicitações, trazendo um ganho de desempenho perceptível. #96191 (Arsen Muk). - O modo ordered do S3Queue agora usa S3
ListObjectsV2StartAfterpara evitar listar novamente todo o histórico do prefixo, reduzindo as chamadasListObjects. #96370 (Venkata Vineel). - Habilitadas leituras paralelas no YTsaurus table engine. #97343 (MikhailBurdukov).
- Melhorado o desempenho de lagos de dados. Em versões anteriores, a leitura a partir do armazenamento de objetos não redimensionava a pipeline de acordo com o número de threads de processamento. #99548 (Alexey Milovidov).
- Permitido o prefetch ao ler um arquivo remoto por meio do userspace page cache. #99919 (Alexey Milovidov).
- Corrigida uma regressão significativa no desempenho de INSERT quando
deduplicate_insert=enable(padrão desde 26.2), adiando o cálculo do hash dos dados da etapa de squashing para o sink e usando hash em lote de colunas viaupdateHashWithValueRange, reduzindo a sobrecarga de ~2.5s para ~0.5s em 5M de linhas com 22 colunas. #101494 (Sema Checherinda).
Otimização de memória
- Para inserções síncronas, o bloco original (necessário para desduplicação) agora pode ser omitido para economizar memória. #96661 (Sema Checherinda).
- Melhor desempenho e menor uso de memória para funções de janela paralelas em determinados cenários e para cargas de trabalho de
arrayFoldcom arrays grandes. Isso também pode reduzir a pressão causada por falhas de página e melhorar a estabilidade das consultas afetadas sob limites de memória mais restritos. #98892 (filimonov).
Melhorias
Consultas e SQL
- Projeções agregadas agora têm suporte correto em views. #88798 (Amos Bird).
optimize_aggregators_of_group_by_keysagora otimiza corretamente aggregate functions em consultasGROUPING SETS. #93935 (Xiaozhe Yu).- Adicionado suporte à otimização que converte join
OUTERemINNERcomjoin_use_nulls. #95968 (Vladimir Cherkasov). cast_keep_nullablefoi estendido para funcionar com os tiposDynamic/JSON. Quando definido, o CAST deNULLa partir de tipos que podem serNullableretornaNULL; caso contrário,NULLlança o erroCANNOT_INSERT_NULL_IN_ORDINARY_COLUMN. #96504 (Seva Potapov).- Adicionada a cláusula
ROLEaCREATE USER. #97074 (Vitaly Baranov). - Adicionadas informações sobre filtros adiados como item separado na saída da consulta
EXPLAIN(ao usar row policies/PREWHERE com FINAL). #97374 (Yarik Briukhovetskyi). - Adicionado suporte a expressões de join de tabelas entre parênteses na cláusula
FROM, por exemploSELECT * FROM (t1 CROSS JOIN t2). #97650 (Alexey Milovidov). - Aplicação de data skipping indexes durante a análise de índice distribuída. #97767 (Azat Khuzhin).
- A chave de ordenação de uma tabela agora pode ser uma expressão como
toDate(time), e a decisão de não adiar essas expressões é tomada quando elas fazem parte de filtros. #98237 (Yarik Briukhovetskyi). - O otimizador de ordem de join agora infere predicados transitivos de equi-join a partir das condições de join existentes. Por exemplo, dado
A.x = B.x AND B.x = C.x, a equivalênciaA.x = C.xé reconhecida, permitindo que o otimizador considere direct joins entre tabelas conectadas transitivamente. Isso pode melhorar a qualidade do plano para schemas estrela e floco de neve. O recurso é controlado pela nova configuraçãoenable_join_transitive_predicates(desativada por padrão). #98479 (Alexander Gololobov). - Quando
apply_row_policy_after_finalouapply_prewhere_after_finalestá habilitado, as condições compostas comANDem row policies ePREWHEREagora são decompostas para extrair átomos da chave de ordenação para a análise de índice da chave primária. Antes, se um filtro adiado contivesse uma mistura de predicados da chave de ordenação e predicados fora dela (por exemplo,x > 1 AND y != 'foo'), a expressão inteira era excluída da análise de índice. #98513 (Yarik Briukhovetskyi). - Apenas réplicas “ativas” (conectáveis) agora participam da análise de índice distribuída. #98521 (Azat Khuzhin).
- O número de nós usados na heurística automática de parallel replicas foi limitado ao número real de nós no cluster (em vez de apenas à configuração
max_parallel_replicas). #98668 (Nikita Taranov). - Implementadas hedged requests e leitura assíncrona para análise de índice distribuída. #98724 (Azat Khuzhin).
- Adicionado suporte à cláusula
SAMPLEna análise distribuída de índices. #98931 (Azat Khuzhin). - Adicionado suporte à monotonicidade para multiplicação, permitindo o pruning da chave primária em expressões
key * constant. #98983 (Amos Bird). - As mensagens de erro do analisador não listam mais todas as colunas de uma tabela (o que poderia gerar exceções de mais de 150 KB). As listas de colunas agora são limitadas a 10 entradas. #99002 (Yash).
- Estatísticas de colunas de subconsultas com junções agora são retornadas corretamente para que a consulta pai possa usá-las na reordenação de junções. #99096 (Alexander Gololobov).
ALTER TABLE MODIFY COLUMN x TTL ...agora é permitido sem especificar o tipo da coluna. #99208 (Nikolay Degterinsky).- Melhorada a saída de
EXPLAIN PLAN pretty=1: agora imprime as colunas de saída da consulta de nível superior, mostra rótulos/símbolos de relações de join com estimativa de linhas no resultado e localidade, e inclui colunas de saída por etapa para etapas de join/source. #99462 (Kirill Kopnev). - Corrigida a falha da função de tabela
merge(), que gerava um erroUNKNOWN_IDENTIFIERao consultar colunas não presentes em todas as tabelas distributed/remotas subjacentes. #99833 (Alexey Milovidov). ConditionSelectivityEstimatornão é mais usado no otimizador quando a condição não está em CNF (por exemplo,where a = 0, que é uma condição única na qual as estatísticas não ajudam). #100110 (Han Fei).distributed_index_analysis_min_indexes_bytes_to_activateagora é aplicado após o pruning de partições. #100477 (Azat Khuzhin).EXPLAIN PIPELINEagora oferece suporte à configuraçãodistributed=1para incluir fragmentos remotos do pipeline. #100513 (Nikita Taranov).use_partition_pruning = 0agora também desabilita o pruning do índiceMinMaxe a otimização de contagem em colunas da chave de partição, além de desabilitar o pruning com base em chaves de partição. #100904 (Nihal Z. Miaji).EXPLAIN [PLAN] pretty=1agora imprime expressões em um formato legível. #100927 (Kirill Kopnev).accurateCastOrNulleaccurateCastOrDefaultagora oferecem suporte a tipos de destinoTuple, incluindoTuplesaninhadas com elementosNullable. Antes, essas funções rejeitavam destinosTupleporqueTuplenão podia estar dentro deNullable. #100942 (Nihal Z. Miaji).- Agora você pode usar uma vírgula final na cláusula
WITHantes de uma consultaSELECT. #101093 (Aruj Bansal). - Implementada a materialização preguiçosa de colunas para ReplacingMergeTree com FINAL quando o predicado é seletivo o suficiente. #101647 (Nikolai Kochetov).
- Aprimoradas as estimativas padrão de seletividade para condições sem estatísticas, para alinhá-las às heurísticas padrão do setor: 0.1 para a seletividade da condição
LIKEe 0.33 para a seletividade de condição desconhecida. #101653 (Alexander Gololobov). - Subconsulta VIEW incorporada diretamente à árvore de consulta para permitir a aplicação de mais otimizações à VIEW. #100830 (Dmitry Novik).
Funções
- Agora você pode usar entrada nativa em JSON/Object nas funções
JSONExtract. #96711 (Fisnik Kastrati). - Foi introduzida a função SQL
tokensForLikePattern, que tokeniza padrõesLIKErespeitando a semântica dos curingas:%e_são tratados como curingas, curingas escapados (\%,\_) são tratados como literais, e tokens adjacentes a curingas não escapados são descartados. #97872 (Amos Bird). - Foi implementada a função
toDaysInMonth(), que retorna o número de dias no mês da data especificada. #99227 (Vitaly Baranov). - O tokenizador
unicodeWordfoi renomeado paraasciiCJK. #100956 (George Larionov). - Foi adicionado açúcar sintático no nível do parser para a sintaxe da função
OVERLAYno padrão SQL. A funçãooverlayjá existe; isso adiciona suporte à forma baseada em palavras-chave, usandoPLACING,FROMeFORcomo separadores. #101681 (Desel72). - A função
ngramsagora rejeita tamanhos de ngram inválidos. Por exemplo,SELECT ngrams('abc', 0)agora gera um erro. #101922 (Robert Schulze). - Foi adicionado suporte ao tokenizador
arrayna otimização deLIKE. #102880 (Elmi Ahmadov).
Motores de tabela e armazenamento
- Adicionada uma thread dedicada para limpeza no MergeTree, para evitar atrasos na limpeza sob alta carga de mesclagem. #91574 (Amos Bird).
- Tabelas com regras
DELETE TTLagora podem usar o algoritmo de mesclagem vertical. #97332 (murphy-4o). - As marks de índices secundários agora são pré-aquecidas quando a configuração
prewarm_mark_cacheestá habilitada (carregadas no cache de index mark durante fetches de partes de dados e na inicialização da tabela). #97772 (Anton Popov). - Índices de texto agora podem ser criados em colunas
Nullable([Fixed]String)eArray(Nullable([Fixed]String)). #98118 (Jimmy Aguilar Mena). - Cancela mesclagens em segundo plano antecipadamente em
DROP DATABASEpara ordinary shared merge tree. #98161 (Shaohua Wang). - Adicionada a configuração
finalize_projection_parts_synchronouslypara permitir a finalização síncrona de partes de projeção durante INSERT, reduzindo o pico de uso de memória em tabelas com muitas projeções, enquanto preserva, por padrão, o comportamento assíncrono existente. #98228 (Amos Bird). - Adicionada a configuração de MergeTree
share_nested_offsets(padrãotrue). Quando definida comofalse, colunas Array com nomes pontilhados (por exemplo,n.a,n.b) são tratadas como colunas independentes, em vez de compartilharem arquivos de offsets e validarem tamanhos iguais de array como parte da semântica legada de Nested. #98416 (Amos Bird). - Otimizado
TRUNCATE DATABASE TABLES LIKEcom o pré-cancelamento de mesclagens em paralelo. #98597 (Shaohua Wang). - Reduzida a contenção de bloqueio em
MergeTreeBackgroundExecutorao liberar recursos de tarefas sem adquirir o bloqueio. #98604 (Dmitry Novik). TRUNCATE DATABASEagora responde ao cancelamento de consulta. #98828 (Shaohua Wang).- Reinicia o cache de estatísticas após alterar uma configuração de MergeTree. #98520 (Han Fei).
- Adicionada a configuração de MergeTree
compress_per_column_in_compact_partspara controlar como os blocos comprimidos são organizados dentro de partes Compact. Quandotrue(padrão, preservando o comportamento atual), cada coluna inicia um novo bloco comprimido, permitindo descompressão seletiva. Quandofalse, todas as colunas dentro de um grânulo são empacotadas no mesmo bloco comprimido, melhorando a taxa de compressão e o desempenho de leitura para workloads que sempre leem todas as colunas. #101114 (Amos Bird). - O índice de texto agora é GA e permanece habilitado independentemente da configuração
compatibility, evitando desabilitação inesperada durante restaurações de backup ou ao executar em modo de compatibilidade. #101518 (Nikita Fomichev). - Adicionado suporte ao índice de texto criado em
mapValues(map)com o operadorIN. #99286 (Anton Popov). - Melhorada a análise de múltiplos índices de texto usados simultaneamente na mesma consulta. A configuração
use_skip_indexes_on_data_readnão é mais necessária para a otimização de leitura direta de índices de texto. #102255 (Anton Popov). - Adicionado suporte à análise de índice de texto para a função
hasPhrasevia o modoHINT. #102438 (Elmi Ahmadov). - As estatísticas MinMax de coluna agora armazenam os valores mínimo e máximo como
Field(tipado), em vez deFloat64. O formato serializado inclui o nome do tipo da coluna junto com os valores. A versão do arquivo de estatísticas foi atualizada para V2; arquivos gravados por versões mais antigas exigem rematerialização (ALTER TABLE ... MATERIALIZE STATISTICS ALL). #100605 (Han Fei).
Lagos de dados
- Adicionada uma nova consulta para verificar a integridade do
DataLakeCatalog. #94690 (Smita Kulkarni). - Aprimoradas as escritas do Iceberg para o Unity Catalog. #98162 (Konstantin Vedernikov).
- Entidades recriadas em
IcebergManifestFilepara tornar a manutenção do código menos propensa a erros (também corrige alguns problemas de cache de arquivos de manifesto). #98231 (Daniil Ivanik). - Aprimorado o
ALTER TABLE ... EXECUTE expire_snapshots(...)do Iceberg com suporte mais amplo a argumentos. #99130 (murphy-4o). - Alterada a interface das inserções do Iceberg no catálogo. Descontinuadas as configurações
storage_catalog_type,storage_aws_access_key_ide semelhantes. #100334 (Konstantin Vedernikov). - Corrigido o tratamento inconsistente de caminhos no Iceberg causado pelo uso misto de caminhos de armazenamento e caminhos de metadados; passou-se a exigir que as tabelas Iceberg gravem um local de tabela que seja uma URL ou um caminho absoluto; adicionado um fallback para contabilizar tamanhos de arquivos no Azure; tratado
version-hint.txtde forma compatível com o Spark; introduzidas abstrações em nível de tipo para tornar os tipos de caminho mais difíceis de confundir; e corrigido o uso de exclusões por posição. #100420 (Daniil Ivanik). - Evita varrer todo o catálogo remoto do lago de dados em busca de sugestões de tabela “Maybe you meant …” quando
show_data_lake_catalogs_in_system_tablesestá desabilitado. #100452 (Alsu Giliazova). - As informações do objeto usadas para processar arquivos de dados do Iceberg agora incluem o número de linhas do arquivo e o tamanho do arquivo em bytes extraídos do arquivo de manifesto. #100645 (Daniil Ivanik).
- Adicionado um mecanismo de pruning do Delta Lake com colunas virtuais. #101634 (Konstantin Vedernikov).
S3 e armazenamento de objetos
- Adicionado um placeholder
{_schema_hash}para o table engine S3, que insere um hash das definições de coluna da tabela no caminho do S3. #98265 (Miсhael Stetsyuk). - Adicionada uma nova opção para forçar o uso do estilo virtual/path nos endpoints do S3. #102378 (Konstantin Vedernikov).
Ajustes e configuração
- Agora, os usuários podem especificar vários métodos de autenticação na configuração
users_xml. #91998 (Flip-Liquid). - Agora é possível definir as configurações de
internal_replicationpara um cluster criado pelo banco de dados Replicated. #97228 (Pervakov Grigorii). - Foi adicionada a configuração
allow_nullable_tuple_in_extracted_subcolumns, que controla se subcolunasTuple(...)extraídas deTuple,Variant,DynamiceJSONsão retornadas comoNullable(Tuple(...))(NULLpara linhas ausentes) ou comoTuple(...)(valores padrão de tupla para linhas ausentes). Ela vem desativada por padrão e só pode ser alterada reiniciando o servidor. #97299 (Nihal Z. Miaji). type_json_allow_duplicated_key_with_literal_and_nested_objectagora vem ativada por padrão, evitando erros sobre chaves duplicadas ao analisar JSON como{"a" : 42, "a" : {"b" : 42}}, que o ClickHouse pode produzir a partir dos dados originais{"a" : 42, "a.b" : 42}. #97423 (Pavel Kruglov).- As estatísticas de coluna agora são GA. A configuração
allow_experimental_statistics(padrãofalse) foi descontinuada em favor deallow_statistics(padrãotrue);allow_statistics_optimizefoi promovida de beta para GA; o ClickHouse cria estatísticasminmaxeuniqpara novas colunas (configuração do MergeTreeauto_statistics_types); e, para evitar INSERTs mais lentos,materialize_statistics_on_insertagora vem desativada por padrão. #97487 (Han Fei). - Foi esclarecida a relação entre
enable_parallel_replicaseautomatic_parallel_replicas_mode: uma consulta só pode usar réplicas paralelas seenable_parallel_replicas > 0. Comautomatic_parallel_replicas_mode=1, a decisão é tomada durante o planejamento com base nas estatísticas coletadas; comautomatic_parallel_replicas_mode=0, réplicas paralelas são usadas para todas as consultas compatíveis, independentemente das estatísticas. O insert-select distribuído com réplicas paralelas sempre se comporta como seautomatic_parallel_replicas_mode=0. #97517 (Nikita Taranov). - O recurso de impersonação (EXECUTE AS target_user) foi ativado por padrão. #97870 (Vitaly Baranov).
- Foi adicionada a configuração
access_control_improvements.disallow_config_defined_profiles_for_sql_defined_users(permitida por padrão), que impede o uso de perfis de configuração definidos em config (exceto o perfildefault) para usuários definidos por SQL. #98662 (Alexander Tokmakov). - Foi adicionada uma configuração para controlar o comportamento em caso de incompatibilidade de tipo para
VarianteDynamic(throwou retornar null). #99085 (Bharat Nallan). - O valor padrão de
stderr_reactionfoi alterado dethrowparalog_lastpara UDFs executáveis. UDFs que escrevem avisos em stderr não falham mais quando o código de saída é 0, e as exceções de código de saída agora incluem o conteúdo de stderr. #99232 (Xu Jia). - Foi adicionada a configuração
input_format_column_name_matching_mode, que permite tratamentos diferentes para maiúsculas e minúsculas nos formatos de entrada. #99346 (manerone). - As estatísticas automáticas não são mais ativadas para tabelas de sistema, pois elas raramente se beneficiam delas. #102862 (Han Fei).
Tabelas do sistema e monitoramento
- Os índices de data skipping usados durante a execução da consulta agora são registrados em
system.query_logem uma nova colunaskip_indices. #99793 (Grant Holly). - Foi adicionada a coluna
projections_duration_msasystem.part_log, que registra a duração, em milissegundos, da mesclagem/reconstrução por projeção. #98292 (Amos Bird). - Foi adicionado o alias de coluna
INDEX_LENGTHainformation_schema.tables. #101705 (Robert Schulze). information_schema.tablesagora ignora partes de tabela inativas, tornando mais realistas os valores exibidos para o tamanho das tabelas. #101706 (Robert Schulze).
ClickHouse Keeper
find_super_nodesnão fica mais preso ao percorrer os filhos do primeiro supernó, o que agora permite encontrar mais de um. #97819 (pufit).- Uma sessão do ZooKeeper agora é marcada como expirada assim que a finalização começa, em vez de esperar a thread de envio encerrar. Isso permite que outras threads estabeleçam uma nova sessão sem atraso. #99102 (Raúl Marín).
- Solicitações obsoletas do Keeper para sessões que já foram desconectadas agora são ignoradas, evitando idas e voltas desnecessárias ao Raft. O número de sessões finalizadas rastreadas é limitado pela configuração de coordenação
max_finished_sessions_cache_size. #99246 (Antonio Andelic). - O comando
mntrdo Keeper não fica mais preso devido à contenção de bloqueio. #99472 (Antonio Andelic). - A contenção de bloqueio no dispatcher do Keeper foi reduzida ao invocar callbacks e despachar solicitações de leitura fora do escopo do mutex, além da adição de guardas de bloqueio com perfilamento para observabilidade. #99751 (Antonio Andelic).
Gerenciamento de memória
- Adicionado o parâmetro de configuração
use_separate_cache_arenapara controlar a separação da arena de cache. #100664 (Seva Potapov).
Formatos de dados
- Adicionada a configuração
output_format_trim_fixed_stringpara remover bytes nulos à direita de valoresFixedStringem formatos de saída de texto. #97558 (NeedmeFordev). - Passou a ser possível processar arquivos GeoParquet que contêm diferentes tipos Geo na mesma coluna. #97851 (Mark Needham).
- A desserialização de estados binários de
AggregateFunctionagora exige o consumo de toda a entrada. Se houver bytes extras e redundantes ao final, o ClickHouse lança uma exceção em vez de aceitar dados de estado malformados. #98786 (Nihal Z. Miaji). - Agora, os usuários podem gravar tipos de dados de intervalo do ClickHouse no formato Arrow. #99519 (Peter Nguyen).
- Adicionado suporte nativo para importar e exportar tipos de dados UUID nos formatos Arrow e Parquet, com inferência lógica automática para UUIDs de nível superior e suporte a dicas explícitas de esquema para UUIDs aninhados. #99521 (Ivan).
- Agora é tolerada a ausência de padding no final do último bloco de arquivos Parquet. #99857 (Seva Potapov).
- A exportação de UUIDs para Parquet pelo codificador Arrow agora inclui a anotação correta do tipo UUID, eliminando a necessidade de converter manualmente dados
FixedString(16)ao ler os arquivos de volta. #100150 (Ivan). - Adicionado suporte nativo para importar tipos de dados
StringVieweBinaryViewdo Apache Arrow para colunasStringdo ClickHouse, melhorando a compatibilidade para ingestão baseada em Arrow. #100762 (Ivan). - Adicionado suporte para
Nullable(Tuple)nos formatosArrow,ArrowStream,ORCeParquetlegado. #101272 (Nihal Z. Miaji).
Coleções nomeadas e dicionários
- Adicionado
sslmodeàs chaves permitidas para fontes de dicionário do PostgreSQL, tornando possível configurar o modo SSL para conexões de dicionário do PostgreSQL (por exemplo, no AWS RDS, que exige SSL por padrão). #98014 (mcalfin). - Evita remover coleções nomeadas que são dependências de fontes de dicionário. #98127 (Pablo Marcos).
- Adicionado suporte aos tipos
MapeJSON/Objectcomo atributos de dicionário. Os dicionários agora podem armazenar e recuperar tipos complexos, incluindoMap(String, String),Map(String, Array(String)),JSONeNullable(JSON)nos layouts FLAT e HASHED. #98627 (yanglongwei). SYSTEM RELOAD DICTIONARIESagora recarrega os dicionários em ordem topológica para que dicionários cuja fonte são outros dicionários vejam dados atualizados após a recarga. #98356 (Alexey Milovidov).- Dicionários de cache não usam mais um bloqueio exclusivo em
hasKeys, reduzindo a contenção de bloqueios ao usar um bloqueio compartilhado para leituras do cache. #100796 (liuguangliang).
Outras melhorias
- As dicas de
ACCESS_DENIEDnão revelam mais nomes de colunas, a menos que o usuário possa exibir todas as colunas necessárias; os nomes do banco de dados e da tabela permanecem visíveis na dica. #91067 (filimonov). - Recarrega a configuração do cluster se os IPs do hostname do servidor local mudarem, em vez de considerar os IPs de qualquer host. #93726 (Zhigao Hong).
- Força a gravação dos buffers assíncronos de logging em caso de falha. #97836 (Azat Khuzhin).
- Redução de bloqueios durante o controle de acesso. #97894 (Nikita Taranov).
- ClickStack atualizado para a versão 2.20.0. #98252 (Aaron Knudtson).
- Desabilita a AI SQL generation (comando
??) no cliente embutido (protocolos SSH e WebSocket) para evitar acesso às variáveis de ambiente do servidor. #100290 (Alexey Milovidov). - Envia NACK para mensagens com erro ao usar o armazenamento RabbitMQ. #102157 (Seva Potapov).
Correção de bugs
Todas as correções de bugs (clique para expandir)
Todas as correções de bugs (clique para expandir)
Correções de JOIN
- Corrigida a ausência de uma coluna quando um alias de identificador não padrão era usado em um JOIN com o analisador antigo. #95679 (Zhigao Hong).
- Corrigido um resultado incorreto quando o algoritmo
grace_hashera usado com junções non-equi e o bloco esquerdo não podia ser processado por completo devido a restrições de tamanho no resultado da junção. #97866 (János Benjamin Antal). - Corrigido um erro lógico com
analyzer_compatibility_join_using_top_level_identifiereARRAY JOIN. #98179 (Vladimir Cherkasov). - Corrigida uma exceção
LOGICAL_ERRORquando umRIGHT JOINencapsulado em umCROSS JOINfoi invertido pela otimizaçãoquery_plan_join_swap_tableno caminho de código legado da etapa de junção. #98279 (Alexey Milovidov). - Corrigida uma exceção “Pipeline stuck” em junções
full_sorting_merge, causada por um deadlock emPingPongProcessorquando a otimizaçãoFilterBySetOnTheFlycriava uma dependência circular comMergeJoinTransform. #98454 (Alexey Milovidov). - Corrigida uma exceção de erro lógico quando
CROSS JOINera usado junto comINNER JOIN USING. #98459 (Alexey Milovidov). - Corrigida uma exceção
LOGICAL_ERRORquandoarrayJoinera usado em uma expressão de filtro comOUTER JOINejoin_use_nullshabilitado. #98464 (Alexey Milovidov). - Corrigidas uma exceção
BAD_GETe resultados de consulta incorretos quando uma expressão não booleana (por exemplo,sin(col)) era usada tanto emWHEREquanto emSELECTcom um JOIN, devido à otimização de push-down de filtro corromper nós DAG compartilhados. #98681 (Alexey Milovidov). - Corrigida uma
LOGICAL_ERROR“Replica decided to read in Default mode, not in WithOrder” ao usarread_in_order_through_joincom réplicas paralelas. #98685 (Alexey Milovidov). LEFT ANTI JOINcom múltiplas colunas na chave de junção retornava resultados errados quandoenable_join_runtime_filters=1(o padrão). #98871 (Alexander Gololobov).- Corrigido um bug na otimização
query_plan_convert_any_join_to_semi_or_anti_joinque retornava um resultado incorreto para linhas sem correspondência. #99112 (Yarik Briukhovetskyi). - Corrigida uma exceção em funções que operam sobre
ColumnReplicatedcom linhas não referenciadas produzidas por JOIN. #99564 (Hechem Selmi). - Corrigido um caso raro em que uma junção com reordenação podia produzir um resultado incorreto. #100790 (Yarik Briukhovetskyi).
- Corrigidos resultados incorretos quando um JOIN com a otimização shard-by-PK usava o cache de condições de consulta e algumas partes eram filtradas por condições em cache. #100926 (Groene AI).
- Corrigida uma exceção
NOT_FOUND_COLUMN_IN_BLOCKao usarARRAY JOINcomJOIN USINGeanalyzer_compatibility_join_using_top_level_identifierhabilitado. #101507 (Vladimir Cherkasov). - Corrigida a ordenação incorreta de linhas em consultas que usam
ORDER BYcom o algoritmo de joingrace_hash, o que poderia gerar resultados incorretos sem aviso. #102036 (János Benjamin Antal). - Corrigido um
LOGICAL_ERROR(tamanho inesperado do tipo de índice) que poderia ocorrer em consultasRIGHT JOINeFULL JOINquandomax_bytes_in_joinestivesse configurado. #102042 (Jimmy Aguilar Mena).
Correções de consultas e do analyzer
- Corrigida a forma como o destino de uma tabela Alias é salvo como dependência DDL quando não está totalmente qualificado: agora ele é salvo com o database da tabela Alias em vez do database da sessão. #95175 (Enric Calabuig).
- Corrigido um erro
Block structure mismatch in streamcausado por colunas desnecessárias retornadas pela materialização lazy. #96682 (Nikolai Kochetov). - Corrigida uma exceção na comparação de tuplas envolvendo elementos do tipo
Nothing(por exemplo, comparação com elementos de tuplaNULL) quando usada comGROUPING SETSeORDER BY. #97509 (Alexey Milovidov). - Corrigida uma exceção “Context has expired” em subconsultas correlacionadas que contêm table functions como
url(). #97544 (Alexey Milovidov). - Corrigidas exceções e comportamento incorreto em
optimize_syntax_fuse_functionscom projeções agregadas, Tipo Date e preservação de nomes de coluna. #97545 (Alexey Milovidov). - Removida uma query rewrite incorreta de
replaceRegexpOneparaextract, que produzia resultados incorretos quando o regexp não correspondia; também foi corrigida uma exceção quandoreplaceRegexpOneera usado comGROUP BY ... WITH CUBEegroup_by_use_nulls=1. #97546 (Alexey Milovidov). - Corrigidas exceções
LOGICAL_ERRORcausadas porLowCardinalitydentro de tipos compostos (Variant,Dynamic,Tuple) emconcatWithSeparator,format, subconsultasIN,GLOBAL INe junções com Runtime Filters. #97831 (Raúl Marín). - Corrigida uma exceção
LOGICAL_ERROR“Chunk info was not set for chunk in MergingAggregatedTransform” ao usarARRAY JOINcom a table functionmerge()em várias Distributed tables combinadas comGROUP BY. #97838 (Raúl Marín). - Corrigido um bug que impedia o uso de CTEs com insert-selects distribuídos. #97889 (Yarik Briukhovetskyi).
- Corrigida uma incompatibilidade de coluna. #97921 (Kai Zhu).
- Corrigido um segfault na otimização do plano de consulta ao converter uma outer join em uma inner join com
arrayJoinem uma expressão de filtro. #98147 (Alexey Milovidov). - Corrigido um
LOGICAL_ERROR“Trying to execute PLACEHOLDER action” quando colunas correlacionadas de consultas externas eram referenciadas dentro de funções lambda comoarrayMap. #98285 (Alexey Milovidov). - Corrigida uma exceção de logical error em
caseWithExpressionquando a expressãoCASEenvolviamaterialize(NULL)ou outros argumentosNullable(Nothing). #98290 (Alexey Milovidov). - Corrigida uma exceção de conversão inválida ao filtrar a coluna virtual
_tablena table functionmerge. #98291 (Alexey Milovidov). - Corrigida uma exceção quando
ORDER BY ... WITH FILLera usado junto comLIMIT BY. #98361 (Alexey Milovidov). - Corrigida uma exceção “Column … query tree node does not have valid source node” ao fazer join de uma tabela
Merge(que encapsula uma tabelaDistributed) com outra tabela. #98376 (Alexey Milovidov). - Corrigida uma exceção “Column identifier is already registered” quando
count_distinct_optimizationera usado com uma cláusulaQUALIFY. #98433 (Alexey Milovidov). - Corrigida uma exceção “cannot be inside Nullable type” ao usar
IN/NOT INcom argumentos de colunaLowCardinality(por exemplo,a NOT IN (b), em queaéLowCardinality(String)). #98443 (Alexey Milovidov). - Corrigida uma exceção
LOGICAL_ERROR“Projection cannot increase the number of rows in a block” ao mesclar partes com um TTL que exclui todas as linhas e uma projeção agregada com uma chaveGROUP BYconstante. #98458 (Alexey Milovidov). - Corrigida uma exceção em consultas
DISTINCTquando o uso de projeções agregadas ematerializecausava diferenças no tipoLowCardinalityentre a consulta e a projeção. #98462 (Alexey Milovidov). - Corrigida uma exceção de erro lógico “Replica decided to read in WithOrder mode, not in ReverseOrder” ao usar réplicas paralelas com
optimize_aggregation_in_order. #98467 (Alexey Milovidov). - Corrigido um resultado inesperado com
read_in_order_use_virtual_rowe funções monotônicas. #98514 (Vladimir Cherkasov). - Corrigida uma exceção
LOGICAL_ERROR: Not-ready Set is passed as the second argument for function 'in'ao usarPREWHEREcom uma subconsultaINem tabelas MergeTree. #98522 (Alexey Milovidov). - Corrigida uma exceção “Sorting column wasn’t found in the ActionsDAG’s outputs” quando
query_plan_convert_join_to_inestava habilitado comquery_plan_merge_expressions = 0. #98526 (Alexey Milovidov). - Corrigido um
LOGICAL_ERRORquando umIdentifierestava vazio após a substituição de parâmetro. #98530 (Pervakov Grigorii). - Corrigida a análise de índice distribuído com expressões (não apenas colunas) na chave primária, o que resultava em nenhuma filtragem de grânulos redundantes em réplicas remotas. #98561 (Azat Khuzhin).
- Corrigido um erro lógico “TABLE_FUNCTION is not allowed in expression context” quando uma table function com alias aparecia várias vezes no mesmo escopo da consulta (por exemplo, nas cláusulas
PREWHEREeQUALIFY). #98557 (Alexey Milovidov). - Corrigida uma exceção “Bad cast from type
DB::TableFunctionNodetoDB::QueryNode” ao usar a função de tabelainputcomo argumento deremote. #98694 (Alexey Milovidov). - Corrigida uma exceção em
LogicalExpressionOptimizerPassquando uma função booleana em uma comparaçãoequalsretornava um tipoVariant. #98712 (Alexey Milovidov). - Corrigida uma exceção
UNKNOWN_IDENTIFIERao consultar a função de tabelamerge()ou o engineMergeem tabelas com colunas JSON que têm parâmetros diferentes e colunas ALIAS que fazem referência a subcaminhos de JSON, com o novo analyzer habilitado. #98753 (Pavel Kruglov). - Corrigida a otimização
optimize_skip_unused_shardscom o analyzer quando um armazenamentoDistributedera usado em umaView. #98754 (Nikolai Kochetov). - Corrigida uma exceção
LOGICAL_ERROR(incompatibilidade na estrutura do block emremoveUnusedColumns) que podia ocorrer comFINAL+PREWHERE+ uma expressãoWHEREconstante + agregações independentes de coluna, comocount(). #98778 (Alexey Milovidov). - Corrigida uma exceção “Inconsistent table names” ao usar a função de tabela
view()contendo JOINs dentro de outro JOIN (somente com o analyzer antigo). #98809 (Alexey Milovidov). - Corrigida uma exceção ao compor
loopcom funções de tabela de cluster. #98860 (Konstantin Bogdanov). - Corrigido um
LOGICAL_ERROR“RPNBuilderFunctionTreeNode has A arguments, attempted to get argument at index B”. #98900 (Azat Khuzhin). - Corrigida uma exceção “Scalar doesn’t exist” ao consultar um shard remoto com
optimize_const_name_sizedefinido eenable_scalar_subquery_optimization = 0. #98979 (andriibeee). - Corrigido
NOT_FOUND_COLUMN_IN_BLOCKpara algumas consultas comGROUP BYe expressões que incluem lookup inverso em Dicionário, comparações de conversãoDate/DateTimee comparações de Tuple. #98980 (Nihal Z. Miaji). - Corrigido um bug em que
EXISTSignorava as cláusulasLIMITeOFFSETem subconsultas, causando resultados incorretos quando a subconsulta não retornava linhas devido a um offset ou a um limite zero. #99005 (andriibeee). - Corrigida uma exceção “Block structure mismatch” quando a otimização de push-down de filtro encontrava uma expressão
ANDque era avaliada em curto-circuito como uma constante comGROUPING SETS. #99010 (Alexey Milovidov). - Corrigido um
LOGICAL_ERRORao consultar uma tabela que possui tanto uma ROW POLICY quanto uma coluna ALIAS usandodictGet, causado por acesso prematuro à expressão da tabela durante a resolução da coluna ALIAS no novo analyzer. #99065 (Peng). - Corrigido um segfault em uma CTE recursiva com
remote()+view(). #99081 (Konstantin Bogdanov). - Ignora a análise de índice extra desnecessária quando a otimização de leitura em ordem é aplicada. #99084 (Vladimir Cherkasov).
- Corrigidas as verificações de acesso durante
InverseDictionaryLookupPass, verificando o acesso apenas uma vez antes de executar a etapa de otimização. #99210 (Mikhail Artemenko). - Corrigido
optimize_skip_unused_shardscom o novo analisador quando uma tabelaDistributedera usada em uma subconsultaIN. #99436 (Nikolai Kochetov). - Corrigido um heap-use-after-free em
INTERSECT/EXCEPTquando a consulta produzia nomes de coluna duplicados. #99471 (Alexey Milovidov). - Corrigido um erro lógico em
ALTER TABLE ... DROP PARTquando um parâmetro de consulta tipado era usado como nome da parte. #99489 (Alexey Milovidov). - Corrigida uma exceção
std::length_errorao consultar tabelas de sistema vazias no formato Pretty pela interface HTTP. #99541 (Alexey Milovidov). - Corrigida a degradação de desempenho no analisador ao eliminar colunas não usadas de
ARRAY JOIN. #99587 (Dmitry Novik). - Corrigida uma exceção (
Bad get: has Tuple, actual type String) emConditionSelectivityEstimatorquando uma consulta usavaINcom um único parâmetro de consulta escalar (por exemplo,WHERE col IN ({p:String})) em uma tabela com estatísticas de coluna euse_statisticshabilitado. #99614 (Ilya Yatsishin). - Corrigida uma exceção “Block structure mismatch” em consultas com uma cláusula
HAVING, em que a expressão de filtro continha tanto uma agregação encapsulada em uma função que produz NULL quantomaterialize(0). #99915 (Alexey Milovidov). - Corrigido um erro lógico com uma subconsulta correlacionada em um argumento
untuple. #99917 (Vladimir Cherkasov). - Corrigida uma exceção “Inconsistent AST formatting” em
ALTER TABLE ... MODIFY QUERYcom subconsultas aninhadas contendoSETTINGSquando o próprioALTERtambém tinhaSETTINGS. #99938 (Nikita Mikhaylov). - Corrigida uma exceção
LOGICAL_ERROR“Not-ready Set” na funçãoINdurante a otimização do plano de consulta comconvertAnyJoinToSemiOrAntiJoin. #99939 (Alexey Milovidov). - Corrigida uma exceção
LOGICAL_ERROR“Unexpected node type for table expression … Actual IDENTIFIER” quando uma subconsulta escalar era usada em um argumento de função de tabela não resolvido. #100014 (Alexey Milovidov). - Corrigido o número quadrático de consultas executadas quando
distributed_index_analysisera usado com predicados contendo subconsultasIN. #100287 (Anton Popov). - Corrigida uma exceção de “Block structure mismatch” ao usar
GROUP BY ... WITH TOTALS HAVINGem combinação comUNION DISTINCTe expressões Nullable. #100293 (Alexey Milovidov). - Corrigida uma exceção de “Inconsistent AST formatting” em builds de depuração ao usar
GROUP BY CUBE(...) WITH ROLLUPou combinações semelhantes. #100376 (Alexey Milovidov). - Corrigida uma exceção ao criar uma view com aliases de coluna e consultas
SELECT *ouEXCEPT/INTERSECT. #100386 (Alexey Milovidov). - Corrigida uma exceção
TOO_MANY_ROWSem consultasSELECT count()commax_rows_to_read/force_primary_keyquando os dados estavam divididos em várias partes com limites de grânulos não alinhados. #100408 (Alexey Milovidov). - Corrigidos casos de
NOT_FOUND_COLUMN_IN_BLOCKem que a parteSELECTda projeção continha colunas que não existiam na parteSELECToriginal da consulta. #100623 (Yarik Briukhovetskyi). - Agora é possível passar uma chave de sharding para as funções de tabela
cluster()eclusterAllReplicas()ao usar uma função de tabela como origem (por exemplo,cluster('name', view(...), sharding_key)). #100665 (Sergey Veletskiy). - Corrigidos tipos de argumento
AggregateFunctionincorretos na contagem trivial otimizada, o que causava uma exceçãoNUMBER_OF_ARGUMENTS_DOESNT_MATCHao consultar expressões comocount(v0 + v1)em tabelas distribuídas. #100794 (YjyJeff). - Corrigido um erro lógico “Invalid action query tree node” ao usar
INTERSECT ALL/UNION ALLcom expressões com constantes já avaliadas. #100977 (Alexey Milovidov). - Corrigido um erro
UNKNOWN_IDENTIFIERincorreto quando o mesmo alias era usado para várias expressões emSELECT; agora o erro corretoMULTIPLE_EXPRESSIONS_FOR_ALIASé reportado. #101040 (Alexey Milovidov). - Corrigida uma exceção em
DirectJoinMergeTreeEntityquando blocos do pipeline continham colunasColumnConstmescladas com colunas regulares. #101046 (Alexey Milovidov). - Corrigido um espaço indevido na formatação de aliases de coluna em CTE (
WITH t (a, b)→WITH t(a, b)). #101049 (Alexey Milovidov). - Corrigida a falha das funções de tabela
remote/clustercom funções de tabela aninhadas, comomerge, quando o analisador estava habilitado. #101055 (Alexey Milovidov). - Corrigido o problema em que
OFFSETera aplicado duas vezes em consultas distribuídas quandoprefer_localhost_replica=1, produzindo menos linhas do que o esperado. #101071 (Nihal Z. Miaji). - Corrigido um erro “Illegal type Decimal64 of start parameter” em funções de agregação para séries temporais ao usar
serialize_query_plan=1com réplicas paralelas. #101083 (Groene AI). - Corrigidos resultados incorretos de consulta quando uma constante inteira grande (por exemplo, 256, 2147483648) era usada como predicado booleano em uma cláusula
WHEREcomANDem tabelas MergeTree. #101287 (Groene AI). - Corrigida uma falha com “Logical error: Reading from materialized CTE before materialization” quando uma subconsulta escalar referenciava uma cadeia de CTEs materializadas dependentes. #101305 (Groene AI).
- Corrigida uma exceção ao converter uma string com dados extras no final para o tipo vazio
Tuple(). #102011 (Alexey Milovidov). - Corrigido um erro lógico ao fazer o parsing de uma string incorreta de tupla vazia. #102289 (Nihal Z. Miaji).
- Corrigidos resultados incorretos de agregação (linhas duplicadas) ao usar
optimize_aggregation_in_order=1com colunas deGROUP BYordenadas de forma diferente da chave de ordenação da tabela. #102299 (Groene AI). - Corrigida uma exceção em
getStructureOfRemoteTablequando o shard local retornava colunas vazias devido a DDL concorrente. #102604 (Alexey Milovidov). - Otimizadas cadeias de OR em ROW POLICY para
INno novo analisador. #102915 (Azat Khuzhin). - Corrigidos resultados incorretos retornados por
WHERE x AND toNullable(N)em tabelasMergeTreequandoNé um inteiro maior queUInt8(por exemplo,256,65535,2147483648ou qualquer inteiro negativo). #103077 (Groene AI).
Correções de MergeTree e armazenamento
- Corrigido um erro lógico ao anexar uma parte no MergeTree quando havia várias renomeações encadeadas entre a desanexação e o anexo. #96351 (Alexey Milovidov).
- Corrigido o cálculo não determinístico de
uncompressed_hashpara partes Compact do MergeTree quando vários codecs de compressão são usados, o que podia causar um comportamento incorreto de desduplicação. #97522 (Alexey Milovidov). - Corrigidos casos em que exceções
MEMORY_LIMIT_EXCEEDEDeram relatadas incorretamente comoCORRUPTED_DATAdurante merges de SummingMergeTree e CoalescingMergeTree. #97537 (János Benjamin Antal). hasPartitionIdagora retorna false se existir outra partição com um ID de partição maior no conjunto de partes de dados. #97748 (Mikhail Artemenko).- Corrigida uma mutação após uma atualização leve com índices secundários. #98044 (Raúl Marín).
- Corrigidos resultados incorretos de consultas FINAL ao misturar skip indexes da chave primária com skip indexes que não são da chave primária. #98097 (Raúl Marín).
- Se as colunas da chave de partição não forem cobertas pela chave de ordenação, o partition pruning poderá ignorar incorretamente partições que contêm linhas que deveriam “vencer” durante a desduplicação FINAL. #98242 (Yarik Briukhovetskyi).
- Corrigido um possível deadlock quando duas operações concorrentes de
MOVE PARTITIONtrabalham com o mesmo par de tabelas em direções opostas. #98264 (Alexey Milovidov). - Corrigida uma exceção
LOGICAL_ERROR“Invalid binary search result inMergeTreeSetIndex” acionada pela conversãotoDateem colunas-chave com dados que cruzam o limite de 65535. #98276 (Alexey Milovidov). - Corrigida uma falha esporádica de desduplicação em que reinserções eram desduplicadas incorretamente devido à ordem inconsistente de limpeza entre os diretórios
blocks/ededuplication_hashes/no ZooKeeper. #98293 (Alexey Milovidov). - Corrigido o travamento de mutações
MATERIALIZE INDEXeMATERIALIZE PROJECTIONquando o índice ou a projeção eram removidos antes de a mutação terminar. #98369 (Alexey Milovidov). - Corrigidos resultados incorretos de partition pruning após o merge de partes com colunas Nullable na chave de partição, causado por limites incorretos do índice min-max. #98405 (Amos Bird).
- Corrigida uma exceção
LOGICAL_ERRORemrenameAndCommitEmptyPartsque podia ocorrer quandoTRUNCATE TABLEera executado concorrentemente comOPTIMIZE TABLEusando transações do MergeTree. #98508 (Alexey Milovidov). - Corrigido um overflow decimal durante o partition pruning com
DateTime64. #98628 (Yarik Briukhovetskyi). - Corrigida a ressurreição de partes de dados desatualizadas causada pela limpeza incorreta de partes de cobertura vazias. #98698 (Shaohua Wang).
- Corrigida a detecção da utilidade do skip index set com um predicado
ORcom falso (isto é,or(x, 0)). #98776 (Azat Khuzhin). - Corrigido o problema em que skip indexes (e condições de chave primária) não eram aplicados a colunas ALIAS quando a mesclagem de expressões do plano de consulta estava desabilitada (
query_plan_merge_expressions = 0ouquery_plan_enable_optimizations = 0). #98960 (Peng). - Corrigida a poda incorreta ou insuficiente quando
startsWith,LIKEouNOT LIKEeram usados com uma colunaFixedString. Além disso, a função de cast deFixedStringparaStringagora pode podar grânulos quando aplicada sobre uma coluna-chave. #99001 (Nihal Z. Miaji). - Corrigida uma exceção ao ler patch parts (atualizações leves) sem a coluna
_part_offsetno plano de consulta. #99023 (Alexey Milovidov). - Uma consulta como
SELECT * FROM table WHERE pk_id = '', em quepk_idé uma chave primáriaString, agora usa corretamente o índice da chave primária para filtrar grânulos. #99027 (Shankar Iyer). - Corrigida uma exceção ao criar uma tabela com uma coluna
EPHEMERALque tem o mesmo nome de uma coluna virtual (por exemplo,_part_offset). #99031 (Alexey Milovidov). - Corrigido
LOGICAL_ERRORdevido à incompatibilidade na ordem das colunas de patch parts. #99164 (Pablo Marcos). - Corrigida a falha de
ALTER TABLE UPDATE/DELETEcom um erroMissing columnsquando uma tabela tem uma coluna MATERIALIZED cuja expressão depende de uma coluna EPHEMERAL. #99281 (Yash). - Corrigida a compatibilidade ao atualizar tabelas replicadas com índices minmax implícitos da versão 25.10 para versões mais recentes. #99392 (Raúl Marín).
- Corrigida a rara marcação incorreta de uma parte de dados como corrompida e seu desanexamento após uma consulta
DETACH/ATTACH TABLE. #99529 (Anton Popov). - Corrigida uma falha de asserção
rows_sourcesem mesclagem vertical quandoSYSTEM STOP/START MERGESé alternado rapidamente durante uma mesclagem de uma tabela com colunasDynamic. #99532 (Alexey Milovidov). - Corrigida a poda incorreta de partição para
toWeek(), que fazia consultas comWHERE toWeek(date, mode) = Nretornarem resultados vazios para as semanas 49–52 em tabelas particionadas portoYYYYMM(date). #99542 (Takumi Hara). - Corrigido um
LOGICAL_ERRORao usarALTER TABLE ADD COLUMNpara criar uma colunaEPHEMERALcom o mesmo nome de uma coluna virtual (por exemplo,_part_offset). #99549 (Alexey Milovidov). - Corrigido o fato de
CLEAR COLUMNnão reconstruir projeções nem reavaliar colunas materializadas que dependem da coluna limpa, o que poderia causar exceções ou corrupção de dados durante mesclagens posteriores. #99565 (Desel72). - Uma parte com projeções desconhecidas não é mais marcada como perdida para sempre. #99623 (Sema Checherinda).
- Corrigida uma referência solta em
injectRequiredColumnsque causava uma falha durante a mesclagem. #99679 (Tuan Pham Anh). - Corrigido um erro lógico durante a mesclagem de partes de projeção após
CLEAR COLUMNem uma tabela com projeções e partes compact. #100068 (Pavel Kruglov). - Corrigido um
LOGICAL_ERROR“Stream … not found” ao inserir em uma tabela com colunasArray(JSON)aninhadas em partes wide comoptimize_on_insert=0. #100475 (Pavel Kruglov). - Os argumentos do mecanismo para
StorageAliasagora são avaliados antes de armazenar a definição, para que expressões comocurrentDatabase()sejam resolvidas em literais antes de serem salvas no banco de dados. #100902 (Nikolay Degterinsky). - Corrigido o retorno de
ILLEGAL_DIVISIONpordivideeintDivquando usados em expressões de filtro durante a análise de índice em alguns casos. #100928 (Nihal Z. Miaji). - Corrigido o fato de a otimização de
minmax_count_projectione a otimização trivial deCOUNT(*)permanecerem desativadas permanentemente após uma exclusão leve, mesmo depois de todas as partes com máscara de exclusão leve terem sido mescladas. #101212 (Anton Popov). - Corrigida uma condição de corrida de dados em
storage_idemIStorage::getDependentViewsByColumn. #101385 (Nikolay Degterinsky). - Corrigido o fato de
materialize_skip_indexes_on_merge=falsenão suprimir índices de texto (full-text) durante a mesclagem. Antes, apenas skip indexes não textuais (minmax, set, bloom_filter) eram suprimidos. #101932 (Groene AI). - As entradas do cache de índice de similaridade vetorial agora são removidas após a remoção da parte (por exemplo, durante uma mesclagem), corrigindo o problema de entradas que nunca eram removidas devido a chaves de cache incompatíveis. #99575 (Seva Potapov).
- Corrigida uma exceção
LOGICAL_ERRORfalsa durante o redimensionamento dinâmico do cache do sistema de arquivos devido a uma condição de corrida na promoção da subfila SLRU. #99850 (Alexey Milovidov). - Corrigido um possível erro lógico durante a leitura de subcolunas de map. #101641 (Pavel Kruglov).
- Corrigida a prioridade da correspondência exata de subcolunas sobre a correspondência por prefixo em
getSubcolumnDatapara evitar uma possível falha. #101645 (Pavel Kruglov). - Corrigido o uso de extremos incorretos em um índice min-max criado em uma coluna JSON, o que levava a resultados incorretos de consulta. #101918 (Pavel Kruglov).
- Corrigido um bug de condição de corrida em SLRU no cache do sistema de arquivos (26.1+) que podia levar a um erro lógico na reserva de espaço. #101991 (Kseniia Sumarokova).
- Corrigido um erro lógico
Having zero bytesno cache, causado pela sobrescrita de um objeto remoto entrelisteread, o que antes resultava em metadados de objeto desatualizados. #101219 (Kseniia Sumarokova). - Corrigida uma falha de asserção
file_offset_of_buffer_end <= getFileSize()ao ler tabelasLogouStripeLogno armazenamento de objetos S3 com gravações concorrentes. #100763 (Alexey Milovidov). - Corrigido o limite de tamanho do cache ao recarregar a configuração. #100659 (Aleksei Filatov).
- Corrigida uma interrupção com
LOGICAL_ERRORdurante o redimensionamento dinâmico do cache do sistema de arquivos SLRU, causada por estatísticas de evicção compartilhadas entre subfilas e por um caminho de recuperação incorreto para candidatos com falha. #102396 (Antonio Andelic). - Corrigido o fato de a otimização
minmax_count_projectione a otimização trivialCOUNT(*)permanecerem desabilitadas permanentemente após uma exclusão leve. #102900 (Anton Popov).
Correções de tipo de dados e serialização
- Corrigido um resultado incorreto ou uma exceção durante a leitura de subcolumns de colunas ALIAS. #95408 (Pavel Kruglov).
- Corrigido o problema que impedia a aggregate function
sumCountde ler estados serializados mais antigos após a introdução deNullable(Tuple). #97502 (Nihal Z. Miaji). - Corrigido um logical error relacionado à ausência de um stream durante
INSERT SELECTcom JSON e buckets em shared data. #97523 (Pavel Kruglov). - Corrigidos possíveis travamentos durante a leitura de grânulos vazios em shared data avançado em JSON. #97778 (Pavel Kruglov).
- Corrigida a compilação incorreta por JIT da função
signpara tipos inteiros mais largos queInt8— valores fora do intervalo -128..127 podiam produzir um sinal incorreto. #98012 (Alexey Milovidov). - Corrigido o problema que fazia o format
ProtobufListnão funcionar com o motor Kafka porque o estado de leitura não era redefinido entre as mensagens. #98151 (Alexey Milovidov). - Corrigida a corrupção silenciosa de dados ao inserir uma coluna
Datede Parquet/Arrow em uma colunaEnum— a conversão entre tipos incompatíveis agora é rejeitada corretamente, em vez de armazenar valores enum inválidos. #98364 (Alexey Milovidov). - Corrigida uma exceção ao ler um arquivo Arrow com uma coluna
Arrayem uma table com uma colunaNested. #98365 (Alexey Milovidov). - Corrigida uma exceção ao ler de
Nullable(Tuple(...))quando o nome de um elemento de Tuple colide com a subcolumnnullde Nullable. #98372 (Alexey Milovidov). - Corrigida a conversão incorreta de Parquet
BoolparaFixedStringno leitor native V3, que produzia raw bytes em vez de uma string representation. #98378 (Alexey Milovidov). - Corrigido
tryGetColumnDescriptionpara filtrar subcolumns por Kind da coluna pai, em conformidade com outros métodos de lookup de colunas. #98391 (Alexey Milovidov). - Corrigido o rollback de coluna no engine Buffer ao lidar com uma exceção durante a adição de um novo block. A lógica anterior podia levar a um state corrompido da coluna em memória. #98551 (Pavel Kruglov).
- Corrigida uma exceção
Bad cast from type ColumnConst to ColumnDynamicem comparação null-safe (<=>/IS NOT DISTINCT FROM) com colunas constDynamicouVarianteNULL. Também foi corrigido o problema em queIS DISTINCT FROMcomDynamic/VariantvsNULLsempre retornava incorretamente 0. #98553 (Alexey Milovidov). - Corrigido o fato de
parseDateTimeBestEffortinterpretar incorretamente palavras que começam com prefixes de mês/dia da semana. #98742 (Pavel Kruglov). - Corrigida uma exceção de
reverseUTF8em entrada UTF-8 inválida (truncada). #98770 (Alexey Milovidov). - Corrigida uma exceção
LOGICAL_ERRORem funções financeiras (financialNetPresentValue,financialInternalRateOfReturn, etc.) ao passar argumentos do tipoBFloat16. #98958 (Alexey Milovidov). - O SummingMergeTree não soma mais colunas
Bool(e outros tipos de domínio); os valoresBoolagora são mantidos como estão, em vez de serem somados aritmeticamente. #98976 (Yash). - Corrigido um comportamento indefinido (desreferenciamento de ponteiro nulo) ao alterar uma coluna version/sign/is_deleted para
EPHEMERALouALIASem motores MergeTree. Essas alterações agora são rejeitadas corretamente. #98985 (Alexey Milovidov). - Corrigido o
parseDateTimeBestEffort, que interpretava incorretamente palavras iniciadas por prefixos de mês no formato DD-month-YYYY. #99350 (Pavel Kruglov). - Corrigido
CHECK TABLEcom serialização esparsa dentro de um Tuple com Dynamic. #99351 (Pavel Kruglov). - Corrigido um erro lógico
unordered_map::at: key not foundno formato de saída Avro ao serializar colunasEnum8/Enum16com valores ausentes na definição do enum. #99332 (Desel72). - Corrigido um bug em que a comparação entre os tipos
Time[64]eDateTime[64]era confusa; os valoresTime[64]agora são promovidos paraDateTime[64]com a adição de1970-01-01como parte da data. #99267 (Yarik Briukhovetskyi). - Corrigida a desserialização de
\N(NULL) para o tipoVariantnos formatos de texto Escaped/Raw. #99648 (Pavel Kruglov). - Corrigido um comportamento indefinido no leitor do formato Avro ao ler valores numéricos que excediam o limite do tipo da coluna de destino. Agora, as queries falham em caso de overflow, em vez de produzirem silenciosamente valores incorretos. #99697 (asyablue22).
- Corrigido um falso positivo de abort em
NativeReaderao desserializar um fluxo no formato Native com divergência na contagem de linhas: alterado deLOGICAL_ERRORparaINCORRECT_DATA. #99822 (Rahul Nair). - Corrigido um abort de processo na desserialização de coluna
Tuplequando o tipo de serialização no fluxo binário éDETACHED. #99823 (Rahul Nair). - Corrigida a configuração
aggregate_functions_null_for_emptypara funcionar com funções agregadas que retornam tipos nãoNullable, comoArrayouMap(por exemplo,groupArray,sumMap). #99839 (Alexey Milovidov). - Corrigida uma exceção
LOGICAL_ERRORna funçãomidpointquando chamada com tipos inteiros com e sem sinal misturados. #99867 (Alexey Milovidov). - Corrigida uma exceção
LOGICAL_ERRORem queries envolvendo colunasDynamiccom junções cruzadas e filtros de runtime, causada porColumnVariant::filtercompartilhar ponteiros para colunas Variant em vez de cloná-los no caminho de otimizaçãohasOnlyNulls. #100234 (Pavel Kruglov). - Corrigido um bug em array-of-variant que podia reinterpretar o tipo de dado ao chamar
arrayFirst/arrayLast. Por exemplo,Array(Variant(Date, Bool))era convertido emBoolquando o tipo de variant subjacente real eraDate. #100255 (timothygk). - Corrigidos os formatos
CSVeMsgPack, que não conseguiam interpretarNullable(Tuple)corretamente. #100038 (Nihal Z. Miaji). - Corrigidas as funções
accurateCastOrDefaulteto*OrDefault, que não preservavam o tipo de coluna Const para entradas constantes. #100132 (Alexey Milovidov). - Parâmetros de consulta omitidos com tipo
LowCardinality(Nullable(T))agora assumem corretamenteNULLpor padrão, assim comoNullable(T). #100144 (Denys Melnyk). - Corrigido overflow de inteiro com sinal (comportamento indefinido) em
toStartOfIntervalquando chamado com valores de intervalo de milissegundos/microssegundos muito grandes emDateTime64de alta precisão. #100156 (Alexey Milovidov). - Corrigidos os runtime filters de join sobre o tipo de dado
Variant. #100182 (Dmitry Novik). - Corrigido um cast de
Time64paraUInt64que podia limitar os valores a 24 horas. #100025 (Yarik Briukhovetskyi). - Corrigida uma exceção ao calcular o supertipo comum para tuplas vazias e não vazias com
use_variant_as_common_typehabilitado. #100699 (Antonio Andelic). - Corrigido comportamento indefinido em
positiveModuloquando o divisor sem sinal não cabe no tipo de resultado com sinal. #100705 (Raúl Marín). - Corrigido comportamento indefinido (overflow de inteiro com sinal) em
toStartOfIntervalao usar intervalos de Week, Quarter ou Year com um argumentoorigine valores de intervalo extremos. #100817 (Raúl Marín). - Corrigidos os combinadores de função de agregação
If,Distinct,DistinctIfeIfStatecom tipo de retornoTuplee um ou mais argumentosNullable, que não conseguiam ler estados serializados antigos após a introdução deNullable(Tuple). #100826 (Nihal Z. Miaji). cast_keep_nullable, quando habilitado, não lança mais erro ao fazer cast de um nullDynamicpara umVariant. #100864 (Seva Potapov).- Corrigida uma exceção em
intDiv/intDivOrZeroem arrays de tuplas anuláveis. #100895 (Raúl Marín). - Corrigido comportamento indefinido (overflow de inteiro com sinal) em
parseDateTimeBestEffortao interpretar strings de datetime com mais de 18 dígitos fracionários de segundo. #100948 (Vasily Chekalkin). - Corrigida a função de agregação
sumCountOrDefaultcom um ou mais argumentosNullableque não conseguiam ler estados serializados antigos após a introdução deNullable(Tuple). #101021 (Nihal Z. Miaji). - Corrigidas colunas ALIAS com tipos
DateTime/DateTime64que não aplicavam a conversão de fuso horário quando o fuso horário declarado diferia do fuso horário da expressão. #101043 (Alexey Milovidov). - Removido
Nullableda coluna de resultado emarrayIntersecte funções relacionadas para evitar uma incompatibilidade entre serialização e desserialização. #101569 (George Larionov). - Corrigido
positiveModulo(tuple, number), que estava sendo encaminhado incorretamente para divisão em vez de módulo. #101709 (ClickGap AI Bot). - Corrigida a saída incorreta em
formatDateTimecom o Formatter%Wem determinadas configurações de formatting não padrão. #101847 (Robert Schulze). - Corrigida uma exceção de incompatibilidade de tipo em
transformquando a coluna padrão é const em alguns blocos. #100616 (Pavel Kruglov). - Permitidos row groups vazios em Parquet. #100653 (Vitaly Baranov).
min/max/argMin/argMaxagora tratam NaN de forma consistente comORDER BY: NaN é sempre ignorado (retornado apenas quando todos os valores são NaN). Antes, os resultados dependiam da posição do NaN nos dados devido à semântica de comparação não ordenada do IEEE 754. #100448 (Raúl Marín).- Corrigida a inferência incorreta do tipo de dado de data em caso de overflow após o ajuste de fuso horário. #102674 (Pavel Kruglov).
- Corrigido
CASEcom uma expressãoDynamicque retornavaELSEpara todas as linhas. #102684 (Pavel Kruglov). - Corrigida a serialização do tipo
Dynamicachatado com tipos de dado codificados em binário. #102692 (Pavel Kruglov). - Corrigido o fato de
cast_string_to_date_time_modeser ignorado emCASTparaNullable(DateTime). #103035 (Pavel Kruglov). - A representação de nulo na serialização de colunas replicadas e esparsas agora respeita as configurações (por exemplo,
format_tsv_null_representation). #102888 (Hechem Selmi).
Correções de text index e skip index
- Corrigido o uso do índice de texto com outros índices de salto. Antes, erros lógicos como “Trying to get non-existing mark” podiam ocorrer quando um filtro de consulta usava simultaneamente um índice de texto e outros índices de salto regulares. #98555 (Anton Popov).
- Corrigida a recriação de índices de texto durante merges com TTL. #99107 (Anton Popov).
- Corrigida a validação excessivamente rígida do preprocessador do índice de texto. #99359 (Anton Popov).
- Removido o suporte a funções negadas (
notEquals,notLike,notIn) na análise de índice de texto. Essas funções nunca conseguiam ignorar grânulos, portanto analisá-las no índice apenas adicionava sobrecarga. #99393 (Anton Popov). - Corrigida uma exceção
NOT_FOUND_COLUMN_IN_BLOCKquando um predicado de índice de texto (por exemplo,hasAllTokens) era referenciado nas cláusulasSELECTeWHEREpor meio de um alias. #99504 (Anton Popov). - Corrigidos resultados incorretos ao usar
hasAllTokenscomORentre colunas que têm índices de texto separados. #99505 (Anton Popov). - Corrigida a leitura do índice de texto em uma tabela com exclusões leves e políticas de linha já existentes. #99661 (Anton Popov).
- Corrigida a análise, pelo índice de texto com preprocessador, de predicados com a função
IN, além de uma colisão de tokens pesquisados que podia levar a resultados incorretos. #99755 (Anton Popov). - Corrigido o uso incorreto do índice de texto com as funções
startsWitheendsWithem tokenizers que não oferecem suporte a correspondência por substring (array,splitByString). Antes, esses tokenizers podiam produzir resultados incorretos silenciosamente. #100151 (Anton Popov). - Corrigido um crash raro quando uma exceção “Memory Limit” era lançada durante a construção do índice de texto. #100213 (Anton Popov).
- Corrigidos erros “Not-ready Set is passed as the second argument” durante a análise de um índice de texto criado sobre
mapValuespara predicados contendo uma cláusulaIN. #100224 (Anton Popov). - Corrigido um crash ao usar um índice de busca textual com uma cláusula
INcontendo uma subconsulta de tupla, por exemplo,WHERE (id, str) IN (SELECT (id, str) FROM ...), ou quando o número de colunas na subconsulta não correspondia à tupla no lado esquerdo deIN. #100959 (Anton Popov). - O tokenizer
splitByStringagora rejeita strings separadoras vazias. #101928 (Robert Schulze). - O tokenizer
sparseGramsgerava tokens mais longos do que o comprimento máximo fornecido (devido a um+2fixo na implementação). #101934 (Elmi Ahmadov). - Corrigida uma exceção ao consultar tabelas
MergeouDistributedcom um índice de texto completo e condições de filtro combinadas que misturamhas*TokenscomLIKE, comquery_plan_direct_read_from_text_indexhabilitado. #101939 (Jimmy Aguilar Mena). - Corrigido
hasToken/hasTokenOrNullcom padrões de busca compostos apenas por separadores (por exemplo,'()','!!!') em colunas com índice de texto: antes, o índice ignorava silenciosamente todos os grânulos em vez de gerarBAD_ARGUMENTS(parahasToken) ou retornarNULL(parahasTokenOrNull). #102544 (Jimmy Aguilar Mena). - As configurações de índice de texto completo (
enable_full_text_index,allow_experimental_full_text_index,use_skip_indexes_on_data_read) não são mais desabilitadas quando a configuraçãocompatibilityaponta para uma versão anterior à 26.1. #102422 (Nikita Fomichev). - Adicionado suporte a colunas
ALIASna otimização de leitura direta a partir do índice de texto. #103037 (Anton Popov).
Correções no lago de dados
- Corrigida uma condição de corrida lógica na mudança da
snapshot versionno mecanismo de tabelaDeltaLake, e removidos recarregamentos redundantes e pesados de snapshot. #96226 (Kseniia Sumarokova). - Corrigida uma exceção
DUPLICATE_COLUMNe NULLs silenciosos ao ler tabelas Delta Lake que usam o modo de mapeamento de colunas “name” com camposstructcujos nomes contêm pontos. #98013 (Caio Ishizaka Costa). - Corrigido um bug ao usar o Unity Catalog sobre GCS. #98456 (Melvyn Peignon).
DataLakeCatalogagora respeita a configuraçãohttp_forbid_headersdo servidor ao validar a configuraçãoauth_header. #98827 (Michael Anastasakis).- Agora é proibido criar, anexar e atualizar tabelas locais de lago de dados fora dos caminhos do usuário; isso é verificado ao criar e atualizar
IDataLakeMetadata. #98936 (Daniil Ivanik). - Corrigidas as leituras do Iceberg BigLake: as credenciais ADC agora são encaminhadas ao cliente S3 do GCS (corrigindo erros 403), as credenciais OAuth2 são codificadas em URL antes do envio, e o percurso do espaço de nomes não é mais interrompido por respostas HTTP 400 do BigLake. #98998 (Nikita Fomichev).
- Corrigido um erro de acesso fora dos limites ao consultar apenas colunas virtuais de uma tabela Iceberg com dados Avro. #99080 (alesapin).
- Corrigida uma falha em
ALTER TABLE ... REMOVE SETTINGSpara o mecanismo de tabela Iceberg. #99108 (alesapin). - Corrigida uma falha muito rara quando uma tabela Iceberg contém arquivos em formatos mistos (ORC e Parquet). #99168 (alesapin).
- Corrigida uma falha (desreferência de ponteiro nulo) ao executar
ALTER TABLE ... MODIFY COLUMN ... COMMENTem tabelas Iceberg. #99838 (Desel72). - O ClickHouse agora lida corretamente com tabelas no estilo Spark (com um caminho absoluto completo para cada arquivo ou um caminho relativo ao caminho comum da tabela). #99935 (alesapin).
- Corrigida uma exceção quando uma configuração de caminho do arquivo de metadata do Iceberg contém um null byte. #100283 (Alexey Milovidov).
- Corrigido um bug de copiar e colar em que
delta_lake_snapshot_end_version, definida semdelta_lake_snapshot_start_version, era ignorada silenciosamente em vez de gerar um erroBAD_ARGUMENTS. #100454 (Mohammad Lareb Zafar). - Corrigido um erro lógico em tabelas Iceberg ordenadas durante mutações. #100499 (alesapin).
- Corrigido o catálogo Polaris com Azure, em que, desde a versão 25.12, o catálogo adicionava o bucket no início do caminho. #100583 (Konstantin Vedernikov).
- Corrigida uma exceção
Logical error: 'partitions_count > 0'ao executar comandosALTER TABLE UPDATEconsecutivos em uma tabela Iceberg particionada. #101278 (Desel72). - Corrigido o
insert-selectde um cluster Delta Lake com ReplicatedMergeTree. #101299 (Konstantin Vedernikov). - Passa a emitir um erro quando as configurações de versão
delta_lake_snapshot_versionou CDF são usadas sem o DeltaKernel habilitado, em vez de retornar dados incorretos silenciosamente. #101489 (Desel72). - Corrigido um loop de retry de INSERT do Iceberg que falhava quando a table era criada com
iceberg_metadata_file_pathe a versão de metadata de destino já existia. #101548 (Groene AI). - Corrigida uma falha do servidor (
LOGICAL_ERROR) ao selecionar de uma visão materializada baseada no table engine IcebergLocal. #101577 (Groene AI). - Corrigida uma falha em
ALTER TABLE ... UPDATEdo IcebergLocal ao usar o formato Avro, causada por tipos wrapperLowCardinality/Nullablenão serem desembrulhados antes da serialização. #102337 (Desel72). - Adicionada a coluna
hostnameausente asystem.delta_lake_metadata_logesystem.iceberg_metadata_log. #102162 (Michael Russell). - Correção no CoalescingMergeTree para o tipo Array. #102384 (Konstantin Vedernikov).
Correções de S3/Azure/armazenamento de objetos
- Corrigida uma exceção em
CachedOnDiskReadBufferFromFile::readBigAt. #97890 (Kseniia Sumarokova). - Corrigido um crash em que consultas a arquivos com um padrão glob (por exemplo,
file('dir/**', 'LineAsString')) geravam uma exceção de sistema de arquivos não tratada se o diretório contivesse um symlink órfão. Symlinks órfãos agora são ignorados silenciosamente. #98143 (Mark Andreev). - Corrigido o uso excessivo de memória (~514 MiB) durante a autodetecção de formato ao ler dados não Arrow (por exemplo, JSON de
url()oufile()sem um formato explícito), causado pelo leitor ArrowStream interpretar incorretamente os primeiros bytes como um comprimento de metadata muito grande. #98893 (Konstantin Bogdanov). - Corrigida uma race condition que podia causar uma exceção “ReadBuffer is canceled” em consultas usando
urlClusterou funções de tabela de cluster semelhantes. #98955 (Alexey Milovidov). - Corrigida uma mensagem enganosa “inflate failed: buffer error” ao ler arquivos comprimidos inexistentes por meio da função de tabela
url()com padrões glob. #99034 (Alexey Milovidov). - Corrigidas chamadas N+1 de
HeadObjectpara globs com expansão de chaves no S3. #99219 (Konstantin Bogdanov). - Corrigidos casos em que números com zeros à esquerda em um caminho de particionamento Hive causavam erros. #99458 (Yarik Briukhovetskyi).
- Corrigido um
seekincorreto emAsynchronousReadBufferFromFileDescriptorcomO_DIRECT. #99678 (Pavel Kruglov). - Corrigido um bug em que o ClickHouse podia ignorar arquivos se o header
Content-Lengthestivesse ausente na resposta à solicitação HEAD correspondente (por exemplo, devido à transcodificação descompressiva no GCS). #99971 (Yarik Briukhovetskyi). - O servidor não falha mais ao iniciar quando um disco do Azure blob storage está configurado, mas o endpoint está temporariamente inacessível (por exemplo, por falha de DNS). #100701 (Raúl Marín).
- Corrigido um segfault em
s3Clustere em consultas distribuídas devido a um use-after-free no pool de conexões. #100837 (Konstantin Bogdanov). - Corrigida uma exceção que escapava do destrutor
Client::~Clientdo S3, causando a finalização do servidor. #101798 (Gagan Dhakrey). - Corrigido o registro incorreto de host e port durante a reconexão. #102280 (Grant Holly).
- Corrigida uma exceção do servidor no ClusterDiscovery quando um cluster estático (definido na config) ficava temporariamente sem nós ativos. #102661 (Kseniia Sumarokova).
Correções no S3Queue
- S3Queue: corrigida uma falha de asserção após a perda de conexão com o ZooKeeper, mas com commit bem-sucedido. #100210 (Kseniia Sumarokova).
- Corrigido o texto descritivo invertido da coluna
alterableemsystem.s3_queue_settingsesystem.azure_queue_settings— os significados de0e1foram invertidos para corresponder ao comportamento real do código. #101703 (ClickGap AI Bot).
Correções de segurança e controle de acesso
- A função de tabela
loopchamavainner_storage->read()diretamente, contornando a camada do interpretador, onde políticas de linha, grants em nível de coluna e outras verificações de segurança são aplicadas. Isso permitia que um usuário restrito por políticas de linha lesse todas as linhas vialoop(table). #97682 (pufit). - Impõe verificações de
READ ON FILEparafile()escalar eDESCRIBE TABLE file(). #98115 (Nikolay Degterinsky). - Aceita credenciais em base64 sem padding na autenticação HTTP Basic. Alguns clientes HTTP omitem o padding
=no final do cabeçalhoAuthorization: Basic, o que antes causava falhas de autenticação. #98392 (Amos Bird). - Corrigido um bypass de RBAC que permitia aos usuários executar
DESCRIBEem qualquer tabela viaremote(),remoteSecure(),cluster()ouclusterAllReplicas()apontando para localhost, sem exigir o privilégioSHOW_COLUMNS. #98669 (pufit). - Corrigido um problema em que
system.grantsomitia os parâmetros de expressão regular para grantsURLeS3na colunaaccess_object. #98987 (DQ). - Corrigido um bypass de RBAC que permitia aos usuários obter a estrutura da tabela via
DESCRIBE TABLEouCREATE TABLE ASem funções de tabela (mysql(),postgresql(),sqlite(),arrowFlight(),jdbc(),odbc(), etc.) sem os privilégios necessários de acesso à origem. Para funções que inferem o schema a partir de servidores remotos, isso também permitia disparar conexões de saída (SSRF) sem autorização. #99122 (pufit). - Limita as constraints de settings no worker de DDL para consultas DDL distribuídas. #99317 (Pablo Marcos).
- Corrigidos pequenos problemas na autenticação TOTP: a opção de CLI
--one-time-passwordcom senha vazia e a validação dos valores de configuração<digits>e<period>. #99322 (Vladimir Cherkasov). - As credenciais em strings de conexão JDBC, ODBC e NATS agora são mascaradas nos query logs e na saída de
SHOW CREATE. Para strings de conexão no estilo URI, apenas a parte da senha é mascarada. A settingnats_tokenagora também é mascarada. #99344 (János Benjamin Antal). - Proíbe a leitura de credenciais do Google a partir de um arquivo local, o que era inseguro porque permitia ler outras credenciais se o caminho do arquivo fosse conhecido. #99584 (Konstantin Vedernikov).
- Corrigido o bypass da origem do Dicionário MySQL ao
RemoteHostFilterpara parâmetros DDL inline. #99720 (Shaohua Wang). - Corrigido
system.completionspara filtrar corretamente databases, tabelas e colunas por direitos de acesso em todas as combinações de grants: revogação por tabela, por DB e por coluna. #100432 (Shaohua Wang). - Sanitiza
query_idno handler HTTP para evitar injeção de CRLF nos headers de resposta por meio do headerX-ClickHouse-Query-Id. #100500 (Pablo Marcos). - Alguns catálogos podiam exibir informações sensíveis na seção
SETTINGSdeSELECT * FROM system.databases. Isso não acontece mais. #100800 (Konstantin Vedernikov). - As políticas de linha não eram propagadas dos subplanejadores para o planejador pai para registro em log, por isso ficavam ausentes em
query_logpara views, subconsultas e instruçõesINSERT SELECT. Agora elas são mantidas emQueryAccessInfopara registro em log. #101044 (Narasimha Pakeer).
Correções de backup e restauração
- Corrigido o problema de
max_execution_timenão ser aplicado a backup/restauração. #99205 (Kseniia Sumarokova). - Corrigida a exceção
ReadBuffer is canceled. Can't read from it.em operações de backup/restauração com arquivos zip. #100400 (Alexey Milovidov). - Validados os caminhos das entradas de arquivo nos metadados de backup para rejeitar path traversal, caminhos absolutos e nomes vazios durante
RESTORE. #100483 (Pablo Marcos). - Corrigidas a formatação e a clonagem da AST de
BACKUP FROM SNAPSHOT. #101405 (Pablo Marcos).
Correções do ClickHouse Keeper
- Corrigido um data race no cliente ZooKeeper entre a thread de envio e a thread de recebimento. #97887 (Pablo Marcos).
- Corrigida a perda de dados do Keeper após reinicialização ao usar Azure Blob Storage com metadados
s3_plainpara armazenamento de logs. #97987 (Antonio Andelic). - Definido o componente
Watchpara respostas de watch emaggregated_zookeeper_log, em vez de deixá-lo vazio. #98202 (Antonio Andelic). - Corrigido um problema em que o ClickHouse Keeper desconectava clientes Java do ZooKeeper após uma solicitação
addWatch. O cliente Java espera um corpoErrorResponsede 4 bytes, mas o Keeper enviava um corpo vazio, causandoEOFExceptione desconexão da sessão. #98499 (Antonio Andelic). - Corrigidas as métricas do Keeper
zk_followersezk_synced_followers, que não diminuíam quando um seguidor caía. Adicionadas as novas métricaszk_learnersezk_synced_non_voting_followersao comandomntr. #98504 (Antonio Andelic). - Corrigido o fato de a porta Raft segura do Keeper ignorar
cipherListedhParamsFileda configuraçãoopenSSL. #98509 (Antonio Andelic). - Corrigidas mensagens de log enganosas do Keeper, como “Receiving request for session X took 9963 ms”, em que o tempo informado era, na verdade, gasto aguardando ociosamente em
poll()entre heartbeats. #98510 (Antonio Andelic). - Corrigidas conexões TCP do Keeper que impediam o desligamento gracioso do servidor por não responderem ao sinal de desligamento. #98525 (Alexey Milovidov).
- Corrigida uma asserção de depuração em
DDLWorkercausada por umfirst_failed_task_nameobsoleto após uma entrada do ZooKeeper ser excluída durante a recuperação da reinicialização. #99099 (Antonio Andelic). - Corrigido um caso de crash no Keeper. #99133 (JIaQi Tang).
- Corrigido um bug no Keeper em que uma solicitação de leitura podia ficar travada (causando timeout de sessão) se uma sessão diferente e não relacionada no mesmo servidor fosse fechada exatamente no momento errado. #99484 (Michael Kolupaev).
- Corrigido um segfault no NuRaft devido a uma race condition. #100444 (Pablo Marcos).
- Corrigida a falha de
CREATE TABLEemKeeperMapcom “Cannot create metadata for table” quando nós remanescentes do ZooKeeper de um drop parcial anterior à versão 25.1 não tinham o nódrop_lock_version. #101623 (Antonio Andelic). - Corrigida a perda do registry de UDF quando uma sessão do ZooKeeper expirava durante o refresh periódico — todas as Funções Definidas pelo Usuário podiam ficar indisponíveis até que um full refresh fosse concluído com sucesso. #101891 (Nikita Fomichev).
- Corrigido um crash no refresh de UDF causado por
ZooKeeperRetriesControltentar novamente em uma sessão do ZooKeeper obsoleta (expirada) sem renová-la. #102059 (Nikita Fomichev).
Correções de travamentos e estabilidade
- Corrigido um crash nas funções do dialeto Kusto
bin(),bin_at(),extract()eindexof()quando argumentos vazios são fornecidos. #95736 (NeedmeFordev). - Corrigido um crash/assert do servidor em
mapContainsKey/mapContainsKeyLikecom um skip indextokenbf_v1. #97826 (Shankar Iyer). - Corrigido um crash do servidor (
std::terminate) causado por uma exceção não capturada no destrutor do pool de conexões HTTP quando o limite rígido do grupo de conexões é atingido em alta concorrência. #97850 (Antonio Andelic). - Corrigido um acesso fora dos limites em
ColumnConst::getExtremesque podia causar um crash quandoextremes = 1está habilitado. #98263 (Alexey Milovidov). - Validação de dados corrompidos durante a desserialização de
DDSketchpara evitar segfaults, exceções, loops infinitos e OOM ao ler estados de função de agregaçãoquantilesDDcorrompidos. #98284 (Alexey Milovidov). - Corrigida uma exceção rara no executor do pipeline, que podia se manifestar como
Received signal 6(em compilações de depuração), quando a expansão do pipeline entra em condição de corrida com o cancelamento da consulta. #98428 (Alexey Milovidov). - Corrigida uma desreferenciação de ponteiro nulo em
dictGetOrDefaultquando o argumento de chave éNullable. #98460 (Alexey Milovidov). - Corrigido um deadlock no pipeline ao usar
sort_overflow_mode = 'break'junto com funções de janela. #98543 (Alexey Milovidov). - Corrigido um crash por desreferenciação de ponteiro nulo em tabelas de sistema criadas entre o snapshot das tabelas em
IDatabaseTablesIterator::table()e a alteração dessas tabelas em outra thread durante a iteração posterior. #98792 (Grant Holly). - Corrigido o desvio no rastreamento de memória causado por alocações com falha que não eram revertidas, comportamento indefinido de
nallocx(0)e um erro de uma unidade no rastreamento global de pico. O rastreamento foi estendido para abranger os ring buffers doio_uring. #98915 (Antonio Andelic). - Corrigido um crash do servidor (
std::terminate) ao executarALTER TABLE ... DROP PARTem um patch part após uma alteração de esquema (por exemplo, ADD COLUMN). #99036 (Peng). - Corrigido um crash do servidor que podia ocorrer se uma exceção de limite de memória excedido fosse lançada durante uma leitura de disco em cache. #99042 (Shankar Iyer).
- Corrigido um crash acionado por uma exceção de limite de memória lançada durante a aplicação de patch part. #99086 (Anton Popov).
- Corrigido um crash ao usar uma tabela Buffer com
SAMPLEquando o destino não oferece suporte a isso. #99141 (Kseniia Sumarokova). - Corrigido um uso da heap após liberação quando uma tabela é removida simultaneamente a uma consulta de leitura em execução. #99483 (Alexey Milovidov).
- Corrigido um heap-buffer-overflow em
CompressionCodecT64e um abort do processo emCompressionCodecMultipleao descomprimir dados comprimidos malformados. Os codecs agora lançam uma exceção em vez de travar. #99680 (Rahul Nair). - Corrigido um loop infinito ao ler arquivos no formato
Npycom dimensões negativas de shape. #99812 (Desel72). - Corrigido um global-buffer-overflow na função
CRC32em argumentosFixedStringquando avaliada com zero linhas durante o cálculo do cabeçalho do plano de consulta. #99835 (Alexey Milovidov). - Corrigida uma falha de asserção em
sipHash128Keyed(e funções de hash com chave semelhantes) quando o argumento de dados é um map com chaves do tipo array ou outros tipos de array aninhados. #99921 (Alexey Milovidov). - Corrigida uma falha de asserção ao multiplicar aggregate states de
NumericIndexedVectorpor uma constante inteira par, causada por self-XOR em bitmaps Roaring com alias empointwiseAddInplace. #99976 (Desel72). - Corrigido um desreferenciamento de nullptr no leitor de Parquet quando o caminho filter-in-decoder encontra páginas filtradas. #99677 (Alexey Milovidov).
- Corrigido um travamento do servidor local quando
CREATE DICTIONARYtem uma definição com um valor de lista que contém uma função inexistente. #100036 (Yakov Olkhovskiy). - Corrigido um SIGSEGV ao ler patch parts após
ALTER MODIFY COLUMN. #100107 (Nikolay Degterinsky). - Corrigido uso de valor não inicializado em
StringSearcher.h. #100225 (Konstantin Bogdanov). - Corrigido um travamento do servidor (falha de asserção) ao usar funções agregadas paramétricas com o combinador Array e argumentos NULL, como
quantileIfArrayArray(0.5)([[NULL]], [[1]]). #100679 (nerve-bot). - Corrigido um heap-buffer-overflow em
sorted_buffer_gt::insert()do usearch que podia travar o processo ou corromper silenciosamente a memória durante a busca por similaridade vetorial. #100537 (Dustin Healy). - Corrigido um travamento do servidor (erro lógico “Unexpected return type from __topKFilter”) quando
use_top_k_dynamic_filteringestá habilitado e a colunaORDER BYtem tipoDynamicouVariant. #100742 (Groene AI). - Corrigido um travamento do servidor ao usar a função
has()com PREWHERE/WHERE em uma chave Tuple que contém elementos LowCardinality. #100760 (Groene AI). - Corrigido um segfault por desreferenciamento de ponteiro nulo ao carregar dicionários durante o desligamento do servidor. #100839 (Miсhael Stetsyuk).
- Corrigido um buffer overflow em
ULIDStringToDateTimequando a entrada contém bytes não ASCII. #100843 (Konstantin Bogdanov). - Corrigido um crash (
LOGICAL_ERROR) ao consultar uma tabelaMerge(ou a função de tabelamerge()) que agrega várias tabelas, incluindo uma tabelaDistributed, comdistributed_group_by_no_merge=1habilitado. #100859 (Groene AI). - Corrigido um crash ao criar um dicionário de polígonos a partir de uma tabela
MergeTreeque usa serialização de colunas esparsas. #100964 (Anton Popov). - Corrigido um crash (
Logical error: isConst/isSparse/isReplicated assertTypeEquality) em algoritmos de merge quando a replicação lazy de colunas (enable_lazy_columns_replication) produz colunasColumnReplicatedque seguem para pipelines de merge-sort com entradas que chegam tardiamente. #101036 (Groene AI). - Corrigido um crash do servidor (
SIGABRT) ao usar funções agregadas com o combinador internoNull(por exemplo,sumNull,avgNull) eaggregate_functions_null_for_empty = 1. #101147 (Groene AI). - Corrigido um use-after-free no caminho de escrita do cache do sistema de arquivos que podia causar leituras de memória já liberada ao registrar em log segmentos de arquivo concluídos. #101161 (Groene AI).
- Corrigido um crash do servidor com “Trying to attach external table to a ready set without explicit elements” quando a análise de índice distribuído encontra um predicado
GLOBAL INcujo conjunto foi criado sem elementos explícitos. #101178 (Groene AI). - Corrigidas as funções agregadas
MAX/MINem colunasDecimal, que retornavam resultados incorretos quando a compilação JIT estava habilitada. #101203 (Raúl Marín). - Corrigido um crash do servidor (
LOGICAL_ERROR: Bad cast fromColumnVectortoColumnLowCardinality) ao consultar uma tabelaMergeTreecomORDER BY CAST(lc_column, 'Type'), em quelc_columntem o tipoLowCardinality. #101220 (Groene AI). - Corrigido UB em
mergeTreeAnalyzeIndexes()no caso de um argumento de otimizações inválido. #101253 (Azat Khuzhin). - Corrigido um crash do servidor (Logical error: “Variant … is empty”) quando uma consulta lê ao mesmo tempo uma coluna
Tuplecontendo um tipoDynamic Mape sua subcoluna. #101448 (Groene AI). - Corrigido um crash
LOGICAL_ERROR“Current component is empty” ao consultarsystem.part_moves_between_shardscomenforce_keeper_component_trackinghabilitado. #101462 (Groene AI). - Corrigida uma falha de segmentação em
DataTypeDynamic::create()quando o fuzzer gera uma AST de tipoDynamicmalformada. #101464 (Groene AI). - Corrigido um crash
LOGICAL_ERROR(“ColumnUnique can’t contain null values”) ao comparar uma colunaLowCardinalitycom uma constanteVariantNULLenquantouse_variant_default_implementation_for_comparisonsestá desabilitado. #101690 (Groene AI). - Adicionada uma proteção para stream vazio em
Bzip2ReadBuffer, para que ele retorne EOF em vez de lançarUNEXPECTED_END_OF_FILEquando o stream interno estiver vazio. #101691 (ClickGap AI Bot). - Corrigido um crash de use-after-free no scheduler de lease de CPU quando o temporizador de espera sobrevive à thread de trabalho cujos
ProfileEvents::Countersele referencia. #101761 (Antonio Andelic). - Corrigido um use-after-scope na desserialização em paralelo de caminhos dinâmicos do tipo
Object, que podia causar crashes ao ler tabelas com muitos caminhos dinâmicos. #101823 (Antonio Andelic). - Corrigido um SIGSEGV em
MergeTreeDataPartWriterWide::cancelquando um construtor de stream lança uma exceção duranteaddStreams, deixando uma entrada nula emcolumn_streams. #101936 (Antonio Andelic). - Corrigida uma falha de segmentação em mutações em colunas materializadas sem expressão. #102342 (zoomxi).
- Corrigido um segfault (ou
LOGICAL_ERRORem compilações de depuração) ao ler arquivos Parquet com push-down de filtro de Bloom habilitado e condições de igualdade/desigualdade na cláusulaWHERE, causado por um acesso à memória fora dos limites no prefetcher do Parquet. #102385 (Groene AI). - Corrigida uma leitura fora dos limites em funções de busca de strings (
countSubstrings,position, etc.) ao procurar uma substring composta inteiramente por bytes nulos. #102401 (Raúl Marín). - Corrigida uma leitura fora dos limites em
printfcom um%no final. #102472 (Raúl Marín). - Corrigido um crash de
LOGICAL_ERROR“Número inesperado de linhas no subfragmento da coluna” no leitor nativo de Parquet V3 ao ler colunas nullable com um filtroWHERE. #102628 (Groene AI). - Corrigido um crash do servidor (SIGSEGV) ao ler arquivos Avro com esquemas recursivos contendo referências cíclicas a tipos simbólicos. Esses esquemas agora são detectados e rejeitados com uma mensagem de erro clara. #102853 (Groene AI).
- Corrigido um crash do servidor (asserção
LOGICAL_ERROR) quando uma função em uma colunaVariantatinge um limite de memória ou outra exceção que não seja de conversão de tipo durante a conversão do resultado emFunctionVariantAdaptor. #102855 (Groene AI). - Corrigido um crash do servidor em compilações de depuração/com sanitizer quando
std::length_erroré lançada durante a inferência de esquema. #102859 (Groene AI). - Corrigido um crash ao usar uma view com uma cláusula
WHEREem que a consulta interna produz colunas com tipos diferentes dos metadados da view (por exemplo,Nullablede umLEFT JOINcomjoin_use_nulls). #102085 (Miсhael Stetsyuk).
Outras correções de bugs
- Corrigido um bug em que configurações explícitas enviadas junto com
compatibilityna mesma solicitação podiam ser ignoradas silenciosamente quando seu valor correspondia ao padrão do servidor. #97078 (Raufs Dunamalijevs). - Corrigido o problema em que o cliente reportava
NETWORK_ERRORem vez do erro de parsing real (com o número correto da linha) quando umINSERTcom parsing paralelo encontrava dados inválidos. #97339 (Alexey Milovidov). - Corrigido o
DROP DATABASEcomdatabase_atomic_wait_for_drop_and_detach_synchronously, que ficava travado indefinidamente quando a consulta era interrompida. #97586 (Alexey Milovidov). - Corrigido o
KILL QUERY, que não conseguia encerrar consultas travadas na geração deWITH FILL, no carregamento de dicionário viadictGetou emALTER DELETEcommutations_sync=1noReplicatedMergeTree. #97589 (Alexey Milovidov). - Corrigido um erro lógico em uma consulta de política de mascaramento de dados com
ON CLUSTER. #97594 (Bharat Nallan). - Corrigido o pruning incorreto de partição ao usar
DateTime64anterior à época Unix com a funçãotoDate(). #97746 (Yarik Briukhovetskyi). - Corrigido um
Cannot schedule a fileLOGICAL_ERRORemINSERTnaDistributeddevido a uma condição de corrida entreDROPeINSERT. #97822 (Azat Khuzhin). - Corrigido um erro lógico “Bad cast from type DB::ColumnConst to DB::ColumnArray” em
kql_array_sort_asc/kql_array_sort_descquando chamado com argumentos de array constantes. #98251 (Alexey Milovidov). - O servidor HTTP agora retorna uma mensagem de erro no corpo da resposta para respostas 400 Bad Request causadas por headers malformados, em vez de um corpo vazio. #98268 (Alexey Milovidov).
- Corrigidos resultados incorretos com distributed index analysis (recurso experimental) e o query condition cache. #98269 (Azat Khuzhin).
- Corrigido um dictionary source do
MongoDBque falhava com named collections. #98528 (Pablo Marcos). - Passa a impedir a remoção de uma coluna quando suas subcolumns são usadas nas expressões default/alias de outras colunas e a usar o analyzer para expressões default em
ALTER DROP COLUMN. #98569 (Nikita Mikhaylov). - Todos os
DB::ExceptiondePocoHTTPClient::makeRequestInternalImplagora não permitem nova tentativa, incluindoHTTP_CONNECTION_LIMIT_REACHED. #98598 (Sema Checherinda). - Corrigidos dois bugs na compilação JIT de expressões: um erro de copiar e colar na verificação de tipo de
nativeCastque tornava inacessíveis os branches de cast de inteiro para inteiro e de float para float, e umnullptrincorreto de TargetMachine passado ao LLVMPassBuilder. #98660 (Alexey Milovidov). - Corrigida uma exceção “Inconsistent KeyCondition behavior” em compilações de depuração quando a chave primária contém valores NaN de ponto flutuante, fazendo com que
accurateLesseaccurateEqualstratem NaN de forma consistente com a ordem de classificação do ClickHouse. #98964 (Alexey Milovidov). - Corrigido o
windowFunnelcomstrict_deduplication, que retornava um nível incorreto ao encontrar um evento duplicado. #99003 (Yash). - Fez com que as entradas de
system.trace_logpara recargas automáticas de dicionários do ClickHouse passassem a ter IDs de consulta não vazios. #98784 (Miсhael Stetsyuk). - Corrigido
SYSTEM START REPLICATED VIEW, que não ativava a tarefa de refresh. #98797 (Pablo Marcos). - Corrigido
WITH FILL STALENESS, que produzia linhas preenchidas extras quando os dados eram lidos em vários fragmentos (por exemplo, comindex_granularitypequeno). #98895 (Alexey Milovidov). - Corrigida uma falha na ofuscação de consultas para identificadores que começam com letra maiúscula, como
Ab. #101450 (Xuewei Wang). - Corrigido o fato de
TABLE_UUID_MISMATCHser ignorado no caminho de código sem analyzer. #99380 (Azat Khuzhin). - Corrigido
clickhouse format --obfuscate, que produzia SQL inválido ao ofuscar tipos de skip index, nomes de codec de compressão, nomes de engine de banco de dados e definições de layout/source de dicionário. #99260 (Raúl Marín). - Valida alterações de configuração em consultas CREATE quando o próprio engine também oferece suporte a configurações. #99279 (János Benjamin Antal).
- Corrigido
insert_deduplication_token, que era ignorado silenciosamente em consultasINSERT SELECTsemORDER BY ALL. Fornecerinsert_deduplication_tokenagora é suficiente para habilitar a desduplicação independentemente deORDER BY ALL. #99206 (Desel72). - Atrasa o processamento até que o servidor termine de carregar todas as tabelas. #99700 (Seva Potapov).
- Corrigido o parsing de aspas no estilo shell em argumentos da table function
executable. #99794 (Nikita Semenov). - Corrigidas consultas async insert que reportavam zero
written_rows,read_rowseresult_rowsemquery_loge na saída do client. #99879 (Sema Checherinda). - Corrigido um
INSERTcomVALUESque falhava quando os dados eram seguidos, na linha seguinte, por um comentário SQL final (--ou/* */). O comentário agora é ignorado em vez de ser interpretado como outra linha. #100016 (Pratima Patel). - Corrigida uma exceção em
arrayRemoveao comparar tuplas com componentes NULL. #100017 (Alexey Milovidov). - Processa corretamente valores negativos em
NumericIndexedVectorDataBSI. #100086 (Daniil Ivanik). - Corrigido um problema em que a table function
primesnão respeitava corretamentemax_rows_to_readem alguns casos, especialmente quandooffsetestepestavam presentes. #100199 (Nihal Z. Miaji). - Os usuários não veem mais
NATURAL CROSS JOINao consultar a AST de uma consulta com natural join que é reescrita comoCROSS JOIN. #100223 (Peter Nguyen). - Algumas pequenas mudanças em funções: as funções h3 agora validam melhor os limites;
readWKBverifica limites de tamanho (uma nova configuração,max_wkb_geometry_elements); e as funções geradoras aleatórias limitam o número máximo de iterações. #100270 (Alexey Milovidov). - Corrigido um problema em que
cutURLParameterpodia ignorar parâmetros incorretamente quando eles apareciam como substrings de outros parâmetros. #100280 (Nikita Semenov). - Corrigida uma exceção
LOGICAL_ERRORemestimateCompressionRatioquando o parâmetroblock_size_bytesé extremamente grande. #100298 (Alexey Milovidov). - Corrigido o travamento indefinido de
DROP TABLEem tabelas com motor Kafka quando consumidores ficam presos em um rebalance após um erro de heartbeat. #100388 (Alexey Milovidov). - As dimensões do shape do formato Npy agora são validadas em relação ao tamanho do arquivo e aos limites de overflow para evitar negação de serviço com arquivos
.npymaliciosamente criados. Shapes vazios também passam a ser rejeitados, e a memória por linha fica limitada a 2 GiB. #100625 (Raúl Marín). - Corrigido o problema em que
session_timezoneera ignorado ao fazer o parsing de valoresDateTimedurante async inserts (TCP) e em todas as inserções via HTTP. #100647 (Sema Checherinda). StorageRabbitMQ::shutdownpassou a ser idempotente, e foram adicionadas verificações defensivas de null, já que agora ele é chamado duas vezes (emStreamingStorageRegistryeDatabaseCatalog). #100455 (Miсhael Stetsyuk).- Corrigida uma exceção
LOGICAL_ERRORao usaraccurateCastOrNullcom o tipo de destinoQBit. #100470 (Raufs Dunamalijevs). - Corrigido o problema em que a sintaxe
LIMIT m OFFSET n WITH TIESnão funcionava (equivalente aLIMIT n, m WITH TIES, que já funcionava). #100491 (Nihal Z. Miaji). - Corrigido um segfault em que
SerializationInfoTuple::addfazia umassert_castem uma referência comum deSerializationInfoao mesclar partes depois queALTER MODIFY COLUMNalterou uma coluna de um tipo nãoTupleparaTuple. #100509 (Miсhael Stetsyuk). - Corrigida a exceção “No set is registered for key” ao usar
INcom colunasNullable(Tuple)que têm campos nomeados e elementosLowCardinality. #100523 (Alexey Milovidov). - Corrigido o problema em que
EXECUTE ASignorava as cláusulasFORMATeINTO OUTFILEespecificadas na consulta. #100538 (pufit). - Corrigida a formatação inconsistente da AST para
SAMPLEcomOFFSETno nível da consulta. #100579 (Pavel Kruglov). - Corrigidos erros “A tabela de destino não existe” em visões materializadas com tabelas internas durante a inicialização assíncrona, causados por uma ordem incorreta das dependências de inicialização. #100946 (Nikolay Degterinsky).
- Corrigida uma exceção em
optimizeLazyMaterializationquando uma projeção com PREWHERE é usada comORDER BY ... LIMIT. #101115 (Anton Popov). - Corrigida uma mensagem de erro incorreta ao chamar
intExp10com um argumento NaN — ela informavaintExp2em vez deintExp10. #101582 (Krishna Chaitanya). - Corrigido que
allow_statistics=0não bloqueavaALTER TABLE ADD STATISTICSeALTER TABLE DROP STATISTICS. #101585 (Krishna Chaitanya). - Corrigido que
CREATE TABLE ... AS merge()ignorava a lista explícita de colunas e, em vez disso, inferia automaticamente as colunas das tabelas de origem, o que causava errosNOT_FOUND_COLUMN_IN_BLOCKquandomerge_table_max_tables_to_look_for_schema_inferenceera baixo o suficiente e as tabelas de origem tinham esquemas diferentes. #101663 (Miсhael Stetsyuk). - Corrigida a criação de dicionário
RANGE_HASHED, que aceitava silenciosamente um atributo de intervaloMAXinexistente e usava a configuração de tipo errada quando os atributos mínimo e máximo do intervalo tinham tipos diferentes. #101732 (Yakov Olkhovskiy). - Corrigidos bugs nas funções
arrayLevenshteinDistanceWeightedearraySimilarity. #101767 (Mikhail f. Shiryaev). - Corrigido que a API Prometheus Query ignorava corpos de formulário POST. #101794 (James Cunningham).
- Corrigido um falso negativo de
shouldPatchFunctionemSYSTEM INSTRUMENT ADDquando a string de busca aparece pela primeira vez dentro de um argumento de Template do nome de símbolo após demangling. #101885 (Pablo Marcos). - Corrigida a descrição de
system.codecsparaAES_256_GCM_SIV, para informarAES-256em vez deAES-128. #101917 (Jimmy Aguilar Mena). - Corrigido comportamento indefinido ao analisar pacotes de consulta do protocolo nativo com valores inválidos de
QueryProcessingStage. #101972 (Raúl Marín). - A conexão TCP agora é fechada quando ocorre uma exceção durante a análise inicial da consulta, para evitar a leitura de dados inválidos de um stream dessincronizado. #101989 (Raúl Marín).
- Corrigidos casos em que
Timecom valores negativos retornava um resultado incorreto na comparação comDateTime. #102056 (Yarik Briukhovetskyi). - Corrigidos espaços ausentes ao formatar unlock snapshot. #102063 (Han Fei).
- Falha na inicialização, em uma réplica nova, de tabelas alias sem tabela de destino em Database Replicated. #102397 (Nikolay Degterinsky).
INSERTssimples sem visões materializadas não solicitam mais slots e threads excessivos doConcurrencyControl(max_threadsem vez demax_insert_threads), evitando o esgotamento de slots de CC e o aumento descontrolado na contagem de threads em clusters com alta vazão deINSERT. #102961 (Sema Checherinda).- Reintroduzido
ArrowMemoryPoolpara permitir lançarMEMORY_LIMIT_EXCEEDEDe evitar OOM do kernel. #102999 (Azat Khuzhin). - Corrigido um tipo de argumento incorreto exibido em mensagens de erro de funções de busca em strings (por exemplo,
locate,position) quando os argumentos são passados em ordem invertida (locate(needle, haystack)comfunction_locate_has_mysql_compatible_argument_order = 1). #103102 (Alex Kuleshov). - Corrigido o bloqueio indefinido de
waitForPausequandodisableFailPointé chamado sem nenhuma thread pausada no failpoint. #103119 (Shaohua Wang).