Lançamento do ClickHouse 26.8 LTS, 2026-08-27, FIXME (em andamento)
Alteração incompatível com versões anteriores
- O cabeçalho de requisição HTTP
X-ClickHouse-Formatagora seleciona explicitamente o formato da resposta: ele é um alias da configuraçãooutput_format, portanto substitui a cláusulaFORMATda consulta e a extensão do caminho. Em versões anteriores, ele definia apenas o padrão quando o formato de saída não era especificado, como o parâmetrodefault_format. Isso fornece uma opção “fora de banda” para solicitar dados no formato desejado. Ele nunca altera como o corpo da requisição de umINSERTé analisado — useinput_formatouformatpara isso. #105249 (Alexey Milovidov). - Números JSON sem aspas em colunas
DateTimeeDateTime64nos formatosJSONEachRowe semelhantes agora são interpretados como timestamps Unix com precisão opcional de subsegundos, em conformidade comValues,CASTetoDateTime64. Anteriormente, um número fracionário como1703363853.035era rejeitado, e um inteiro simples como1703363853era lido como o valor bruto escalonado deDateTime64, gerando um timestamp1970-.... Strings entre aspas e a saída JSON do próprio ClickHouse não são afetadas. #108091 (Alexey Milovidov). - O valor padrão de
max_insert_threadsmudou de1paraauto, que corresponde ao número de núcleos de CPU disponíveis para o servidor. Isso paralelizaINSERT SELECTpor padrão, emax_insert_threadsagora também pode paralelizar a etapa de gravação de umINSERTsimples quando o caminho de gravação de destino puder ser dividido com segurança. Isso pode alterar o número de partes criadas por essas consultas e a ordem das linhas inseridas. Para restaurar o comportamento anterior, definamax_insert_threadscomo1oucompatibilitycomo uma versão anterior à26.8. #109000 (Alexey Milovidov). #109006 (Alexey Milovidov). - Os mecanismos de banco de dados
PostgreSQLeMaterializedPostgreSQLagora respeitamremote_url_allow_hosts, assim como já fazem o mecanismo de tabelaPostgreSQL, a função de tabelapostgresqle os dicionários criados por DDL. Comremote_url_allow_hostsconfigurado,CREATE DATABASEeATTACH DATABASEexecutado pelo usuário agora rejeitam bancos de dadosPostgreSQLeMaterializedPostgreSQLque apontam para hosts não permitidos, comUNACCEPTABLE_URL. Os bancos de dados existentes continuam sendo carregados na inicialização do servidor. #111135 (Alexey Milovidov). - O codec experimental
ALP(STD)agora realiza a aritmética de escala deFloat32emFloat64. Isso melhora as taxas de compressão e elimina a compressão de dados decimais com muitas exceções, mas valoresFloat32gravados por versões anteriores podem agora ser decodificados com uma diferença de 1 ULP. #111627 (Raufs Dunamalijevs). - Removida a fonte de Dicionário
library.SOURCE(LIBRARY(...))agora falha comUNKNOWN_ELEMENT_IN_CONFIG, e a configuração de servidordictionaries_lib_pathestá obsoleta e não tem efeito. #111980 (Alexey Milovidov). - Removidos o leitor e o gravador baseados na biblioteca Apache Arrow para os formatos
ArroweArrowStream. A implementação nativa do ClickHouse, padrão desde a versão 26.7, agora é a única disponível. As configuraçõesinput_format_arrow_use_native_readereoutput_format_arrow_use_native_writerestão obsoletas: ainda são aceitas, mas não têm efeito. Assim, uma consulta que as definia como0para forçar a implementação do Apache Arrow agora usa a implementação nativa. #111996 (Alexey Milovidov). - Rejeitar valores de configuração de intervalo de tempo (milissegundos/segundos) que excedam o limite de microssegundos de Int64. Isso pode ser uma incompatibilidade somente quando você usou valores absurdamente grandes que excediam o limite. #112757 (Azat Khuzhin).
- As credenciais TLS de uma fonte
MySQL(ssl_ca,ssl_cert,ssl_key) não podem mais ser especificadas como caminhos de arquivo em SQL, como emCREATE NAMED COLLECTION, argumentos de consulta ouCREATE DICTIONARY, pois o servidor abre esses arquivos com seus próprios privilégios. Os caminhos continuam sendo aceitos no arquivo de configuração do servidor. Em outros casos, forneça o conteúdo do certificado ou da chave nos novos parâmetrosssl_ca_pem,ssl_cert_pemessl_key_pem, que são mascarados em logs e em consultasSHOW, assim como as senhas. #112070 (Alexey Milovidov). - As verificações de privilégios dos comandos
SYSTEM ... CACHE ON CLUSTERagora usam o privilégio específico de cada comando, em vez do grupo de privilégiosSYSTEM DROP CACHE. Isso permite que titulares de um único privilégio granular de cache executem o comando correspondente e impede que titulares do grupo executemSYSTEM SYNC FILESYSTEM CACHE ON CLUSTERsemSYSTEM SYNC FILESYSTEM CACHE. #114042 (Groene AI). - Para views cujo corpo consiste em um
SELECTsimples sobre uma única tabelaDistributed, toda a consulta externa agora é enviada aos shards (nova configuraçãooptimize_trivial_view_pushdown_to_distributed, ativada por padrão). Isso altera o comportamento observável dessas views:FINALeSAMPLEespecificados na referência à view agora são propagados para a tabela local do shard, em vez de serem ignorados, eextremesnão é informado em clusters de shard único. Definaoptimize_trivial_view_pushdown_to_distributed = 0para restaurar o comportamento anterior. #101791 (simonmichal). - As partes de patch de
UPDATElightweight agora usam um novo formato v2 em disco, ordenado por (sorting_key..., _block_number, _block_offset), e são aplicadas com um novo algoritmo de mesclagem. O pico de memória é limitado pela maior sequência com a mesma chave de ordenação, em vez do patch completo, e atualizações que cruzam limites de mesclagem não recorrem mais à aplicação em memória via Join. As partes de patch no formato antigo continuam legíveis. Durante uma atualização gradual a partir de uma versão anterior à 26.8, mantenhapatch_parts_version = 'v1'ou use a configuraçãocompatibilityaté que todas as réplicas sejam atualizadas. #103182 (Anton Popov). - Adicionada a cláusula
VALID FOR <interval>aCREATE USEReALTER USERcomo abreviação deVALID UNTIL. O prazo de expiração é calculado como a hora atual mais o intervalo fornecido no momento da execução da consulta e armazenado no formatoVALID UNTIL. A colunavalid_untilda tabelasystem.usersagora tem o tipoArray(DateTime64(0))em vez deArray(DateTime), para que prazos posteriores ao ano 2106 sejam representados com exatidão; as ferramentas que leem essa coluna devem ser compatíveis com o novo tipo. #110171 (Alexey Milovidov). EXPLAIN SYNTAXagora retorna a consulta reformatada como um único registroString(com quebras de linha incorporadas), em vez de um registro por linha, de modo que sua saída é uma única linha recuperável e diretamente utilizável (por exemplo,SELECT count() FROM (EXPLAIN SYNTAX ...)retorna1). Isso é controlado pela nova opçãosingle_record, cujo valor padrão é1; definasingle_record = 0para restaurar a saída histórica de um registro por linha. Outros tipos deEXPLAIN(PLAN/PIPELINE/AST) mantêm a saída em árvore por linha. #110479 (Alexey Milovidov).- Ampliado o intervalo suportado de
Date32de[1900-01-01, 2299-12-31]para[0000-01-01, 9999-12-31], igualando-o ao deDateTime64. A análise e as conversões agora aceitam o intervalo estendido, em vez de limitá-lo silenciosamente aos limites anteriores. Notas sobre compatibilidade retroativa: na conversão numéricatoDate32(N), os valores em[120530, 2932896]agora são interpretados como números de dias (datas de2300-01-01a9999-12-31), em vez de timestamps Unix do início de 1970, seguindo a regra de que um número que se encaixa no intervalo de números de dias é um número de dias; números inferiores ao número de dias de0000-01-01e timestamps posteriores a9999-12-31são saturados nos novos limites. #111534 (Alexey Milovidov). arrayIntersectearraySymmetricDifferencenão tratam mais um valor repetido dentro de um único argumento como se aparecesse em vários argumentos. Consultas que dependiam do comportamento anterior agora podem retornar resultados diferentes:arrayIntersect([1], [2], [1, 1])retorna[]em vez de[1],arrayIntersect([1, 2], [2], [1, 1, 2])retorna[2]em vez de[1, 2]earraySymmetricDifference([1], [2], [1, 1])retorna[2, 1]em vez de[2]. ParaarraySymmetricDifference, dois argumentos já são suficientes:arraySymmetricDifference([1], [2, 2])retorna[2, 1]em vez de[1]. Agora, um valor é contado para um argumento somente quando estava presente em todos os argumentos anteriores, de modo que o resultado contém exatamente os valores presentes em todos os argumentos. Como parte da mesma alteração,arrayIntersectcria sua tabela hash a partir do menor argumento, em vez de todos eles, tornando-se até 1,85x mais rápida e usando um terço menos memória quando os argumentos têm tamanhos muito diferentes.arrayUnionnão é afetada. #113021 (Alexey Milovidov).disable_insertion_and_mutationagora impede o consumo em segundo plano em tabelasKafka,RabbitMQeNATS, mas continua permitindo gravações diretas em armazenamento externo. TabelasKafka2,NATSeRabbitMQbloqueadas não inicializam consumidores paraSELECTdireto. A configuraçãomessage_queue_disable_insertion, introduzida recentemente, agora exige a reinicialização do servidor. #113660 (Christoph Wurm).- Um
PARTITION BYouORDER BYde janela em uma colunaAggregateFunctionagora é rejeitado comILLEGAL_COLUMN, assim como já ocorria comORDER BYde nível superior nessa coluna. Anteriormente, essa consulta era aceita por pelo menos um analisador, e oPARTITION BYde janela particionava de forma diferente dependendo demax_threads. A rejeição também abrange um estado aninhado emArray,Tuple,Map,VariantouSimpleAggregateFunction. UmSimpleAggregateFunctionsobre um tipo comum,QBit, bem comoGROUP BYeDISTINCTsobre um estado, não são afetados. #113878 (Groene AI). - A configuração
include_fromnão usa mais/etc/metrika.xmlcomo padrão. Anteriormente, esse arquivo era usado para substituições de configuração sempre que existia, mesmo que nada na configuração do ClickHouse se referisse a ele. Se você dependia desse arquivo implícito de substituições, adicione<include_from>/etc/metrika.xml</include_from>explicitamente a cada arquivo de configuração afetado;users.xml, carregado separadamente, e as configurações XML de Dicionário precisam de seu próprio elementoinclude_from. #114161 (Alexey Milovidov). - O mecanismo de tabela
NATSaceita credenciais inline na nova configuraçãonats_credentials(a mesma carga útil de um arquivo.creds) e não aceita maisnats_credential_filevia SQL: o caminho faz referência a um arquivo no sistema de arquivos do servidor, que é aberto pelo servidor com seus próprios privilégios; portanto, ele só pode ser especificado em uma coleção nomeada definida no arquivo de configuração do servidor ou comonats.credential_filena própria configuração do servidor. Uma consulta pode substituir esse caminho configurado pornats_credentialsinline, a menos que o operador o tenha fixado com<nats_credential_file overridable="false">. As tabelas criadas antes dessa restrição continuam funcionando após um upgrade. #114644 (Alexey Milovidov). - As métricas assíncronas agora podem ter o tipo de dados
Map, e as métricas por núcleo de CPU e por dispositivo foram convertidas em métricas chave-valor únicas:OSUserTimeCPU0,OSUserTimeCPU1, … tornaram-se uma única métricaOSUserTimeCPUcom um map que associa o número do núcleo de CPU ao valor (e o mesmo se aplica às outras métricasOS*TimeCPU*,CPUFrequencyMHz_*,Temperature*,EDAC*,Block*_*,Network(Receive|Send)*_*,Disk*_*,*BlobsQueueEstimateeAsyncLogging*QueueSize).system.asynchronous_metricstem uma nova colunakey_values Map(LowCardinality(String), Float64)(a colunavalueéNaNpara essas métricas),system.asynchronous_metric_logas registra como uma linha por chave usando uma nova colunakey, o endpoint do Prometheus as exporta com um rótulo (por exemplo,ClickHouseAsyncMetrics_BlockReadBytes{device="sda"}), e oMetricsTransmitterdo Graphite as envia como<prefix>.<Metric>.<key>. Se o seu monitoramento lê os nomes de métricas antigos, defina a nova configuração de servidorasynchronous_metrics_key_values_modecomolegacy_namespara publicar novamente cada chave como uma métrica escalar separada sob seu nome anterior, ou comobothpara publicar as duas formas simultaneamente durante a migração do monitoramento; a configuração é aplicada porSYSTEM RELOAD CONFIG, sem reinicialização. #115333 (Alexey Milovidov). #116791 (Alexey Milovidov).
Novo recurso
- Adicionadas as instruções
CREATE HANDLER,ALTER HANDLEReDROP HANDLERpara definir handlers HTTP personalizados em SQL, persistidos em armazenamento local ou no Keeper. Adicionadas as funçõescurrentHandlerecurrentRequestURL, a tabelasystem.handlerse as colunashttp_handler_name/http_request_urlemsystem.query_log. #106231 (Alexey Milovidov). - Adicionada uma forma de acessar tabelas e bancos de dados por caminhos de URL na interface HTTP (por exemplo, `/database/table.format.gz?filter=a>0`), além de novas configurações (`http_allow_database_as_path`, `http_allow_table_as_file`, `http_allow_filters_as_path`, `http_allow_filters_as_unrecognized_url_parameters`, `select`, `order`, `sort`, `filter`, `page`, `compression`, `format`, `input_format`, `output_format`, `default_format`, `database`) que podem ser combinadas entre si e com o parâmetro de URL `query` existente. #105249 (Alexey Milovidov).
- Adicionados formatos de framing, selecionados pela nova configuração
framing_output_format: eles multiplexam diferentes partes da resposta da consulta em um único fluxo de resposta HTTP — blocos de dados, totais e extremos, pacotes de progresso, eventos de perfil, logs do servidor e exceções. Formatos de framing implementados:None(padrão; tudo funciona como antes),EventStream(eventos enviados pelo servidor HTTP),JSONEachPacketBase64eJSONEachPacketString(um objeto JSON por pacote com dados codificados em Base64 ou como string). #110127 (Alexey Milovidov). - Adicionada a configuração de servidor
default_session_user: o usuário para autenticação quando um cliente se conecta sem especificar um nome de usuário (antes, era fixado comodefault; os protocolos nativo, MySQL e PostgreSQL agora aceitam um nome de usuário vazio em vez de rejeitá-lo, e o Arrow Flight respeita a configuração em vez de usar seu própriodefaultfixo). Endpoints de protocolo componível na seçãoprotocolspodem substituí-la por endpoint com uma chavedefault_session_user, permitindo que diferentes portas de escuta atendam a diferentes usuários anônimos. Defini-la como uma string vazia proíbe conexões sem nome de usuário. Conexões entre servidores nunca usam o usuário de sessão padrão. #110179 (Alexey Milovidov). - Suporte a operadores de pipe em consultas SQL:
FROM t |> WHERE x > 1 |> AGGREGATE count() AS c GROUP BY y |> ORDER BY c DESC |> LIMIT 10, semelhante à sintaxe de pipe do GoogleSQL. Qualquer consultaSELECTpode ser seguida por uma cadeia de operadores|>, e cada operador encapsula a consulta anterior em uma subconsulta, de modo que a AST resultante é igual à da consulta equivalente com subconsultas aninhadas. Em uma consulta que começa com a cláusulaFROM, a cláusulaSELECTagora é opcional e, por padrão, éSELECT *. #111151 (Alexey Milovidov). - Adicionadas as funções
parseQueryToJSONeformatQueryFromJSONpara serializar e desserializar ASTs como JSON, além do dialeto experimentalclickhouse_json, habilitado porenable_json_ast_dialect. #100412 (Alexey Milovidov). #113480 (Nikita Fomichev). - Nova configuração
run_query_in_background. O servidor aceita a consulta, retorna imediatamente um resultado vazio e a executa até a conclusão, independentemente do que aconteça com a conexão. O resultado é descartado. Acompanhe a consulta pelo respectivoquery_idemsystem.processesesystem.query_log. Destinada a consultas longas, comoINSERT ... SELECT,CREATE TABLE … AS SELECTouCREATE MATERIALIZED VIEW … POPULATE, que não devem ser interrompidas caso a conexão seja perdida. #112816 (Miсhael Stetsyuk). - Adicionada uma nova tabela de sistema,
system.user_query_log, que mostra a cada usuário seus próprios registros do log de consultas sem exigir acesso à tabela de log de consultas. A implementação original e a ideia são de Yue Ni (@niyue), #104462. #110156 (Alexey Milovidov). - Implementados os itens restantes da unificação de URLs (issue #59617). A nova configuração
s3_baseresolve URLs relativas na função de tabelas3e no mecanismo de tabelaS3(e nas funções que compartilham a mesma configuração:s3Cluster,gcs,oss), de modo semelhante aurl_base. O novo mecanismo de banco de dadosURLtrata nomes de tabelas como URLs, resolve-os em relação a uma URL base opcional e os encaminha de acordo com o esquema da URL, permitindo que arquivos, a web e o armazenamento de objetos sejam tratados de forma uniforme. Ele substituiFilesystemno banco de dados padrão (Overlay) doclickhouse-localpor uma URL basefile://, para que nomes de arquivos simples continuem funcionando e também seja possível escreverSELECT * FROM 'https://example.com/data.csv'. #111512 (Alexey Milovidov). - Adicionadas a função de tabela
bigquerye o mecanismo de tabelaBigQuerypara ler e gravar em tabelas do Google BigQuery, incluindo conjuntos de dados públicos. A estrutura da tabela é inferida do esquema da tabela do BigQuery. A autenticação oferece suporte a um token de acesso OAuth, uma chave de conta de serviço no formatoJSONe um cliente OAuth com token de atualização. #110166 (Alexey Milovidov). CREATE MATERIALIZED VIEW ... POPULATEsem modificadores agora é atômico localmente: a visão é inscrita para receber novos inserts na tabela de origem, e os dados existentes são capturados em um snapshot sob um breve bloqueio exclusivo na origem. Assim, as linhas inseridas pelo mesmo servidor durante o preenchimento não são mais perdidas nem duplicadas (nova configuraçãomaterialized_views_populate_atomically, habilitada por padrão). A garantia abrange apenas o caminho de insert local; inserts que chegam a outra réplica ou por um caminho de gravação distribuído ficam fora desse escopo, e ela exige uma origem capaz de fornecer um snapshot fixado (a famíliaMergeTreeeMemory). Outras origens, bem comoCREATE OR REPLACE/REPLACEe visões criadas em bancos de dadosReplicated, mantêm o preenchimento não atômico legado. Agora,POPULATEtambém pode ser usado junto comTOpara preencher retroativamente a tabela de destino. #108715 (Alexey Milovidov).- Agora, o Keeper pode armazenar dados em disco em uma árvore LSM personalizada. Seu desempenho é semelhante ao do armazenamento anterior. Use a configuração de coordenação
use_lsmt_storage = truepara habilitá-la,storage_memory_only = falsepara armazenar arquivos em disco e adicionedata_storage_pathoudata_storage_diskà configuração para especificar onde os arquivos devem ser armazenados. Para gravar no S3, apontedata_storage_diskpara um disco do tipos3_plain. #113903 (Michael Kolupaev). - O catálogo de mecanismos “tabelas S3” para lagos de dados, igual ao de #103220, mas com
INSERTfuncional. #113505 (Konstantin Vedernikov). - Adicionado suporte ao Snowflake Horizon. Agora é possível consultar tabelas Iceberg por trás do catálogo Horizon e também gravar nelas por meio do catálogo. #114547 (Melvyn Peignon).
- Adicionado suporte ao formato de arquivo
Puffin. Ele pode ser usado com as funções de tabelafile,url,s3e similares. #103936 (Konstantin Vedernikov). - Adicionado suporte ao modo de frame
GROUPSpara funções de janela (SQL:2011), por exemplo,any(price) OVER (PARTITION BY symbol ORDER BY ts GROUPS BETWEEN CURRENT ROW AND 1 FOLLOWING). Em um frameGROUPS, os limites consideram grupos de pares inteiros — conjuntos de linhas com valores iguais na chaveORDER BY—, portanto,N PRECEDING/N FOLLOWINGsignificamNgrupos de pares antes/depois do grupo de pares da linha atual, em vez de linhas físicas (ROWS) ou distâncias entre valores deORDER BY(RANGE). #108653 (Nihal Z. Miaji). - Adicionada a função de tabela
mergeTreeCodecBlockCounts, que informa, para cada parte, coluna e subfluxo de uma tabelaMergeTree, quantos blocos comprimidos usam cada codec. #109623 (Raufs Dunamalijevs). - Adicionado o tipo de dados geoespaciais
MultiPoint, armazenado comoArray(Point)e incluído no tipoGeometry. #109951 (David Meng). - Adicionada a coluna virtual
_etagpara o armazenamentoHDFS. #108255 (Zhang Yifan). - O leitor nativo
ORCe o formato de saídaORCagora oferecem suporte auniontype, mapeando-o para o tipoVariantdo ClickHouse. Anteriormente, a leitura dessas colunas falhava comUnsupported ORC type, e a gravação falhava comILLEGAL_COLUMN. #110078 (Alexey Milovidov). #110085 (Alexey Milovidov). - Adicionado um tokenizador
japanesepara índices de texto e as funçõestokens,hasAnyTokensehasAllTokens, usando o analisador morfológico MeCab. O dicionário é carregado em tempo de execução de um local definido na configuração do servidor e verificado em relação a um checksum SHA-256 antes do uso. #111420 (Jimmy Aguilar Mena). - Adicionado um tokenizador
chinesepara a funçãotokense índices de textoMergeTree. Ele segmenta texto chinês em palavras usando um dicionário e um modelo oculto de Markov (o algoritmo segue o jieba), com granularidadescoarse_grained(padrão) efine_grained. Dá continuidade a #80174. #89945 (Amos Bird). - Adicionado um novo tokenizador
icupara índices de texto e as funçõestokens,hasAnyTokensehasAllTokens, que oferece segmentação de palavras Unicode sensível à localidade, incluindo segmentação baseada em dicionário para idiomas como chinês, japonês e tailandês. #109940 (Jimmy Aguilar Mena). - Adicionado um tokenizer
splitByRegexppara índices de texto e a funçãotokens. Ele divide a entrada em tokens usando uma expressão regular como separador, por exemplotokenizer = splitByRegexp('[^\p{L}\p{N}#+]+'), permitindo preservar tokens que contêm caracteres especiais, comoC++ouC#, que outros tokenizers separariam. #110002 (Jimmy Aguilar Mena). - O painel HTTP do Keeper agora inclui uma aba Cluster que mostra os membros do Raft em um gráfico de topologia com cores indicativas de saúde, defasagem e prioridade, permitindo identificar quais nós estão íntegros, defasados ou inacessíveis e abrir diretamente o painel do líder. #111655 (yanglongwei).
- Uma nova seção de configuração do servidor,
create_union_system_log_tables, solicita a criação e a manutenção automática de tabelasall_...(por exemplo,system.all_query_log) que consultam a união de uma tabela de log do sistema, suas versões rotacionadas e/ou as mesmas tabelas em todas as réplicas de um cluster. As funções de tabelaremote,remoteSecure,clustereclusterAllReplicasagora aceitam uma cláusulaSETTINGSao final, com as configurações do armazenamentoDistributedque criam, por exemplo,clusterAllReplicas('default', system.query_log, SETTINGS skip_unavailable_shards = 1). #112670 (Alexey Milovidov). - Adicionada a configuração
nats_credentialsao mecanismo de tabela NATS, permitindo que os usuários especifiquem credenciais do NATS embutidas como uma string (correspondente ao conteúdo de um arquivo.creds). #110733 (addshore). - Adicionado o algoritmo
IEJoin, baseado em ordenação, para joins cuja cláusulaONcontém duas comparações de desigualdade (<,<=,>,>=) entre as tabelas associadas, habilitado ao adicionarie_joinà configuraçãojoin_algorithm. Os tipos compatíveis sãoALL INNER/LEFT/RIGHT/FULL JOINeSEMI/ANTI LEFT/RIGHT JOIN. Anteriormente, essas consultas eram executadas como umCROSS JOINcom filtro (somenteINNER), o que é muito mais lento em tabelas grandes. #109920 (Vladimir Cherkasov). - Adicionada a função de agregação
gini, que calcula o coeficiente de Gini de valores numéricos finitos e não negativos, inclusive em agregações agrupadas e distribuídas. #112280 (Amirreza Akhondi). #114643 (Groene AI). - Adicionado o formato de saída
HiveText, que grava textoLazySimpleSerDedo Apache Hive. Os campos são separados por\x01; as linhas, pela configuraçãoformat_hive_text_rows_delimiter(o padrão é\n); e valores aninhadosArray,MapeTupleusam a lista de separadores do Hive. A saída é destinada aoLazySimpleSerDepadrão do Hive e não é simétrica à entradaHiveTextdo ClickHouse para valores aninhados ou delimitadores de linha personalizados. #107582 (Alexey Milovidov). - Adicionado suporte a labels constantes no endpoint de métricas do Prometheus: uma nova seção
<labels>dentro de<prometheus>adiciona as labels configuradas a todas as métricas expostas, ajudando a distinguir vários clusters coletados pelo mesmo Prometheus. Os valores das labels oferecem suporte a substituições de configuração padrão, comofrom_env. Fecha #85969. #111672 (Valery Petrov). - Adicionada a configuração
always_fetch_mutated_part. Quando habilitada, uma réplica pode baixar partes modificadas de outra réplica em vez de executar mutações localmente. #113020 (Rory Shanks). - Adicionada a função de agregação
mergedJSONPatchpara agregação por merge patch no estilo RFC 7396 de valoresJSON, com suporte à mesclagem de estados e uso comAggregatingMergeTree. É possível agregar uma colunaJSONusando um carimbo de data e hora ou outra coluna de ordenação como chave de classificação para calcular o estado mais recente. #108349 (larryluogit). - Adicionada a função
aiSimilarity, que calcula a similaridade semântica entre dois textos usando um modelo de embedding. Ela retorna umNullable(Float32)no intervalo[-1, 1], em que1indica que os textos são idênticos, ouNULLse um operando forNULL/vazio ou se a geração de seu embedding falhar. #110777 (David Meng). - Adicionadas as configurações de restauração
restore_table_data,restore_access_entitieserestore_functionspara controle granular sobre o que é restaurado. Elas podem substituirstructure_onlypara categorias específicas — por exemplo,structure_only=true, restore_access_entities=truerestaura definições de tabela e entidades de acesso sem restaurar os dados das tabelas. #102402 (Nikita Fomichev). - O operador de subscrito de array agora aceita um array de inteiros como índice:
arr[indexes]retorna os elementos em todas as posições especificadas, de forma equivalente aarrayMap(i -> arr[i], indexes). #108371 (folly). - Adicionada a função
notHas, a negação dehaspara arrays, maps e JSON. Quando o conjunto pesquisado é um array constante,notHas(constant_array, x)é reescrito comox NOT IN constant_arrayporoptimize_rewrite_has_to_in(habilitada por padrão), sendo executada por meio de uma consulta a um conjunto e podendo eliminar dados pelo índice de chave primária, comoNOT IN. #109926 (Nihal Z. Miaji). - As funções
arrayElement(o operadorvec[n]) earraySliceagora funcionam com o tipo de dadosQBit:qbit[n]retorna o n-ésimo elemento do vetor em precisão total, earraySlice(qbit, offset, length)retorna uma projeção para um subconjunto de dimensões. Ambas leem apenas os planos de bits dos grupos de stride necessários, e fatias alinhadas aos limites desses grupos reutilizam os streams armazenados sem cópia. Isso resolve #109942. #109953 (Utkal Singh). - Suporte a PNG animado no formato de saída
PNG. Uma colunattransforma o resultado de uma consulta em animação, com a escala de tempo detdefinida poroutput_format_image_time_multiplier_secondseoutput_format_image_time_divisor_seconds;output_format_image_streaming_animationgrava os quadros à medida que a consulta os produz, em vez de mantê-los em buffer na memória. #112846 (Alexey Milovidov). - Nova função
aiRedact, que detecta e mascara informações de identificação pessoal (PII) em texto usando um provedor de LLM. Especifique as categorias a mascarar (por exemplo,['email', 'name']) ou passe um array vazio para usar um conjunto padrão de categorias de PII. Os valores correspondentes são substituídos por um token ([REDACTED]por padrão). #110464 (David Meng). - Adiciona a função
aiFilter, que avalia uma condição em linguagem natural sobre um texto usando um LLM e retornaUInt8para uso emWHERE,PREWHEREeJOIN ... ON. #110594 (yanglongwei). - Adiciona suporte a conexões TLS/SSL com PostgreSQL para o mecanismo de tabela
PostgreSQL, a função de tabelapostgresql, os mecanismos de banco de dadosPostgreSQLeMaterializedPostgreSQLe os dicionáriosPostgreSQL:sslmode, além dos certificados e da chave, fornecidos como conteúdo literal (sslrootcert_pem,sslcert_pem,sslkey_pem; mascarados como senhas) ou como caminhos (sslrootcert,sslcert,sslkey; aceitos apenas de uma coleção nomeada definida no arquivo de configuração do servidor). #110615 (Alexey Milovidov). - O servidor ClickHouse agora tem uma porta de introspecção. Trata-se de um listener TCP do protocolo nativo que é iniciado antes de o servidor começar a anexar tabelas e é interrompido somente após a conclusão do desanexamento das tabelas. Durante esses períodos, um operador pode se conectar a ela com
clickhouse cliente executar consultas comoSHOW PROCESSLIST,SELECT * FROM system.stack_traceouSYSTEM INSTRUMENT ADD 'QueryMetricLog::startQuery' SLEEP ENTRY 0.5. Além disso, o valor padrão da configuração do servidorshutdown_wait_unfinishedaumenta de 5 para 120 segundos. O valor padrão anterior era menor que o intervalo de sondagem da conexão, portanto o servidor poderia ser encerrado à força durante o desligamento, em vez de aguardar a conclusão das conexões pendentes. #110838 (Miсhael Stetsyuk). - Introduz métricas ZooKeeper emuladas no comando
mntrdo Keeper:zk_leader_uptime,zk_sum_election_time,zk_cnt_election_time,zk_sum_leader_unavailable_time,zk_cnt_leader_unavailable_time; também introduz métricas relacionadas ao líder, exclusivas do Keeper:KeeperLastLeaderElectionTime,KeeperLastLeaderUnavailableTime. #113334 (Maxim Orlovsky). - Adiciona suporte a ALTER TABLE … MODIFY PROJECTION para alterar configurações no nível da projeção (por exemplo, index_granularity) de uma projeção existente sem reconstruí-la. As novas configurações são aplicadas de forma gradual por meio de mesclagens. #113343 (Diego Gomes Tomé).
- Adiciona uma coluna
finish_timeasystem.mutations, que registra quando uma mutação foi concluída. Mutações não concluídas e mutações cujo horário de conclusão é desconhecido informam zero. #113474 (Nikita Mikhaylov). - Adiciona um novo nível de funcionalidade de
private previewentreexperimentalebeta, de modo que os níveis de funcionalidade agora são ordenados comoexperimental < private preview < beta < production. A configuração do servidorallow_feature_tierganha um nível:0permite todos os níveis,1exclui funcionalidades experimentais,2também excluiprivate previewe3permite apenas configurações de produção. Configurações que antes definiamallow_feature_tier = 2para permitir apenas configurações de produção agora devem usar3. Fecha #113481. #113581 (Groene AI). - A UI Web SQL integrada (
/play) agora permite ordenar um resultado por suas colunas, filtrá-lo por seus valores e paginá-lo sem editar a consulta. Setas de ordenação e um campo de filtro aparecem em cada cabeçalho de coluna; ao selecionar uma célula, são oferecidas comparações compatíveis com seu valor; e um paginador com tamanho de página ajustável aparece abaixo de resultados que não cabem em uma única tela. Tudo é processado pelo servidor, usando as configurações de construção de consultaorder,filter,limitepage; assim, todo o resultado é definido, e não apenas as linhas exibidas. A ordenação, os filtros e a página selecionados são incluídos na URL da página, de modo que um link compartilhado reproduza o resultado. #115540 (Alexey Milovidov). chdigv26.8.1: ratatui, painéis do tmux, sessões do tmuxinator, compartilhamento de logs coloridos, visão geral dos recursos. #115216 (Azat Khuzhin).
Funcionalidade experimental
- Adicionado um otimizador experimental Cascades baseado em custo para planos de consulta distribuídos, habilitado por
enable_cascades_optimizer = 1junto commake_distributed_plan = 1. Ele escolhe, com base no custo estimado, entre estratégias de join com shuffle, broadcast, replicação e local; agregação em duas fases, com shuffle e local; top-N distribuído em dois estágios; e leituras paralelas e replicadas, inserindo operadores de exchange conforme necessário. #86353 (Alexander Gololobov). - Adicionada uma configuração experimental do
MergeTree,enable_adaptive_codec_selection. Quando habilitada, merges e mutações escolhem, para cada bloco, o codec que gera a menor saída para colunas que usam o codec padrão. #111834 (Raufs Dunamalijevs). * A seleção adaptativa de codecs agora comprime cada codec candidato no máximo uma vez por bloco, em vez de medir todos os candidatos e depois recomprimir com o vencedor. #113511 (Raufs Dunamalijevs). - O binário
clickhouseé compilado para WebAssembly (wasm64, via Emscripten), e oclickhouse localexecuta consultas, incluindo tabelasMergeTree, no Node.js ≥ 24 e no navegador. Um novo job de CI,Build (wasm64), fixa a compilação e o caminho de execução no Node.js (o caminho do navegador ainda não é coberto pela CI) e disponibiliza o módulo WebAssembly como artefato. #113404 (Alexey Milovidov). parallel_replicas_plan_basedagora escolhe a fronteira entre processamento local e remoto ao otimizar o plano de consulta, pode paralelizar consultas em views comUNIONsemparallel_replicas_allow_view_over_mergetree, recorre ao plano local para consultasIN (subquery)em vez de falhar e também distribuiJOINs elegíveis (INNER,LEFT,RIGHT, incluindoSEMI/ANTI). #111063 (Igor Nikonov). #112268 (Igor Nikonov). #112443 (Igor Nikonov).- Planos de consulta distribuídos (
make_distributed_plan) agora também oferecem suporte a consultas cuja fonte, no momento do planejamento, é conhecida por não produzir linhas, como leituras de uma tabelaMergeTreevazia. #111941 (Groene AI). - Adicionada a configuração
use_projection_index_in_read_pools, desabilitada por padrão. Quando habilitada, intervalos totalmente filtrados por uma projeção ou índice de salto são descartados nos pools de leitura doMergeTreeantes da criação de tarefas de leitura, em vez de serem ignorados grânulo por grânulo durante a leitura. Isso evita criar tarefas de leitura e configurar leitores para dados que não serão lidos. #110291 (Nikolai Kochetov). #112296 (Anton Popov). - PromQL: corrigidas operações em vetores instantâneos sem tags, por exemplo,
vector(1) + vector(2),topk(1, vector(1)),label_replace(vector(1), ...)e operadores binários comon(), que falhavam com erro de tipo. #111872 (Valery Petrov). - PromQL: implementadas as funções
changeseresets. #112352 (Valery Petrov). - Reportado o erro que cancelou uma consulta distribuída (
make_distributed_plan = 1) em vez de apenasQUERY_WAS_CANCELLED. Antes, o erro real de uma tarefa de worker com falha era visível apenas no log do servidor. #112590 (Alexander Gololobov). - Quando
make_distributed_plan = 1, o ClickHouse agora desativa recursos ainda não compatíveis com planos de consulta distribuída, em vez de permitir que falhem posteriormente. Fecha #109476. #112463 (alesapin). - Os planos de consulta distribuída (
make_distributed_plan) agora usam materialização tardia para consultasORDER BY ... LIMIT k. #113111 (Shankar Iyer). - Adicionado suporte a funções de janela sem particionamento (
OVER (ORDER BY ...)) em planos de consulta distribuída (make_distributed_plan). Antes, qualquer consulta com uma função de janela falhava porqueWindowStepnão podia ser serializado para execução remota; janelas comPARTITION BYcontinuam rejeitadas por enquanto. #109802 (Vighnesh Pathrikar). - Adicionada a configuração
use_query_condition_cache_for_top_k, que controla o cache de condições de consulta para consultasORDER BY ... LIMIT n(TopK). #111492 (Alexey Milovidov). O cache de condições de consulta agora é ativado por padrão para consultas que usam a otimizaçãoORDER BY <column> LIMIT n(TopK). Ele pode ser desativado novamente com a configuraçãouse_query_condition_cache_for_top_k. #114539 (Alexey Milovidov). - Adicionada afinidade estática entre partições e shards para
StorageKafka2por meio das configuraçõeskafka_partition_shard_numekafka_shard_count, permitindo que vários shards do ClickHouse consumam, de forma determinística, subconjuntos distintos de partições do Kafka. #108886 (johnjing). - Reforçadas as funções de IA experimentais: por padrão, endpoints (
http) inseguros para hosts remotos são bloqueados (nova configuraçãoai_function_allow_insecure_endpoint), as chamadas de API de saída por consulta são limitadas (ai_function_max_api_calls_per_queryagora tem o valor padrão1000) e as respostas de erro do provedor gravadas nos logs são sanitizadas. #111286 (George Larionov). - PromQL:
quantilecom nível de quantil fora do intervalo [0, 1] agora retorna -Inf/+Inf/NaN, como no Prometheus, em vez de gerar um erro, ehistogram_quantileagora ignora séries de entrada cujo rótuloleestá ausente ou não é analisável, como no Prometheus. #111871 (Valery Petrov). - Adicionado suporte a identificadores com múltiplos componentes em tabelas TimeSeries. #112799 (Vitaly Baranov).
- Adicionadas as configurações
samples_index_granularityetags_inner_granularitydeTimeSeriespara controlar a granularidade do índice das tabelas internas. #113075 (Vitaly Baranov). - PromQL: adicionada a função
derive corrigido um erro em que sua função de agregação subjacente retornava valores 1000 vezes menores com timestamps com resolução de milissegundos. #112360 (Valery Petrov). - PromQL: rejeita escapes inválidos entre delimitadores em strings e pontos de código substitutos Unicode inválidos. #113587 (Minh Vu). #113203 (Minh Vu).
- PromQL: preserva valores finitos ao usar o módulo com um divisor infinito. #113746 (Minh Vu).
- PromQL: as funções de data/hora
hour,minute,month,year,day_of_week,day_of_month,day_of_yearedays_in_monthagora podem ser chamadas sem argumentos, usandovector(time())como padrão, assim como no Prometheus. #111869 (Valery Petrov). - O PromQL agora oferece suporte ao parâmetro
lookback_deltada Prometheus HTTP API para consultas instantâneas e por intervalo. #113971 (Minh Vu). - Os planos de consulta distribuídos (
make_distributed_plan) agora oferecem suporte aIN (subquery)sem reescrevê-lo comoJOIN: o conjunto é criado uma vez no iniciador, e seus valores são enviados junto com as tarefas de trabalho. A substituição forçadarewrite_in_to_joinfoi removida; a reescrita continua disponível como uma configuração explícita. #113826 (Alexander Gololobov). - Consultas de streaming oferecem suporte a marcas-d’água. #106169 (Mikhail Artemenko).
- Adicionado um cache de sistema de arquivos read-through ao caminho de leitura experimental do
ReaderExecutor(use_reader_executor, desabilitado por padrão). #110029 (Sema Checherinda). - PromQL: implementadas as funções
clamp,clamp_min,clamp_maxeround. #111870 (Valery Petrov). - Coleta corretamente estatísticas de inserção e consultas por meio do endpoint remote-write do Prometheus. #112825 (James Cunningham).
- Os operadores de agregação do PromQL agora aceitam uma combinação de letras maiúsculas e minúsculas, assim como no Prometheus. #114076 (Minh Vu).
- TimeSeries: armazena todas as tags na coluna
tags. #114300 (Vitaly Baranov). - Aplica a otimização de leitura em ordem a consultas
ORDER BYquandoparallel_replicas_plan_basedestá habilitado: a ordenação agora é enviada às réplicas e mesclada no iniciador, de modo que cada réplica lê na ordem da chave de ordenação. Também corrigeUnknown function __topKFilteremORDER BYsobre uma coluna que não faz parte da chave primária quando essa configuração está habilitada. #114315 (Igor Nikonov). - Rejeita quebras de linha literais em strings PromQL comuns entre aspas. #114381 (Minh Vu).
- Corrige chaves
GROUP BYduplicadas na estratégia de agregação parcial demake_distributed_plane permite essa estratégia para agregações em uma leitura distribuída. #114523 (Alexander Gololobov). - Gera uma exceção em caso de violação da lista de permissões de tipos de índice hipotético para WHATIF. #114646 (Yarik Briukhovetskyi).
- Restaura a leitura de subcolunas quantizadas para busca vetorial (introduzida na versão 26.7). #114763 (Shankar Iyer).
- O mecanismo de tabela experimental
TimeSeriesnão aplica mais o codecGorillaàs colunasvaluecriadas automaticamente na tabela interna de amostras; agora, elas usamCODEC(ZSTD(1))por padrão. As colunas declaradas explicitamente mantêm os codecs definidos pelo usuário. O padrão da colunatimestamppermanece inalterado (CODEC(DoubleDelta, ZSTD(1))). #114790 (Nikita Mikhaylov). - Uma consulta com plano distribuído (
make_distributed_plan) agora interrompe os estágios anteriores quando umLIMITé atingido, em vez de calcular e descartar o resultado completo. #114806 (Alexander Gololobov). - Adiciona uma camada de cache de páginas no espaço do usuário ao caminho de leitura do
ReaderExecutorexperimental (use_reader_executor, desativado por padrão). Em caso de falha no cache, o executor agora preenche o cache de páginas no espaço do usuário e atende leituras subsequentes a partir dele, sem cópia. #114890 (Sema Checherinda). - Adiciona suporte a
ROLLUP,CUBE,GROUPING SETSe à funçãogroupingem consultas executadas commake_distributed_plan = 1. #114950 (Alexander Gololobov). - Corrige o erro
Illegal type Decimal(18, 0) of argument of function toIntervalNanosecondquando uma consulta PromQL usaoffsetem um seletor de intervalo, por exemplo,rate(m[2m] offset 5m). #114997 (Nikita Mikhaylov). - Um valor muito alto de
distributed_plan_workers_numnão faz mais o servidor abortar comstd::length_errorquando os recursos experimentaismake_distributed_planeenable_cascades_optimizerestão habilitados. Essa quantidade de nós agora é rejeitada comINVALID_SETTING_VALUE. #115398 (Groene AI). - Adiciona suporte à agregação
GROUPING SETSem planos distribuídos criados pelo otimizador Cascades (make_distributed_plan = 1, enable_cascades_optimizer = 1). #115426 (Alexander Gololobov). - As tabelas
TimeSeriesagora podem manter uma tabela de “amostras recentes”: quando a nova configuração do mecanismorecent_samples_ttl_secondsé diferente de zero, o mecanismo cria uma cópia da tabela de amostras com TTL (particionada porrecent_samples_partition_by, diariamente por padrão), gravada a cada inserção. Consultas PromQL cujo intervalo de tempo se encaixa na janela de TTL leem automaticamente dessa cópia, tornando regras de alerta e gravação, bem como dashboards de curto intervalo, várias vezes mais rápidos em tabelas grandes. Essa preferência pode ser desativada com a nova configuração no nível da consultatime_series_prefer_recent_samples_table. #115441 (Nikita Mikhaylov). - Implementa consultas SELECT em TimeSeries. #115622 (Vitaly Baranov).
- Implementa o endpoint
/api/v1/seriesda API HTTP do Prometheus para tabelasTimeSeries: seletores de sériesmatch[](valores repetidos são unidos), um intervalo de tempostart/endopcional e um parâmetrolimitopcional. #115676 (Nikita Mikhaylov). - Planos de consulta distribuídos (
make_distributed_plan) agora interrompem prontamente estágios upstream ociosos após umLIMITser atingido: um sink de exchange ocioso lêNoMoreDataNeededassim que o recebe, e uma source de exchange ociosa detecta que sua saída foi fechada e propaga a interrupção para upstream. Antes, esses estágios continuavam lendo e processando dados que ninguém consumia. #115690 (Alexander Gololobov). - Réplicas paralelas automáticas agora podem coletar estatísticas de runtime e habilitar réplicas paralelas para consultas compatíveis quando
parallel_replicas_plan_basedestá habilitado. #115788 (Igor Nikonov). - Registra uma tabela externa de amostras recentes de uma tabela TimeSeries como dependência referencial. #115944 (Groene AI).
Melhoria de desempenho
- Novo algoritmo adaptativo para
GROUP BYparalelo (controlado pela configuraçãoenable_adaptive_aggregator, ativada por padrão): cada thread agrega em sua própria tabela hash até atingiradaptive_aggregator_freeze_thresholdchaves e então a congela. Assim, chaves frequentes continuam sendo atualizadas em pequenas tabelas residentes em cache, sem necessidade de coordenação, enquanto chaves raras são encaminhadas pelo hash para filas pendentes por bucket e agregadas exatamente uma vez durante a mesclagem paralela por bucket. #111459 (Nihal Z. Miaji). - Redução do uso de memória de tabelas
MergeTreecom muitas partes de dados por meio do compartilhamento, entre as partes de uma tabela, dos metadados por parte derivados do esquema (lista de colunas, descrições de colunas, serializações e subfluxos de colunas), em vez de copiá-los para cada parte. O efeito é maior em tabelas largas com muitas partes pequenas. #109816 (Raúl Marín). - Otimização de consultas
GROUP BY ... ORDER BY ... LIMITeGROUP BY ... LIMITpor meio da manutenção de um heap limitado durante a agregação, para eliminar grupos que não podem aparecer no resultado, reduzindo significativamente o uso de memória e o tempo de execução em agrupamentos de alta cardinalidade. Controlada pela configuraçãoenable_group_by_top_k_optimization. Baseada na implementação inicial de Dmitriy Terenichev (#78553). #96630 (Konstantin Bogdanov). - Redução do tamanho das células da tabela hash para chaves de agregação formadas por uma única
String, melhorando cargas de trabalho deGROUP BYcom muitas strings. A nova configuraçãoenable_packed_string_keys_in_aggregationé ativada por padrão; desativá-la ou definircompatibilityabaixo de26.8restaura o método legadoStringHashTable, que ainda pode ser mais rápido para agregações de cardinalidade muito baixa com chaves maiores que 11 bytes. #110573 (Harikrishnan Prabakaran). #112089 (Harikrishnan Prabakaran). - Paralelização da mesclagem final de tabelas hash de agregação de nível único com a nova configuração
enable_parallel_single_level_merge, ativada por padrão. Isso acelera consultasGROUP BYcujas tabelas hash por thread permanecem abaixo do limite de dois níveis, mas em que a mesclagem domina o tempo de execução. #110395 (Nihal Z. Miaji). - Melhoria do desempenho de
DISTINCTquando o fluxo de entrada é ordenado por um prefixo das colunas distintas, por exemplo,SELECT DISTINCT a, b FROM table ORDER BY a. Essas consultas são executadas até 2,4 vezes mais rápido. #110170 (Nihal Z. Miaji). - Aceleração e redução do uso de memória de consultas
DISTINCTem tabelasMergeTreeparticionadas ao manter as linhas de cada partição em um único fluxo, para que oDISTINCTpreliminar de cada fluxo opere sobre um conjunto disjunto de chaves, em vez de o mesmo conjunto de chaves aparecer em váriosDISTINCTs preliminares. Isso se aplica quando a expressão de partição é uma função determinística das colunas deDISTINCTe é condicionado por uma heurística de custo baseada na quantidade e na assimetria das partições, que pode ser ativada com a configuraçãoforce_distinct_partitions_independently, desativada por padrão. A mesma separação por partição é propagada pelas etapasExpression,FiltereARRAY JOINaté os consumidores finaisDISTINCT,LIMIT BYeGROUP BY, permitindo que eles também ignorem a mesclagem. Controlado pelas novas configuraçõesallow_distinct_partitions_independently(ativada por padrão) emax_number_of_partitions_for_independent_distinct, para ajustar a heurística. #108326 (Nihal Z. Miaji). - Otimizadas as funções
uniq,uniqExacteuniqHLL12em agregações sem chave. #110150 (Anton Popov). - O leitor V3 de
Parquetagora pode ignorar grupos de linhas inteiros usando a página de dicionário, além de estatísticas de mín./máx. e filtros de Bloom, em condições de igualdade eINquando um fragmento de coluna é totalmente codificado por dicionário. Controlado pela nova configuraçãoinput_format_parquet_dictionary_filter_push_down. #106952 (Alexey Milovidov). #110567 (Alexey Milovidov). - Materialização preguiçosa para leitura de arquivos
Parquetdo armazenamento de objetos, incluindo tabelasIceberg: em consultasORDER BY ... LIMIT n, as colunas desnecessárias para ordenação e filtragem são lidas apenas para asnlinhas que passam peloLIMIT. Em um arquivoParquetde 200 MB noS3,SELECT k, s ... ORDER BY k DESC LIMIT 10lê 3,3 MB em vez de 171 MB (51x menos E/S, 8x mais rápido). Controlado pela nova configuraçãoquery_plan_optimize_lazy_materialization_for_object_storage(habilitada por padrão e que também requerquery_plan_optimize_lazy_materialization). #110970 (Alexey Milovidov). * A materialização preguiçosa para consultasORDER BY ... LIMIT n(#110970) agora também se aplica a arquivos Parquet locais lidos com a função de tabelafilee o mecanismo de tabelaFile: as colunas desnecessárias para ordenação e filtragem são lidas apenas para asnlinhas que passam peloLIMIT. A segunda leitura de um arquivo que passou peloLIMITfalha com o novo erroFILE_CHANGED_DURING_READse o arquivo tiver sido modificado entre as duas passagens. Controlado pela nova configuraçãoquery_plan_optimize_lazy_materialization_for_file(habilitada por padrão). Também corrige uma falha na materialização preguiçosa para armazenamento de objetos comNot found column or subcolumn ... in blockquando uma subcoluna solicitada (por exemplo, de uma colunaJSON) é adiada. #114262 (Alexey Milovidov). - As estatísticas de colunas agora são materializadas em
INSERTpor padrão quando o tamanho ativo atual da tabela mais o tamanho do bloco gravado é igual ou inferior à nova configuraçãomaterialize_statistics_on_insert_max_table_size(padrão de 25 GiB); a verificação é feita para cada bloco gravado, portanto, uma primeira carga em massa em uma tabela vazia ainda pode materializar estatísticas para cada bloco gravado. Isso fornece ao otimizador de join baseado em custo estimativas precisas para tabelas de dimensão recém-carregadas e evita ordens de join patológicas (por exemplo, TPC-H Q5 e Q8 não expiram mais no fator de escala 40), enquanto grandes tabelas de fatos já estabelecidas continuam materializando estatísticas durante merges. #109454 (Alexey Milovidov). - Acelera funções de janela em tabelas
MergeTreeparticionadas ao ler cada partição por seu próprio fluxo e avaliar as janelas por partição, evitando a dispersão por hash que normalmente redistribui cada linha entre threads antes da ordenação da janela. Isso se aplica quando a expressão de partição da tabela é uma função determinística das colunasPARTITION BYda janela e é controlado pela mesma heurística de custo usada paraGROUP BY/DISTINCTpor partição (partições suficientes em relação amax_threads, sem partição dominante). Controlado pelas novas configuraçõesallow_window_partitions_independently(habilitada por padrão),force_window_partitions_independentlyemax_number_of_partitions_for_independent_window. #114783 (Nihal Z. Miaji). - Reduz o uso de memória ao gravar partes compactadas, transmitindo o arquivo compactado final diretamente para o arquivo de destino, em vez de manter uma segunda cópia completa na memória durante a confirmação da parte. #111995 (Alexey Milovidov).
- Adicionado um novo valor de
join_algorithm,parallel_full_sorting_merge: para junções de igualdade compatíveis com hash, ele divide uma junção merge com ordenação completa em junções merge independentes por shard, com base no hash das chaves de junção, executadas em todas as threads. Ele mantém o baixo uso de memória em streaming de uma junção merge enquanto a paraleliza (em um benchmark, ~2,4x mais rápido e com ~3,3x menos uso de memória queparallel_hash). JunçõesASOFrecorrem a um únicofull_sorting_merge; tipos de chave incompatíveis com hash (ponto flutuante,JSON,Object,Dynamic) ignoram apenas a reescrita de dispersão por hash e ainda podem ser particionados na origem por intervalos de chave primária quandoquery_plan_join_shard_by_pk_rangesestá habilitado. O resultado não é ordenado. #109005 (Alexey Milovidov). - Adicionada a eliminação espacial do GeoParquet nos níveis de grupo de linhas e página ao leitor
Parquet. A eliminação de grupos de linhas ignora grupos de linhas inteiros cuja caixa delimitadora não se sobrepõe à geometria da consulta. A eliminação no nível de página usa o índice de colunacovering.bboxpara ignorar páginas irrelevantes dentro dos grupos de linhas, e o pushdown de predicados espaciais agora também é aplicado durante a leitura de linhas doParquet. #104435 (Vasily Chekalkin). - O pushdown de filtros do Parquet (eliminação de grupos de linhas e índice de coluna) oferece suporte a mais conversões de tipos:
DateTime64(x) <-> DateTime64(y),Decimal(x) <-> Decimal(y),Float32 <-> Float64. #110457 (Michael Kolupaev). - Reduzidas solicitações de leitura duplicadas em discos remotos quando os intervalos de marcas estão fragmentados, por exemplo, por índices primários ou índices de salto. #113584 (Anton Popov).
- Acelerada a execução de
INem colunas agrupadas (por exemplo, ordenadas pela chave primária), reutilizando o resultado da linha anterior para linhas consecutivas iguais. #114853 (Nikita Mikhaylov). - Uma agregação sem chaves
GROUP BYnão distribui mais sua saída de linha única entre fluxosmax_threads, de modo que consultas cujo plano continua após essa agregação têm um pipeline muito menor (menos processadores para criar, agendar e analisar) sem perder paralelismo. #115170 (Nikita Mikhaylov). - O Keeper agora lê entradas de changelog com menos contenção de bloqueios: as leituras de catch-up são planejadas sob um bloqueio compartilhado e executam E/S de disco sem bloqueio; além disso, tanto o catch-up dos seguidores quanto o caminho de confirmação podem pré-decodificar entradas em um thread pool em segundo plano, reduzindo leituras redundantes de disco e a decodificação pela CPU no líder. #108473 (Antonio Andelic).
- Acelerada a inicialização do Keeper pela leitura simultânea de vários arquivos de changelog, em vez de sequencialmente, controlada pelas novas configurações
log_startup_read_max_streamselog_startup_read_buffer_size. #109881 (Antonio Andelic). - Adicionado um novo tipo de esquema
bucketedparasystem.metric_log, que armazena todas as métricas em uma única colunaMap(Enum16(...), Int64)usando a serializaçãoMapcom buckets e 128 buckets, além de uma colunaALIASpor métrica para compatibilidade: a tabela passa a ter poucas colunas em vez de milhares, valores zero não são armazenados, e a leitura de uma única métrica lê apenas um dos 128 buckets. Além disso, umMapcom chavesEnumagora pode ser indexado pelo nome de string do valor enum, por exemplo,map['name']. #115380 (Alexey Milovidov). - Adicionada uma otimização do plano de consulta que transfere funções de redução de volume (
length,lengthUTF8,empty,notEmpty) para antes das etapasSortingeFilter, substituindo o argumento amploString/FixedStringpelo resultado de tamanho fixo, evitando que seja armazenado em buffer pela ordenação ou copiado pelo filtro. Controlada pela nova configuraçãoquery_plan_push_down_volume_reducing_functions, habilitada por padrão. #106199 (Peng). - Habilita
read_in_order_use_virtual_rowpor padrão. Ao ler na ordem da chave primária (por exemplo,ORDER BY primary_key LIMIT n) em uma tabela com muitas partes, apenas as partes que podem realmente contribuir para o resultado são lidas (além de uma janela de leitura antecipada de, no máximo,max_threadspartes, que mantém a leitura paralela), reduzindo significativamente o pico de consumo de memória. #106215 (Alexey Milovidov). - Consultas de agregação sem funções de agregação agora usam métodos baseados em
HashSetem vez deHashMap(para tipos de chave compatíveis). Foram observados ganhos de desempenho de até 1,8x. #108862 (Nikita Taranov). - Evita a sobrecarga do filtro de runtime de
JOINquando o lado de sondagem é estimado como pequeno. O limite é controlado pela nova configuraçãojoin_runtime_filter_min_probe_rows(padrão1000). #104860 (Vladimir Cherkasov). - Consultas com predicados como
nullIf(key, sentinel) = constagora podem usar poda por chave primária, partição e skip-index. #107308 (Aditya Kumar). - Adicionada a configuração de servidor
jemalloc_merge_tree_arenaspara controlar arenas dedicadas do jemalloc para metadados de partes e tabelasMergeTree. Em servidores com muitos núcleos, um pool por CPU pode reduzir a contenção em bloqueios do alocador entre merges simultâneos, e a arena dedicada agora armazena apenas metadados de longa duração. #109490 (Raúl Marín). - Acelerada a descompressão ZSTD em
x86_64para colunas com pequenos deslocamentos de correspondência, como colunas de inteiros de largura fixa, por meio da vetorização de cópias sobrepostas com deslocamentos curtos usandopshufbdo SSSE3. Por exemplo, a descompressão de uma colunaUInt64é até ~1,2x mais rápida no AMD Zen 5. #110909 (Konstantin Bogdanov). - Acelera
groupUniqArraypara tipos numéricos em até 3x usando hash CRC32, como emuniqExact, e incorporando a inserção por linha. #110917 (Manuel). estimateCompressionRatiomais rápido com o codecNONE. #111107 (Raufs Dunamalijevs).- Reduzido o valor padrão de
max_snapshot_commit_thread_pool_sizepara16, igualando-o abackup_threads, para reduzir o throttling do CFS ao fazer commit de snapshots de tabelas com muitas partes. #111417 (Han Fei). - Reduz o uso de CPU ao fazer commit de snapshots de tabelas com um número muito grande de arquivos. #112297 (Han Fei).
- Ignora o pré-aquecimento de hashes de desduplicação de async-insert quando a desduplicação está desabilitada. #111549 (Sema Checherinda).
- Um
JOINcuja condiçãoONé sempre falsa, por exemplo,ON 1 = 2,ON NULLoua.t = 'A' AND a.t = 'B', não lê mais o lado que não contribui para o resultado. Controlado pela configuraçãoquery_plan_short_circuit_constant_false_join(ativada por padrão). #110234 (Groene AI). - Acelera a leitura de tabelas
Icebergao buscar antecipadamente o próximo arquivo de manifesto enquanto o atual é analisado, sobrepondo operações de E/S ao trabalho da CPU. #108543 (Asya Shneerson). - Consultas com
FINALque leem em ordem de chave primária com umLIMITpequeno não usam maissplit_intersecting_parts_ranges_into_layers_final. #110431 (Nikolai Kochetov). - Melhora o desempenho de
RIGHTeFULL JOINcom o algoritmoparallel_hashquando o lado direito contém chaves de joinNULLou linhas filtradas pela expressãoON, evitando a reconstrução do mapa de nulos. #111258 (Hechem Selmi). - Acelera
countSubstringsCaseInsensitiveUTF8ao corrigir uma complexidade quadrática que poderia fazer a função levar minutos para processar uma string de busca de poucos megabytes com muitas correspondências. #112003 (Groene AI). - A API de consultas do Prometheus (
/api/v1/query,/api/v1/query_range) do mecanismo experimentalTimeSeriesagora executa consultas em paralelo, em vez de em uma única thread. #112108 (Nikita Mikhaylov). - As colunas
timestampevaluecriadas automaticamente na tabela interna de amostras deTimeSeriesagora usam, respectivamente,CODEC(DoubleDelta, ZSTD(1))eCODEC(Gorilla, ZSTD(1))por padrão. #112110 (Nikita Mikhaylov). - Corrige uma regressão de desempenho na ingestão de
system.query_log. A criação das colunas mapSettingseasynchronous_read_countersestava cerca de seis vezes mais lenta do que antes, o que poderia fazerSYSTEM FLUSH LOGS query_logexceder o tempo limite de 180 segundos em servidores que registram muitas consultas com muitas configurações alteradas. Fecha #112191. #112210 (Groene AI). - Melhora o desempenho de JOINs hash RIGHT e FULL com múltiplas disjunções
ORna cláusula ON e de JOINs RIGHT/FULL com condições residuais (de desigualdade). #111590 (Hechem Selmi). - Reduz o uso de memória de
UNLOCK SNAPSHOTao não carregar metadados das partes de dados que não são usados no processo de desbloqueio, evitando falta de memória em snapshots com um número muito grande de partes. #111849 (Julia Kartseva). - Restaura a pré-alocação de memória para caminhos dinâmicos de uma coluna
JSONdurante flushes assíncronos deINSERT, evitando realocações repetidas à medida que linhas em lote são adicionadas. #112222 (Groene AI). - Reativa a otimização de chaves consecutivas para agregação
TTL ... GROUP BYdurante merges. Ela havia sido desativada acidentalmente nesse caminho, portanto os resultados continuavam corretos, mas os merges realizavam mais trabalho do que o necessário. #112314 (Groene AI). - Acelera a leitura de colunas
Nestedde tipos codificados em binário, comoNativeeRowBinary, quandoinput_format_binary_decode_types_in_binary_formatestá habilitada, e passa a reportar nomes de tiposTupleaninhados malformados como erro de sintaxe, em vez de gastar tempo exponencial para analisá-los. #112560 (Alexey Milovidov). - Melhora o desempenho da compactação e da mesclagem de colunas
DynamiceObjectcom muitas variantes dinâmicas ou caminhos JSON. #110583 (Christoph Viebig). - Acelera
minemaxem tipos de 128 e 256 bits (Int128,UInt128,Int256,UInt256,Decimal128,Decimal256). Até 1,8x mais rápido para inteiros de grande largura e até 3,4x mais rápido para decimais de grande largura. #111965 (Manuel). - Habilita por padrão (e promove a beta) dois recursos em disco: 1)
packed_skip_index_max_bytes = '1M': subfluxos de índices de salto de até 1 MiB agora são gravados em um único arquivoskp_idx.packedpor parte, reduzindo a quantidade de objetos e as solicitações de gravação no armazenamento de objetos. Compatibilidade: apenas partes recém-gravadas são afetadas e permanecem totalmente legíveis em versões mais antigas; versões anteriores à 26.6 simplesmente não usam os índices compactados para poda (eles são tratados como não materializados). Definapacked_skip_index_max_bytes = 0para manter o layout separado por arquivo. 2)compute_exact_num_defaults_for_sparse_columnseoptimize_trivial_count_with_sparsity_filter: contadores exatos denum_defaultspor coluna são persistidos e usados para responder aSELECT count() FROM t WHERE <pred>sem varrer os dados quando o predicado separa as linhas entre valores padrão e valores diferentes do padrão. Compatibilidade: a flagexact_num_defaultsemserialization.jsoné ignorada por versões mais antigas, portanto as partes permanecem totalmente legíveis após um downgrade; a reescrita decountaplica-se apenas a partes com contadores exatos, portanto os resultados permanecem corretos em tabelas com partes mistas. #111816 (Raúl Marín). - Adiciona cache opcional para tokens ausentes em índices de texto. #112742 (Rory Shanks).
- Corrige a realocação quadrática ao replicar um
Arraycujos elementos contêm valoresJSONem dados compartilhados, por exemplo, umArray(JSON)constante passado a uma função agregada. Essas consultas copiavam uma quantidade de bytes que crescia quadraticamente com o número de linhas. #112897 (Groene AI). - Usa o índice de chave primária para
pointInPolygonquando o argumento de ponto é uma coluna-chave inteira do tipoPoint(ou outroTuplede dois elementos numéricos), por exemplo,pointInPolygon(coord, [...])para uma tabela ordenada porcoord. Antes, apenas a formapointInPolygon((x, y), [...]), com duas colunas-chave escalares, era analisada. Fecha #54805. #112956 (Alexey Milovidov). - Ignora totalmente a etapa de leitura de dados em mesclagens
TTLDroppara reduzir o uso de memória, especialmente dos buffers de leitura e pré-busca. Fecha #105639. #105859 (Pavel Kruglov). - Reduz as alocações de memória ao ler metadados de backup, movendo entradas de arquivos para mapas em memória em vez de copiá-las. #111718 (Julia Kartseva).
- Use o índice de texto quando a expressão contiver uma comparação com string vazia, como
arrayFilter(s -> s != '', ...), mesmo quandooptimize_empty_string_comparisons = 1a reescrever comonotEmpty. Fecha #111788. #112115 (Jimmy Aguilar Mena). - Restaura a poda do cache de condições de consulta após um
lightweight DELETE: consultas seletivas repetidas em uma tabela que já tenha sido afetada por umlightweight DELETEdeixam de recorrer à leitura de todas as marcas. #112947 (Nikita Fomichev). - Funções de ordem superior deixam de copiar fisicamente colunas capturadas para cada elemento do array quando
enable_lazy_columns_replicationestá habilitado, reduzindo o uso de memória e o tempo de cópia de lambdas que capturam colunas grandes. #111581 (Diego Gomes Tomé). - Corrige uma regressão de desempenho de cerca de 1,5x introduzida na versão 26.5 em
GROUP BYcom chavesDynamice subcolunas de caminhosJSON. #112316 (Utkal Singh). text_index_posting_list_apply_modeagora usalazypor padrão; assim, consultas de índice de texto decodificam listas de postings sob demanda, na granularidade de blocos compactados e com um cursor, em vez de materializá-las antecipadamente em bitmaps para índices de texto composting_list_codecdefinido. #113521 (Anton Popov).- Acelera consultas PromQL em tabelas
TimeSeries:timeSeriesIdToGroupagora reutiliza o grupo da linha anterior quando linhas consecutivas têm o mesmo ID de série, evitando a serialização do ID e a busca de hash por linha. #113580 (Nikita Mikhaylov). - Os operadores de agregação PromQL
topk,bottomkelimitkagora usam um plano de execução paralelo por streaming, com memória limitada, em vez de coletar todas as séries em uma única linha. Consultas em métricas de alta cardinalidade que antes falhavam comMEMORY_LIMIT_EXCEEDEDagora são executadas com uso de memória limitado. #113656 (Nikita Mikhaylov). #114409 (Alexey Milovidov). - Acelera a divisão de inteiros de 256 bits (
Int256,UInt256eDecimal256), afetandointDiv,modulo, a aritmética deDecimal256e a conversão desses tipos em texto. #112477 (Konstantin Bogdanov). - Melhora o desempenho de leitura do
MergeTreepara subcolunasJSONreutilizando metadados de subcolunas resolvidos durante as conversões necessárias. #113008 (Rory Shanks). - Acelera a criação de índices de texto e índices de salto baseados em filtro Bloom com o tokenizador
sparseGrams. #110541 (UnamedRus). - A criação de snapshots agora usa um thread pool dedicado, evitando que um
BACKUPpesado e concorrente o deixe sem recursos. #113509 (Han Fei). - Avalie apenas uma vez, em vez de duas, subexpressões PromQL compartilhadas por várias etapas do plano (o operando de
topk/bottomk/limitk, o lado esquerdo deor): o SQL gerado a partir do PromQL agora materializa subconsultas compartilhadas. Isso elimina uma varredura duplicada da tabela de amostras;topksobreratefica cerca de 2x mais rápido a frio, e as consultas de regras do kubernetes-mixin melhoram de 10 a 29%. #113772 (Nikita Mikhaylov). - Agora é possível ativar a redução antecipada por curto-circuito para os operadores integrados
andeordurante a análise com a configuraçãoenable_function_early_short_circuit. Isso pode evitar a execução de subconsultas escalarescount()de linha única inativas, preservando a inferência de tipos e a validação semântica normais. Resolve #83017. #83505 (fhw12345). - Combina o custo de E/S com a seletividade na ordenação das condições
PREWHERE. Isso corrige uma regressão de desempenho na execução dePREWHEREem alguns casos, introduzida após #101275. Parte de #110462. #110695 (Pavel Kruglov). - Melhorado o desempenho de
levenshteinDistance(eeditDistance) para strings de comprimento médio em ARM, evitando alocações de heap por linha no caminho de código Myers em blocos. #108185 (Groene AI). - Adicionada a configuração
merge_use_batch_sorting_queuedoMergeTree, que permite usar opcionalmente a fila de ordenação em lote em mesclagens comuns doMergeTree, reduzindo o uso de CPU e o tempo decorrido em cargas de trabalho de mesclagem nas quais a mesclagem ordenada representa um custo significativo. #108468 (Rory Shanks). - Adicionada a configuração
merge_tree_min_bytes_per_read_streampara reduzir o excesso de fluxos de leitura e a sobrecarga do pipeline em varreduras locais, não ordenadas e de colunas estreitas doMergeTreeem servidores com muitos núcleos. #109035 (Jiebin Sun). - Acelera a função
toStartOfInterval(aliasestime_bucket,date_bin) em até 5x para intervalosSECOND,MINUTEeHOUR. #109729 (Manuel). - O protocolo nativo agora envia colunas
Stringcomo um fluxo separado de offsets cumulativos de bytes (o mesmo layout usado porArraypara seus offsets), seguido pelos dados concatenados, em vez de um prefixo de comprimento varint por valor, quando ambos os pares usam a revisão de protocolo 54489 ou mais recente. Assim, um cliente pode ler colunasStringcom pré-alocação exata de buffer e uma única cópia em massa, cerca de 4 vezes mais rápido do que no layout por valor. Clientes e servidores antigos não são afetados: o layout é negociado pela revisão do protocolo. O mesmo layout está disponível nos formatosNativeeBufferspor meio das novas configuraçõesoutput_format_native_write_string_with_size_stream/input_format_native_read_string_with_size_stream(desativadas por padrão, para manter os formatos portáveis). #110320 (vahid-sohrabloo). - Evita a serialização antecipada em JSON de entradas de manifesto Iceberg quando iceberg_metadata_log_level estiver abaixo do limite do local de chamada. #110437 (Andy Bradshaw).
- Melhora o desempenho da junção merge com ordenação completa em até 1,5 a 3x em cenários esparsos. #111200 (Vladimir Cherkasov).
- Melhora a eficiência das estatísticas minmax e básicas para colunas de ponto flutuante. #111221 (Christoph Viebig).
- Habilita
join_runtime_filter_from_fixed_hash_tablequando os tipos das chaves de junção de sondagem e compilação diferem (por exemplo, uma chave de sondagem Nullable e uma chave de compilação não Nullable). #111244 (Hechem Selmi). - Retorna consultas
COUNT()diretamente dos metadados de cardinalidade do índice de texto. #111494 (Elmi Ahmadov). - Acelera o cálculo de hash linha a linha dos valores de colunas JSON/
Objectarmazenados em dados compartilhados (usado, por exemplo, poruniq/uniqExactem uma coluna JSON e por chavesGROUP BY/DISTINCTcom hash), evitando a reconstrução deColumnDynamicpara cada valor. Os valores de hash permanecem inalterados. #111501 (Valery Petrov). - As funções
mapContainsKeyLike,mapContainsValueLike,mapExtractKeyLikeemapExtractValueLikecom um padrão não constante usam menos memória e tempo quando enable_lazy_columns_replication está habilitado. O padrão deixa de ser copiado antecipadamente para cada entrada do map no momento da captura; a cópia é adiada para a execução da lambda interna e liberada mais cedo, de modo que há uma cópia expandida a menos do padrão no pico de uso. #111749 (Diego Gomes Tomé). - Acelera a ordenação e outras operações baseadas em comparação em colunas
JSONcujos caminhos são armazenados em dados compartilhados. Antes, cada comparação de valores materializava uma colunaDynamictemporária e executava uma desserialização binária completa para ambos os lados, tornando oORDER BYnessas colunas patologicamente lento. #111894 (Groene AI). clickhouse-clientnão faz mais ping no servidor antes de cada consulta, eliminando uma viagem de ida e volta pela rede por consulta. Também deixa de restabelecer a conexão — iniciando silenciosamente uma nova sessão e, com isso, perdendo tabelas temporárias, o banco de dados atual e as configurações de sessão — apenas porque o servidor demorou demais para responder a um ping. #111990 (Alexey Milovidov).- Usa a otimização de condições transitivas de forma mais criteriosa: o filtro adicional criado pela transitividade agora é usado apenas na análise de índice, quando não é possível aplicar o filtro completo. Consulte a configuração
optimize_and_compare_chain. #112076 (Yarik Briukhovetskyi). - Adiciona duas configurações,
shrink_over_allocated_columns_min_waste_ratioeshrink_over_allocated_columns_min_waste_bytes, que fazem com que INSERTs reduzam colunas superalocadas (cuja memória reservada excede a memória usada devido ao crescimento em potências de dois das colunas de comprimento variável) para ajustá-las antes da materialização e da gravação de partes, reduzindo o pico de uso de memória. Desabilitado por padrão. #112161 (Pavel Kruglov). - A replicação lazy de colunas para
ARRAY JOINnão é mais perdida quando um plano de consulta é serializado. Comserialize_query_plan = 1, o nó que executava um fragmento remoto do plano ignoravaenable_lazy_columns_replicatione sempre materializava cada cópia replicada, embora essa configuração seja ativada por padrão. #112330 (Groene AI). - A formatação de valores
Decimalcomo texto está muito mais rápida — até 190 vezes mais rápida para umDecimal256com escala alta e cerca de 1,6 vez mais rápida para umDecimal64. Em processadores com AVX-512 IFMA, a conversão de inteiros de 64 bits em texto é cerca de 1,4 vez mais rápida. Também foi corrigido o arredondamento detoDecimalString, que perdia um transporte da parte fracionária:toDecimalString(toDecimal64('9.995', 3), 2)retornava9.00e agora retorna10.00. #112457 (Konstantin Bogdanov). - Uma condição de igualdade em
WHEREagora é incorporada à condição deJOINquando seus operandos têm tipos diferentes, mas um supertipo comum, comoInt32eNullable(Int32). Isso permite converter um CROSS JOIN em um INNER JOIN. #112630 (Hechem Selmi). - Consultas em tabelas Iceberg com muitos arquivos de exclusão agora são iniciadas mais rapidamente. O ClickHouse lê e decodifica os arquivos de manifesto de exclusão de forma concorrente, em vez de um por vez, permitindo sobrepor as leituras de armazenamento. A nova configuração
iceberg_delete_manifest_decode_concurrency(padrão4) controla quantos arquivos são decodificados simultaneamente. #112679 (Asya Shneerson). - O logging assíncrono agora usa uma fila limitada e sem bloqueios: as threads que gravam mensagens de log nunca ficam bloqueadas em um mutex nem ativam as threads de logging. #112803 (Alexey Milovidov).
randomHadamardTransformem um vetor constante agora é avaliada uma única vez, em vez de uma vez por linha. Isso acelera consultas de busca vetorial que rotacionam o vetor de consulta comrandomHadamardTransformantes de compará-lo a uma colunaQBit. #112921 (Alexey Milovidov).- Restaurado o compartilhamento de conjuntos entre as tarefas de partes de uma mutação que filtra por
IN (subquery)em uma coluna de chave primária.enable_sharing_sets_for_mutationsé ativada por padrão, mas o conjunto criado para a análise da chave primária deixou de participar do cache compartilhado, fazendo com que uma tabela com N partes materializasse o mesmo conjunto N vezes. #112941 (Groene AI). - Corrigida a complexidade cúbica do planejamento de consultas para um JOIN com uma tabela
Mergesobre muitas tabelas com estruturas diferentes. Antes, essas consultas podiam passar minutos no planejamento sem respeitarmax_execution_timenemKILL QUERY. #113140 (Alexey Milovidov). - O cache de região do bucket do cliente
S3agora também funciona para catálogos do lago de dados; antes, cada solicitação a esses catálogos resolvia a região novamente. #113330 (Konstantin Vedernikov). - Corrigida uma regressão de desempenho em que uma agregação sem chaves
GROUP BYserializava toda a subárvore de entrada do plano, incluindo todo o conteúdo de literais reduzidos a constantes, a cada execução para calcular uma chave de cache de tamanho da tabela hash que nunca poderia usar. Uma consulta comoSELECT quantileMerge(arrayJoin(arrayMap(x -> state, range(5000000))))gastava cerca de 63 ms por execução na otimização do plano de consulta e agora gasta 0,15 ms. #113333 (Groene AI). - Adiciona a serialização opcional de UInt128/UInt256/Int128/Int256 em Parquet como DECIMAL para permitir a poda de grupos de linhas e páginas. #113347 (Ivan Babrou).
- Acelera o planejamento de consultas quando são usadas estatísticas de coluna
uniq_v2. O número estimado de valores distintos agora é armazenado em cache, em vez de ser recalculado a cada solicitação, como ocorria várias vezes por consulta durante o planejamento. (issue #113038). #113357 (Groene AI). - Não faz pré-busca de substreams desnecessários ao ler um caminho JSON completo de dados compartilhados avançados. #113380 (Pavel Kruglov).
- O pushdown de filtros agora funciona para subcolunas
Tupleem arquivos Parquet e ORC. Um predicado comoWHERE tup.1 = 555555emfile,s3ouurlagora elimina grupos de linhas e strides de índice de linhas usando as estatísticas do próprio elemento da tupla, em vez de ler o arquivo inteiro. #113383 (Groene AI). - Substitui o map hash por bucket dentro das funções agregadas
timeSeries*ToGridpor um array plano e ordenado de amostras: a ingestão de amostras passa a ser uma adição O(1) para entradas ordenadas (o caso mais comum), e elimina a cópia e ordenação por bucket na finalização. #113681 (Nikita Mikhaylov). - Melhora o desempenho de consultas PromQL no mecanismo TimeSeries: o SQL interno do seletor agora lê diretamente as colunas da chave primária da tabela de amostras (sem conversões sem efeito) e verifica o intervalo de timestamp antes do conjunto de IDs de séries, tornando consultas frias com uso intensivo de seletores 30–44% mais rápidas. #113768 (Nikita Mikhaylov).
- Usa maps de ID tipados no collector de tags de séries temporais. #113839 (Vitaly Baranov).
- Ignora a varredura redundante de ordenação ao gravar partes MergeTree cujas chaves de ordenação são todas constantes. #113899 (Perfloop Agent).
- Seletores PromQL que correspondem a todas as séries de uma métrica agora filtram a tabela de amostras de uma tabela
TimeSeriesusando um intervalo contínuo da chave primária emiddurante a análise de índices, em vez de uma grande condiçãoid IN <set>, quando o layout de ID é uma tupla de dois componentes com o gerador de ID canônico. Elimina o custo dominante de thread única da análise de índices em consultas PromQL com uso intensivo de seletores: até −45% de latência a frio em consultas de dashboards e regras e −11% de média geométrica a frio em toda a suíte, em uma tabela com 62 bilhões de amostras. #114131 (Nikita Mikhaylov). - Acelera transformações vetorizadas de tags TimeSeries substituindo o remapeamento baseado em hash pela indexação direta quando os IDs de grupos de tags ocupam um intervalo compacto. #114244 (Minh Vu).
- Os endpoints da API HTTP do Prometheus
/api/v1/querye/api/v1/query_rangeagora avaliam uma subconsulta PromQL compartilhada por várias etapas do plano apenas uma vez, como as funções de tabelaprometheusQueryeprometheusQueryRangejá faziam. Anteriormente, uma solicitação feita comenable_analyzer = 0, ou por um usuário cujo perfil define essa configuração, reexaminava a subconsulta compartilhada uma vez para cada etapa que a referenciava. #114261 (Groene AI). - Limita o custo de estimar a seletividade de
col IN (...)com base em estatísticas de coluna, que poderia acrescentar centenas de milissegundos ao planejamento de uma única consulta. O estimador não executa mais a subconsulta emcol IN (subquery)para preencher um conjunto do qual precisa apenas de um valor de seletividade — em vez disso, um conjunto não construído é ignorado. Para conjuntos maiores que a nova configuraçãostatistics_max_set_size_for_exact_selectivity_estimation(padrão: 10000), a seletividade agora é derivada do tamanho do conjunto e do intervalo que o delimita. #114389 (Nikita Taranov). - Analisar uma requisição HTTP que contém muitos parâmetros de consulta ou cabeçalhos com o mesmo nome (por exemplo, milhares de parâmetros
role=repetidos) não exige mais tempo quadrático. #114410 (James). - Corrige uma regressão na 26.7: em uma tabela
MergeTreeordenada portoUnixTimestamp(ou outra conversão para inteiro) de uma colunaDateTime64, um filtro de intervalo simples nessa coluna deixava de usar a chave primária e lia todos os grânulos das partes correspondentes. Além disso, um filtro comotoInt64(ts) >= cem uma tabela ordenada pela colunaDateTime64bruta agora usa a chave primária. #114413 (Alexey Milovidov). - A verificação custosa de consistência em
ColumnArrayagora é realizada apenas em compilações de depuração. #114469 (Anton Popov). - Não executa ordenação por mesclagem em uma coleta distribuída cuja descrição de ordenação seja composta apenas por constantes. #114626 (Groene AI).
- Acelera a criação de conjuntos para
IN (subquery)em tabelasMergeTreeparticionadas ao manter as linhas de cada partição em um único fluxo e eliminar duplicatas de cada fluxo de forma independente, de modo que a única transformação de preenchimento de conjunto — que antes calculava o hash de cada linha serialmente — processe apenas linhas únicas. Isso se aplica quando a expressão de partição é uma função determinística das colunas de saída da subconsulta. A otimização não é aplicada quando a maior partição contém mais que o dobro das linhas da partição média; a nova configuraçãoforce_creating_set_partitions_independently(desabilitada por padrão) ignora essa verificação. Controlado pela nova configuraçãoallow_creating_set_partitions_independently(habilitada por padrão). #114645 (Nihal Z. Miaji). - Paraleliza a conversão de nível único para dois níveis dos estados de agregação por thread antes da mesclagem. Isso corrige uma regressão de 2 a 3x em consultas
GROUP BYcurtas com estados de agregação pesados (por exemplo,COUNT(DISTINCT ...), ClickBench Q10/Q11) em máquinas com muitos núcleos, introduzida nas compilações de desenvolvimento da 26.7 quando a contabilização de memória da agregação se tornou precisa. #114691 (Alexey Milovidov). - Acelera as funções de agregação
timeSeries*ToGrid: os cálculos de bucket por amostra agora evitam divisões Int128, e amostras consecutivas no mesmo bucket ignoram a busca no mapa de hash. #114889 (Nikita Mikhaylov). - Adicionar itens a uma fila de log do sistema não cria mais uma cópia profunda da fila inteira quando ela cresce. #115030 (Groene AI).
- Processa amostras das funções de agregação
timeSeries*ToGridem grupos de amostras consecutivas que caem em um mesmo bucket da grade, acelerando em 1,2 a 2x a etapa de ingestão de amostras detimeSeriesRateToGride funções relacionadas em dados de séries temporais ordenados. #115041 (Nikita Mikhaylov). - Use máscaras compactas de presença para operadores de conjunto do PromQL. #115224 (Minh Vu).
- Avaliação mais rápida de consultas instantâneas do PromQL: as funções de agregação
timeSeries*ToGridusam o caminho vetorizado de classificação de amostras para grades de ponto único, etimeSeriesIdToGrouppreenche diretamente sua coluna de resultado. #115267 (Nikita Mikhaylov). - Um
JOINcuja seçãoONcontém várias igualdades unidas porORnão materializa mais as colunas-chave do lado direito que a consulta não seleciona. #115465 (Nikita Taranov). - Nomear um tipo
DateTimeouDateTime64não cria mais uma tabela de consulta de fuso horário UTC que não é usada, tornando mais rápida a construção desses tipos — e, consequentemente, a inicialização declickhouse localeclickhouse client. #115488 (Konstantin Bogdanov). - Anexar tabelas de sistema não copia mais duas vezes os metadados de cada tabela, incluindo sua descrição completa de coluna, apenas para definir o comentário da tabela. #115490 (Konstantin Bogdanov).
- O hostname do cliente agora é resolvido quando informado pela primeira vez, em vez de em cada invocação de
clickhouse clienteclickhouse local. #115491 (Konstantin Bogdanov). - Corrigido o tempo quadrático quando as funções
h3kRing,h3ToChildren,h3PolygonToCellseh3PolygonToCellsWithContainmentgeram resultados para muitas linhas. Uma consulta em 196 000 linhas gastava 838 segundos copiando memória em uma execução de estresse de CI; agora leva cerca de 5 segundos. #115773 (Groene AI). - Acelera as verificações de séries duplicadas para vetores de condição do PromQL compostos apenas por zeros. #115822 (Minh Vu).
- Acelera
GROUP BYsem funções de agregação em chavesString,FixedStringeLowCardinality: a consulta não reescreve mais um placeholder não utilizado na tabela hash para cada linha, apenas para as linhas que adicionam uma nova chave. #115834 (Nikita Taranov). - Acelera
toUTCTimestamp/to_utc_timestampefromUTCTimestamp/from_utc_timestamppara argumentosDateTime64, restaurando o throughput que tinham antes da correção de overflow em #109738. Os resultados permanecem inalterados. Fecha #115802. #115838 (Groene AI). - Reduz o uso de memória e o tempo de otimização do plano de consulta para agregações por chave com grandes literais avaliados como constantes. A chave de cache das estatísticas da tabela hash de agregação agora recebe hash à medida que é serializada, em vez de ser primeiro acumulada na memória; assim, um plano que contém um literal grande não mantém mais uma cópia dele durante a otimização. Para um literal de 80 MB, o pico de memória cai cerca de 250 MB, e o tempo de otimização, cerca de 2,5x. A chave calculada permanece inalterada. #115847 (Groene AI).
Melhoria
- As requisições HTTP de saída no formato OpenAI agora são identificadas com o nome SQL da função de IA que as chamou, permitindo a identificação do endpoint upstream. #110449 (George Larionov).
- Reduzida a latência de cancelamento para formas positivas de
LIMIT BY:KILL QUERYe Ctrl+C agora interrompem em um único bloco, em vez de aguardar a conclusão de toda a etapa. #106070 (Roman Vasin). - Quando um
INSERTfalha porque a tabela de destinoTOde uma visão materializada rejeita a gravação durante a criação do pipeline de inserção, a mensagem de erro agora informa a visão materializada e sua tabela de destino, em vez de relatar apenas o erro de armazenamento. #107234 (Groene AI). - Com
input_format_protobuf_oneof_presence, o ClickHouse não exige mais que o enum de presençaoneofliste exatamente as tags declaradas no esquema Protobuf: agora são permitidas tags extras sem colunas correspondentes na tabela de destino, facilitando alterações de esquema. #109174 (Ilya Golshtein). - As funções de distância transpostas em
QBit(L2DistanceTransposed,cosineDistanceTransposed,dotProductTransposede suas variantes quantizadas) agora aceitam um vetor de referência maior que o número de dimensões pesquisadas, ignorando os elementos extras finais. Isso permite reutilizar um vetor de consulta de tamanho completo em uma busca Matryoshka de dimensão reduzida sem precisar fatiá-lo antes. #109388 (Alexey Milovidov). - A subestatística
NullCountdas estatísticasbasicfoi renomeada paraDefaultCounte agora conta linhas iguais ao valor padrão do tipo da coluna, não apenas linhasNULLde colunasNullable. #109977 (Han Fei). - Adicionado suporte a gravações simultâneas em tabelas
Icebergem disco local:LocalObjectStorageagora implementa gravações condicionais, de modo que a operação de comparação e troca que publica um novo snapshot por meio deversion-hint.textfunciona nesse ambiente, impedindo que gravadores simultâneos percam as atualizações uns dos outros. #112556 (Alexey Milovidov). ALTER TABLE ... MOVE/REPLACE PARTITIONentre duas tabelasMergeTreecom granularidade incompatível agora geraBAD_ARGUMENTSem vez deLOGICAL_ERROR. #110535 (Groene AI).- O formato
Valuesnão registra mais falsos erros de análise emsystem.errorsesystem.error_logquando a análise em streaming recorre com sucesso à análise de expressões SQL. #111141 (Pablo Marcos). - Adicionado o
ProfileEventDuplicationDataHashComputations, que conta os cálculos de hash de dados por coluna realizados durante a desduplicação de blocosINSERTem tabelas*MergeTree. #111173 (Valery Petrov). - Destacados os comandos
./clickhouseesudo ./clickhouse installna saída do script de instalação universal. #111514 (Alexey Milovidov). - Junções cartesianas e junções com predicado constante planejadas pelo analyzer não falham mais devido a uma configuração incompatível de
join_algorithmquando o analyzer é usado. #108289 (János Benjamin Antal). bitmaskToArrayebitmaskToListagora oferecem suporte a argumentosInt128,UInt128,Int256eUInt256.bitPositionsToArraytambém ficou mais rápida para argumentos de inteiros grandes, pois agora escala com o número de bits definidos, em vez da posição do bit definido mais alto. #110743 (Manuel).- Corrigida uma falha em expressões compiladas por JIT em compilações nativas do macOS/aarch64 a partir do código-fonte, usando o triple de host LLVM correto para o SO do host. #111591 (Raúl Marín).
- Corrigidos
JSON_EXISTS,JSON_VALUEeJSON_QUERYem entradasDynamicquando os argumentos de caminho de tupla contêm elementosLowCardinality, evitando exceçõesLOGICAL_ERROR. Fecha #110345. #109944 (Groene AI). - Arquivos
ORCcorrompidos cuja árvore de tipos declara mais colunas do que o rodapé da faixa agora falham na inferência de esquema comCANNOT_EXTRACT_TABLE_STRUCTURE, em vez de abortarem em compilações de depuração ou com sanitizer. #110967 (Groene AI). - Tabelas de log do sistema rotacionadas, como
system.metric_log, agora podem ser marcadas comotable_readonlymesmo quando seus metadados excedemmax_query_size, para que a rotação deixe de registrarQUERY_IS_TOO_LARGEe prossiga normalmente. #111703 (Alexey Milovidov). - No Play, foi adicionado um botão para fechar todas as abas, exceto a atual. #111835 (Mikhail Artemenko). Corrigido o foco do teclado após ativá-lo com Enter ou Espaço quando o botão se oculta. #111899 (Alexey Milovidov).
- No Play, manter
Ctrl(Cmdno Mac) pressionado enquanto passa o cursor sobre uma célula de tabela cujo valor é uma URL de imagem agora exibe uma prévia da imagem. #109347 (Alexey Milovidov). - No Linux, o ClickHouse agora adiciona uma entrada em
system.warningsna inicialização quandorseqestá indisponível, pois os contadores de perfil por CPU passam a usar o caminho alternativo mais lentosched_getcpu. #109283 (Azat Khuzhin). COUNT(*)sobre a função de tabelafilenão lança mais uma exceção quando a inferência de esquema envolve colunas emNullable. Fecha #102044. #102509 (Rory Shanks).- As funções
L1Normalize,L2Normalize,LinfNormalizeeLpNormalize(e seus aliases) agora funcionam com argumentosArray, não apenas com argumentosTuple, de forma consistente comL2Norme as funções de distância. #110052 (Alexey Milovidov). - Removido o leitor legado de
ORCbaseado em Apache Arrow. O formato de entradaORCagora sempre usa o decodificador nativo do ClickHouse, que já era o padrão. A configuraçãoinput_format_orc_use_fast_decoderestá obsoleta e não tem efeito. #110074 (Alexey Milovidov). - Tornou configuráveis via XML argumentos frequentemente usados do
clickhouse-client(<hints/>,<highlight/>,<echo/>,<echo_query_id/>,<echo_formatted/>,<print-profile-events/>) e preservou os valores da configuração do cliente quando as flags de CLI padrão correspondentes são omitidas, para configurações comohistory_max_entries,suggestion_limit,progress,progress-table,enable_progress_table_toggle,print-memory-to-stderr,chime-threshold-secondseprofile-events-delay-ms. #110607 (Larry Snizek). - Adicionou a configuração
analyzer_compatibility_apply_final_to_all_joined_tablespara restaurar o comportamento antigo, em queFINALna tabela mais à esquerda de umJOINtambém se aplica às demais tabelas associadas. A configuração é registrada no histórico de alterações das configurações, portanto,compatibilitycom versões anteriores à 26.6 restaura automaticamente a semântica antiga. #111589 (Nikita Fomichev). - No Play, o botão
+(nova aba) agora é renderizado na altura correta no Firefox. #109524 (Alexey Milovidov). - Uma subconsulta
EXISTScorrelacionada e aninhada que referencia uma coluna de um escopo além da consulta externa imediata agora falha comNOT_IMPLEMENTED, em vez da exceção internaNOT_FOUND_COLUMN_IN_BLOCK. #110310 (Groene AI). - A formatação de uma consulta
EXECUTE ASapós reescritas de AST não lança mais uma exceção no cliente, por exemplo, no AST fuzzer. #111725 (Groene AI). - Melhorou o suporte a consultas
DESCRIBEpara views parametrizadas e passou a oferecer suporte a views parametrizadas em expressões escalares no novo analisador. Fecha #66307. Fecha #69598. #68978 (Dmitry Novik). - Expressões malformadas de
CREATE INDEXeCREATE HYPOTHETICAL INDEXque não sobrevivem a um ciclo de formatação, análise e formatação agora geram uma exceção, em vez de causar o erro lógicoInconsistent AST formattingem compilações de depuração e com sanitizer. #109175 (Groene AI). - Web UI: corrigido o problema em que o campo de usuário/senha permanecia vermelho mesmo quando as credenciais estavam corretas e o servidor era acessível. As credenciais também são verificadas novamente após editar a conexão, para que um valor correto fique verde. #109414 (Alexey Milovidov).
- Adicionou as configurações
text_index_max_processed_tokens_before_flushetext_index_max_memory_usage_before_flushpara controlar quando os construtores de índice de texto gravam segmentos temporários. #111573 (Rory Shanks). - Adicionou a configuração
system_cache_extensionspara controlar quais extensões de arquivo são armazenadas no cache do sistema quandouse_split_cacheestá habilitada. #111575 (Kirill). - As mensagens de erro em compilações baseadas em musl agora exibem texto
strerrorlegível por humanos, em vez de um valor vazio ou numérico, comostrerror: 0. #111620 (Konstantin Bogdanov). - O tipo efetivo de armazenamento das coleções nomeadas agora está disponível como
named_collections_storage.typeemsystem.server_settingse por meio degetServerSetting('named_collections_storage_type'). #111806 (Pablo Marcos). - Flexibiliza uma verificação excessivamente rigorosa do tamanho da permutação em
ColumnReplicated::permutepara que siga o contrato geral deIColumn::permute, que permite uma permutação menor que a coluna quando um limite é definido. #109897 (Groene AI). - Melhora o planejamento de consultas de streaming ao unificar o plano interno de leitura de streaming, evitando a otimização duplicada de leituras diretas de índices de texto. #111821 (Mikhail Artemenko).
- UI Web: o espaçamento entre os botões
Run oneeRun allagora corresponde à margem esquerda anterior ao primeiro botão. #111988 (Alexey Milovidov). - O agendamento de reservas de memória (experimental) não remove mais uma alocação quando uma liberação de memória pendente liberaria o espaço necessário para aumentar uma reserva além do limite: a decisão de remoção agora aguarda a aplicação das reduções em andamento, evitando o encerramento desnecessário de consultas sob pressão de memória. #112299 (Sergei Trifonov).
- O Iceberg v2 exige
sequence_numberem arquivos de manifesto, mas outros motores, como o BigQuery, podem gravar arquivos de manifesto sem ele. Agora o ClickHouse pode ler essas tabelas. #112431 (Konstantin Vedernikov). - Exibe um aviso quando faltam estatísticas para a reordenação de junções baseada em custo. #107666 (Vladimir Cherkasov).
- Adicionadas colunas de compatibilidade com MySQL às visualizações
INFORMATION_SCHEMA:SCHEMATA.DEFAULT_COLLATION_NAMEeDEFAULT_ENCRYPTION;TABLES.ENGINEe colunas MySQL relacionadas; eCOLUMNS.COLUMN_KEY,PRIVILEGES,GENERATION_EXPRESSION,SRS_ID. Isso permite que clientes compatíveis com MySQL executem consultas de introspecção de catálogo sem encontrarUNKNOWN_IDENTIFIER. #109351 (Alexey Milovidov). - Uma referência não qualificada a uma chave de
INNER JOINigualada na condiçãoON(por exemplo,SELECT id FROM a INNER JOIN b ON a.id = b.id) não é mais reportada como identificador ambíguo, pois é garantido que ambos os lados têm o mesmo valor. #109366 (Alexey Milovidov). - Retorna o código HTTP
403 Forbidden(em vez de500 Internal Server Error) para exceçõesACCESS_DENIEDna interface HTTP. #111043 (Schum). - Grava o SST do índice UNIQUE KEY diretamente no armazenamento da parte, em vez de prepará-lo em um arquivo temporário local, eliminando a dependência de um volume temporário local e evitando uma cópia adicional. #111189 (johnjing).
UTMToGeoagora aceita como quarto argumento a letra da faixa de latitude MGRS retornada porgeoToUTM(além do sinalizador inteiro de hemisfério), permitindo que o resultado degeoToUTMseja usado diretamente emUTMToGeo. #111521 (Alexey Milovidov).- Corrige um
LOGICAL_ERROR(“O índice Min-Max de nível da parte foi construído a partir de um conjunto inesperado de colunas”) que poderia interromper uma mesclagem em segundo plano em compilações de depuração/sanitizer após a redução depart_minmax_index_columns(por exemplo, dewith_block_number_offsetparapartition_key_only). #111511 (Groene AI). - Corrige a subnotificação, em
ProfileEvents['JoinResultRowCount'], do tamanho do resultado de umJOINcom spill para disco. As linhas emitidas de buckets atrasados eram contabilizadas apenas emJoinDelayedJoinedTransformRowCounte não constavam no total. Os resultados da consulta sempre estiveram corretos; apenas o evento de perfil estava incorreto. #112673 (Groene AI). SYSTEM DISABLE FAILPOINTagora rejeita nomes de failpoint inexistentes, gerandoBAD_ARGUMENTS, comoSYSTEM ENABLE FAILPOINTjá fazia. Antes, um nome digitado incorretamente era reportado como bem-sucedido, enquanto o failpoint pretendido permanecia habilitado, sem indicação de que nada havia sido desabilitado. #112680 (Groene AI).- Adicionada uma nova coluna,
skipping_indices_types, à tabelasystem.tables. Ela contém os tipos distintos de índices de skipping de dados definidos para cada tabela. #106388 (Anton Popov). - Adicionada uma verificação para garantir que uma consulta distribuída sempre inclua uma versão conhecida do cliente, gerando um erro lógico em vez de encaminhar silenciosamente uma versão zero para shards remotos. Consultas iniciadas pelo servidor (flushes em segundo plano, consumidores de streaming, recarregamentos de dicionários e flushes de inserts assíncronos) agora informam a própria versão do servidor como versão do iniciador. #109408 (Alexey Milovidov).
- Reduzida a verbosidade dos diagnósticos de busca binária da chave primária por parte no
MergeTree, passando do logging de trace para o logging de teste. #110324 (Alexey Milovidov). - O caminho de exemplo do particionamento Hive para tabelas de armazenamento de objetos (por exemplo,
S3) agora é resolvido no primeiro uso da tabela, em vez de emCREATE/ATTACH, para que um endpoint inacessível não bloqueie mais a criação de tabelas nem a inicialização do servidor. #111842 (Nikolay Degterinsky). - Corrigido
ReadBufferFromPocoSocketBase::setReceiveTimeout, que interpretava seu argumento como segundos em vez de microssegundos, e corrigidas compilações configuradas com-DENABLE_LIBFIU=OFF, que falhavam. Em compilações sem libfiu,SYSTEM ENABLE FAILPOINTe comandos relacionados agora geram uma exceção em vez de não fazer nada silenciosamente. #112767 (Alexey Milovidov). - Corrige o
clickhouse-local, que subnotificavarows_reade os demais contadores de progresso nasstatisticsda saídaJSON/XMLe na barra de progresso: um incremento de progresso que chegava enquanto o pacote de progresso era montado era descartado. #112958 (Alexey Milovidov). - Corrigido o erro reportado quando um
INSERTassíncrono em uma tabelaDistributedrequer um diretório de fila cujo nome excede o limite de 255 bytes do sistema de arquivos (possível comuse_compact_format_in_distributed_parts_names = 0). Era umLOGICAL_ERRORpara um shard cominternal_replicatione umCode: 1001. std::exceptionsem atribuição nos demais casos; agora, ambos reportamARGUMENT_OUT_OF_BOUND, indicando a tabela, o cluster e o limite. #113083 (Groene AI). - Rejeita limites de cota
execution_timefora do intervalo comBAD_ARGUMENTS, em vez de depender de comportamento indefinido ao escaloná-los para nanossegundos internos. #113178 (Alexey Milovidov). - Réplicas paralelas automáticas agora oferecem suporte a consultas
JOIN. #106073 (Nikita Taranov). - Adicionado suporte à autenticação por token de atualização para o catálogo
OneLake. #110413 (alesapin). - A configuração do
Keeperwrite_snapshot_versionagora pode ser recarregada sem reinicialização. #112150 (alesapin). - Paralelizado
SYSTEM DROP FILESYSTEM CACHE. #112532 (Kseniia Sumarokova). - O aninhamento não suportado de uma visão
SQL SECURITY DEFINERouSQL SECURITY NONEsobres3Cluster,urlClusteroufileClusteragora é rejeitado com um erro de consulta comum, em vez de gerar umLOGICAL_ERRORem builds de depuração e com sanitizer. #113371 (Groene AI). - Adicionada a configuração
analyzer_compatibility_multiple_joins_qualify_column_names(padrãofalse). Quando ativada e a cláusulaFROMde uma consulta contém dois ou maisJOINs, os nomes das colunas de resultado produzidos pelo analyzer imitam a reescrita de múltiplas junções do analyzer antigo: as colunas expandidas de*recebem o nome<alias-or-table>.<column>, e uma referência de coluna sem alias na listaSELECTmantém o nome exatamente como foi escrito. Isso faz com que consultas externas que referenciam esses nomes qualificados, comoSELECT ll.Date FROM (SELECT * FROM t AS ll JOIN t1 ON ... JOIN t2 ON ...), funcionem como funcionavam com o analyzer antigo. Também corrige a perda, pelo analyzer, dos nomes qualificados das colunas de resultado expandidas de*quandogroup_by_use_nullsé combinado comROLLUP,CUBEouGROUPING SETS, o que produzia nomes de colunas de resultado duplicados e quebrava referências externas a essas colunas. #110746 (Dmitry Novik). - Renomeada
allow_experimental_delta_kernel_rsparaallow_delta_kernel_rs. O nome antigo foi mantido como alias. #113476 (Kseniia Sumarokova). - Quando as funções de tabela
remote/remoteSecureou os motores de tabelaRemote/RemoteSecurerecebem uma coleção nomeada inexistente junto com uma substituiçãokey = value, o ClickHouse agora informa a ausência da coleção nomeada, em vez de reanalisar a chamada por posição e informar um erro não relacionado. #113510 (Groene AI). - A inicialização do shell com a conclusão de
clickhouse-bootstrapnão exibe mais variáveis de ambiente quando a conclusão é carregada pelo hook de conclusão do usuário. #113694 (Azat Khuzhin). - Adicionado o valor
sainte_lagueashared_merge_tree_merge_coordinator_distribution_algorithm, que agora é o padrão em vez dewater_filling. #113442 (Mikhail Artemenko). - Adicionada a configuração
filesystem_cache_wait_for_concurrent_download_timeout_millisecondspara limitar o tempo que uma leitura aguarda o download, no cache do sistema de arquivos, de um único bloco (cerca de 1 MiB) por outra consulta, e não de um segmento de arquivo inteiro. #113322 (Kseniia Sumarokova). - Adicionada a configuração do Keeper
min_time_between_fsyncs_ms(padrão5ms), que agrupa inclusões no changelog que chegam logo após o flush anterior, em vez de iniciar imediatamente outro flush. #113749 (Michael Kolupaev). - As tabelas Kafka com offsets armazenados no Keeper (
kafka_keeper_path) agora geramABORTEDem vez deLOGICAL_ERRORquando se tornam inativas após a perda de uma sessão do Keeper, por exemplo, durante uma leitura direta ou o streaming de uma visão materializada. #113913 (Alexey Milovidov). - Corrigida a formatação inconsistente da AST de
viewIfPermitted: a forma de função de tabela não formata mais incorretamente operadores comonotem seu ramoELSE, e a forma de expressãoviewIfPermitted(...)não recebe mais umELSEespúrio. #113652 (Alexey Milovidov). - Corrigido um erro espúrio
Failed to drop temporary table after refresh. Table ... is left behind and requires manual cleanup.registrado quando a atualização de uma view materializada atualizável é cancelada (por exemplo, pelo desligamento do servidor) enquantodatabase_atomic_wait_for_drop_and_detach_synchronouslyestá habilitado. A tabela temporária foi de fato removida, portanto não foi necessária nenhuma limpeza manual. #113957 (Groene AI). - O servidor agora gera
UNKNOWN_ELEMENT_IN_CONFIGpara opções desconhecidas na configuração do servidor, ajudando a detectar antecipadamente erros de digitação e opções configuradas incorretamente. A verificação pode ser desabilitada com<skip_check_for_incorrect_settings>. #100332 (Alexey Milovidov). - Na UI Web, o histórico do navegador e a URL não são mais atualizados a cada tecla pressionada; eles são registrados quando uma consulta é executada com sucesso ou quando se muda de aba. #113596 (Alexey Milovidov).
- O ClickHouse agora relata um estouro de pilha em vez de encerrar silenciosamente: os manipuladores de sinais fatais são executados em uma pilha de sinais alternativa, portanto
SIGSEGV,SIGABRT,SIGILL,SIGBUS,SIGSYS,SIGFPEeSIGTRAPproduzem um rastreamento de pilha mesmo quando a thread que sofreu a falha esgotou sua pilha. #113927 (Groene AI). ALTER TABLE ... MODIFY COLUMN <col> Tuple(...)em umTuplenomeado agora é uma operação somente de metadados quando adiciona apenas subcampos, com a mesma velocidade deADD COLUMNde nível superior. Controlado porSETallow_metadata_only_named_tuple_alter= 1. #107305 (Amos Bird).- Adicionada a configuração
input_format_json_max_object_sizepara limitar o tamanho de objetos JSON durante a análise. Resolve #106704. #107669 (Pavel Kruglov). - Evitado o registro de
sasl.kerberos.kinit.cmd configuration parameter is ignored.para configurações do mecanismoKafkaque não usam autenticação Kerberos com keytab. #108235 (Ivan Shelestov). - Adicionado system.s3(azure)_queue_metadata. #108522 (Kseniia Sumarokova).
- Falhas de conexão toleradas com bancos de dados MySQL/PostgreSQL remotos agora são registradas como avisos em vez de erros. #109472 (Shaohua Wang).
- Quando nem
portnemsecuresão especificados, oclickhouse-clienttenta simultaneamente a porta padrão 9000 e a porta segura 9440 e usa a que responder primeiro; assim,clickhouse-client --host play.clickhouse.com --user playse conecta via TLS sem--secure, embora a porta não segura desse servidor seja silenciosamente descartada em vez de recusada. Se a porta que respondeu acabar sendo inutilizável — por exemplo, uma porta segura com certificado não confiável — o cliente recorre à outra, pois o protocolo não foi solicitado explicitamente. #110130 (Alexey Milovidov). - Clicar no logotipo da nuvem no Playground agora abre o site do ClickHouse em uma nova aba, para que você não perca o progresso enquanto as consultas estiverem em execução. #110422 (William Hatcher).
- Adicionado o modificador STREAM BOUNDED, que lê apenas o primeiro snapshot de uma consulta em streaming e então é concluído, em vez de assinar atualizações. #110653 (Smita Kulkarni).
- Adicionadas informações sobre o estado interno das junções ao
EXPLAIN ANALYZE. #110892 (Kirill Kopnev). - Quando uma asserção de reentrância de
RWLockImpl::getLock()é acionada (RWLock is already locked in exclusive mode/Cannot acquire exclusive lock while RWLock is already locked), a mensagem de erro agora informa os outrosquery_ids que possuem o lock no momento e quantos locks oquery_idsolicitante já mantém, permitindo diagnosticar esses erros de ordenação de locks. #110971 (Groene AI). - O ClickHouse Keeper agora registra o evento “Client has not sent any data” no nível
Informationem vez deWarning, em conformidade com o TCP handler do servidor. Isso evita avisos espúrios de probes TCP de verificação de integridade (por exemplo, probes de livenesstcpSocketdo Kubernetes) que abrem e fecham imediatamente uma conexão com a porta de cliente do Keeper. #111217 (Zeynel). MaterializedPostgreSQLagora preserva valoresTOASTinalterados do PostgreSQL durante atualizações, em vez de substituí-los por valores padrão. #111552 (OrpheusAgent).- keeper: Aumentado o valor padrão de
write_snapshot_versionpara 8 e permitido seu recarregamento dinâmico. #111715 (Michael Kolupaev). - Adicionado o modificador STREAM UNORDERED: ignora a ordenação por ordem de commit de cada snapshot. #111794 (Smita Kulkarni).
- Adicionada uma nova configuração do MergeTree,
text_index_version, que controla a versão do formato em disco dos índices de texto:v0_initial,v1_with_codecouv2_with_positions. Durante uma atualização gradual ou antes de um downgrade, defina-a como uma versão mais antiga para que servidores mais novos continuem gravando partes de índices de texto em um formato que servidores mais antigos ainda possam ler; a configuração de compatibilidade a ajusta automaticamente. #111803 (Anton Popov). - As funções de texto de IA (
aiGenerate,aiClassify,aiExtract,aiTranslate) agora rejeitam respostas truncadas ou incompletas de provedores (por exemplo, quando o modelo atinge o limite demax_tokens) em vez de retornar silenciosamente uma saída parcial. O comportamento segue a configuraçãoai_function_throw_on_error. #111830 (George Larionov). - Aprimoradas as funções
L2DistanceTransposedQuantized,cosineDistanceTransposedQuantizededotProductTransposedQuantizedde precisão reduzida, reconstruindo códigosQBit(Int8)comp < 8usando centroides de prefixo de média condicional gaussiana. A precisão total (p = 8) permanece exata em nível de bit; as distâncias aproximadas de precisão reduzida podem mudar, e os ganhos de recall/latência dependem da carga de trabalho. #111867 (Sergey Kuznetsov). - Corrigido o problema de o cache de condição de consulta não ser preenchido para grânulos eliminados por qualquer conjunção, exceto a última, de uma cláusula
WHEREcom múltiplas condiçõesAND. #112083 (Shankar Iyer). - Adicionada uma nova configuração
input_format_json_max_string_column_growth_stepque limita o crescimento em potências de dois dos buffers internos de String ao criar uma coluna JSON, reduzindo o pico de memória ao inserir documentos JSON grandes. Desativada por padrão. #112159 (Pavel Kruglov). - Reduzido o pico de memória ao gravar colunas JSON com serialização de dados compartilhados em buckets (
map_with_bucketse avançada), dividindo os dados compartilhados em buckets, um de cada vez, durante a gravação, em vez de materializar todos os buckets simultaneamente. Isso é especialmente benéfico para colunas Array(JSON): para JSON escalar, os dados compartilhados são divididos por grânulo (limitado por index_granularity_bytes), portanto a economia é pequena; já um único grânulo Array(JSON) pode conter muitas linhas aninhadas e, consequentemente, uma grande quantidade de dados compartilhados, para os quais a divisão de um bucket por vez reduz significativamente o pico de memória. #112172 (Pavel Kruglov). - A documentação de uma configuração em
system.documentation— exibida pela página integrada/docse pelo comandohelp— agora inclui o histórico de alterações do valor padrão: a versão em que a configuração foi introduzida e cada alteração posterior de seu valor padrão, com o valor anterior, o novo valor e o motivo da alteração. #112177 (Alexey Milovidov). EXPLAIN ANALYZEagora funciona para consultas de streaming. #112445 (Kirill Kopnev).- Os modificadores de uma declaração de coluna —
COMMENT,CODEC,STATISTICS,TTL,COLLATE,PRIMARY KEYeSETTINGSpor coluna — agora podem ser escritos em qualquer ordem emCREATE TABLE, e cada um deles pode aparecer no máximo uma vez. Anteriormente, apenas uma ordem fixa era aceita e, por exemplo,x UInt64 CODEC(ZSTD) COMMENT 'text'era um erro de sintaxe. EmALTER TABLE ... ADD COLUMN/MODIFY COLUMN, os modificadores compatíveis —COMMENT,CODEC,STATISTICS,TTLeSETTINGSpor coluna — também podem ser escritos em qualquer ordem;SETTINGSpor coluna emADD COLUMNe umSTATISTICSdeclarado emADD COLUMN/MODIFY COLUMNagora são aplicados em vez de serem descartados silenciosamente, eCOLLATEePRIMARY KEYnesses comandosALTERagora lançam uma exceção em vez de serem ignorados silenciosamente. #112788 (Alexey Milovidov). - O método de leitura
pread_threadpoolprecisa da chamada de sistemapreadv2com a flagRWF_NOWAITpara ler dados que já estão no cache de páginas sem encaminhar a leitura a um pool de threads. Agora, durante a inicialização, é verificado se essa chamada de sistema pode ser usada e, caso não possa — se o kernel Linux for anterior à versão 5.11 ou se um perfilseccompde um runtime de contêiner rejeitar a chamada de sistema —, o valor padrão delocal_filesystem_read_methodé alterado parapread, e o motivo é informado no log do servidor. Anteriormente, cada leitura exigia o encaminhamento para um pool de threads nesses sistemas, e um perfilseccompque respondiaEPERMfazia as consultas falharem comCANNOT_READ_FROM_FILE_DESCRIPTOR. #112945 (Alexey Milovidov). - Relatados metadados Thrift do Parquet malformados como INCORRECT_DATA. #113311 (Groene AI).
- Corrigido o tratamento, pelo codec GCD, de valores assinados de largura fixa com números negativos. Anteriormente, ele calculava o divisor diretamente a partir de valores assinados, o que poderia não identificar o divisor comum e reduzir significativamente a eficiência de compressão para colunas de inteiros e decimais assinados. Agora, ele calcula o divisor a partir das magnitudes para tipos assinados, preservando o comportamento existente para tipos sem sinal e para a descompressão. #113798 (Kirill Shcherbatov).
- Adiciona as configurações
enable_alp_codec,enable_sz3_codec,enable_zxc_codeceenable_quantized_codecpara ativar individualmente cada codec de compressão experimental. #113824 (Raufs Dunamalijevs). - Permite
ALTER TABLE ... MODIFY COLUMNem uma coluna cujas subcolunas são usadas na chave primária ou de partição, desde que as subcolunas usadas na chave mantenham um tipo compatível em disco. Anteriormente, qualquer ALTER desse tipo era proibido. #113862 (Pavel Kruglov). - Adiciona o dashboard
Filesystem cacheasystem.dashboards. #113884 (Kseniia Sumarokova). - Coloca os logs de cache de cada recarga de buffer sob o controle de
filesystem_cache_verbose_logging. #113885 (Groene AI). - Quando o tipo declarado de uma coluna e seus dados divergem durante uma leitura de
MergeTree(origem de tipos mistos, por exemplo, após umALTER TABLE ... MODIFY COLUMNcuja mutação ainda não foi concluída), o servidor agora informa uma exceção clara que identifica a coluna e ambas as estruturas, em vez de realizar uma conversão não verificada: anteriormente, compilações de depuração e com sanitizer eram interrompidas com um simplesBad cast from type A to B, sem indicar a coluna, e compilações de lançamento acessavam silenciosamente memória incompatível. #114087 (Alexey Milovidov). - Uma função de janela com
PARTITION BYagora funciona commake_distributed_plan. Quando a estrutura do plano permite, a janela é executada em paralelo entre buckets que recebem, cada um, partições completas. #114111 (Vighnesh Pathrikar). - Interface web: o indicador de carregamento em forma de ampulheta no painel de bancos de dados voltou a ser animado. #114187 (Alexey Milovidov).
- Uma função hash de 64 bits agora é usada para métodos externos de agregação Nullable de largura fixa (evita colisões desastrosas em agregações de cardinalidade muito alta). #114210 (Nikita Taranov).
- As tabelas
DistributedeBufferque omitem sua lista de colunas agora sempre inferem a estrutura usando os direitos de acesso do usuário que as cria. #114211 (Pedro Ferreira). x IN (subquery)em uma colunaLowCardinalityagora retornaLowCardinality(UInt8)— o mesmo tipo quex IN (literal list). Anteriormente, as duas formas retornavam tipos diferentes, e planos distribuídos com esseINprecisavam de um caso especial na verificação de tipos do plano. #114229 (Alexander Gololobov).- Ativa
ie_joinpor padrão: o valor padrão dejoin_algorithmagora édirect,parallel_hash,hash,ie_join. UmJOINcuja seçãoONtem apenas condições de desigualdade (duas comparações<,<=,>,>=entre expressões das tabelas da junção) agora é executado com o algoritmo IEJoin baseado em ordenação, em vez de umCROSS JOINcom filtro, e há suporte para junçõesLEFT/RIGHT/FULL/SEMI/ANTIcom essas condições. Comoie_joiné o último da lista, ele é usado somente quando os outros algoritmos não se aplicam. #114327 (Vladimir Cherkasov). - Corrigidos os gráficos na interface web que exibiam, no balão ao passar o mouse, os dados de um ponto espelhado em resultados ordenados por
xem ordem decrescente. Agora é possível plotar colunasDate,Date32,DateTimeeDateTime64; anteriormente, apenas timestamps Unix inteiros funcionavam. As datas nos eixos e nos balões são renderizadas no formato ISO 8601, e as quantidades usam os sufixosK/M/G/…, como no Advanced dashboard. #114349 (Alexey Milovidov). - Adicionado suporte à análise de inteiros que excedem o intervalo de 64 bits no tipo de dados
JSON, emJSONExtracte emisValidJSON. Esses valores são lidos como tipos inteiros maiores, comoInt128/UInt256, em vez de fazer com que todo o documento seja rejeitado. #114379 (Pavel Kruglov). - As tabelas QueryRunner agora iniciam threads de trabalho sob demanda e as liberam quando ficam ociosas, em vez de mantê-las ocupadas durante todo o ciclo de vida da tabela. #114522 (Miсhael Stetsyuk).
- Adicionada observabilidade às pilhas de fibras usadas para comunicação assíncrona com réplicas remotas: eventos de perfil
FiberStackAllocs,FiberStackAllocBytes,FiberStackAllocNanoseconds,FiberStackFreeNanosecondse métricasFiberStacks,FiberStackBytes. #114541 (Alexey Milovidov). - PromQL: suporte aos modificadores de timestamp
@ start()e@ end(). #114558 (Minh Vu). - Propagado o contexto de rastreamento do OpenTelemetry para as fibras usadas no estabelecimento assíncrono de conexões e na execução de consultas remotas (solicitações hedged,
async_socket_for_remote,async_query_sending_for_remote). Os spans de consultas remotas em uma consulta distribuída agora têm corretamente como pai o spanConnection::sendQuerydo iniciador, em vez de serem anexados diretamente ao contexto de rastreamento fornecido pelo cliente, e cada execução de tarefa assíncrona produz seu próprio span. #114813 (Diego Gomes Tomé). - Com essa alteração, ao usar os índices WHATIF, a referência atendida por projeção informa
not_applicablepara cada candidato, em vez de a instrução falhar. #114846 (Yarik Briukhovetskyi). DROP DATABASEagora remove tabelas na ordem topológica inversa das dependências de carregamento e referenciais (anteriormente, apenas as dependências de carregamento), de modo que uma falha no meio deDROP DATABASEnão pode deixar uma tabela cujas dependências já tenham sido removidas. #114952 (Alexey Milovidov).- Nos dashboards da interface web, a tela global de erro foi substituída por um aviso acima dos dashboards, de modo que a falha de um gráfico não oculta mais a página inteira. #115019 (Mikhail Artemenko).
- Descarregadas para disco as tabelas da fase de aprendizado do agregador adaptativo sob pressão de memória. #115038 (Groene AI).
clickhouse-localagora responde a solicitações de preflight CORS com os mesmos cabeçalhos permissivos queclickhouse-server, de modo que a interface HTTP aberta porSYSTEM START LISTEN HTTPpode ser usada em um navegador sem configuração adicional, incluindo a interface web aberta a partir de uma URLfile://. #115045 (Alexey Milovidov).- Adicionado suporte a operadores de correspondência de expressões regulares no estilo PostgreSQL:
~(um alias da funçãomatch),~*(correspondência sem distinção entre maiúsculas e minúsculas),!~e!~*(negações). Os comandos\d,\dt,\dvdopsqlagora funcionam quando conectados ao ClickHouse pelo protocolo de compatibilidade PostgreSQL, e uma consulta com falha não encerra mais a conexão. #115066 (Alexey Milovidov). - O
clickhouse-clientnão exibe mais a mensagemConnecting to ...duas vezes ao solicitar uma senha interativamente. #115081 (Alexey Milovidov). EXPLAIN WHATIFagora informa por que a estimativa empírica foi ignorada, em uma nova linhaempirical_reasonexibida quandoempirical_statuséunsupported. #115140 (Yarik Briukhovetskyi).- Quando nenhum algoritmo de join habilitado pela configuração
join_algorithmconsegue executar umJOIN, a mensagem de erro agora informa os algoritmos tentados, bem como a strictness e o tipo do JOIN que falhou, em vez de apenas informar que nenhum deles funcionou. #115226 (Alexey Elkin). - Consultas de busca vetorial agora podem usar o índice de similaridade vetorial quando o vetor de referência é um literal de array de inteiros, por exemplo,
ORDER BY L2Distance(vec, [1, 2]). Antes, essas consultas recorriam silenciosamente a uma varredura por força bruta. #115255 (Robert Schulze). - Falhas de rede do lado do cliente Azure (conexão redefinida/recusada, erros de DNS e TLS) agora são repetidas como erros de transporte, em vez de serem exibidas como um
500sintético, alinhando-se ao cliente S3. #115269 (Arsen Muk). - A documentação de todas as instruções SQL (por exemplo, nome, sintaxe, descrição e exemplos) agora pode ser recuperada da tabela de sistema
system.statements. #115341 (Robert Schulze). BACKUPnão deixa mais um arquivo de bloqueio no destino quando a tentativa que o criou falha antes de gravar qualquer conteúdo — seja ao reivindicar o destino ou ao abrir um arquivo compactado. Nenhum backup posterior poderia corresponder a esse bloqueio, portanto, todas as novas tentativas no mesmo destino falhavam até que o arquivo fosse excluído manualmente. Backups em destinosS3eAzuretambém criam o bloqueio de forma exclusiva, e um bloqueio pertencente a outro backup é informado como um backup concorrente, em vez de qualquer erro retornado pelo armazenamento. #115387 (Julia Kartseva).- Adicionado suporte à autenticação por token bearer em BuilderRWBufferFromHTTP (tentativa 2). #115400 (Sergei Trifonov).
- Adicionadas métricas dimensionais para S3Queue. #115422 (Bharat Nallan).
- Adicionado
keywordcomo alias do tokenizadorarraydo índice de texto, melhorando a compatibilidade com OpenSearch, Elasticsearch, SolR e Lucene. #115507 (Robert Schulze). - Permite criar tabelas S3 próprias. #115652 (Konstantin Vedernikov).
- Não registra memória não rastreada por thread em erros MEMORY_LIMIT_EXCEEDED que não abrangem todo o servidor. #115658 (Azat Khuzhin).
- O protocolo remote-write do Prometheus agora oferece suporte a inserções assíncronas: os dados de várias solicitações remote-write simultâneas são agrupados antes da criação das partes, conforme a configuração
async_insert(ativada por padrão; adicioneasync_insert=0à URL do handler para manter o comportamento síncrono). Uma solicitação é confirmada somente após os dados serem gravados em todas as tabelas internas da tabelaTimeSeriesde destino. #115688 (Nikita Mikhaylov). - Faz com que todas as funções de agregação
timeSeries*tratem timestamps duplicados conforme uma única regra (o maior valor prevalece; NaN perde para qualquer outro valor), corrigindo resultados dependentes da ordem emtimeSeriesInstantRateToGrid,timeSeriesInstantDeltaToGrid,timeSeriesLastTwoSamplesetimeSeriesResampleToGridWithStalenessquando alguns valores com o mesmo timestamp são NaN. A regra agora está documentada e testada. #115920 (Vitaly Baranov).
Correção de bug (comportamento incorreto perceptível ao usuário em uma versão estável oficial)
- Corrige a corrupção de nomes de colunas e exceções
BAD_ARGUMENTScominject_random_order_for_select_without_order_by: consultasSELECTcom múltiplas colunas não falham mais, e os nomes das colunas de saída deCREATE TABLE AS SELECT,CREATE VIEW AS SELECTe formatos nomeados, comoJSONEachRow, são preservados em vez de serem substituídos por aliases internos__subquery_column_<UUID>. Fecha #102812. Fecha #101107. #105896 (Groene AI). - Corrige
NOT_FOUND_COLUMN_IN_BLOCKno leitor nativo V3 deParquetquando umPREWHEREtem conjunções que compartilham uma expressão intermediária comum. #107059 (Groene AI). - Corrige
NOT_FOUND_COLUMN_IN_BLOCKem consultas que usam as colunas virtuais_part_starting_offsetou_part_offsetemWHEREjunto com materialização tardia. #108287 (Vladimir Cherkasov). - Corrige
Not found column or subcolumn c.null in blockao executarWHERE col IS NULLouIS NOT NULLem uma colunaIcebergcom evolução de esquema, adicionada após a gravação de arquivos de dados mais antigos, comoptimize_functions_to_subcolumns = 1(o padrão). #109515 (Groene AI). - Corrige erros falsos de
ICEBERG_SPECIFICATION_VIOLATIONao ler uma tabelaIcebergcujo tipo decimal ou outro tipo primitivo parametrizado é serializado com espaços em branco diferentes entre arquivos de metadados, comodecimal(20,0)nos metadados da tabela edecimal(20, 0)no manifesto. #109676 (Groene AI). - Corrige o
PREWHEREadiado comoptimize_move_to_prewhere = 1quandoPREWHEREé aplicado apósFINAL: condiçõesWHEREnão são mais movidas antes de uma política de linha adiada, o que poderia alterar os resultados da consulta. #109703 (Yarik Briukhovetskyi). - Corrige
BAD_GETao comparar uma colunaArray(String)com um literal de array, comoarr = ['x'], quando a coluna tem um índice de saltotext,tokenbf_v1oungrambf_v1. Essas comparações agora recorrem a uma varredura completa, em vez de fazer a consulta falhar. #110057 (Groene AI). - Corrige resultados incorretos para
has,mapContainsKeyemapContainsValuecom uma agulha vazia quando há um índice de texto. #110246 (Robert Schulze). - Corrige
Host is empty in S3 URIquando uma subconsulta escalar é usada como argumento de URL da função de tabelas3, ou como argumento de qualquer outra função de tabela, em consultasCREATE TABLE ... AS SELECT. #110254 (Sema Checherinda). - Corrige verificações de privilégios
ON CLUSTERparaSYSTEM STOP/START CLEANUPeSYSTEM STOP/START VIRTUAL PARTS UPDATE: elas não exigem maisSYSTEM PULLING REPLICATION LOGe agora usamSYSTEM CLEANUPouSYSTEM VIRTUAL PARTS UPDATE. #110289 (Groene AI). - Corrigido o problema em que uma réplica de armazenamento de objetos somente leitura, com
read_only = true, não descobria novas partes por meio derefresh_parts_interval, além da falha detable_disk = truenesse tipo de disco comtable_disk is not supported for non-ObjectStorage disks. #110460 (Julia Kartseva). - Corrigida a gravação por meio de funções de tabela de data lake, como
INSERT INTO FUNCTION icebergS3(...), que produzia arquivosParquetcujas colunas de string perdiam a anotação de tipoString, tornando os dados gravados ilegíveis para leitores externos, como o Spark. #110465 (Shaohua Wang). - Corrigida a falha na inferência de esquema com
Map cannot have a key of type LowCardinality(Nullable(String))ao ler arquivosORCcujas chaves de map são codificadas por dicionário, incluindo arquivos gravados pelo Spark e pelo próprio ClickHouse comoutput_format_orc_dictionary_key_size_thresholdhabilitado. #110492 (Shaohua Wang). - Corrigidos resultados incorretos de
IS NULL/IS NOT NULL/count()comoptimize_functions_to_subcolumnsem uma coluna tornadaNullablepor umALTER MODIFY COLUMN Tsomente de metadados paraNullable(T). Para partes gravadas antes da conversão, a subcoluna.nullagora é derivada da coluna pai fisicamente presente, em vez do valor padrão do tipo de armazenamento. #110584 (Groene AI). - Corrigidos resultados incorretos de consultas devido à otimização
optimize_and_compare_chainquando condições transitivas misturam tipos com semânticas de comparação diferentes, comoEnumcomString,DecimalcomFloat64ou valoresFixedStringde larguras diferentes. #110621 (Yarik Briukhovetskyi). - Corrigidos resultados incorretos em algumas consultas de leitura em ordem quando o otimizador amplia o prefixo da chave de ordenação. #110725 (Groene AI).
- Corrigidas instruções
CREATEcom uma cláusulaCOMMENT, que agora geram um erro de sintaxe quando falta o literal de string do comentário, em vez de aceitarem silenciosamente uma consulta analisada incorretamente. Por exemplo,CREATE VIEW v COMMENT AS SELECT 1não cria mais uma view sem comentário. #111159 (Shaohua Wang). - Corrigidos resultados incorretos de
SummingMergeTreeeCoalescingMergeTreecomFINALquandooptimize_move_to_prewhere_if_final = 1e a cláusulaWHEREé uma condição booleana implícita em uma coluna da chave de ordenação, comoWHERE k. #111342 (Groene AI). - Corrigidas exceções espúrias de
Directory '...' was created concurrently with remote path '...'em operações somente de metadados em bancos de dados e tabelas com armazenamento de objetos como backend, comoDROP DATABASE. #111353 (Mikhail Artemenko). - Os catálogos REST de data lake agora reportam credenciais desatualizadas com a exceção apropriada, em vez de tratá-las silenciosamente como uma tabela inexistente ou retornar
UNKNOWN_TABLE. #111379 (alesapin). - Corrigido o problema em que
SQL SECURITY DEFINEReSQL SECURITY NONEnão eram respeitados em views parametrizadas quando o analisador estava desabilitado (enable_analyzer = 0). Anteriormente, selecionar dessa view como um usuário sem privilégios na tabela subjacente falhava comACCESS_DENIED, embora a mesma view funcionasse com o analisador habilitado. #111458 (Groene AI). - Rejeita uma coluna
Nullable(Nothing)ou qualquer outro tipo não permitido em tabelas no momento doCREATE TABLE, quando o esquema é inferido do armazenamento — por exemplo, em uma tabelaremote,RemoteouDistributedsem colunas baseada em uma view que executaSELECT NULL—, em vez de persistir metadados que não carregam na próxima reinicialização do servidor e bloqueiam o carregamento de tabelas não relacionadas. #111487 (Groene AI). - Corrige
std::bad_variant_accesse a evolução incorreta do esquemaIcebergpara colunasArray(Map(...))aninhadas cujoStructinterno é alterado. #111489 (Konstantin Vedernikov). - Corrige a falha de
ALTER MODIFY COLUMNao converter uma colunaNullablepara outro tipo comDEFAULT, por exemplo, deNullable(UInt8)paraString,LowCardinality(String)ouArray(UInt8). #102156 (DQ). - Corrige
BAD_ARGUMENTS(Dictionary not found) dedictGetapós a rejeição deDETACH DICTIONARY ... PERMANENTLYcomHAVE_DEPENDENT_OBJECTS; o dicionário agora permanece utilizável quando o desanexamento é rejeitado. #105259 (Groene AI). - Arquivos de dados gravados pelo ClickHouse para tabelas
Icebergagora incorporam IDs de campo doIcebergemAvroeORC; colunasStringemORCsão gravadas comostring, em vez de binário; e campos complexos opcionais emORC(Array,Map,Tuple) agora preservam os metadadosiceberg.requiredcorretos. Isso corrige resultadosNULLsilenciosos após renomeações de colunas e restaura a compatibilidade com leitores em conformidade com a especificação, como Spark eiceberg-java. #109994 (Groene AI). #111775 (Groene AI). - Corrige a leitura de arquivos em discos
plain_rewritableapós a regravação de um caminho existente com conteúdo de tamanho diferente: caso contrário, metadados desatualizados na memória poderiam dispararUNEXPECTED_END_OF_FILE. #110304 (Konstantin Bogdanov). - Corrige o desvio no rastreador de memória por usuário causado por registros de log do sistema, como
query_logequery_views_log, que, caso contrário, poderiam disparar indevidamente o limitemax_memory_usage_for_userpara usuários com workloads contínuos. #110708 (Raúl Marín). - Corrige uma condição de corrida rara em que um
ALTERque modifica apenas o comentário ou as configurações de uma tabelaReplicatedMergeTreepoderia remover silenciosamente uma coluna adicionada por umALTER ... ADD COLUMNconcorrente, deixando uma réplica com metadados de tabela desatualizados. #111029 (Shaohua Wang). - Corrige a poda incorreta da chave primária em tabelas com um sufixo decrescente na chave de ordenação, como
ORDER BY (g, r DESC), que poderia descartar linhas correspondentes. #111059 (Nihal Z. Miaji). - Corrige um vazamento de memória do certificado do par a cada handshake TLS quando a verificação de certificados está ativada. #111425 (Konstantin Bogdanov).
- Corrige mutações que usam um parâmetro de consulta como partição em
ALTER TABLE ... UPDATE/DELETE ... IN PARTITION {param:Type}: o valor de partição serializado agora pode ser analisado corretamente, de modo que oALTERnão grava mais entradas de mutação que impedem o carregamento da tabela. #111518 (Michael Kolupaev). - Corrige uma falha no macOS/aarch64 ao capturar um rastreamento de pilha em uma pilha de corrotina ou fiber, por exemplo, pelo profiler de memória. #111656 (Raúl Marín).
- Corrige a falha do servidor ao ler dados
Protobufcominput_format_allow_errors_num > 0quando uma mensagem válida precede, no mesmo bloco, uma mensagem inválida, mas que pode ser ignorada. #107739 (Andrey Tsarevskiy | Андрей Царевский ). - Corrige
NOT_FOUND_COLUMN_IN_BLOCKquando uma consulta em uma tabelaDistributedusa_shard_numoushardNumque se tornaNullable, por exemplo, em umFULL JOINcomjoin_use_nulls = 1, junto comORDER BYe o analyzer. #109798 (Groene AI). - Corrige resultados incorretos e exceções
UNKNOWN_ELEMENT_OF_ENUMemLEFT/RIGHT/FULL/ASOF JOINcomjoin_algorithm = 'full_sorting_merge', nos quais linhas sem correspondência podiam ser preenchidas com0em vez do valor padrão do tipo da coluna. #111197 (Groene AI). - Corrige uma exceção
LOGICAL_ERRORquando o corpo lambda de uma função de ordem superior é umifoumultiIfcom condição constante que mistura um ramo literalBoolcom um ramo de comparaçãoUInt8, por exemplo,arrayFilter(p -> multiIf(false, true, p = 'ALL'), ['ALL']). #111245 (Groene AI). - Um placeholder
{_partition_id}no caminho deS3,AzureBlobStorage,URLe motores semelhantes a arquivos, sem umapartition_strategyexplícita, agora volta a implicar a estratégiawildcard, restaurando a compatibilidade com DDLs anteriores à 26.6 que passaram a falhar comBAD_ARGUMENTS. #111279 (Nikita Fomichev). - Corrige
NUMBER_OF_COLUMNS_DOESNT_MATCHem consultasGROUP BYem uma tabelaMergeque encapsula uma tabelaDistributedquando a chave de agrupamento é uma função de uma coluna e um agregado lê essa mesma coluna. #111334 (Groene AI). GRANT role TO rolepara a mesma função agora é rejeitado comBAD_ARGUMENTS, em vez de criar silenciosamente uma entrada autorreferencial emsystem.role_grants. #103315 (zxuhan7).- Corrige gravações em tabelas
Icebergquando o arquivo de metadados não tem uma seçãorefs. #106896 (Aleksandr Musorin). - Corrige o problema em que
system.session_logse tornava ilegível após um login via Arrow Flight: a colunainterfaceé umEnum8, mas o valorArrowFlightestava ausente da enumeração; assim, um login pelo protocolo Arrow Flight gravava o valor bruto10, e qualquerSELECTque lesse essa linha gerava a exceçãoUnexpected value 10 in enum. #110758 (Alexey Milovidov). - Corrige um estouro de inteiro com sinal em
toStartOfIntervalcom intervalos inferiores a um segundo: para valoresDateTime64a menos de um intervalo do limite inferior deInt64, o resultado arredondado sofria wraparound silenciosamente para um valor positivo inválido; agora a função gera uma exceçãoDECIMAL_OVERFLOW. #111370 (Alexey Milovidov). - Corrige
readWKTPointereadWKT, que retornavam coordenadas não inicializadas (escalares) ou da linha anterior (vetorizadas) para um ponto vazio com tag de dimensão, comoPOINT M EMPTY. Essas entradas agora são rejeitadas comCANNOT_PARSE_TEXT, de forma consistente comPOINT EMPTY. #111517 (Groene AI). - Corrige exceções
Unexpected number of columns in result sample blockemRIGHTeFULL JOINquando o lado esquerdo contém uma coluna duplicada com o mesmo nome, por exemplo,1 AS b, 1 AS b, que é preservada porUNION ALL. #111554 (Groene AI). - Corrige exceções
CANNOT_CONVERT_TYPEeLOGICAL_ERRORem consultas distribuídas que usam o combinador-Tuplecom o modificadorRESPECT NULLSouIGNORE NULLSsob combinadores aninhados, por exemplo,anyRespectNullsStateTuple(...) IGNORE NULLS. #111570 (Alexey Milovidov). - Corrige o destaque de sintaxe SQL no Play em iPhones, onde o ajuste automático do tamanho do texto pelo Safari no iOS podia desalinhavar a sobreposição de destaque. #111683 (Alexey Milovidov).
- Corrige
UNKNOWN_QUERY_PARAMETERquando uma visualização parametrizada é chamada com um argumento de subconsulta cujo tipo éArray,TupleouLowCardinality, por exemplo,SELECT * FROM v(param = (SELECT groupArray(x) FROM t)). #111790 (Groene AI). - Corrige
TYPE_MISMATCH(Key type for complex key ... does not match) quando umJOINcom um dicionário usa uma chave de junçãoNullable,LowCardinalityouLowCardinality(Nullable), enquanto a chave do dicionário não está encapsulada. A busca no dicionário para junções diretas agora normaliza a chave para o tipo de chave declarado do dicionário, comodictGetedictHasjá fazem, e uma chaveNULLnunca encontra correspondência. #111857 (Groene AI). - Com
fsync_part_directory = 1, a renomeação de um diretório de parte do nome temporário para o nome final agora também se torna durável ao executar fsync no diretório pai e, em movimentações entre diretórios pais, também no pai de origem. Antes, o fsync era executado apenas no diretório movido; assim, uma perda de energia logo após o commit de uma parte podia fazer com que ela ficasse ausente do disco e linhas fossem perdidas, apesar de a configuração estar habilitada. #111861 (Groene AI). - Corrige travamentos em
randChiSquared,randStudentT,randFisherFerandBinomialcom parâmetros extremos. Essas consultas não podiam ser interrompidas pormax_execution_timeouKILL QUERY. Esses parâmetros agora são rejeitados mesmo quandomax_rand_distribution_parameteroumax_rand_distribution_trialsestá definido como0, emax_rand_distribution_trialsnão pode mais ser aumentado acima do valor padrão de10^9pararandBinomial. #111909 (Alexey Milovidov). - Corrige resultados incorretos quando o analisador reescreve cadeias de comparações como
x = c1 OR x = c2 OR ...,x != c1 AND x != c2 AND ...ouhas(const_array, x)paraINeNOT IN. Também corrige exceçõesIllegal type ... of argument of function inem expressões com estruturaDynamic,Array(Dynamic)ouJSON. #111924 (Groene AI). - Corrigidos resultados incorretos e
LOGICAL_ERRORao selecionar uma colunaNullable(Tuple(...))junto com uma de suas subcolunas de elementos que aceitam nulos (Variant,DynamicouLowCardinality) de uma tabelaMergeTree. #111949 (Groene AI). - Rejeitadas negociações iniciais do protocolo nativo que usam
USER_INTERSERVER_MARKERpara um cluster desconhecido ou configurado sem um elemento<secret>. Anteriormente, essas negociações podiam entrar no modo interserver antes da autenticação e ler informações sobre tabelas locais. #99675 (Dan Anderson). - Corrigido
JOINcom tabelasEmbeddedRocksDB,RediseKeeperMapque podia retornar silenciosamente zero linhas quandoDirectKeyValueJoiné usado com chavesStringouNullable(String). #105253 (Vladimir Cherkasov). - Corrigidas views materializadas atualizáveis coordenadas em um banco de dados
Replicatedque ficavam bloqueadas após serem reconectadas a um Keeper sem a flag de recursoMULTI_READ; agora, a view é interrompida corretamente com o statusDisabled, em vez de registrarUnexpected exception in refresh schedulingindefinidamente. #108890 (Groene AI). - Corrigido o cliente ZooKeeper que enviava um prefixo de tamanho
int32com overflow para solicitações maiores queINT32_MAXbytes. Solicitações grandes demais agora são rejeitadas no lado do cliente. O limite pode ser configurado por meio demax_request_sizeem<zookeeper>ou, caso contrário, é obtido do Keeper. Fecha #109165. #109190 (Arsen Muk). - Corrigido o modo ordenado de
S3Queue/AzureQueuecom nós de processamento persistentes: os bloqueios de bucket agora são renovados durante o streaming, para que a limpeza de TTL controlada porpersistent_processing_node_ttl_secondsnão remova bloqueios de um processador ativo. Se a propriedade do bloqueio ainda assim for perdida, isso será detectado e informado, e o streaming será retomado com um novo iterador de arquivos. #110292 (Kseniia Sumarokova). - Corrigidos dados incorretos e possíveis leituras fora dos limites ao ler colunas
Stringcomstring_serialization_version = 'with_size_stream'após ignorar linhas iniciais, bem como ao ler subobjetos de colunasJSONarmazenadas comobject_shared_data_serialization_version = 'map'. #110471 (Alexey Milovidov). - Corrigidos
CREATE TABLEeALTER TABLEquando o analisador aceitava uma expressãoDEFAULTouMATERIALIZEDque referencia uma coluna virtual, como_tableou_database. Essas expressões agora são rejeitadas no momento da definição, em vez de falharem posteriormente durante a inserção comNOT_FOUND_COLUMN_IN_BLOCK. #111776 (Groene AI). - Corrigida uma condição de corrida em UDFs executáveis, no mecanismo de tabela
executablee em dicionários executáveis, em que umfcntlem um descritor de arquivo já fechado podia corromper um descritor não relacionado de uma consulta simultânea e fazer com que as consultas ficassem bloqueadas indefinidamente. #111779 (Raúl Marín). - A criação de estatísticas
minmaxobsoletas agora emite um aviso em vez de gerar uma exceção. #111785 (Han Fei). - Corrigidas tabelas
Iceberggravadas pelo ClickHouse que não podiam ser lidas por leitores externos, como PyIceberg e Spark. Os esquemasAvrodas listas de manifestos e dos manifestos agora incluem as propriedades obrigatóriasfield-iddoIceberg. #111786 (Groene AI). - Regenere as colunas
block_numbereblock_offsetmaterializadas na parte durante operações de anexar/desanexar/mover/clonar partes, para que não fiquem desatualizadas após a manipulação das partes. #111801 (Mikhail Artemenko). - Corrija a otimização
query_plan_split_filter, que deixava uma coluna interna__split_filterem uma ramificação deINTERSECTouUNION, podendo causar a exceçãoBlock structure mismatch in IntersectOrExceptStep stream: different number of columns. #111930 (Groene AI). - Corrija
AMBIGUOUS_COLUMN_NAMEem consultas que repetem uma condiçãoJOIN ONemWHEREcomjoin_use_nulls = 1; essas consultas agora retornam resultados em vez de falhar. #112007 (Groene AI). - Corrija a autenticação DLF no catálogo REST
Paimon: as solicitações após a primeira não falham mais com HTTP 401, e as verificações de existência de tabelas agora detectam corretamente HTTP 404. #112015 (JIaQi Tang). - Corrija
LOGICAL_ERRORdurante a limpeza concorrente de tabelasKafkano Keeper; a criação ou remoção não falha mais se o caminho do Keeper da tabela desaparecer após a expiração da sessão. #112078 (Groene AI). - Corrija mesclagens e mutações quando o índice min-max no nível da parte está habilitado para as colunas
_block_numbere_block_offset. #109281 (Mikhail Artemenko). - Corrija falhas de
INSERTem tabelasDeltaLakeLocaloudeltaLakeque deixavam um arquivo de dados não finalizado após o início da gravação. #109328 (Groene AI). - Corrija vazamentos de credenciais em
SHOW CREATE,system.query_log, logs do servidor e na saída deEXPLAINparas3/s3Cluster, os motores baseados emS3,BACKUP ... TO S3e argumentos secretos das funçõesencrypt,decrypte HMAC gerados por expressões ou UDFs SQL. #109768 (Raúl Marín). - Corrija a leitura de arquivos
Parquetgrandes em entradas zipSTOREDnão comprimidas vias3efile. #110495 (Eva Wuuu). - Corrija o travamento de
EXPLAIN ANALYZEem consultas com uma leitura de streamingFROM ... STREAMoculta em uma subconsulta, CTE ou visualização. Essas consultas agora são rejeitadas comNOT_IMPLEMENTED, assim como as leituras de streaming de nível superior. #110935 (Groene AI). - Rejeite vetores cuja magnitude ao quadrado transborda para infinito ao usar um índice
vector_similaritycom quantizaçãoi8. Antes, esses vetores geravam resultados incorretos silenciosamente. #111085 (Groene AI). - Execute fsync nos arquivos de índice de texto de uma parte mesclada ou materializada quando
min_rows_to_fsync_after_merge,min_compressed_bytes_to_fsync_after_mergeoufsync_part_directoryestiverem definidos. Antes, esses eram os únicos arquivos da parte que permaneciam sem sincronização; assim, uma queda de energia logo após uma mesclagem poderia deixar uma parte confirmada, porém corrompida, e causar perda de dados. #111335 (Groene AI). - Corrija a validação de caminho para
user_files. #111442 (Alexander Tokmakov). - Corrige falhas ocasionais do
SYSTEM REFRESHem uma tabelaRabbitMQparada ao consumir o acúmulo de mensagens na fila. Agora, a operação de atualização aguarda o início do loop de entrega AMQP antes de usar seu único ciclo de streaming fora de ordem. #111480 (Groene AI). - Restringe o acesso a objetos locais ao caminho
user_files. #111483 (Konstantin Vedernikov). - Corrige um segfault causado por acesso à memória fora dos limites ao desserializar um estado malformado de função de agregação contendo um valor
String. Esses estados agora são validados e rejeitados. #111606 (Miсhael Stetsyuk). - Corrige estouro de inteiro durante a análise de
system.zookeeper_info. #111629 (Kseniia Sumarokova). - Corrige
NOT_FOUND_COLUMN_IN_BLOCKquando uma consultaFINALfiltra por uma coluna da chave de ordenação que não está na listaSELECTe o filtro é movido paraPREWHERE, por exemplo,SELECT s FROM t FINAL WHERE k GROUP BY scomoptimize_move_to_prewhere_if_final = 1. #111721 (Groene AI). - Corrige a corrupção de valores de partição que contêm caracteres de caminho e a rejeição de valores de partição
NULLemINSERTparticionado noDeltaLakecomallow_experimental_delta_lake_writes = 1. Os valores de partição agora são codificados por porcentagem em um único segmento de caminho, e valoresNULLou strings vazias são gravados como__HIVE_DEFAULT_PARTITION__com uma entradapartitionValuesnula. #111793 (Groene AI). - Corrige uma exceção e o descarte silencioso de dados ao ler uma subcoluna dinâmica por meio de uma tabela
Buffer. #111948 (Alexey Milovidov). - Corrige a perda do banco de dados atual pelo
clickhouse-clientapósUSE {db:Identifier}. Se o cliente precisasse se reconectar posteriormente, ele alternava silenciosamente a sessão para o banco de dadosdefault. #111982 (Alexey Milovidov). - Corrige uma exceção
LOGICAL_ERROR(Type mismatch when building statistics for column) durante mutações deMergeTreeapós umALTER MODIFY COLUMNsomente de metadados alterar o tipo de uma coluna com estatísticas. As colunas efetivamente regravadas pela mutação agora têm suas estatísticas recalculadas, e as colunas inalteradas mantêm suas estatísticas existentes. #112009 (Groene AI). - Corrige falhas na leitura de tabelas
Paimonenquanto a indicação mutávelsnapshot/LATESTera substituída concorrentemente. Indicações inválidas ou obsoletas agora são ignoradas, e o snapshot é carregado do catálogo. #112010 (JIaQi Tang). - Corrige a leitura de arquivos
GeoParquet,ArroweArrowStreamcuja coluna de geometria codificada em WKT usa uma palavra-chave de tipo em minúsculas, comopoint(1 2), ou um contêiner vazio, comoLINESTRING EMPTYouPOLYGON(). Isso também corrige a leitura de arquivos que armazenam a saída dewktpara uma geometria vazia. #112020 (Groene AI). - Corrige a não aplicação de substituições de configurações no nível da consulta à cópia nativa do Azure. #112037 (Smita Kulkarni).
- Corrige
query_masking_rulesque reescrevia o tipo de uma colunaEPHEMERAL, o que poderia fazer com queCREATE TABLEarmazenasse o tipo incorreto ou falhasse. #112048 (Alexey Milovidov). - Os parâmetros de funções de tabela não aceitam mais estados de agregação, que antes acionavam um erro lógico, pois esses parâmetros não têm suporte. Fecha #112085. #112087 (Pedro Ferreira).
- Corrige resultados incorretos em um
JOINcuja expressãoONcontém uma conjunção constante, por exemplo,ON l.id = r.id AND CAST(NULL AS Nullable(UInt8)). #112155 (Vladimir Cherkasov). - Corrige resultados incorretos para
hasAllTokense outras pesquisas de índice de texto com múltiplos tokens em builds que não usamsimdcomp, comoaarch64, quandotext_index_posting_list_apply_mode = 'lazy'. #112178 (Groene AI). - Corrige resultados incorretos quando uma visualização parametrizada é chamada com um argumento que não é uma atribuição
parameter = value. Essas chamadas agora são rejeitadas comUNKNOWN_QUERY_PARAMETERem ambos os caminhos de execução. #112194 (Groene AI). - Corrige visualizações parametrizadas cujo corpo
SELECTusaINTERSECT,EXCEPTou uma cadeia deUNIONque misturaUNION DISTINCTeUNION ALL, classificadas incorretamente como visualizações comuns, o que impedia o carregamento de seus metadados. #112211 (Groene AI). - Corrige a inferência de esquema da família
TSV, que inferiaStringpara valores decimais gravados com zero à esquerda, como0.0ou0.5, e tratava essa primeira linha como cabeçalho. Também corrige oTSKV, que inferia um tipo numérico para valores codificados com escape, comox=1\x2E5. Fecha #112105. #112226 (Groene AI). - Corrige
system.s3_queue_settings, que reportava valores incorretos parabucketing_mode,partitioning_mode,partition_regexepartition_component. #112300 (Bharat Nallan). - Corrige resultados incorretos, saída de
ORDER BYordenada incorretamente e exceçõesBAD_TYPE_OF_FIELDquando a chave primária é umArrayouTuplee a consulta aplicaplus,minus,multiply,divideouintDiva ela. #112339 (Groene AI). - Corrige a execução remota de consultas que contêm
PASTE JOIN, por exemplo, por meio de uma tabelaDistributedou de uma função de tabela*Cluster. O ClickHouse não formata mais a consulta com a sintaxe inválidaALL PASTE JOIN. #112404 (Groene AI). - Corrige um
LOGICAL_ERROR(Invalid number of rows in Chunk) emJoiningTransformpara umLEFT JOINcom chaves exclusivas à direita, uma condiçãoONmista e ummax_joined_block_size_rowspequeno. #106928 (Groene AI). - Corrigida a coluna virtual
_tagsdo mecanismo de tabelaS3Queue: ela era declarada, mas nunca preenchida, portantoSELECT _tagssempre retornava um mapa vazio. Agora, retorna as tags do objeto, assim como o mecanismoS3e a função de tabelas3. #108676 (Groene AI). - Corrigida a perda de dados de uma coluna sem expressão padrão quando uma mesclagem ocorre simultaneamente com
ALTER TABLE... RENAME COLUMN, ou quando os únicos valores da coluna vêm de umUPDATElightweight. A coluna podia ser removida da parte mesclada, fazendo com que todos os seus valores fossem lidos como NULL. #109356 (Groene AI). - Corrigida a remoção de índices de salto de uma parte de dados (ou a falha de
CHECK TABLEcomUNEXPECTED_FILE_IN_DATA_PART) após uma mutação que reescreve toda a parte, comoALTER TABLE... DROP COLUMNde uma colunaMATERIALIZED, em uma parteWide. #109616 (Groene AI). - Corrigidos dois bugs no processamento de
DateTime64portoUTCTimestamp/fromUTCTimestamp(e seus aliasesto_utc_timestamp/from_utc_timestamp) etoTime64. O primeiro era um overflow de inteiro com sinal próximo ao limite deInt64(agora calculado emInt128e limitado ao intervalo representável). O segundo era um resultado incorreto para valores fracionários negativos próximos a uma fronteira de deslocamento de fuso horário: a divisão dos segundos era truncada em direção a zero, de modo quetimezoneOffset()inspecionava o segundo seguinte e podia escolher o lado incorreto de uma alteração de horário de verão/deslocamento. #109738 (Groene AI). - Corrigido um erro lógico (“Cannot determine row level filter; 0 columns deleted, 0 columns added”) ao ler de uma tabela
Mergecuja tabela filha tem uma política de linha com uma coluna existente simples como filtro (por exemplo,CREATE ROW POLICY... USING flag). #109843 (Groene AI). - Corrigidos dois erros gerados quando uma consulta com
GROUP BY GROUPING SETS(ou uma subconsulta escalar ou de mutação que o contenha) é executada comforce_aggregation_in_order = 1:Trying to get name of not a column: ExpressionListno analyzer antigo (enable_analyzer = 0) eMemory bound merging of aggregated results is not supported for grouping sets.em uma consulta distribuída comenable_memory_bound_merging_of_aggregation_results = 1no analyzer. #109862 (Groene AI). - Corrigida a interpretação de
1/0numéricos como valoresBoolem tipos contêiner (por exemplo,Array(Bool),Tuple(Bool,...)). Anteriormente,[1,0]falhava comCANNOT_READ_ARRAY_FROM_TEXT, enquanto[true,false]funcionava. #109976 (Groene AI). - Corrigido um erro
ILLEGAL_COLUMNespúrio emALTER TABLE... ADD COLUMN IF NOT EXISTSquando a coluna já existia no momento da aplicação. Isso ocorria quando a mesma coluna era adicionada duas vezes comIF NOT EXISTSem uma única instrução ou quando umALTERsimultâneo adicionava a coluna entre as fases de preparação e aplicação. #110080 (Groene AI). - Corrigido um resultado incorreto em que
length(e a dimensão QBit) de uma colunaFixedStringretornava0, em vez do tamanho fixoN, com réplicas paralelas quando a consulta tinha um filtro seletivo. #110427 (Groene AI). - Corrigida a perda do tipo
GeometryporflipCoordinates: para um argumentoGeometry, o resultado agora volta a ser tipado comoGeometry, em vez doVariant(...)subjacente, podendo ser passado diretamente para funções comoareaCartesian. #110694 (Groene AI). - Corrigido o problema em que
optimize_injective_functions_in_group_byalterava os resultados de consultas comGROUP BY GROUPING SETSeGROUP BY... WITH TOTALS. A configuração é documentada como preservando resultados, mas a eliminação de uma função injetiva de uma chave de agrupamento produzia um valor incorreto (ou descartava uma linha) para linhas em que essa chave está ausente do conjunto agregado (um conjunto não membro deGROUPING SETS) ou para a linhaWITH TOTALS. O valor incorreto podia coincidir com um valor de chave válido, tornando uma linha de superagregação indistinguível de um grupo real no mesmo conjunto de resultados. #110721 (Groene AI). - Valores numéricos
1/0na análise de JSONBoolagora respeitam a configuraçãoallow_special_bool_values. Anteriormente, uma entrada JSON como{"v":1}paraVariant(Bool, UInt32)era lida comoBoolmesmo comallow_special_bool_values_inside_variant = 0, porque os analisadores JSON deBoolignoravam a configuração eBooltem maior prioridade de desserialização emVariantdo que os tipos inteiros. #110835 (Groene AI). - Corrigido um erro lógico
block.rows() == getRows()(uma leitura fora dos limites e desduplicação de inserção incorreta em compilações de produção) quando umINSERTpassa por uma visão materializada dependente cujo destino é umAliase cuja consulta interna altera o número de linhas, havendo uma tabela com desduplicação acessível após o alias. #111103 (Alexey Milovidov). - Corrigidos um erro lógico
Block structure mismatch(em compilações de depuração e com sanitizadores) e um erroIllegal types of argumentsem operações de conjunto sobre colunas compatíveis de estado agregado (por exemplo,quantileStateequantilesState(0.9)) aninhadas em colunas contêiner comoTuple,Array,Map,NullableouVariant. #111191 (Alexey Milovidov). - Corrigido o
DISTINCTcomLIMIT/OFFSETordenado que retornava linhas incorretas quando a dica de limite para interrupção antecipada de DISTINCT não conseguia limitar o início do resultado: umLIMITnegativo (retornava o início em vez do fim), umLIMIT/OFFSETfracionário (a fração só é resolvida após a leitura completa) e umOFFSETsemLIMIT(o fim após o deslocamento era descartado). Por exemplo,SELECT DISTINCT intDiv(x, 100) FROM t ORDER BY intDiv(x, 100) LIMIT -1em uma tabela com várias partes retornava o menor valor distinto em vez do maior. #111326 (Groene AI). - Corrigidos resultados incorretos quando uma consulta tem um índice de omissão
sete um predicado no formato(x AND <null-value>) OR y, em que o NULL é produzido por uma função (por exemplo,toInt64OrNull('x'),nullIf(1, 1),CAST(NULL AS Nullable(Int64))). Esse valor era encapsulado por__bitWrapperFunce propagavaNULLem vez da máscara “unknown”, de modo que o índicesetpodia eliminar grânulos que de fato correspondiam ao predicado, e a consulta retornava menos linhas do que deveria. #111604 (Groene AI). - Corrigidos
DELETE/UPDATEem uma tabela Iceberg que removiam silenciosamente as linhas erradas (ou geravamNOT_FOUND_COLUMN_IN_BLOCK) quando a tabela contém arquivos de dados gravados antes e depois deALTER TABLE... ADD COLUMNeoptimize_move_to_prewhereestá habilitado. #111693 (Groene AI). - Corrigido um
LOGICAL_ERROR(“Número inválido de linhas no Chunk”) — e, em builds reforçadas, uma interrupção relacionada por acesso fora dos limites — emORDER BY ... WITH FILL ... INTERPOLATEsobre uma tabelaDistributedcom dois ou mais shards, sobreclusterAllReplicasou sobre réplicas paralelas com chave personalizada, inclusive para resultados vazios.WITH FILLagora é aplicado somente no nó que produz o resultado final, o que também corrige a duplicação das linhas de preenchimento geradas entre shards/réplicas. #111919 (Yakov Olkhovskiy). - Mantém
randBinomialutilizável com as probabilidades degeneradas0e1para qualquer número de tentativas. #112021 (Alexey Milovidov). - Corrige resultados incorretos causados por uma consulta de busca vetorial que contaminava o cache de condições de consulta. Uma consulta
SELECT... WHERE <condition> ORDER BY <distance function> LIMIT nsobre uma tabela com um índicevector_similaritypodia registrar grânulos como não correspondentes a<condition>, fazendo com que uma consulta comum posteriorSELECT... WHERE <condition>na mesma tabela retornasse silenciosamente menos linhas. Leituras de busca vetorial não gravam mais no cache de condições de consulta. #112086 (Groene AI). - Corrige um bug em que um
CREATE VIEWouCREATE FUNCTIONcuja definição chamasubstr,midoubyteSliceem uma forma que a gramática desubstringnão consegue reanalisar é aceito, mas os metadados gravados pelo ClickHouse não são SQL válido. A leitura posterior dessa definição falha comSYNTAX_ERRORe, na inicialização do servidor, interrompe o carregamento dos metadados, impedindo que o servidor seja iniciado. Essas definições agora podem ser convertidas de ida e volta, e arquivos de metadados existentes no formatosubstring(x, a, b, c)voltam a ser legíveis, permitindo que um servidor afetado seja iniciado sem intervenção manual. #112195 (Groene AI). - Corrige uma tabela
TimeSeriescujos metadados locais divergiam do Keeper, fazendo com que a recuperação de uma réplica em um banco de dadosReplicatedtravasse permanentemente. Como consequência, a réplica nunca mais atendia o banco de dados e permanecia indisponível após reinicializações. As tabelas internas dessa tabela agora são removidas enquanto a transação de metadados de recuperação ainda está disponível, em vez de serem adiadas para uma tarefa em segundo plano que não conseguia executar oDROP. #112218 (Groene AI). - Corrigida a leitura de uma subcoluna de uma coluna
Nullable(Tuple(...))cujo elemento é umLowCardinality(T)não anulável quando a mesma consulta também lê a subcoluna pai. Em uma parte compacta, a subcoluna pai retornava valores incorretos, a consulta falhava comUnexpected return type from assumeNotNullou o servidor era encerrado por uma asserção de reforço destring_view, porque a subcoluna extraída era desserializada em um bufferLowCardinality(Nullable(T))cujos subfluxos eram então compartilhados com a leitura da subcoluna pai. #112232 (Groene AI). - Corrigido um travamento permanente do servidor no macOS causado pela perda de sinais de ativação pelo
pthread_rwlockquando o profiler de consultas por amostragem está habilitado (bug Apple FB24027930): no Darwin,pthread_rwlockagora é substituído por uma implementação robusta a sinais. #112267 (Raúl Marín). - Corrige o fato de
max_execution_timeeKILL QUERYserem ignorados enquanto uma consulta avaliageohashesInBox,arrayFold,sleep,base58Decode,h3PolygonToCellsouh3PolygonToCellsWithContainment. Essas consultas podiam continuar em execução por minutos após o cancelamento. Isso agora também abrange avaliações dentro de expressões armazenadas nos metadados da tabela, como chaves de ordenação, índices de omissão e chavesPARTITION BY. #112273 (Groene AI). #113456 (Groene AI). - Corrige um erro lógico
Cannot add step Expression to QueryPlan because it has incompatible header with root step JoinLazyColumnsStepem uma consulta comFINAL, filtroPREWHERE,LIMITpequeno emake_distributed_plan = 1, quando as colunas selecionadas são listadas em uma ordem diferente da ordem das colunas da tabela. A materialização lazy substituía um nó do plano sem preservar seu cabeçalho de saída, tornando o plano de consulta inconsistente. #112303 (Groene AI). - Corrige a gravação de tabelas Iceberg cujo esquema contém uma tupla aninhada em outra tupla. Os metadados publicados da tabela substituíam os nomes dos campos da tupla interna por nomes posicionais
1,2,…, de modo que, com o formato padrãoParquet, oINSERTfalhava comINCORRECT_DATAe, comAvro, a coluna não podia ser lida novamente. #112480 (Groene AI). - Corrige o erro
ATTEMPT_TO_READ_AFTER_EOFao mesclar partes com um índice de texto quando uma das partes mescladas estava vazia, por exemplo, após uma mutação que excluiu todas as linhas da parte. #112490 (Anton Popov). - Corrige resultados incorretos e um erro lógico quando um argumento que deve ser constante, como a escala de
toDecimal32ou o fuso horário detoDateTime, vem de uma subconsulta escalar e o analisador antigo é usado. Esse argumento era analisado como se seu valor fosse zero ou vazio; assim, o tipo de resultado declarado divergia do valor calculado, eCREATE VIEWeCREATE MATERIALIZED VIEWpersistiam um tipo de coluna incorreto. #112492 (Groene AI). - Corrige um
LOGICAL_ERROR(“Part… contains column… that is absent in table…”) quando uma réplicaReplicatedMergeTreesofre mutação em uma parte obtida de outra réplica antes de aplicar seu próprioALTER... ADD COLUMNpendente. Essa mutação agora é adiada até que a alteração de metadados seja aplicada. #112510 (Groene AI). - Corrige resultados incorretos de consultas ao usar GROUP BY com ORDER BY e
arrayJoinna projeção. #101775 (Yash ). - Corrige uma falha do servidor (acesso fora dos limites) em
S3Queue/AzureQueuecomenable_hash_ring_filtering = 1quando um lote continha um arquivo não processável e a solicitação ao Keeper para marcar o lote como em processamento falhava ao mesmo tempo. #108977 (Groene AI). - Corrige um erro lógico
Stream <col>.variant_discr... is not found(interrupção do servidor em builds de depuração e com sanitizers) quandoALTER TABLE... MODIFY COLUMNaltera uma coluna para um tipo com subcolunas dinâmicas (por exemplo, deVariantparaDynamic) em uma tabela com partes Wide, e a parte é posteriormente lida ou mesclada. #110204 (Groene AI). - Corrige um estouro de inteiro com sinal (UBSan) ao converter um valor extremo de
DateTime64(por exemplo,INT64_MIN) paraTime/Time64em um fuso horário com deslocamento negativo. #110451 (Groene AI). - Corrige o problema em que uma tabela MergeTree com uma projeção
_part_offsetou de ordem de commit se tornava permanentemente impossível de anexar apósallow_part_offset_column_in_projectionsouallow_commit_order_projectionser desativada e a tabela ser desanexada ou o servidor reiniciado. Essas duas configurações são controles no momento do CREATE; portanto, não são mais verificadas no ATTACH. #110570 (Groene AI). - Com
analyzer_compatibility_join_using_top_level_identifier = 1, agora é possível resolver um identificador emJOIN... USINGa partir de um alias definido em uma subexpressão na lista SELECT (por exemplo,SELECT uniqExact(lower(x) AS id) FROM t1 JOIN t2 USING (id)), reproduzindo o comportamento do analyzer antigo. Antes, apenas aliases de projeção de nível superior eram considerados, e essas consultas falhavam com uma exceçãoUNKNOWN_IDENTIFIER, mesmo com a configuração habilitada. A sugestão de erro referente à configuração agora também é exibida quando o alias correspondente está aninhado. #110739 (Dmitry Novik). - Corrige um problema em que solicitações não autenticadas podiam fazer com que o ClickHouse resolvesse hostnames fornecidos em headers encaminhados de endereço do cliente. O ClickHouse agora aceita apenas endereços IP numéricos desses headers. Valores inválidos são ignorados na atribuição de cota por endereço encaminhado, sem resolução de DNS. Quando
auth_use_forwarded_addressestá habilitado, endereços encaminhados inválidos são rejeitados durante a autenticação. As rejeições são registradas no nível de depuração. #111060 (Dmitriy Borisenko). - Corrige
NOT_FOUND_COLUMN_IN_BLOCKquando uma ROW POLICY eadditional_table_filtersfazem referência à mesma coluna, que não é selecionada de outra forma pela consulta. #111099 (Groene AI). - Corrige o erro
UNKNOWN_IDENTIFIERpara colunas qualificadas pelo nome da CTE (cte_name.column) em consultas armazenadas em views quando o analyzer está habilitado. #111386 (Dmitry Novik). - Corrige um
LOGICAL_ERROR(Got read request from replica N for unknown stream...) que podia interromper o servidor ao fazer leituras com réplicas paralelas, quando a consulta era totalmente respondida no iniciador por uma otimização de PROJECTION (contagem exata, contagem minmax ou uma projeção agregada/normal armazenada que não seleciona intervalos). #111689 (Groene AI). - Corrige um overflow de inteiro com sinal na sobrecarga de três argumentos de
toStartOfInterval: para um argumentooriginpróximo ao limite inferior deInt64, a função retornava um valor com wraparound em vez de informar um erro. #112045 (Alexey Milovidov). - Corrige uma exceção
LOGICAL_ERROR(Block structure mismatch in joined block stream) em um join de várias tabelas cujos dois subjoins não produzem colunas de saída, por exemplo,SELECT count() FROM t1, t2, t3, t4 WHERE (t1.b = t2.b) AND (t3.a = t4.a)comquery_plan_optimize_join_order_limitdefinido como0ou1. #112205 (Groene AI). - Corrige a função de tabela
values, que renderizava uma constanteBoolnão literal (por exemplo,CAST(true, 'Nullable(Bool)')) inserida em uma colunaString/textual como1/0em vez detrue/false. #112308 (Yakov Olkhovskiy). - Corrige um
LOGICAL_ERROR(partitions_count > 0) ao particionar data chunks deIcebergesvaziados por exclusões por posição, por exemplo, durante a compactação de uma tabelaIcebergparticionada com data files totalmente excluídos. #112432 (Pedro Ferreira). - Corrige a inferência de esquema que propunha um tipo numérico para valores de texto que o analisador de valores não consegue interpretar. A inferência aceitava um expoente incompleto (
1e+), uma mantissa ausente (.) ou um sinal repetido (++inf), masreadFloatTextPreciseos rejeitava comCANNOT_PARSE_NUMBERao ler o esquema inferido; em uma colunaDynamic, isso causava um erro durante o INSERT. A inferência agora valida o número usando o analisador que o leitor realmente utiliza. Isso também elimina um caso em que o tipo inferido dependia demax_read_buffer_sizee permite que formas válidas de expoente com zero à esquerda, como0e5, infiramFloat64em TSV, como já ocorre em CSV. Segue #112226 e resolve a parte relacionada ao expoente de #112105. #112453 (Groene AI). - Informa a posição correta dos erros em consultas PromQL. #112494 (Minh Vu).
- Corrige um
LOGICAL_ERROR(Cannot add transform Resize to Pipes because it has no outputs) quando uma consulta com agregação em um cluster é executada comserialize_query_plan = 1e réplicas paralelas baseadas em plano. O problema era causado pela etapa de mesclagem redimensionar o pipeline para zero fluxos. #112506 (Groene AI). - Corrige um underflow sem sinal na verificação do comprimento do nome da tabela que permitia criar uma tabela que nunca poderia ser removida. Quando o nome do banco de dados escapado atingia 214 bytes, o limite calculado para o nome de arquivo
metadata_droppedsofria wraparound, de modo queCREATE TABLEera aceito e oDROP TABLEouDROP DATABASEsubsequente falhava comFile name too long. Esse nome agora é rejeitado comARGUMENT_OUT_OF_BOUND, o mesmo erro que já era retornado logo abaixo desse limite. #112527 (Groene AI). - Corrige a exceção
Context has expiredquandogetClientHTTPHeaderé usado dentro de uma subconsulta. #112533 (Alexey Milovidov). - Corrige a rejeição incorreta, por
s3_allow_server_credentials_in_user_queries, de umaextra_credentials(role_arn = '...')fornecida pela consulta. A assunção de função STS com uma função explícita agora é sempre permitida: ela não expõe as credenciais do próprio servidor à consulta e é a forma documentada de conceder acesso a um bucket do S3 privado. #112603 (Raúl Marín). - Corrige os contadores de leitura (
read_rows,read_bytes,ProfileEvents['SelectedRows'],ProfileEvents['SelectedBytes']) e a cobrança excessiva das quotasREAD_ROWSeREAD_BYTESpara consultas cujoORDER BYfaz spill para disco. Linhas relidas dos arquivos temporários da ordenação externa eram novamente contabilizadas como leituras da origem; assim, uma consulta com spill superestimava o que leu e podia ser rejeitada comQUOTA_EXCEEDED, embora permanecesse dentro de sua quota. #112645 (Groene AI). - Corrige uma tabela Iceberg com formato de gravação
Avroque serializava como obrigatório um campo declarado com"required": falsee do tipolist,mapoustruct, sem a união["null", T]. Com isso, o esquema do próprio arquivo de dados divergia dos metadados da tabela, e outros leitores Iceberg identificavam o campo como obrigatório. Esse campo agora é gravado como a união["null", T]que a especificação Iceberg usa para campos opcionais. #112648 (Groene AI). - Corrige tabelas
DeltaLakeque retornavam menos linhas do que deveriam quando o predicadoWHEREcontém uma subexpressão que o tradutor de predicados do delta-kernel não consegue processar sob umNOT. Essa subexpressão agora é informada ao delta-kernel como um predicado explicitamente desconhecido, em vez de como o fim do iterador filho, o que antes truncava silenciosamente a conjunção externa. #112652 (Groene AI). - Corrige corrupção de heap que poderia causar a falha do servidor durante o desligamento, provocada pelo método
constAccessRights::getFiltersmodificar uma árvore de direitos de acesso compartilhada por consultas concorrentes. #112692 (Groene AI). - Corrige um erro lógico na formatação de consultas quando uma cláusula
ARRAY JOINnão contém expressões. Essa cláusula agora é rejeitada durante a análise sintática comSYNTAX_ERROR, como ocorre com umUSINGvazio, em vez de ser aceita e formatada como texto que não pode ser analisado novamente. #112699 (Groene AI). - Corrige um travamento de consulta na execução local de planos de consulta distribuída (
distributed_plan_execute_locally = 1): o leitor de intercâmbio em memória podia bloquear a única thread do pipeline antes do início das fontes que produzem seus dados. #111762 (Alexander Gololobov). - Corrige campos
Icebergdeclarados com"required": false, com tipolist,mapoustruct, que eram gravados comoREQUIREDno rodapé doParquet. Esses campos agora são gravados comoOPTIONAL, correspondendo ao esquemaIcebergpublicado e a outros leitores. #112669 (Groene AI). - Corrige um uso de heap após liberação no executor de pipeline que poderia causar a falha do servidor quando uma consulta remove processadores em tempo de execução (por exemplo,
FINALcom leituras tardias ou ordenação externa), encontrado pelo AST fuzzer. #111017 (Groene AI). - Corrige um uso após liberação (falha de segmentação) quando uma consulta com um snapshot de armazenamento compartilhado (configuração
enable_shared_storage_snapshot_in_query) remove partes de dados do snapshot — por exemplo, uma subconsulta de streaming que lê a mesma tabelaMergeTreeque outra parte da consulta lê concorrentemente. #111192 (Alexey Milovidov). - Rejeita, no momento de
CREATE TABLE, usos sem suporte de colunasAggregateFunctionem expressões TTL (por exemplo,TTL toDateTime(state)), em vez de falhar posteriormente durante a execução da TTL comILLEGAL_TYPE_OF_ARGUMENT. Isso também abrange estados contidos em alternativasVariante valoresDynamic. Consumidores válidos que reconhecem estados, comofinalizeAggregation, continuam sendo aceitos. #107366 (Ria Khatoniar). - Corrige um
LOGICAL_ERROR(CTE '...' does not have query tree, but was not planned yet) quando uma CTEMATERIALIZEDé referenciada em mais de uma posição na árvore de join (por exemplo, em duas subconsultas unidas ou em uma subconsulta unida e uma subconsulta escalar emWHERE) em uma consulta sobre uma tabelaDistributed. A consulta agora é executada em vez de gerar a exceção (que abortava o servidor em compilações de depuração/sanitizer). #108924 (Groene AI). - Preserva a ordem original das chaves na serialização de Map em buckets para corrigir operações de comparação que dependem dela. #109178 (Pavel Kruglov).
- Corrigido o problema em que
made_current_atemsystem.iceberg_historyse tornava1970-01-01para um snapshot retido apósALTER TABLE... EXECUTE expire_snapshotsem uma tabela Iceberg. Também corrigido o problema em quesystem.iceberg_historynão retornava linhas para uma tabela cujos metadados não contêmsnapshot-log. #111781 (Groene AI). - Corrige uma tentativa de análise de texto
FixedStringque deixa bytes parcialmente acrescentados à coluna quando a análise falha, o que pode causar o erro lógicoSizes of nested column and null map of Nullable column are not equaldurante a serialização de colunasVariant/Array/Nullable, ou deslocar silenciosamente os bytes do resultado. #111908 (Groene AI). - Corrige
replaceOne,replaceAll,replaceRegexpOneereplaceRegexpAll, que ignoravammax_execution_timeeKILL QUERY. Agora, uma única chamada verifica se houve cancelamento durante a execução, para que uma substituição longa em um valor grande ou em muitas linhas seja interrompida, em vez de manter uma thread do servidor ocupada até ser concluída. Essa chamada não tem resultado parcial para retornar; portanto, comtimeout_overflow_mode = 'break', o prazo excedido gera um erro: sempre durante a redução de constantes e, no pipeline, sempre que esse ponto de verificação for alcançado antes da verificação do executor entre blocos, que ainda interrompe a consulta silenciosamente. #112483 (Groene AI). - Corrige um erro lógico e um registro de dependência incorreto quando o corpo de uma
VIEWcomum referencia uma tabela ou dicionário por meio de um parâmetro de consulta, como emCREATE VIEW v AS SELECT x FROM {db:Identifier}.t. Essa visualização deixa de registrar uma dependência referencial em uma tabela de mesmo nome no banco de dados atual, permitindo que tabelas não relacionadas sejam removidas novamente. #112704 (Groene AI). - Corrige a leitura com tipo incorreto de uma subcoluna de elemento
Nestedcuja coluna foi removida e adicionada novamente. Selecionar essa subcoluna junto com sua coluna pai retornava o elemento inteiro no lugar da subcoluna, enquanto o bloco ainda declarava o tipo do elemento, produzindo valores arbitrários em compilações de lançamento e um erro lógico em compilações de depuração e com sanitizer. #112769 (Groene AI). - Corrigido
Cannot read all data of type FixedStringao ler a subcolunaproduct_quantization_codebookde uma coluna com o codecQuantized('product',...). O livro de códigos de cada parte é gravado após os dados de todos os grânulos; portanto, não é delimitado por marcas, e uma leitura cujo intervalo de marcas terminava antes da marca final da parte podia lê-lo de forma incompleta. #112818 (Alexey Milovidov). - Corrige uma falha de segmentação e corrupção silenciosa de dados quando um
INSERTno mecanismoFileou na função de tabelafileacrescenta dados a um arquivo não vazio em um formato que não oferece suporte a anexação, comoAvro. A gravação por meio de um descritor de arquivo ou de um caminho particionado ignorava a verificação existente, de modo que o prefixo do formato era suprimido e um segundo cabeçalho era gravado após os bytes existentes, deixando o arquivo ilegível. EsseINSERTagora é rejeitado comCANNOT_APPEND_TO_FILE, como já ocorre para um caminho simples. #112839 (Groene AI). - Corrige
connectionIdque geravaContext has expiredquando usada em uma subconsulta, capturando o ID de conexão do cliente quando a função é criada. Fecha #112533. #112870 (ClickGap AI Bot). - Corrigida a análise de inteiros que não cabem no tipo de destino em
Poco::NumberParser, usado para ler números JSON. Esses números eram silenciosamente analisados como valores incorretos (por exemplo,18446744073709551617se tornava1) em vez de serem rejeitados, e um númeroUInt64acima do máximo deInt64não sobrevivia a uma conversão de ida e volta para JSON do AST. #112904 (Alexey Milovidov). - Corrigido
IS DISTINCT FROMpara valoresArrayeMapcomparados aNULL. Fecha #103042. #103162 (yanglongwei). - Impedido que tentativas esgotadas de DDL distribuído replicado executado pelo líder bloqueiem permanentemente consultas DDL
ON CLUSTERsubsequentes. #108505 (Ahaan Limaye). - Corrigido um
LOGICAL_ERROR(“Tentativa de extrair um fragmento do ChunkBuffer antes de todas as entradas serem concluídas”) quando uma operação de conjunto (INTERSECT/UNION ALL/EXCEPT) combina ramificações que usam subconsultas correlacionadas ecorrelated_subqueries_default_join_kind = 'left'. #108554 (Groene AI). - A conversão de valores de ponto flutuante fora do intervalo (
BFloat16,Float32,Float64) e de valoresUInt64acima deInt64::max()paraDateTimeeTimeagora satura de forma confiável nos limites do intervalo em todas as arquiteturas (anteriormente, o resultado de uma conversão fora do intervalo dependia da arquitetura e podia ocorrer overflow em x86-64), e valores não finitos (NaN,inf) agora lançam uma exceção em vez de produzir um resultado arbitrário. A mesma correção foi aplicada ao caminho de conversão de ponto flutuante paraDateemtoDatee às conversões deUInt64e inteiros largos ((U)Int128,(U)Int256) paraDateeDate32, que podiam retornar um dia anterior à época em vez de saturar. A conversão de um número paraTimeagora satura no intervalo do tipo para todos os tipos de origem numéricos (anteriormente, valores de fontes inteiras estreitas sem sinal ou inteiras largas eram armazenados sem limitação e limitados apenas na impressão), e a conversão precisa paraTimenão rejeita mais os valores negativos compatíveis comTime, nem satura silenciosamente valores que não cabem nele. A conversão precisa de um número paraDate32(accurateCast,accurateCastOrNull) não satura mais silenciosamente valores fora do intervalo ou não finitos, mas lança uma exceção ou retornaNULL, como já fazia paraDateeDateTime, e as variantesOrDefaultretornam o valor padrão deDate32para essas entradas. A conversão precisa de um número de ponto flutuante não integral paraDate,Date32,DateTimeouTimeagora é rejeitada em vez de ser silenciosamente truncada. Também foi corrigida a documentação da funçãotoDateTime32, que erroneamente mostrava exemplos detoDateTime64e descrevia o intervalo de valores deDateTime64. #110459 (Alexey Milovidov). ALTER TABLE... DETACH PARTITION/PARTagora executa fsync no clone criado emdetached/(a subárvore da parte e a cadeia de diretórios até a raiz do disco) quando a configuraçãofsync_part_directoryda tabela está habilitada, tanto para o armazenamento de partes Full (diretório) quanto Packed. Anteriormente, o clone nunca recebia fsync, enquanto a parte de cobertura vazia que remove as linhas do conjunto ativo recebia, de modo que uma queda de energia logo após a confirmação podia destruir os dados desanexados no btrfs (as entradas de diretório não sincronizadas do clone são revertidas, deixandodetached/vazio e nada paraATTACH). Condicionado à configuração existentefsync_part_directory; o comportamento padrão permanece inalterado. #111426 (Groene AI).- Corrige
CREATE OR REPLACE, que deixava o objeto substituído sob um nome interno quando o chamador não tinha privilégio para excluí-lo. #111466 (Nikolay Degterinsky). - Corrigida uma falha ao executar uma leitura
STREAM(enable_streaming_queries = 1) em uma tabela com mais de uma partição e uma política de linhas definida. Em compilações de depuração e com sanitizer, falhava com o erro lógicoFilter column... not found in DAG outputs; em compilações de release, poderia causar uma falha de segmentação. #111572 (Groene AI). - Corrige
count()em tabelas Iceberg cujo resumo do snapshot é impreciso ou corrompido: a otimização trivial de contagem agora obtém contagens exatas de linhas dos arquivos de manifesto e recorre a uma varredura real quando exclusões em nível de linha tornam imprecisas as contagens dos metadados. Também corrige oOPTIMIZE TABLEdo Iceberg, que gravava contagens e linhagem incorretas da lista de manifestos, e torna os metadadostotalBytesrobustos contra resumos corrompidos. #111617 (Melvyn Peignon). - Corrige o preenchimento de uma coluna DEFAULT ausente em uma parte com o valor padrão do tipo, em vez da expressão DEFAULT, quando a condição PREWHERE era dividida em várias etapas de leitura. Fecha #111757. #111795 (Yarik Briukhovetskyi).
- Corrigidos os erros lógicos
Expected UInt64 column for __grouping_set, got BLOBeColumnBLOB should be converted to a regular column before usageem uma consulta distribuída executada em um fragmento comenable_parallel_blocks_marshalling(habilitado por padrão), por exemplo, comGROUP BY GROUPING SETSem um cluster com uma réplica local ou ao ler uma tabelaMergeque abrange uma tabela local e uma tabela distribuída.BlocksMarshallingStepnão é mais adicionado a planos cujos blocos são consumidos no mesmo processo. #111997 (Groene AI). - As operações agora falham quando estatísticas MergeTree corrompidas são carregadas, em vez de ignorarem o erro. #112201 (Sergey Kuznetsov).
- Corrige um erro lógico ao usar PREWHERE em uma tabela Merge sobre outra tabela Merge ou uma visão materializada com tipo de coluna diferente. Também corrige o problema de uma política de linhas ser silenciosamente ignorada em tabelas que leem de servidores remotos (uma tabela Distributed ou uma tabela que a encapsula), o que poderia expor linhas que a política deveria ocultar; essas consultas agora são rejeitadas com um erro ILLEGAL_PREWHERE. Em vez disso, defina essas políticas nas tabelas locais subjacentes em cada servidor remoto; observe que essa política ainda não é aplicada a leituras enviadas com
serialize_query_plan = 1, o que é um bug separado e preexistente. #112326 (Pedro Ferreira). - Corrige
connection_pool_max_wait_mspara que seu valor documentado e padrão,0, signifique um timeout infinito. Uma consulta que encontrava o pool de conexões cheio repetia tentativas em um loop apertado, consumindo CPU e registrandoNo free connections in pool. Waiting 0 ms.a cada iteração. Agora, ela aguarda até que uma conexão seja devolvida ao pool. Fecha #112053. #112380 (Groene AI). - Corrige a perda silenciosa de gravações Iceberg confirmadas no HDFS: um commit do Iceberg publica cada novo arquivo de metadados com uma gravação condicional, mas
HDFSObjectStoragedescartava a condição e realizava uma sobrescrita simples, de modo que todos os gravadores simultâneos eram confirmados enquanto o snapshot de um deles se tornava inacessível. Agora, o HDFS recusa gravações condicionais; portanto, gravações Iceberg no HDFS gerenciadas pelo armazenamento, incluindoCREATE TABLE... ENGINE = IcebergHDFS(...)com uma lista explícita de colunas, agora falham. As leituras não são afetadas. #112437 (Groene AI). - Corrige uma leitura fora dos limites (uma falha em compilações de lançamento) na desduplicação de inserções quando um
INSERTpassa por uma visão materializada cuja consulta interna altera o número de linhas e a tabela de destino da desduplicação é particionada.DeduplicationInfo::filterToPartitionatribuía cada token de desduplicação às partições percorrendo o intervalo de linhas de origem do token em um seletor de partições dimensionado para o bloco de saída (menor) da visão, lendo além dos limites. Agora, mantém todos os tokens em todas as partições para qualquer destino de visão materializada — em que o mapeamento entre linhas de origem e partições deixa de existir após a alteração na contagem de linhas — em vez de fazer essa varredura fora dos limites (e de gerar oNOT_IMPLEMENTEDque uma verificação posterior acionava para a mesma inserção). #112649 (Sema Checherinda). - Corrige um erro lógico (que causa abortamento em compilações de depuração e com sanitizer) quando
finalizeAggregationé aplicado a uma coluna cujos estados agregados vêm de funções diferentes que compartilham uma representação de estado, mas são finalizadas em tipos diferentes — por exemplo,quantileStateequantilesState(0.9)combinados por umaUNIONou produzidos viaarrayReduce. Essas consultas agora geram um erro normal em vez de falhar. #112662 (Zain Ul Abidin). - Corrige o
DELETEem tabelasKeeperMap, que excluía apenas as primeirasmax_block_sizelinhas correspondentes, embora informasse que a mutação havia sido concluída com êxito. Também corrige oDELETEcomkeeper_map_strict_mode = 1, que não era atômico: ele podia recorrer a remoções sem versão e excluir linhas atualizadas simultaneamente, além de aplicar as linhas correspondentes bloco a bloco, de modo que um conflito poderia deixar a exclusão parcialmente aplicada. #112777 (Alexey Milovidov). - Corrige a aplicação de
ALTERem tabelasMergeTreeenquanto uma mutação de alteraçãoRENAME COLUMNincompleta ainda está em andamento. Isso poderia atualizar os metadados de armazenamento de forma incompatível e bloquear completamente mutações posteriores. #112783 (Mikhail Artemenko). - Corrige a falha na inicialização do servidor e em
ATTACHcomWITH RECURSIVE is not supported with the old analyzerpara uma visão com uma CTE recursiva quandoenable_analyzer = 0é o padrão do servidor. #112784 (Nikolay Degterinsky). - Corrige um erro lógico quando um mecanismo de tabela
Joiné usado no lado direito de um JOIN cuja seçãoONcontém uma condição que faz referência a colunas de ambas as tabelas, por exemplo,ON (t.key = j.key) AND (t.a < j.a). Essa consulta agora é rejeitada com uma exceção clara, em vez de gerarrequired columns:... but not found any in left tableoustd::bad_variant_access. #112815 (Groene AI). - Corrige resultados incorretos em um
JOINcuja cláusulaONcontém uma condição mista, ou seja, uma condição residual não equijoin entre os dois lados, comoON (t1.key = t2.key) AND (t1.a * 10 < t2.a). Apenas a família hash avalia essa condição, masfull_sorting_merge,partial_mergee o join direto de chave-valor alegavam poder executar esses joins e então ignoravam silenciosamente a condição residual, retornando linhas extras. Agora, eles recusam a execução, para que um algoritmo hash seja usado em seu lugar. #112831 (Groene AI). - Corrige o erro lógico
ReadBufferFromEncryptedFile: Wrong file positionao ler uma parteCompactde um discoencryptedcom E/S direta, que fazia as mesclagens ficarem travadas emsystem.replication_queue. #112943 (Alexey Milovidov). - Corrige uma lentidão quadrática ao analisar uma consulta PromQL com uma longa sequência de caracteres não reconhecidos no final (por exemplo, um valor
FixedStringpreenchido com bytes NUL): a análise de uma entrada inválida de um megabyte mantinha uma thread ocupada por dezenas de minutos e não podia ser cancelada, pois ocorria durante a análise da consulta. Agora, o analisador para no primeiro erro. #112944 (Alexey Milovidov). - Rejeita durações PromQL cujas unidades se repetem ou não estão ordenadas da maior para a menor. #112954 (Minh Vu).
- Corrige um travamento ao gravar
Parquetcomoutput_format_parquet_parallel_encodinghabilitado (o padrão) emax_threadsmaior que 1. Se o codificador não conseguisse agendar uma thread adicional, o contador de threads ativas sofria underflow, e a gravação podia deixar de progredir permanentemente, em vez de ser concluída ou reportar um erro. #112959 (Groene AI). #113170 (Alexey Milovidov). - Corrige
geohashesInBox, que consumia tempo ilimitado com uma caixa de área zero, comogeohashesInBox(0., 0., 180., 0., 12). Essa consulta retornava o único geohash correto, mas consumia aproximadamente 5e8 iterações vazias de loop por linha e ignorava tantomax_execution_timequantoKILL QUERY. #112976 (Groene AI). - Corrige comportamento indefinido (ponteiro nulo passado para
memcpy) emreplaceRegexpOne/replaceRegexpAllquando a string de substituição referencia um grupo de captura que não participou da correspondência, por exemplo,replaceRegexpAll('abc', '(a)|(b)', '\\2'). #113012 (Alexey Milovidov). - Rejeita uma alteração de
SETTINGSmarcada como gravada sem valor quando ela contém um valor diferente detruee nunca omite o valor dessa alteração ao formatar uma consulta. Anteriormente, um payload JSON de AST especialmente elaborado podia executar uma configuraçãoBoolcomfalse, enquantosystem.query_logeformatQueryFromJSONexibiam a forma sem valor. #113025 (Alexey Milovidov). - Corrige comportamento indefinido e um erro silencioso de agendamento quando uma tarefa em segundo plano é agendada com um atraso muito grande, por exemplo, por uma visão materializada atualizável com um período
REFRESH AFTERenorme. Agora, os atrasos são limitados ao maior valor representável, em vez de sofrerem overflow. #113041 (Groene AI). - Corrige uma gravação fora dos limites ao ler uma coluna
DECIMALdeParquetcujo tipo físico é mais amplo que o tipo ao qual sua precisão declarada é mapeada, por exemplo,DECIMAL(9, 2)armazenado fisicamente comoINT64. Esses arquivos sãoParquetválidos e outros gravadores os produzem, mas o leitor dimensionava a coluna de destino com base na precisão declarada, enquanto o decodificador gravava a largura física, corrompendo a memória. Agora, a leitura desse arquivo também geraDECIMAL_OVERFLOWquando um valor não cabe na precisão declarada, em vez de retornar dados corrompidos, e é feita sem perdas com uma dica de tipo que tenha pelo menos a largura do tipo físico. #113046 (Groene AI). - Corrigido o
intDivem uma coluna não constante com divisor constante -1, que sofria overflow silencioso ao dividir o menor número com sinal (por exemplo,intDiv(-9223372036854775808, -1)) em vez de lançar a exceçãoILLEGAL_DIVISION, como ocorre nos outros caminhos de execução. Esse overflow silencioso também podia produzir resultados incorretos deORDER BY/DISTINCT, pois a otimização de leitura ordenada trata corretamente ointDivpor uma constante negativa como monotônico, mas o valor resultante do overflow violava a ordenação esperada. #113048 (Alexey Milovidov). - Corrigida uma incompatibilidade que impedia o carregamento, em versões posteriores, de índices de texto criados no ClickHouse 26.3 com o tokenizer
unicode_word. #113061 (Robert Schulze). - Corrigido um erro lógico
Pipeline stuckem consultas que distribuem dados por partição, como uma função de janela comPARTITION BYou um join comjoin_algorithm = 'parallel_full_sorting_merge', quando o processamento posterior de um shard era concluído enquanto um bloco ainda era distribuído parcialmente. #113190 (Groene AI). - Corrigidos resultados incorretos quando um hash join tem uma única chave
LowCardinalityde tipo maior que 8 bytes (UInt128,Int128,UInt256,Int256e suas variantesNullable). Esse join retornava silenciosamente linhas cujos valores de chave não eram iguais. #113230 (Groene AI). - Corrigido um problema em
ALTER TABLE ... ADD PROJECTIONaplicado a uma colunaALIASde nível de tabela, que deixava a tabela inutilizável e faziaINSERTsubsequentes falharem comUNKNOWN_IDENTIFIER(Missing columns) quando a sessão tinhaoptimize_respect_aliases = 0. #109091 (Groene AI). - Corrigidas as exceções
NOT_FOUND_COLUMN_IN_BLOCKeLOGICAL_ERRORem umJOINdirectsobre uma tabelaMergeTreedo lado direito, bem como abortos relacionados em compilações de depuração e com sanitizer. #109932 (Groene AI). - Corrigidas comparações que anteriormente lançavam
ILLEGAL_TYPE_OF_ARGUMENTquando os operandos não têm um menor supertipo comum. Arrays comoArray(Int64)vsArray(UInt64)eArray(Int256)vsArray(UInt256)agora podem ser comparados lexicograficamente com=,!=,<,<=,>,>=,IS DISTINCT FROMeIS NOT DISTINCT FROM.isDistinctFromeisNotDistinctFromagora também comparam por valor pares numéricos e decimais compatíveis que não são Arrays, em vez de lançar uma exceção, e a comparação de igualdade para Arrays aninhados emTuple(Nullable(...))também foi corrigida. Resolve #33897. #110245 (Diego Gomes Tomé). - Corrigido um
LOGICAL_ERROR(Bad cast from ColumnString to ColumnLowCardinality) durante a análise do índice de chave primária quando uma coluna-chaveLowCardinalityé encapsulada em uma cadeia aninhada deCASTque reintroduzLowCardinality, por exemplo,WHERE CAST(CAST(s, 'LowCardinality(String)'), 'String') < '5'. Em compilações de depuração e com sanitizer, isso abortava o servidor; em compilações de release, fazia a consulta falhar. #111050 (Groene AI). - Corrigidos resultados incorretos em um
FULL JOINem uma tabela com mecanismoJoinusandoUSING, quando a chave à esquerda éNullablee a chave de armazenamento não é: uma linha à esquerda sem correspondência, com chaveNULL, retornava0em vez deNULL. #111371 (Groene AI). - Corrige a visibilidade de versões obsoletas e excluídas de linhas quando um banco de dados
MaterializedPostgreSQLé lido por meio de uma tabelaMerge. Essas leituras agora passam pelo wrapperMaterializedPostgreSQL, com a mesma filtragem porFINALe_sign = 1das leituras diretas. #112382 (Alexey Milovidov). - Corrige
Bad cast from ColumnNullable to ColumnStringquando uma mutação que reescreve toda a parte é executada em uma parte cujo tipo de coluna é mais antigo que o definido nos metadados da tabela, por exemplo, apósALTER TABLE ... MODIFY COLUMNseguido deALTER TABLE ... MATERIALIZE PROJECTION. #112501 (Alexey Milovidov). - Corrige formatos de entrada baseados em linhas que ignoravam
KILL QUERYemax_execution_timepor vários minutos durante a análise de um bloco. Agora, eles verificam cancelamentos a cada 8192 linhas, para que umINSERTencerrado (incluindo uma descarga assíncrona em segundo plano de async-insert) seja interrompido prontamente, em vez de continuar até o fim do bloco. #112646 (Groene AI). - Corrige
RENAME TABLE, que verificava o comprimento máximo do nome da tabela em relação ao banco de dados de origem, em vez do banco de dados de destino. Renomear uma tabela para um banco de dados com nome longo podia produzir uma tabela queDROP TABLEnão conseguia remover, e renomear uma tabela para fora desse banco de dados era incorretamente rejeitado. #113019 (Groene AI). - Corrige
UNKNOWN_IDENTIFIERao selecionar de umaVIEWcujos tipos de coluna declarados diferem dos tipos produzidos por sua consulta interna, por exemplo,SELECT sum(length(arr)) FROM v, em quevdeclaraarr Array(UInt8)sobre uma colunaString. Com o padrãooptimize_functions_to_subcolumns = 1, o otimizador reescrevialength(arr)como uma leitura da subcolunaarr.size0e encaminhava esse nome para a consulta interna, que não possui essa subcoluna. #113057 (Groene AI). - Corrige uma exceção (em builds de release, um erro que impede o servidor de iniciar) quando um predicado de mutação usa a função de tabela
mergesem um nome de banco de dados explícito. Agora, é usado o banco de dados da tabela modificada, da mesma forma que para nomes de tabelas. #113185 (Alexey Milovidov). - Corrige resultados incorretos e um
LOGICAL_ERRORao ler uma subcoluna de um membroNestedremovido e adicionado novamente, junto com um membro existente do mesmo grupo, em uma tabelaMergeTreecomshare_nested_offsets = 1. Os membros existentes retornavam valores de um bloco posterior sempre que a leitura abrangia mais de um bloco. #113225 (Groene AI). - Corrige o travamento de instruções
ALTER,OPTIMIZE,TRUNCATEe de manipulação de partições comalter_sync = 2emReplicatedMergeTreequando a tabela começa a ser encerrada enquanto a instrução aguarda outra réplica, por exemplo, devido a umDROP DATABASE ... SYNCconcorrente. Essa instrução agora falha comUNFINISHEDe também respeitamax_execution_timeeKILL QUERY. #113228 (Groene AI). - Não grava sequências de escape ANSI em
INTO OUTFILEquandostdouté um TTY. #113252 (Azat Khuzhin). - Corrige um raro uso após liberação de memória na fila de inserção assíncrona quando entradas diferentes têm prazos idênticos. #113363 (Miсhael Stetsyuk).
- Corrige tabelas que ficavam silenciosamente vazias quando mais de um banco de dados com
ENGINE = Backupé criado a partir do mesmo backup ou quando esse banco de dados é recriado com outro nome. A política de armazenamento que dá suporte a um banco de dadosBackupagora é identificada por um nome que também inclui o nome do banco de dados local, garantindo que cada banco de dados receba o disco criado para seu próprio caminho de dados. #113378 (Groene AI). - Corrige linhas que nunca eram excluídas quando uma tabela
MergeTreetem duas ou mais regrasTTL ... DELETE WHEREcom a mesma expressão de tempo e que diferem apenas na condiçãoWHERE. Após uma mesclagem de exclusão por TTL, orows_where_ttl_infoda parte era redefinido para zero; portanto, nenhuma outra mesclagem por TTL era agendada para ela, e as linhas expiradas eram retidas indefinidamente, sem erro ou mensagem de log. Fecha #113116. #113384 (Groene AI). - Uma consulta em uma tabela
Merge(ou na função de tabelamerge) que corresponde a muitas tabelas agora responde aKILL QUERYemax_execution_timeenquanto os planos de consulta individuais são criados, em vez de apenas após a conclusão do planejamento de todas as tabelas filhas. Comtimeout_overflow_mode = 'break', ela também deixa de criar planos de consulta para as demais tabelas correspondentes e retorna o resultado parcial sem erro, conforme documentado para esse modo. #113415 (Alexey Milovidov). #113642 (Groene AI). - Corrige o
clickhouse-clientque saía com o código139em vez de0após cancelar uma consulta com Ctrl+C ou após umINSERTque lê dados da entrada padrão. #113431 (Groene AI). - Permite que as expressões
preprocessorepostprocessorde um índice de texto façam referência a colunasALIAS. #110014 (Jimmy Aguilar Mena). - Corrige vários casos em que réplicas paralelas retornavam linhas duplicadas:
distributed_aggregation_memory_efficientera ignorado por réplicas paralelas baseadas em plano, fazendo com que os buckets da mesclagem eficiente em memória chegassem fora de ordem e fossem mesclados duas vezes; além disso, um shard era lido de todas as réplicas mesmo quando os dados não estavam divididos entre elas, caso as réplicas paralelas não se aplicassem à consulta ou quandoparallel_replicas_modesolicitava filtragem por chave personalizada semparallel_replicas_custom_key. #112942 (Nikita Taranov). - Corrige o caso em que
CREATE TABLE ... AS SELECTse tornava impossível de interromper quando seuSELECTde preenchimento falhava edatabase_atomic_wait_for_drop_and_detach_synchronouslyestava habilitado: oDROPinterno de limpeza da tabela temporária aguardava a fila de remoção em segundo plano e ignorava tantoKILL QUERYquantomax_execution_time. #113504 (Groene AI). - Corrige
ALTER TABLE ... EXECUTE remove_orphan_files, que excluía um arquivometadata/version-hint.textem uso de uma tabelaIceberg. A entrada do conjunto de arquivos alcançáveis era criada por concatenação de strings, presumindo uma barra final em um valor que nunca a possui; assim, o arquivo de indicação real nunca era reconhecido como alcançável e era removido quando ficava mais antigo que o limiteolder_than. Comiceberg_use_version_hint = 1, a tabela passava a não conseguir ler nenhum dado. #113548 (Groene AI). - Corrigida uma view parametrizada que perdia seu banco de dados quando uma consulta que a referenciava sem qualificação era enviada a um shard, fazendo com que o shard resolvesse o nome usando seu próprio banco de dados padrão. Dependendo do conteúdo desse banco de dados, a consulta falhava com
UNKNOWN_FUNCTIONou retornava silenciosamente linhas de uma view diferente. AfetaIN,JOINeremotepor meio de uma tabelaDistributed. #113550 (Groene AI). - Corrigido um
LOGICAL_ERRORquando uma consulta filtrasystem.databasespela colunanamecom uma subconsulta dentro deindexHint, por exemploSELECT count() FROM system.databases WHERE indexHint(name IN (SELECT 'foo')). #113556 (Groene AI). - Corrigido um loop infinito em mesclagens em segundo plano e no
OPTIMIZEquandomerge_max_block_size_bytesera definido abaixo dobyteSize()de uma coluna vazia. Uma colunaLowCardinalityvazia ainda mantém seu dicionário, portanto o limite de bytes podia ser atingido antes da mesclagem de uma única linha; a mesclagem então produzia blocos vazios indefinidamente, consumindo 100% de um núcleo de CPU e sem liberar sua vaga no pool em segundo plano. #113585 (Groene AI). - Corrigida uma consulta em uma coluna
Variantque ignoravamax_execution_timeeKILL QUERY. Chamar uma função com vários argumentosVariantresolvia a função uma vez para cada alternativa de cada argumento, e nenhum dos dois loops que realizavam esse trabalho verificava se havia cancelamento; portanto, essa consulta não podia ser interrompida até ser concluída. #113612 (Groene AI). - Corrigido
Unknown compression methodpara as indicações de compressãoautoenonequando escritas em uma combinação de maiúsculas e minúsculas diferente de totalmente em minúsculas, por exemplofile('data.csv.gz', 'CSV', 'x String', 'AUTO'). Nomes de codec comoGZIPjá eram aceitos sem diferenciação entre maiúsculas e minúsculas; as duas indicações especiais agora se comportam da mesma forma. #113631 (Groene AI). - Corrigido o constant folding no novo analisador, que alterava o tipo de um valor constante
Geometry.Geometryé umVariantnomeado cujas alternativas podem compartilhar o mesmo layout de armazenamento (LineString/Ring,MultiLineString/Polygone valores vazios), portanto duas constantes resultantes do constant folding que diferiam apenas na alternativa podiam se tornar uma só; por exemplo,MULTIPOLYGON EMPTYse tornavaLINESTRING(). #110709 (Groene AI). - Corrigida uma exceção (
Cannot calculate columns sizes when columns or checksums are not initialized) durante a mesclagem de uma tabelaMergeTreede coluna única, cuja única coluna tem umTTLque expira integralmente, commin_bytes_for_wide_part = 1. #111169 (Groene AI). - A falha ao iniciar um pool de agendamento em segundo plano (por exemplo, o pool
icebergquando o pool global de threads está esgotado) não encerra mais o servidor: o erro agora é uma exceção recuperável. A leitura desystem.background_schedule_pooltambém não cria mais esses pools como efeito colateral. #111209 (Groene AI). - Corrigida uma leitura fora dos limites no protocolo nativo em dados de índice corrompidos. #112331 (Pavel Kruglov).
- Corrigido um deadlock que trava permanentemente um banco de dados
FilesystemouHDFSquando duas consultas resolvem o mesmo nome de tabela ao mesmo tempo. Todas as consultas posteriores a esse banco de dados ficam bloqueadas indefinidamente e não podem ser interrompidas, portanto é necessário reiniciar o servidor para recuperá-lo. #112495 (Groene AI). - Corrige a ineficácia silenciosa de
max_execution_timeeKILL QUERYpara uma consulta distribuída que está estabelecendo conexões com réplicas. Agora, essa consulta é interrompida na próxima tentativa de conexão, em vez de percorrer todas as réplicas e tentativas restantes. #112689 (Groene AI). - Corrige o bloqueio de
DROP TABLEeSYSTEM STOP VIEWquando uma view materializada atualizável fica bloqueada durante o planejamento da consulta de atualização. #113188 (Nikolay Degterinsky). - Corrige
CREATE TABLEcomENGINE = Distributed(...)ouENGINE = Buffer(...)sem lista de colunas que revelava a estrutura de uma tabela referenciada que o usuário criador não tem permissão para visualizar. Em umCREATElocal, a estrutura agora é inferida no contexto do próprio usuário; portanto, é necessária permissão para executarSHOW COLUMNSna tabela referenciada. UmCREATEreproduzido da fila de DDL (ON CLUSTERou dentro de um banco de dadosReplicated) não é abrangido. #113220 (Groene AI). #113372 (Groene AI). - Corrige a leitura do banco de dados interno
_temporary_and_external_tablespor meio da função de tabelamergee do mecanismo de tabelaMerge, que permitia que uma sessão lesse as tabelas temporárias de outras sessões e usuários. Agora, uma expressão regular para bancos de dados ignora esse banco, e referenciá-lo explicitamente é negado, assim como o acesso direto a ele. #113224 (Alexey Milovidov). - Corrige
countSubstrings,countSubstringsCaseInsensitive,countSubstringsCaseInsensitiveUTF8,countMatchesecountMatchesCaseInsensitiveignorandoKILL QUERYemax_execution_time: uma chamada em muitas linhas, com muitas correspondências ou com um valor grande podia continuar em execução por minutos após o cancelamento da consulta. #113369 (Groene AI). #113886 (Groene AI). - Corrige uma mutação de uma parte Compact que produzia resultados diferentes dependendo de as informações de serialização da parte ainda estarem na memória ou terem sido recarregadas de
serialization.json, quando a tabela usaserialization_info_version = 'basic'. EmReplicatedMergeTree, isso fazia com que duas réplicas com uma parte de origem idêntica byte a byte gravassem partes mutadas diferentes, e a mutação falhava comCHECKSUM_DOESNT_MATCH. Fecha #113500. #113588 (Groene AI). - Corrige
made_current_atemsystem.iceberg_history, que informava o momento mais antigo em que um snapshot se tornou atual, em vez do mais recente, quando o mesmosnapshot-idaparece mais de uma vez nosnapshot-logdoIceberg(como ocorre após uma reversão). #113598 (Groene AI). - Corrige valores incorretos para colunas virtuais como
_tableou_databaseselecionadas no lado direito de umJOINcom uma fonte de chave-valor, comoEmbeddedRocksDB,KeeperMap,Redisou um dicionário. A consulta podia retornar um valor de coluna de dados em seu lugar ou falhar com uma exceçãoLOGICAL_ERROR. #113698 (Groene AI). - Corrige a falha de
EXPLAIN ANALYZEem uma tabelaMergecom vários filhos, umPREWHEREcom uma coluna simples e umWHEREseparado, com a mensagemRequired output position N is out of range for pass-through inputs. Fecha #113621. #113725 (Groene AI). - Corrigida a falha de
clickhouse-disks moveao mover um diretório, comDIRECTORY_ALREADY_EXISTS, em disks commetadata_type = plain_rewritable(por exemplo,s3_plain_rewritable), que também deixava um diretório de destino vazio. #113727 (Groene AI). - Corrigidas falhas nas leituras de tabelas
MergecomNo set is registered for key ...quando uma tabela filha declara uma colunaALIAScontendoINe as tabelas filhas divergem quanto ao valor padrão dessa coluna. #113757 (Groene AI). - Corrigido
UNKNOWN_IDENTIFIERcomenable_analyzer = 0quando uma cláusulaWHEREse refere a uma coluna produzida poruntupledentro de uma subconsulta, por exemplo,SELECT t.keys FROM (SELECT untuple(arrayJoin(m)) AS t FROM ...) WHERE t.values > 0. A reescrita deenable_optimize_predicate_expressioninseria esse predicado na subconsulta como umHAVING, onde o nome ainda não existe. #113760 (Groene AI). - Corrigida a falha de
ALTER TABLE ... MODIFY COLUMNcomCannot specify codec for column type ALIASquando uma instrução transforma uma colunaALIASem uma coluna física (DEFAULTouMATERIALIZED) e especifica umCODEC. Fecha #113693. #113853 (Groene AI). - Corrigidos
ORDER BY ALLeGROUP BY ALLem uma tabelaMergeassociada sob o analisador antigo (allow_experimental_analyzer = 0). A consulta não falha mais com uma exceção interna, e builds de depuração e com sanitizer não são mais interrompidos. #109139 (Groene AI). - Corrigida uma exceção esporádica
Cannot parse string ... as UInt64 ... While executing ValuesBlockInputFormatque podia ocorrer ao inserir valores cujas expressões contêm uma conversão numérica, comoinitializeAggregation('sumState', 0::UInt64). #110637 (Groene AI). - Corrigida a verificação periódica de disco local que relatava falhas em um disco íntegro. Quando um servidor executa um Keeper incorporado junto com um disco
local, duas threads de verificação podiam sondar o mesmo arquivo, registrar transitoriamenteFILE_DOESNT_EXIST,CANNOT_READ_ALL_DATAouCANNOT_UNLINKe contabilizar temporariamente o disco na métricaBrokenDisks. #110773 (Groene AI). - Corrigidos resultados incorretos e um erro lógico
Cannot serialize FutureSetFromSubquery with no query planpara consultas em tabelasMergee na função de tabelamergequando réplicas paralelas baseadas em plano estavam habilitadas. #112849 (Alexey Milovidov). - Uma tabela no mecanismo de banco de dados
URLnão revela mais a um usuário sem o privilégio de leitura da fonte se existe um arquivo local. TantoEXISTS TABLE, que requer apenas o privilégioSHOW TABLES, quanto a resolução de nomes de tabelas agora aguardam a verificação do privilégio antes de sondar o sistema de arquivos. #113029 (Alexey Milovidov). - Corrigida uma expressão TTL que se tornava inutilizável quando a otimização de constantes removia as colunas às quais ela se refere, por exemplo,
TTL d + INTERVAL 1 DAY DELETE WHERE isNull(x)em umxnãoNullable, o que fazia todoINSERTna tabela falhar comMissing columns. Também foi corrigida a falha do servidor ao iniciar quando uma tabela tinha uma expressão TTL em uma colunaVariantcriada comvariant_throw_on_type_mismatch = 0. #113042 (Alexey Milovidov). - Corrigido o cancelamento da função de tabela
postgresqle de leituras pelo mecanismo de tabelaPostgreSQL. Cancelar enquanto a leitura ainda estava sendo iniciada podia causar uma condição de corrida no ponteiro da transação, fazendo com que o cancelamento fosse perdido e a consulta continuasse em execução até ser concluída pelo PostgreSQL. #113150 (Groene AI). - Agora,
UNDROP TABLEpode ser interrompido porKILL QUERYenquanto aguarda consultas em execução liberarem a tabela removida. #113263 (Alexey Milovidov). - Corrigido um vazamento de memória de todo o analisador XML quando um manipulador XML do
Pocolança uma exceção durante a análise, por exemplo, devido a um overflow dePoco::XML::NamePoolao analisar um documento com muitos nomes de elementos exclusivos. #113348 (Alexey Milovidov). - Corrigidas as gravações no disco
HDFS: elas não falham mais comParent directory doesn't existquando a chave de objeto gerada contém prefixos de diretórios aninhados, pois os diretórios pai ausentes agora são criados. #113396 (Alexey Milovidov). - Corrigidos resultados incorretos e, em compilações com asserções ativadas, falhas de asserção em um
JOINcom um dicionário cuja cláusulaONcontém uma condição de não igualdade entre ambas as tabelas, comoON (t.key = d.key) AND (t.a * 10 < d.a), quandojoin_use_nullsestá ativado. #113534 (Alexey Milovidov). - Corrigida uma consulta que podia ficar bloqueada por até
receive_timeoutsegundos quando era concluída muito rapidamente no iniciador. #113551 (Nikita Taranov). - Corrigido o
UPDATEe oDELETEleve que liam as tabelas erradas quando o banco de dados da tabela atualizada diferia do banco de dados da sessão. Nomes de tabelas não qualificados e a função de tabelamergeagora são resolvidos em relação ao banco de dados da tabela atualizada, para que a instrução não atualize nem exclua silenciosamente linhas selecionadas de outra tabela. #113748 (Groene AI). - Corrigida uma rejeição indevida por
TOO_MANY_PARTSde umINSERTparalelo: quandomax_insert_threadsparaleliza umINSERTsimples, a consulta deixa de contar as partes confirmadas por seus próprios destinos irmãos. Fecha #114015. #114016 (Alexey Milovidov). - Corrigidos
NO_SUCH_COLUMN_IN_TABLEquando uma consulta com réplicas paralelas seleciona uma colunaALIASde uma tabela enviada como tabela temporáriaGLOBAL JOIN,MULTIPLE_EXPRESSIONS_FOR_ALIASquando ambos os lados de umJOINdistribuído declaram uma colunaALIAScom o mesmo nome eUNKNOWN_IDENTIFIERquando uma tabelaDistributeddeclara uma colunaALIASsobre outra colunaALIAS, inclusive como chave deJOIN USING. #107700 (Yakov Olkhovskiy). - Corrigida a leitura de um
Tupleem CSV cujo primeiro elemento éNULL. Cominput_format_csv_deserialize_separate_columns_into_tupleeinput_format_null_as_defaulthabilitados, um\Ninicial em uma linha como\N,1era interpretado como se toda a coluna fosseNULL, fazendo com que a linha fosse substituída por um valor padrão e as células dos elementos restantes causassem um erro de análise. Agora, oNULLinicial é tratado como o valor do primeiro elemento, einput_format_null_as_defaulté aplicado a esse elemento. Uma linha que fornece um único campo\Npara umTuplesimples agora fica sem os elementos restantes e é rejeitada; definainput_format_csv_deserialize_separate_columns_into_tuple = 0para voltar a ler esse campo como a coluna inteira. #109744 (Groene AI). - Corrigido um raro
Logical error: 'No more packets are available.'em uma consulta distribuída válida comLIMIT. Em compilações de depuração e com sanitizadores, isso também encerrava o servidor. #110334 (Groene AI). - Corrigido um erro lógico (
!part.empty()) quando uma tabelaDistributeddefinida com um nome de banco de dados remoto vazio é usada em umJOINcomdistributed_product_mode = 'local'. #110677 (Groene AI). - Corrigida a resolução de nomes de colunas totalmente qualificados, como
db.table.column, no analisador para tabelas que têm o mesmo nome do banco de dados. Fecha #82084. #110976 (Alexey Milovidov). - Corrigidos hash joins que perdiam suas otimizações após a compilação (conversão para uma tabela hash fixa, filtro de tempo de execução compartilhado e reordenação da tabela à direita) sempre que era configurado um limite automático para spill em disco, padrão desde a versão 26.5. #111972 (Alexey Milovidov).
- Corrigido um bug em que
ALTER TABLE ... MODIFY COLUMN, ao alterar uma indicação de tipoJSON(comallow_experimental_json_lazy_type_hintshabilitado) em uma coluna cuja subcoluna é usada na chave primária/de ordenação, chave de partição ou em um índice de salto explícito, podia corromper a chave ou o índice em disco. Leituras comuns mascaravam o problema por meio da estrutura em cache, mas, após seu recarregamento (por exemplo, na reinicialização do servidor), as consultas falhavam comCANNOT_READ_ALL_DATAou retornavam resultados incorretos. EssesALTERs agora são rejeitados sempre que alteram o tipo em disco de uma subcolunaJSONreferenciada. Alterações de indicação de tipo em colunas fora dessas estruturas, ou que não alteram o tipo em disco das subcolunas referenciadas (por exemplo, adicionar um caminho tipado não relacionado), continuam sendo somente de metadados. #112302 (Pavel Kruglov). - Corrigidos resultados incorretos quando
query_plan_join_swap_tabletroca umANY JOINenquantojoin_any_take_last_row = 1: o ClickHouse agora mantém a ordem original dos lados do join para queANY JOINcontinue retornando a última linha correspondente. Fecha #111645. #112458 (Vladimir Cherkasov). - Corrigido o
listObjectsem um discoAzureBlobStoragecom endpoint prefixado, que retornava nomes de blob incorretos em todas as páginas após a primeira, pois a paginação ignorava o wrapper do cliente que remove o prefixo do endpoint. A paginação agora passa novamente pelo wrapper via token de continuação, garantindo que os nomes de blob estejam corretos em todas as páginas. #112872 (Arsen Muk). - Corrigida a alocação ilimitada de memória ao ler um arquivo
Parquetcujos metadados Thrift declaram um tamanho de contêiner ou string maior que os próprios metadados. Esse tamanho agora é rejeitado em vez de ser alocado. #113212 (Groene AI). - Corrigido
Cannot insert element into Set(NOT_IMPLEMENTED) quandoread_in_order_use_virtual_rowestá habilitado e uma consultaMergeTreecom leitura em ordem combinaWITH FILL ... INTERPOLATEcom um filtroINouhas. #113264 (Groene AI). - Corrigido o problema de
optimize_read_in_orderser silenciosamente ignorado em algumas consultasORDER BY, incluindo consultas que usam uma linha virtual outoString/CAST(..., 'Nullable(String)')em uma chave de ordenaçãoString. Também corrigidos resultados incorretos em filtros ouORDER BYsobretoStringde valoresTime,Time64ouDateTimeem fusos horários com horário de verão. #113291 (Vladimir Cherkasov). - Rejeitadas expressões
parallel_replicas_custom_keyinválidas, comotuple()ou(x, y), comILLEGAL_TYPE_OF_COLUMN_FOR_FILTER, em vez de ler além do fim da lista de tipos da chave personalizada. #113359 (Nikita Taranov). - Corrigida uma falha ao reiniciar o servidor caso ele fosse encerrado durante um
DROP TABLEde uma tabela que usa uma coleção nomeada: umDROP NAMED COLLECTIONposterior podia ser bem-sucedido, deixando metadados de tabela que fazem referência a uma coleção nomeada inexistente e fazendo com que a próxima inicialização falhasse comNAMED_COLLECTION_DOESNT_EXIST. #113524 (Alexey Milovidov). - Corrigidos dois casos em que um banco de dados AWS Glue
DataLakeCatalogindicava incorretamente que uma tabela estava ausente, em vez de informar um erro.SHOW TABLESesystem.tablesnão falham mais comDATALAKE_DATABASE_ERROR(“Exception calling GetTables … not found”) quando um banco de dados Glue está ausente durante a listagem de suas tabelas, por exemplo, porque um banco de dados não relacionado na mesma conta AWS foi removido simultaneamente; esse banco de dados agora não contribui com tabelas, em vez de interromper a listagem.EXISTS TABLEnão retorna mais0para uma tabela existente quando a chamada subjacente aGetTablefalha por outro motivo que não seja a ausência da tabela, como uma falha de autenticação, DNS ou 5xx. Todos os outros erros do Glue continuam sendo propagados em ambos os caminhos. #113591 (Groene AI). - Corrigido um bug de durabilidade do Keeper em que uma falha durante a persistência do arquivo de estado do Raft (que armazena
termevoted_for) podia deixar o nó sem estado válido nem backup. Ao reiniciar, o nó podia ser redefinido paraterm = 0e conceder um voto que já havia concedido naquele termo, o que poderia resultar em dois líderes e perda de dados confirmados. O estado anterior agora é mantido até que o novo arquivo de estado seja totalmente gravado e sincronizado. #113654 (Alexey Bakharew). - Corrigida uma condição de corrida quando uma tabela
MergeTreeé destruída enquanto suas tarefas em segundo plano de atualização de estatísticas, atualização de partes ou carregamento de partes desatualizadas/inesperadas ainda estão em execução. #113722 (Alexey Milovidov). - Corrigidos
ORDER BY ALLem umaWINDOW VIEWe errosUNKNOWN_IDENTIFIERparaINTERPOLATE,WINDOWeLIMIT BYem uma consulta sobre uma tabelaMergeouDistributedcom uma junção ao usar o analisador antigo. #113759 (Alexey Milovidov). - Corrigido um vazamento de memória no codec de compressão experimental
SZ3: quando a compressão de dados pouco compressíveis ou corrompidos falhava com uma exceção, buffers temporários permaneciam alocados. #113916 (Alexey Milovidov). - Corrigida a complexidade quadrática na análise do argumento de endereço das funções de tabela
remote,mysqle similares: um endereço muito longo (por exemplo, umFixedStringde um megabyte preenchido com zeros) fazia a consulta travar durante a análise, sem poder ser cancelada. #113918 (Alexey Milovidov). - Corrigida a falha de
OPTIMIZE TABLEem uma tabelaIcebergcomUnsupported snapshot's operation type OVERWRITEquando o histórico da tabela continha uma exclusão de linha que removia mais de uma linha por arquivo de exclusão por posição. Fecha #113745. #113964 (Groene AI). - Não replique
ALTER TABLE ATTACH PARTITION FROMem bancos de dados replicados. #94835 (MikhailBurdukov). - Configurações inválidas de tamanho de upload no Azure (por exemplo,
azure_min_upload_part_size = 0ouazure_max_blocks_in_multipart_upload = 0) agora são rejeitadas antecipadamente com uma mensagem de erro clara, em vez de acionarem uma exceção interna (second_size > 0) no processamento de gravação. Isso se aplica tanto às configurações de consulta quanto à configuração de disco do Azure. #103394 (Statxc). - Corrigido o escape incorreto de literais SQL em
StorageSQLitee na função de tabelasqlite()ao enviar predicadosWHEREao SQLite: aspas simples e caracteres de controle (\n,\r,\t,\) eram escapados com barras invertidas, que o SQLite não interpreta, causando erros de sintaxe ou resultados de consulta incorretos. Também foi corrigido o escape de literais de string enviados ao PostgreSQL: strings aninhadas em listasINmantinham o escape do ClickHouse, e caracteres de controle eram enviados como sequências de barra invertida que o PostgreSQL interpreta como bytes diferentes. #104217 (Shaohua Wang). - Corrigida a exceção
NOT_FOUND_COLUMN_IN_BLOCKem consultasINNER JOIN ... ON arrayJoin(...) = ...quandoquery_plan_convert_join_to_inestá habilitado e o SELECT faz referência à coluna de array de origem. #104809 (Shaohua Wang). - Corrigidas expressões IN e NOT IN com operandos não constantes do lado direito que fazem referência a colunas da linha atual, e alinhado o tratamento de tuplas no lado direito pelo novo analyzer à semântica IN existente do ClickHouse. No analyzer antigo, uma coluna de origem simples no lado direito (
x IN (arr)) ainda é resolvida como nome de tabela e permanece fora do escopo. #104993 (Yue Ni). - Corrigido o erro
Cannot add column ...: column with this name already existsemINSERT SELECTde uma função de tabela comofile,s3ouinput, quando a mesma coluna de origem é selecionada mais de uma vez. #105982 (etienne). - Rejeitado
max_replication_lag_to_enqueue = 0em bancos de dadosReplicated. Esse valor fazia com que a verificação de falta de sincronização após a recuperação fosse trivialmente verdadeira e interrompia o servidor comLOGICAL_ERRORem compilações de depuração e com sanitizers.0agora é rejeitado durante a análise comBAD_ARGUMENTSem todas as origens (CREATE DATABASE ... SETTINGS, bloco de configuração do servidor<database_replicated>, reprodução deATTACHe reprodução, durante a atualização, dos metadados existentes). O menor valor válido é1. Fecha #98823. #106006 (Groene AI). - Corrige o erro
Logical error: 'Pipeline stuck'em consultas que usamenable_sharding_aggregator = 1junto comUNION ALLemax_streams_for_union_stepmenor que a largura do pipeline.BufferedShardByHashTransformagora finaliza as portas de saída de filas vazias assim que a entrada se esgota e continua consumindo a entrada quando uma porta vazia demandada não tem dados para drenar, mesmo que uma fila irmã tenha atingido o limite de contrapressão. #106251 (Groene AI). - Corrigido um estouro de inteiro com sinal quando uma configuração de tempo limite de espera, como
interactive_delay, era definida com um valor muito alto: a espera podia expirar imediatamente em vez de aguardar, e o servidor podia ser abortado pelo Undefined Behavior Sanitizer. #106961 (Groene AI). - A exportação de valores
Time/Time64fora de um horário válido (negativos ou>= 24h) para o formatoArrowagora é rejeitada com um erro claro, em vez de gravar dadostime32/time64inválidos no Arrow. #107179 (Shaohua Wang). - Corrige resultados incorretos de
GROUP BYem uma tabelaDistributedcom colunasALIASduplicadas que se expandem para a mesma expressão (por exemplo, duas colunas definidas comotoString(x)) com agregação distribuída de dois níveis/eficiente em memória. As chaves duplicadas eram condensadas em uma nos shards, mas mescladas pelo conjunto completo de chaves no iniciador; assim, na agregação de dois níveis, grupos iguais de shards diferentes caíam em buckets distintos e não eram mesclados, retornando um grupo por shard com ocount()dividido. #108855 (Groene AI). - Corrigido um erro espúrio
Inconsistent AST formattingparaALTER TABLE ... MOVE PART ... TO SHARD '<path>'. O formatador de consultas removia a palavra-chaveSHARD, de modo que a consulta reformatada não podia ser analisada novamente, gerando umLOGICAL_ERROR(uma exceção tratada em compilações de lançamento, ou um abort em compilações de depuração e com sanitizers). #109060 (Groene AI). - Rejeita offsets
Arraynão monotônicos em todos os caminhos de leitura que os decodificam como valores absolutos, e não apenas no formatoNative. Um grânulo corrompido do índice skipsetantes passava sem verificação e era lido além dos limites. #109212 (Groene AI). JSONExtractagora respeitacast_string_to_date_time_modeao converter valores JSON de string paraDateTime/DateTime64, de forma consistente comCAST. Fecha #109126. #109252 (Utkal Singh).- Corrige possível erro lógico “Subfluxo inesperado … para a coluna …” ao aumentar a configuração de compatibilidade. #109496 (Pavel Kruglov).
- Define o componente de coordenação ausente no cálculo do tamanho de system.detached_parts. #109553 (Den Kalantaevskii).
- Corrigido o tempo limite de espera de bloco para inserções em streaming (
input_format_max_block_wait_ms), que poderia nunca expirar enquanto o query profiler estivesse ativo: a sondagem do descritor de arquivo era reiniciada com o tempo limite completo após cada sinal do profiler, de modo que uma fonte de entrada paralisada podia atrasar indefinidamente o flush do bloco parcial, em vez de realizá-lo quando o limite de espera fosse atingido. #109602 (Shaohua Wang). - A simplificação de constantes durante o planejamento de consultas აღარ executa uma função cujo tipo de argumento difere daquele para o qual ela foi resolvida durante a análise. Essa incompatibilidade antes gerava um
LOGICAL_ERRORdurante o cálculo do cabeçalho de saída, o que corresponde a uma falha de asserção em compilações de depuração e com sanitizadores. Agora, a simplificação é ignorada, e uma consulta realmente inválida continua reportando um erro recuperávelILLEGAL_TYPE_OF_ARGUMENTpelo caminho normal de execução. #109747 (Groene AI). - Corrige uma mutação que referencia a coluna virtual
_sample_factore falhava durante a execução comUnexpected const virtual column: _sample_factor, deixando a mutação travada. Agora, a mutação a lê como1, o mesmo valor retornado por uma consulta semSAMPLE. #109813 (Groene AI). - Corrige três problemas com
use_constant_folding_in_index_analysis: um erro lógicoInvalid partition key sizeque podia interromper umSELECTque usava uma projeção normal quando a tabela definiapart_minmax_index_columns = 'with_block_number_offset'; resultados incorretos (linhas descartadas silenciosamente) em filtros sobre uma chave de partição por módulo, comoPARTITION BY id % 200; e uma falha (data race) ao consultar, em muitas partições e commax_threads > 1, um índicetextcom tokenizadorsparseGramsusando um predicadoLIKE. #109896 (Groene AI). - Corrige uma condição de corrida (e uma falha rara) quando um erro de análise sintática ou semântica é reportado durante a leitura de uma tabela em arquivo ou armazenamento de objetos. Um erro de análise sintática gerado durante a inicialização sob demanda de
KeyConditionera compartilhado como um único objeto de exceção entre threads de leitura, e duas threads podiam acrescentar simultaneamente(in file/uri ...)à mensagem, causando uma condição de corrida na string da mensagem de exceção. #109911 (Groene AI). - Corrige a propagação de configurações de consulta em
accurateCastOrDefaulte preserva valoresNULLde origem codificados porDynamiceVariant. Fecha #109943. #109946 (Pavel Kruglov). #114912 (Alexey Milovidov). - Corrige resultados incorretos de
subBitmap,bitmapSubsetInRangeebitmapSubsetLimitpara bitmaps ainda na representação pequena, incluindo valores de elementosUInt64eInt64acima de2^32, que eram truncados para 32 bits. As comparações em funções de bitmap com tipos de elementos com sinal agora usam consistentemente o valor sem sinal do tipo de elemento. Assim, em um bitmapInt8, o elemento-1é comparado como255, e não como4294967295com extensão de sinal; isso também corrigebitmapMin,bitmapMax,bitmapContainsebitmapTransformem bitmaps que ultrapassaram a representação pequena. As consultas que passavam limiares com extensão de sinal precisam ser ajustadas: em um bitmapInt8,bitmapSubsetInRange(bm, 4294967168, 4294967296)passa a serbitmapSubsetInRange(bm, 128, 256). Também corrigegroupNumericIndexedVector, que retornava resultados diferentes para colunas de índiceInt8eInt16em relação a tipos de índice mais amplos, enumericIndexedVectorGetValue, que retornava0para índices negativos. Corrige a documentação das funções de bitmap, incluindo as funções de subconjunto, descritas incorretamente como usando indexação baseada em 1, e o suporte a valores com sinal embitmapBuild/bitmapToArray. #110072 (Rami Darwiche). - Corrige o fato de
optimize_aggregation_in_orderignorar o cancelamento de consultas.AggregatingInOrderTransformagora verifica se houve cancelamento durante a agregação de um fragmento, para que uma consulta interrompida porKILL QUERYou pormax_execution_time(no modo padrãotimeout_overflow_mode = 'throw') pare imediatamente, em vez de processar todo o fragmento. #110104 (Groene AI). - Corrigida uma condição de corrida entre
KILL TRANSACTIONeALTER TABLE ... UPDATE/DELETEexecutados dentro de uma transação: um rollback entre o registro da mutação na transação e seu registro na tabela deixava uma entrada de mutação órfã, gerando um erro lógico (Cannot find transaction ... that has started mutation ...) em tarefas em segundo plano e bloqueando todas as mutações subsequentes das partes afetadas até a reinicialização do servidor. #110226 (Shaohua Wang). - Corrige um
LOGICAL_ERROR(Left and right columns have same names) no otimizador de ordem de joins que poderia ser acionado por um join separado por vírgula em uma view com várias tabelas quandoquery_plan_merge_expression_into_joinestá habilitado. #110227 (Groene AI). - A estimativa de cardinalidade da ordem de joins agora combina estatísticas de colunas das partes que permanecem após a poda por partição/chave primária, em vez de todas as partes ativas. Antes, uma consulta podada para uma partição pequena era planejada com base em estatísticas de toda a tabela (foi observada uma superestimação de 2500x no número de linhas, invertendo o lado de construção do hash join), e desabilitar as estatísticas produzia, paradoxalmente, um plano melhor. Também corrigido: o FINAL preguiçoso era desabilitado silenciosamente para relações MergeTree em um JOIN porque o resultado em cache da análise de índice do otimizador de ordem de joins era confundido com uma projeção aplicada. #110283 (Sergey Kuznetsov).
- Corrigidos resultados incorretos de subconsultas escalares correlacionadas quando a consulta externa possui valores duplicados para a coluna correlacionada e a subconsulta é descorrelacionada pelo caminho de CROSS JOIN. Antes, agregados como
count()esum()eram multiplicados pela quantidade de duplicatas. Isso afeta o recurso experimentalallow_experimental_correlated_subqueries. #110311 (Groene AI). - Corrige um erro lógico (
Function node with name '...' is not resolved as ordinary function) que poderia ocorrer comoptimize_or_like_chainhabilitado quando uma função agregada ou de janela aparecia no lado esquerdo de umLIKE/ILIKE/matchem uma cadeia deOR. #110641 (Groene AI). - Corrige um caso em que
TTL ... DELETE WHERE <cond>nunca removia linhas que passavam a corresponder a<cond>devido a umALTER TABLE ... UPDATEem uma coluna referenciada noWHERE. A mutação agora recalcula o TTL da linha, para que as linhas expiradas que passaram a corresponder à condição sejam excluídas, em vez de mantidas silenciosamente. #110648 (Groene AI). - Corrige um vazamento de contabilização no rastreamento de memória: quando uma alocação era rejeitada por um memory tracker pai (por exemplo, o limite de memória de todo o servidor), os trackers de thread, consulta e usuário mantinham o valor rejeitado. O erro se acumulava ao longo do tempo, inflando
MemoryTrackinge o uso de memória por consulta/usuário, podendo resultar em erros espúrios deMEMORY_LIMIT_EXCEEDED. #110784 (Seva Potapov). - Corrigida a serialização WKB não canônica de um polígono vazio:
wkb(POLYGON EMPTY)agora emitenumRings = 0em vez de um único anel espúrio com zero pontos, para que uma conversão de ida e volta em WKB de um polígono vazio padrão preserve a identidade. #110796 (Groene AI). - Corrige um caso em que o uso de aliases de coluna em CTEs com consultas
INTERSECTouEXCEPT, por exemplo,WITH t (a, b) AS (SELECT 1, 2 INTERSECT SELECT 1, 2) SELECT a, b FROM t, fazia a consulta falhar com o erro UNKNOWN_IDENTIFIER. Fecha #104770. #110885 (Yarik Briukhovetskyi). - Corrigido um
std::length_error(LOGICAL_ERROR) ao ler uma tabela MergeTree com um valor anômalo demax_streams_for_merge_tree_reading(próximo ao máximo deUInt64) junto comallow_asynchronous_read_from_io_pool_for_merge_tree = 1. A configuração agora é limitada ao mesmo valor máximo demax_threads. #110936 (Groene AI). - Corrige uma falha (desreferenciamento de ponteiro nulo durante a análise da consulta) quando
getSubcolumné chamado em um argumentoJSONcom um nome de subcoluna de dica de tipo interna, isto é, iniciado por um marcador de tipo backtick. #110940 (Groene AI). - Corrigido
Nested type LineString cannot be inside Nullable type (ILLEGAL_TYPE_OF_ARGUMENT)ao ler uma coluna espacial anulável do MySQL (LINESTRING,POLYGON,MULTILINESTRING,MULTIPOLYGON,MULTIPOINTou o tipo genéricoGEOMETRY) por meio da função de tabelamysqlou dos mecanismos de tabela/banco de dadosMySQL. Essas colunas agora usamNullable(String), contendo o valor conforme retornado pelo MySQL (um prefixo SRID de 4 bytes seguido pela carga WKB).POINTcontinua sendo mapeado paraNullable(Point). #110943 (Groene AI). - Corrige a serialização
Nativede wrappersSimpleAggregateFunctionque contêm estados de agregação versionados para pares mais antigos. #110997 (Groene AI). - Corrigido um
LOGICAL_ERROR: ReadBuffer is canceled. Can't read from it.que poderia ocorrer em uma junçãograce_hashquando a leitura de blocos transferidos para disco falhava durante a leitura, enquanto várias threads compartilhavam o leitor. #111056 (Groene AI). - Agora, cada chave SSH conta individualmente para o limite
max_authentication_methods_per_user, de modo que o limite é aplicado de forma consistente, independentemente da sintaxe. Anteriormente, várias chaves em um único métodossh_keycontavam como uma. #111181 (Yecine Megdiche). - Corrige um
LOGICAL_ERROR(Reading from materialized CTE '...' before its materialization completed - DelayedPortsProcessor gate is missing in the query plan) quando uma CTE materializada reutilizada (enable_materialized_cte) é lida em uma ramificação cuja saída deWITH TOTALSouextremesé descartada, incluindo agregação externa,INSERT ... SELECT, operações de conjunto eEXPLAIN ANALYZE. #111194 (Groene AI). - Corrigido
map[key]retornando o valor de uma chave duplicada posterior em vez do da primeira. Quando uma colunaMapcontinha chaves duplicadas, o resultado demap[key]podia depender das linhas anteriores no mesmo bloco e da configuraçãooptimize_functions_to_subcolumns, de modo que umSELECTe umWHEREna mesma linha podiam divergir. #111246 (Groene AI). - Corrigido um erro lógico
!rhs_literal->getValue().isNull()no otimizador de expressões lógicas quando uma cadeia deANDcompara uma coluna a uma constante com valor NULL de tipo nãoNullable(por exemplo, umVariantcom valor NULL) comuse_variant_default_implementation_for_comparisons = 0. #111292 (Groene AI). - Corrigidos erros
NOT_FOUND_COLUMN_IN_BLOCK/THERE_IS_NO_COLUMN(e, em alguns lançamentos, resultados incorretos sem indicação de erro) em umRIGHT JOINquandoparallel_replicas_min_number_of_rows_per_replicaestá definido e uma coluna da tabela à esquerda é projetada. #111332 (Groene AI). RESTOREagora executa fsync nos arquivos das partes restauradas quando a tabela de destino temfsync_after_insertativado, tornando uma parte restaurada tão resistente à perda de energia quanto uma parte inserida. Anteriormente, os arquivos restaurados eram apenas gravados e fechados (sem fsync), de modo que uma perda de energia logo apósRESTOREretornarRESTOREDpodia deixar as partes incompletas e a tabela vazia. #111378 (Groene AI).- Corrigida uma rara janela de perda de dados do Keeper em discos locais de snapshot: o caminho de gravação do snapshot agora executa fsync no diretório do snapshot após remover o marcador
tmp_, de modo que uma perda de energia não possa mais remover o marcador enquanto preserva o conteúdo do snapshot. Anteriormente, tal falha fazia o Keeper tratar um snapshot válido e totalmente sincronizado como incompleto e excluí-lo na reinicialização, perdendo gravações confirmadas mesmo comforce_sync=true. Discos de snapshot baseados em armazenamento de objetos não são abrangidos. #111397 (Groene AI). - Corrigida uma leitura fora dos limites (lançamento) / erro lógico (debug) na otimização de materialização tardia e um erro lógico em
Pipe::unitePipespara tabelasMerge, quando a otimização de leitura direta de índices de texto deixa uma coluna virtual de índice não utilizada no cabeçalho de leitura de uma tabelaMergeTreecom vários índicestext. #111467 (Groene AI). - Corrigida a coluna virtual
_timedas funções de tabelaurl/urlCluster, que sempre eraNULLem compilações baseadas em musl devido à análise não portável do cabeçalho HTTPLast-Modified. #111619 (Konstantin Bogdanov). - Corrigido um
LOGICAL_ERROR(Cannot create part with type Compact and storage type Full because table does not support polymorphic parts) gerado quando uma tabelaMergeTreecarrega uma parteCompactpreexistente enquanto suas configurações atuais desativam partes polimórficas (granularidade não adaptativa). Isso podia ocorrer, por exemplo, quando uma tabela somente leitura compartilha um caminho em disco com outra tabela e recarrega suas partes por meio deSYSTEM RESTART DISKou na inicialização do servidor. Em compilações de debug e com sanitizadores, a exceção interrompe o servidor. #111626 (Groene AI). - Corrigida a falha de
CREATE TABLE ... ENGINE = KeeperMapcomCoordination error: No node, path .../metadata/drop_lock_versionquando outra tabela no mesmo caminho do Keeper é removida simultaneamente. A criação agora trata a subárvore de metadados desaparecida como uma limpeza concluída e tenta novamente, como já faz para a mesma situação uma instrução depois. #111966 (Groene AI). - Corrigida uma condição de corrida entre uma mutação
ReplicatedMergeTreee a remoção de diretórios temporários antigos que podia publicar uma parte modificada sem alguns de seus arquivos, fazendo com que as leituras dessa parte e todas as mutações posteriores nela falhassem. #111992 (Alexey Milovidov). - Corrige
quantileDeterministic,quantilesDeterministicemedianDeterministic, que retornavam resultados diferentes para os mesmos dados a cada execução quando a consulta usava réplicas paralelas, uma tabela distribuída ou agregação externa, ou quando os estados eram armazenados em uma tabela (inclusive dentro de um valorDynamic). Estados gravados antes desta versão com a grafia não versionada do tipo mantêm o comportamento anterior, pois seu layout não pode ser alterado. #112052 (Alexey Milovidov). - Corrige a omissão de
serialize_string_in_memory_with_zero_bytedo plano de consulta serializado. Comserialize_query_plan = 1, um cluster executado com a configuração desabilitada poderia apresentar divergências na representação de string em memória entre o iniciador e o nó que executava o plano desserializado, pois a configuração era lida durante a desserialização, mas nunca gravada durante a serialização e, portanto, sempre assumia o valor padrão no nó executor. #112131 (Groene AI). - Corrige a exibição de um frame de pilha como
?em vez do nome da função em mensagens de log fatais e na colunatrace_fulldesystem.crash_log. Isso afetava frames de funções comuns cujo código era atribuído a um cabeçalho__functionaldo libc++, algo comum em compilações de lançamento. #112152 (Alexey Milovidov). - Corrige casos de linhas silenciosamente ausentes quando uma consulta filtra por
intDiv(constant, key)oudivide(constant, key). A análise da chave primária e da partição informava a direção incorreta de monotonicidade para uma constante dividida por uma coluna-chave; por isso, as granularidades correspondentes eram descartadas e a consulta retornava menos linhas sem gerar erro. Também corrigeintDivcom um dividendo constante sem sinal cujo bit mais alto está definido, deixa de indicar monotonicidade quando um operandoDecimalfaz com que a divisão seja calculada na largura nativa do decimal e impede que a análise de chave gereCannot compare DB::IPv4 with longpara uma consulta válida que divide uma constanteIPv4/IPv6por uma coluna-chave. #112156 (Groene AI). - Corrige o bloqueio indefinido de
DROP TABLE ... SYNCquando uma consulta emsystem.replicashavia sido encerrada antes que suas solicitações de status fossem processadas. #112164 (Nikolay Degterinsky). - Corrige um aborto do servidor (
SIGABRT) quando uma WebAssembly UDFBUFFERED_V1retorna um buffer de resultado vazio; agora, a consulta falha com umWASM_ERRORcapturável e o servidor permanece em execução. #112182 (Nikolai Ovchinnikov). - Corrige um uso após liberação quando um
JOINcomjoin_algorithm = 'direct'em um dicionário recebia uma chave de join armazenada com serialização esparsa.getColumnVectorDataretornava uma referência a uma coluna temporária; assim, a busca no dicionário lia memória já liberada: compilações de lançamento podiam retornar resultados incorretos, e compilações de depuração ou com sanitizer eram abortadas. #112327 (Groene AI). - Corrige casos em que a política de linhas não era usada para projeções MergeTree durante a execução de consultas. #112329 (Yarik Briukhovetskyi).
- Corrigida a corrupção de dados ao inserir em uma tabela Iceberg acessada por meio de uma
MATERIALIZED VIEW. O arquivo de dados era gravado usando os tipos de coluna do destino no momento doCREATE, em vez do schema Iceberg atual, fazendo com que um valorDateTimefosse armazenado como umintAvro simples e lido como microssegundos. ComDateTime64(0)ouDateTime64(9), o arquivo sequer podia ser lido. Como consequência,INSERT INTO <materialized view>em um destino cujo schema Iceberg é mais amplo que as colunas declaradas da visão agora geraTYPE_MISMATCH, em vez de gravar uma linha corrompida. #112359 (Groene AI). - O Keeper não recusa mais uma solicitação
Setcom dados vazios quando ela ultrapassamax_memory_usage_soft_limit. Essa solicitação não pode aumentar a quantidade de dados armazenados, e recusá-la impedia os clientes de restabelecer a sessão, o que poderia manter as tabelas como somente leitura durante todo o evento de memória do Keeper. #112386 (Shaohua Wang). - Corrigido o problema em que um seguidor do Keeper ficava fora do quórum por muito tempo, causando erros em massa de
Session expired, após instalar com sucesso um snapshot grande: o líder descartava a confirmação do seguidor sempre que a aplicação do snapshot levava mais tempo que o timeout de instalação do snapshot e, então, retrocedia o índice de log desse seguidor uma entrada por ida e volta. Também foi adicionada a configuração do Keepernuraft_snapshot_sync_ctx_timeout_mspara controlar esse timeout, que antes só podia ser alterado por meio deraft_limits_response_limit, o que também desacelerava a detecção de pares inativos. #112405 (Shaohua Wang). - Corrigidas condições de corrida de dados nos eventos de perfil e no rastreador de memória. #112466 (Miсhael Stetsyuk).
- Correção de bug relacionado à segurança. #112479 (Kseniia Sumarokova).
- Corrigida a leitura de um índice secundário (de salto) obsoleto após uma alteração de tipo com
ALTER TABLE ... MODIFY COLUMNcuja mutação nunca foi executada, por exemplo, porqueKILL MUTATIONa removeu: os grânulos no disco eram gravados com o tipo antigo, mas decodificados com o novo, gerandoLOGICAL_ERROR, solicitando alocações de vários exabytes ou retornando silenciosamente um resultado incorreto. Também corrigido um resultado incorreto de um índice sobre uma expressão cujo significado muda enquanto todos os bytes armazenados permanecem idênticos, de modo que nenhuma mutação é criada: umMODIFY COLUMNque altera apenas o fuso horário deDateTimeou apenas um nome de tipo personalizado, como deUInt8paraBool. Esse índice agora é ignorado para a parte afetada. Fecha #112213. #112484 (Groene AI). - Corrigida uma falha ao ler um arquivo Parquet com metadados inconsistentes de filtro de Bloom. Esses arquivos também podiam retornar silenciosamente menos linhas do que deveriam. #112498 (Shaohua Wang).
- Corrigida a condição de corrida de dados em
readBigAtde AsynchronousBoundedReadBuffer. Fecha #109678. #112573 (Kseniia Sumarokova). - Corrigido o problema em que uma lista de aliases de coluna, como
(SELECT 1) AS t(x)ouWITH t(x) AS (SELECT 1), não ficava visível dentro da função de tabelaview, fazendo com que uma referência at.xfalhasse comUNKNOWN_IDENTIFIER, embora a mesma construção funcione fora deview. #112690 (Groene AI). - Corrigido o erro lógico
SortingAggregatedTransform already got bucket with number N, que podia ocorrer em consultasGROUP BYdistribuídas com várias camadas usando agregação em dois níveis. #112794 (Nikita Taranov). - Corrigido o problema em que uma tabela
NATScomnats_streamdefinido deixava silenciosamente de consumir dados após a reinicialização do servidor NATS. A assinatura doJetStreamagora é restabelecida automaticamente, sem exigirDETACH TABLEeATTACH TABLE. #112828 (Groene AI). - Corrigida a classificação incorreta de um erro transitório do Azure Blob Storage no caminho de leitura ou merge — uma propagação de permissões RBAC com
403 Forbidden, uma falha de autenticação de credencial ou um tempo limite de conexão retornado como408— como não passível de nova tentativa e sua comunicação comoPOTENTIALLY_BROKEN_DATA_PART(Código 740), gerando um alerta crítico falso para uma parte íntegra. Essas falhas transitórias agora são tratadas como passíveis de nova tentativa, e uma falha realmente persistente passa a ser exibida como um erro comum do Azure, em vez de uma parte de dados corrompida inexistente. #112871 (Arsen Muk). - Corrigido o problema em que a exclusão em lote de objetos do Azure não registrava eventos Delete em
system.blob_storage_logquando a própria solicitação em lote falhava, deixando todo o lote sem registro. Agora, um evento Delete é registrado para cada objeto em caso de falha no nível do lote. #112873 (Arsen Muk). - Corrigida a perda do índice MinMax por parte em
_block_numbere_block_offsetapós o recarregamento de uma tabela, quando a parte era produzida por uma mutação que não reescreve a parte inteira. #112878 (Alexey Milovidov). - Corrigidos um erro lógico e resultados incorretos quando uma condição não equijoin em
JOIN ON, avaliada durante o join, contémarrayJoin. Um joinhash,parallel_hashougrace_hashagora rejeita essa condição comINVALID_JOIN_ON_EXPRESSION. Quando a expansão depender de apenas um lado, mova-a para umARRAY JOINem uma subconsulta antes do join; uma condição cujo argumento dearrayJoinlê colunas de ambos os lados precisa ser reestruturada. #112889 (Groene AI). - Corrigidos resultados incorretos de
ORDER BYao ler de uma tabelaMergesobre tabelasDistributed: as linhas podiam ser retornadas fora de ordem, e linhas que deveriam constar no resultado podiam estar ausentes quandoLIMITera usado. #112931 (Alexey Milovidov). - Corrigida a conversão de uma constante
Boolno lado direito deINem um lado esquerdoStringcomo'1'/'0', em vez da forma canônica'true'/'false'(agora consistente comCASTe a função de tabelavalues). #113051 (Yakov Olkhovskiy). - Corrigida a coluna
viewsemquery_logpara inserções em uma tabelaAliascujo destino aciona visões materializadas, que permanecia sempre vazia. #113076 (Enric Calabuig). - Corrigido
LOGICAL_ERRORao ler uma tabela com um índice de saltosetdefinido em uma expressão, quando a consulta repete essa expressão com um operandoNullable, por exemplo,WHERE intDiv(id, (SELECT 1000)) = 3sobreINDEX b_set intDiv(id, 1000) TYPE set(100). Uma subconsulta escalar é suficiente para acioná-lo, pois é tipada comoNullable. #113244 (George Larionov). - Corrige um erro lógico (exceção)
Chunk info was not set for chunk in MergingAggregatedTransformquando a configuraçãoinject_random_order_for_select_without_order_byestá habilitada e uma consulta de agregação lê uma tabelaMergeque contém uma tabela filhaDistributed: o encapsulamento aleatórioORDER BY rand()deixa de ser injetado em consultas planejadas somente até um estágio intermediário. #113266 (Alexey Milovidov). - Corrige uma paralisação na otimização do plano de consulta quando uma cláusula
WHEREcontém uma constante de string grande com muitos pontos e a tabela tem um índice de omissãobloom_filter,tokenbf_v1,ngrambf_v1outext. A comparação de um nome de coluna de filtro com colunas de índiceJSONAllPaths(...)enumerava todas as divisões do nome por ponto, tornando a construção da condição do índice de omissão quadrática em relação ao tamanho da constante. Fecha #113003. #113289 (Groene AI). - Corrige o
ATTACHde uma tabelaKafkaquandokafka_num_consumersexcede o limite derivado do número de núcleos de CPU. #113390 (Nikolay Degterinsky). - Corrige um bloqueio permanente de
DROP TABLEe um vazamento de memória após a falha de uma consulta que usa uma CTE materializada. A tabela permanecia presa na fila de remoção até que o servidor fosse reiniciado. #113397 (Shaohua Wang). - Corrige um erro lógico
IDENTIFIER is not a table expressionquando uma função de tabela da família remote com um argumentoview(...)é usada no lado esquerdo de umJOIN ... USINGcuja chave é um alias da listaSELECT, comanalyzer_compatibility_join_using_top_level_identifier = 1. #113400 (Groene AI). - Corrige a leitura de tabelas
Paimonparticionadas por uma colunaTIMESTAMPcom precisão superior a milissegundos, que falhava comscale 6 is not supported, only support scale <= 3. Fecha #112768. #113401 (JIaQi Tang). - Corrige uma falha de segmentação e um
LOGICAL_ERROR(No host found for exchange stream final_result__0_0) quando uma subconsulta definedistributed_plan_execute_locallyem sua própria cláusulaSETTINGScommake_distributed_plan. O plano distribuído e o código que o executa liam a configuração de contextos diferentes e podiam divergir, fazendo com que o iniciador criasse um pipeline autocontraditório. #113422 (Groene AI). - Corrige a leitura de tabelas Paimon que contêm uma coluna
ARRAYouMAPanulável. Essas tabelas não podiam ser lidas, pois o mapeador de esquema envolvia o tipo composto emNullable, o que é proibido pelo ClickHouse; assim, tantoDESCquantoSELECTfalhavam comNested type Array(Nullable(Int32)) cannot be inside Nullable type. Uma coluna composta anulável agora é mapeada para um tipo composto nãoNullable, e um valorNULLé lido como um valor vazio. Fecha #113337. #113450 (Groene AI). - Corrige a poda de partes e grânulos para uma condição
JOIN ONque envolve colunas constantes do outro lado. #113484 (Vladimir Cherkasov). - Interrompida a gravação de uma parte cujo layout de
Mapcontradiz os próprios metadados, para um valorMapdentro de uma colunaDynamic. Tabelas que diferiam apenas emmap_serialization_versioncompartilhavam um objeto de serialização em cache, de modo que uma parte podia receber o layoutbasicde Map enquanto seus metadados declaravamwith_buckets, e a leitura posterior falhava comLOGICAL_ERROR: Stream ...buckets_info ... is not found. Partes já gravadas dessa forma por uma versão anterior permanecem ilegíveis e precisam ser removidas. #113514 (Groene AI). - Corrigido o tipo de coluna inferido que dependia da ordem das consultas anteriores para uma fonte cujo esquema está em cache. Configurações que alteram um tipo inferido não faziam parte da chave de cache da inferência de esquema, de modo que o valor da primeira consulta determinava o tipo visto por todas as consultas posteriores:
input_format_try_infer_exponent_floats,max_parser_depth,input_format_json_infer_array_of_dynamic_from_array_of_different_typese, paraParquet, tambéminput_format_parquet_local_time_as_utc,input_format_parquet_allow_geoparquet_parser,input_format_parquet_skip_columns_with_unsupported_types_in_schema_inferenceeschema_inference_make_json_columns_nullable. Também registra o getter ausente da chave de cache paraForme faz o getter deTemplateusar a regra de escape do próprio formato de linha. #113533 (Groene AI). - Corrigida uma condição de corrida de dados teórica nos eventos de perfil ao usar a configuração
trace_profile_events_listpara gravar stack traces de determinados eventos de perfil emsystem.trace_log. #113553 (Miсhael Stetsyuk). - Corrigido o
RENAME DATABASEque aceitava um nome de destino longo o suficiente para impossibilitar a remoção das tabelas do banco de dados. A verificação do comprimento do nome da tabela agora é executada independentemente decheck_table_dependenciese também abrange tabelas desanexadas, que nunca eram verificadas e, portanto, eram afetadas até mesmo com as configurações padrão. Fecha #101747. #113557 (Groene AI). - Corrigido o
LOGICAL_ERRORReading from materialized CTE '...' before its materialization completed - DelayedPortsProcessor gate is missing in the query plangerado quando uma tabelaMergecom mais de um filho lê uma CTE materializada referenciada pela consulta externa. #113558 (Alexey Milovidov). - Corrigida uma política de linha contendo uma subconsulta escalar que era avaliada apenas uma vez e depois reutilizada indefinidamente após a leitura da tabela por meio de uma tabela
Merge. A condição de política analisada é armazenada em cache e compartilhada por todas as consultas, e sua leitura por meio deMergereescrevia a expressão em cache no local, o que também causava uma condição de corrida de dados entre consultas simultâneas que usavam a mesma política. #113563 (Alexey Milovidov). - Corrigido
Unsupported JOIN keys of type keys256 in StorageJoinao ler uma tabela do mecanismoJoincuja chave é composta (várias colunas) ou consiste em um único valor de 16/32 bytes, comoUUID,Int256ouFixedString(4). Essa tabela podia ser criada, gravada e usada em join, mas nunca lida novamente comSELECT. Fecha #74362 e #77394. #113578 (Groene AI). - Na UI Web, abrir um link com
run=1não faz mais com que as URLs de outras abas executem automaticamente suas consultas no próximo recarregamento da página. #113595 (Alexey Milovidov). - Corrigido um erro lógico ao comparar arrays cujo tipo de elemento é Nothing. #113609 (Groene AI).
- Os backups agora informam o erro subjacente de acesso ao arquivo de bloqueio, em vez de relatarem incorretamente um backup simultâneo quando o armazenamento de destino não consegue ler o arquivo .lock. #113637 (Kirill Shokhin).
- Corrige um erro lógico
Sending a distributed query with unknown (zero) client versionquando uma tabelaDistributedsem estrutura em um shard remoto é anexada ou carregada de metadados gravados por uma versão mais antiga do servidor. #113675 (Alexey Milovidov). - Trata um byte NUL como um literal comum em padrões de match(). #113690 (Vitaly Baranov).
- Corrige
theilsUem um frame de janela que retornava um valor arbitrário em vez de 0 quando o primeiro argumento era constante no frame. #113691 (Alexey Milovidov). - Corrige
Logical error: Duplicate announcement received for replica number Nquando réplicas paralelas automáticas (automatic_parallel_replicas_mode) adotam um plano cuja variante de nó único foi particionada porquery_plan_join_shard_by_pk_ranges. #113730 (Alexey Milovidov). - Corrige
CANNOT_CONVERT_TYPEe uma exceção emGroupingAggregatedTransformao ler uma tabelaMergecom uma tabelaDistributedcomo filha usando réplicas paralelas com chave personalizada (parallel_replicas_mode = 'custom_key_sampling'ou'custom_key_range'). Fecha #113741. #113742 (Alexey Milovidov). - Corrigido um
LOGICAL_ERRORquando umSELECTusava o modificadorSTREAMem uma tabela nomeada junto com réplicas paralelas no modo de tarefas de leitura. Com uma CTE materializada usada como conjuntoINemPREWHERE, o servidor geravaReading from materialized CTE ... DelayedPortsProcessor gate is missing in the query plan(um abortamento do servidor em compilações de depuração e com sanitizador). Uma tabela comSTREAMagora é rejeitada quando são solicitadas réplicas paralelas: comenable_parallel_replicas = 2, a consulta falha comSUPPORT_IS_DISABLED; com1, é executada sem elas, exatamente como já ocorre comFINAL. #113754 (Groene AI). - Corrigida uma falha do servidor ao fazer uma junção com uma expressão
ONconstante contra um lado direito que contém umARRAY JOIN. A leitura de uma coluna no lado direito, replicada de forma preguiçosa, usava umColumnReplicatedjá liberado. Fecha #113859. #113901 (Groene AI). - Corrige comportamento indefinido e resultados incorretos em
avgsobreDate/DateTime/DateTime64/Time/Time64: a média agora é calculada exatamente no espaço de inteiros, corrigindo tanto o overflow no limite deInt64(UB, resultado incorreto em x86) quanto a perda de precisão deFloat64acima de 2^53 (visível na escala de nanossegundos). #113912 (Alexey Milovidov). - Corrige resultados incorretos em
JOINcomjoin_algorithm = 'partial_merge'quando o lado direito contém totais: o lado direito podia permanecer sem mesclagem, fazendo com que junçõesLEFTsubstituíssem valores default por correspondências reais e junçõesINNER/RIGHTnão retornassem nenhuma linha. No caminho sem junção deRIGHT/FULL, o mesmo estado desreferenciava um ponteiro nulo, causando uma falha do servidor. #113936 (Groene AI). - Corrigido um defeito nas integrações
MySQLem que a substituição de uma credencial TLS de uma coleção nomeada por um valor vazio dessl_ca_pem/ssl_cert_pem/ssl_key_pemera aceita quando a coleção armazenava a credencial no formato de conteúdo, descartando silenciosamente a CA ou o certificado de cliente configurado, em vez de rejeitar a substituição. #113947 (Alexey Milovidov). - Corrigida uma exceção
std::out_of_range(Logical error: 'std::exception. Code: 1001, type: std::out_of_range', que também interrompe o servidor em compilações de depuração e com sanitizers) no leitor Parquet v3 quando uma coluna necessária apenas para avaliar o filtro era agendada para decodificação depois que seu slot de saída já havia sido descartado. #113956 (Groene AI). - Corrigido um erro lógico (
Unexpected return type) quando um filtro em uma visualização cujo tipo de coluna difere do armazenamento subjacente (por exemplo,information_schema.tables, em queengineéNullable(String), sobresystem.tables, em que éString) é encaminhado para o armazenamento. #113984 (Alexey Milovidov). - Corrigido o problema que fazia o ClickHouse Keeper se recusar a iniciar com
CORRUPTED_DATAapós uma falha durante o truncamento entre segmentos do log Raft (writeAt), que poderia deixar uma entrada de log confirmada isolada atrás de segmentos obsoletos do changelog. #114003 (Nishant Agarwal). - Uma tabela ou banco de dados cujo nome é substituído em um caminho do ZooKeeper de
ReplicatedMergeTreepelas macros{database}ou{table}agora é rejeitado se o nome não corresponder a um único componente seguro de caminho. Anteriormente, um nome contendo/era inserido sem escape, fazendo com que a tabela registrasse seus znodes na subárvore do Keeper de outra tabela e quebrasse permanentementeALTEReOPTIMIZEnesse local. Componentes.ou.., caracteres de controle e sintaxe de macro também são rejeitados. As tabelas existentes continuam sendo carregadas e anexadas. #114006 (Groene AI). - Corrigido um vazamento de memória com
optimize_aggregation_in_order = 1quando a chave de ordenação da tabela é um prefixo estrito da chaveGROUP BYe é usada uma função de agregação cujo estado aloca memória no heap, comoquantileDD. A memória do servidor cresce a cada consulta desse tipo até a reinicialização. #114010 (Groene AI). - Corrigido um erro lógico quando um plano de consulta distribuída contém uma função de janela que produz um estado de função de agregação, por exemplo,
theilsUState(a, b) OVER (ORDER BY a)commake_distributed_plan = 1. Afeta as famíliascramersV,cramersVBiasCorrected,theilsUecontingency. #114020 (Groene AI). - Corrigidos resultados incorretos para
SELECT DISTINCTcom umLIMITque precisa ler toda a entrada:LIMIT n WITH TIESdescartava linhas com empate,exact_rows_before_limit = 1informava umrows_before_limit_at_leasttruncado eGROUP BY ... WITH TOTALScalculava a linha de totais a partir de um prefixo do fluxo. #114025 (Groene AI). - Corrigido
isProbablePrimeemUInt128/UInt256, que ignoravamax_execution_timeeKILL QUERY. Um bloco de valores de grande largura era executado até a conclusão dentro de uma única chamada de função, sem ponto de cancelamento, de modo que uma consulta podia continuar em execução por minutos após o prazo. #114032 (Groene AI). - Corrige a ausência de uma linha em
system.query_views_logpara uma visão materializada que falha durante a coleta de suas dependências commaterialized_views_ignore_errorshabilitado. Em compilações de depuração e com sanitizer, isso também abortava o servidor comstd::out_of_rangeem vez de registrar a visão. #114064 (Groene AI). - Corrigido
Code: 46. DB::Exception: Unknown function exists. (UNKNOWN_FUNCTION)lançado quando uma cláusulaPREWHEREcontém um predicadoIN (subquery)erewrite_in_to_join = 1(oumake_distributed_plan = 1, que o habilita forçadamente) está definido. A mesma consulta comWHEREfuncionava corretamente. #114067 (RohithPariki). - Corrigido
ORDER BY ... LIMITque retornava menos linhas do que o solicitado, possivelmente nenhuma, quando uma política de linhas era o único filtro da consulta e a coluna de ordenação tinha um índice de omissãominmax. A otimização top-K restringia a leitura antes da aplicação da política de linhas. #114073 (Alexey Milovidov). - Corrige
hasAny,hasAll,has,indexOf,mapContainsKey,mapContainsValueemapContainsque retornavam menos linhas do que deveriam ou falhavam comTOO_LARGE_STRING_SIZEquando um índicebloom_filterera consultado com uma constanteFixedString. O índice calculava o hash da forma preenchida da constante, enquanto a função compara a forma não preenchida, fazendo com que uma granularidade correspondente fosse ignorada. #114089 (Alexey Milovidov). - Corrigidos um
LOGICAL_ERROR“Not-ready Set is passed as the second argument for functionglobalNullIn” e a perda da mensagem de erro real da consulta, que poderiam ocorrer quando a eliminação de partes por estatísticas executava especulativamente uma subconsultaIN/GLOBAL INdurante a análise de índice e essa subconsulta falhava. #114121 (Groene AI). - Respeita a configuração
allow_calculating_subcolumns_sizes_for_merge_tree_readingna otimização PREWHERE. #114146 (Pavel Kruglov). - Rejeita um dicionário corrompido ou malicioso no qual
lcpexcede o token anterior oulcp + data_sizesofre overflow, antes da gravação no buffer. #114155 (Elmi Ahmadov). - Corrige
minemaxem colunasDateTime64que retornavam resultados incorretos após o agregado ser compilado por JIT, quando os dados continham timestamps anteriores a 1970.is_signednão era especializado paraDateTime64eTime64, que derivam deDecimal64; por isso, o código gerado comparava contagens de ticks como inteiros sem sinal, e um timestamp anterior a 1970 vencia emmaxe perdia emmin. #114168 (Groene AI). - Corrigida uma exceção ao ler uma tabela
MergeTreepor camadas de intervalos de chave primária quando uma camada produzia um pipe vazio. #114177 (Alexey Milovidov). - Corrigido o código de erro informado para algumas colunas serializadas como
Replicatedmalformadas recebidas pelo protocolo nativo: agora elas são rejeitadas comINCORRECT_DATAem vez deLOGICAL_ERROR(que abortava o servidor em compilações de depuração e com sanitizer). #114186 (Pavel Kruglov). - Corrigida a falha de
ATTACH PARTITION FROM,REPLACE PARTITION,MOVE PARTITION TO TABLEe da adição de uma réplicaReplicatedMergeTreecomTables have different ...,METADATA_MISMATCHouINCOMPATIBLE_COLUMNSem tabelas cujas definições foram gravadas com parênteses redundantes, comoPARTITION BY (a),ORDER BY (b),INDEX ix (b * c) TYPE minmax,PROJECTION p (SELECT (b) ...),CONSTRAINT c CHECK (a > 0),TTL (d + INTERVAL 10 YEAR)ouDEFAULT (a + 1). #114188 (Alexey Milovidov). - Corrigida a omissão, por
ALP,FPCeGCD, do parâmetro derivado do tipo no hash do codec. Em uma parte Compact, o gravador compartilha um fluxo comprimido para cada hash de codec distinto; assim, duas colunas com larguras de valor diferentes usando o mesmo codec entravam em conflito e compartilhavam um objeto de codec com largura incorreta. Isso rejeitava inserts válidos comCANNOT_COMPRESSquando as larguras divergiam e, caso contrário, comprimia uma das colunas pior do que deveria. #114189 (Groene AI). - Corrigido
std::out_of_range: map::at: key not foundquando uma expressão de chave doMergeTreecontém uma chamada amortonEncodeouhilbertEncodeque não é, por si só, uma coluna-chave, por exemplo,ORDER BY mortonEncode(hilbertEncode(x, y), x, y)ouPARTITION BY mortonEncode(x, y) % 4. #114233 (Groene AI). - Removidos LIMIT/OFFSET simples da consulta de origem do backfill da visualização de janela. #114247 (Alexey Milovidov).
- Corrigido um
LOGICAL_ERRORemarrayAutocorrelationquando o argumento é um array não vazio cujo tipo de elemento éNothing, por exemplo,SELECT arrayAutocorrelation([arrayMax([])]). Esse argumento agora é rejeitado comILLEGAL_COLUMN. O literal de array vazio[]continua retornando[]. #114249 (Groene AI). - Corrigida a falha que impedia um servidor Keeper de ingressar no cluster quando
nuraft_use_bg_thread_for_snapshot_ioestá habilitado: o lote de log enviado a um servidor que estava ingressando era descartado silenciosamente, de modo que a alteração de associação nunca era concluída. #114275 (Shaohua Wang). - Corrigida a leitura de
XDG_CACHE_HOMEa partir deXDG_STATE_HOME. #114278 (Alexey Milovidov). - Registrado o espaço de nomes Iceberg no catálogo antes da gravação dos arquivos de tabela (necessário para SeaweedFS). #114285 (Azat Khuzhin).
- Corrigidos resultados inconsistentes quando um filtro em uma coluna que não é chave da tabela à direita era aplicado abaixo de um ANY INNER JOIN. #114313 (Kirill Shokhin).
- Corrigido o preenchimento automático do Bash com bash-completion 2.12+ (_comp_get_words). #114339 (Azat Khuzhin).
- Corrige uma falha ao ler uma tabela de lago de dados cujo esquema declara uma coluna com nome vazio. Metadados Iceberg malformados são rejeitados com
ICEBERG_SPECIFICATION_VIOLATION; um esquema fornecido por um catálogo, Delta Lake ou Paimon é rejeitado comAMBIGUOUS_COLUMN_NAME. A verificação é incondicional; portanto, uma tabela Iceberg que apenas mantém um esquema histórico não utilizado com um nome de campo vazio também se torna ilegível assim que esse esquema é lido. #114394 (Groene AI). - Corrige um erro em que um cliente que se conectava ao ClickHouse Keeper durante uma mudança de líder do Raft podia ficar retido durante todo o
session_timeout_ms(30 segundos por padrão) antes de sua conexão ser rejeitada, em vez de ser rejeitada assim que a solicitação em andamento fosse descartada. Agora, o cliente pode se reconectar mais rapidamente a outra réplica. #114401 (Groene AI). BACKUP,RESTOREeENGINE = Backupagora autorizam o local do backup com base nas concessõesSOURCESdo usuário, da mesma forma ques3(),file()eazureBlobStorage()fazem. Antes, um usuário comBACKUP, mas semSOURCES, podia gravar um backup em qualquer local acessível pelo servidor e ler um backup de lá. Gravar um backup agora requer a permissãoWRITEna origem do destino (WRITE ON S3,WRITE ON AZURE,WRITE ON FILE), e ler um requerREAD; destinosDisk(...)permanecem restritos apenas porbackups.allowed_disk. #114405 (Groene AI).- Corrige o vazamento de uma tabela interna
_tmp_replace_*porCREATE OR REPLACEe a falha deCREATE OR REPLACE VIEWcomNOT_IMPLEMENTEDquandoignore_drop_queries_probabilityestá definido. Os DROPs emitidos internamente são etapas de uma única instrução do usuário, portanto a injeção de falhas em DROP não se aplica mais a eles. #114420 (Groene AI). - Corrige um
LOGICAL_ERROR(Bad cast from type DB::ASTLiteral to DB::ASTPartition) e SQL formatado que não podia ser analisado quando um comandoALTER TABLE ... MOVEdesserializado de uma AST JSON (dialect = clickhouse_json) combinava a formaPARTcomTO TABLEou a formaPARTITIONcomTO SHARD. Essas cargas úteis agora são rejeitadas comBAD_ARGUMENTS. #114429 (Groene AI). - Não remova colunas quando forem referenciadas nas condições de filtro
PREWHEREeWHERE, mesmo que sejam reescritas como uma coluna virtual de índice de texto. #114460 (Elmi Ahmadov). - Corrige o erro
Not-ready Set is passed as the second argument for function 'in'quando uma mutação cujo predicado contémIN (subquery)é cancelada, por exemplo, porKILL MUTATIONouDETACH DATABASE, enquanto o conjunto da subconsulta ainda está sendo criado. Relacionado: #107619. #114463 (Groene AI). ALTER TABLE ... DROP COLUMNde uma coluna usada na chave de ordenação, primária ou de partição agora falha comALTER_OF_COLUMN_IS_FORBIDDENe uma explicação, assim comoALTER TABLE ... CLEAR COLUMN. Antes, falhava com o confuso erroUNKNOWN_IDENTIFIER: Missing columns, decorrente do recálculo das expressões-chave. O mesmo se aplica à remoção ou limpeza de todo um grupoNestedpelo prefixo comum quando uma coluna do grupo é usada em uma chave; antes, isso podia destruir silenciosamente os dados do grupo ou deixar uma mutação que nunca termina. A remoção de uma coluna usada apenas em uma expressãoTTLagora também informa qual expressão TTL é afetada. #114468 (Maksim Dergousov).- Corrigida a leitura de uma coluna
Tuplecujo primeiro elemento éNULLnos formatosCustomSeparated,RegexpeTemplatecom a regra de escapeCSV. UmTuplesimples ocupa um campo por elemento nesses formatos; portanto, o campo\Ninicial corresponde a esse elemento, e não à coluna inteira. Anteriormente, ele era consumido como a coluna inteira, deslocando os campos dos elementos restantes para as colunas seguintes, de modo queCustomSeparatednão conseguia ler sua própria saída. Fecha #114402. #114471 (Groene AI). - Corrige
arrayExists(x -> x = needle, arr)que retornava um resultado incorreto ou falhava comTOO_LARGE_STRING_SIZEquando o elemento do array e a agulha eram tipos de string diferentes (por exemplo, uma agulhaStringcomparada a um elementoArray(FixedString(N))). A otimizaçãooptimize_rewrite_array_exists_to_has, habilitada por padrão, reescrevia essa chamada comohas, que não compara valores preenchidos com zeros da mesma forma que=. #114496 (Groene AI). - A leitura de uma tabela Iceberg cujos metadados descrevem uma evolução de esquema proibida pela especificação Iceberg não interrompe mais o servidor. Quatro violações da especificação em
IcebergSchemaProcessoreram relatadas comoLOGICAL_ERROR, tratado como uma asserção com falha, ou chegavam a uma asserção fatal sem serem verificadas; agora elas geramICEBERG_SPECIFICATION_VIOLATION. #114518 (Groene AI). - Corrigido o formato de entrada
Regexp, que descartava silenciosamente a parte não analisada de um campo correspondente, armazenando um valor truncado ou incorreto em vez de relatar um erro:v=-1emUInt64era lido como0, ev=2020-01-01junkemDateera lido como1975-07-14sob a regraJSON. Campos malformados agora são rejeitados sob as regrasEscaped,CSVeJSON, em conformidade com os formatos aos quais a documentação diz que essas regras se assemelham. SobRaw, um campo correspondente contendo uma tabulação agora é lido por inteiro, em vez de ser truncado na tabulação. #114520 (Groene AI). - Corrige
LOGICAL_ERRORao filtrar uma coluna Iceberg queALTER TABLE ... MODIFY COLUMNtornouNullable. Fecha #85029. #114521 (Groene AI). CREATE TABLEeALTER TABLEagora rejeitam codecs com perda de dados, comoSZ3, em uma coluna usada na chave de ordenação. #114531 (Groene AI).- Corrigido um
LOGICAL_ERRORao ler uma tabela Delta Lake cujometaData.partitionColumnsnomeia uma coluna não declarada emmetaData.schemaString. Esses metadados agora são rejeitados comBAD_ARGUMENTSno leitor delta-kernel eINCORRECT_DATAno leitor legado sempre que a tabela ou seu esquema é lido de um snapshot, e não apenas quando a consulta contém um predicado. #114538 (Groene AI). - Rejeita um Variant cujas ramificações ORC são lidas como um único tipo. #114540 (Groene AI).
- Corrige a avaliação do índice de texto do operador
LIKE/ILIKEem contêineres Map ou JSON. #114544 (Elmi Ahmadov). - Compatibilidade com nomes de rótulos entre aspas em modificadores de agrupamento do PromQL. #114545 (Minh Vu).
- Corrige literais
Time64incorretos, frequentemente com o sinal invertido, e constantes em listasINproduzidos quando o reescalonamento de umDecimal64de menor escala causava overflow deInt64. Essa conversão agora reportaDECIMAL_OVERFLOW, como no ramoDateTime64e noCASTexplícito. #114546 (Groene AI). - Aceita vírgulas finais em listas de rótulos de agrupamento no PromQL.. #114548 (Minh Vu).
- Oferece suporte a nomes de métricas e rótulos entre aspas em seletores do PromQL. #114551 (Minh Vu).
- Uma consulta podia ser cancelada até 1 ms antes de seu
max_execution_timeexpirar, falhando com a mensagem autocontraditóriaTimeout exceeded: elapsed 999.672 ms, maximum: 1000 ms. #114559 (Alexey Milovidov). - Corrige a leitura de uma tabela enquanto uma mutação está em andamento: uma coluna
MATERIALIZEDpodia retornar um valor desatualizado, e selecioná-la junto com uma coluna atualizada podia resultar em erro. #114561 (Shaohua Wang). - Corrige o
clickhouse-localque aceitava umCREATE TABLEcujo nome era longo demais para o--default_databaseconfigurado, produzindo uma tabela que não podia ser removida.DatabaseOverlayagora verifica o comprimento do nome da tabela como o banco de dados em disco no qual grava. #114567 (Groene AI). - Corrige uma falha de RBAC no mecanismo de tabela
Aliasque permitia a usuários sem privilégios na tabela de destino revelar seu esquema, número de linhas, tamanho e existência. #114596 (Kai Zhu). - Corrige o problema em que estatísticas de tabelas hash — e, consequentemente, a pré-alocação de tabelas hash para agregação — eram desabilitadas silenciosa e permanentemente em todo o servidor quando uma consulta que usava a otimização lazy
FINAL(query_plan_optimize_lazy_final) era a primeira agregação executada após a inicialização do servidor. #114597 (Alexey Milovidov). - Corrige o problema em que uma coluna renomeada, removida e adicionada novamente em um único
ALTERretornava os valores da coluna removida em vez de seu próprio valor padrão enquanto a mutação ainda estava pendente. #114601 (Shaohua Wang). - Corrige um loop infinito e não cancelável nas funções
hopewindowIDquando a duração, em segundos, de um argumento de intervalo é múltipla de 2^32 (por exemplo,toIntervalDay(2147483648)): a subtração com overflow contornava a verificação de overflow de tempo e, com argumentos constantes, o loop era executado durante a análise, quando a consulta sequer podia ser encerrada. O mesmo intervalo também podia fazer uma thread em segundo plano de umaWINDOW VIEWexecutar indefinidamente; essa window view agora é rejeitada durante a criação. #114607 (Alexey Milovidov). - Corrige um bug em que uma entidade de acesso que contém uma configuração com valor
Map, como um perfil de configurações comhttp_response_headersouadditional_table_filters, era armazenada de uma forma que o ClickHouse não conseguia reler, deixando a entidade permanentemente impossível de carregar após uma reinicialização. #114620 (Groene AI). - Corrige uma view materializada atualizável que deixava de remover sua tabela de destino anterior quando
ignore_drop_queries_probabilityestava habilitado. ODROPemitido por uma atualização para limpar o destino anterior é uma etapa da atualização, e não umDROPsolicitado pelo usuário; portanto, a injeção de falha não se aplica mais a ele. #114622 (Groene AI). - Corrige
has,indexOf,countEqual,mapContainsKey,mapContainsValuee o operador de subscrito deMap, que retornavam “não encontrado” para uma chaveLowCardinalityconstante igual ao valor padrão do tipo de elemento, como umaStringvazia ou o número zero. #114624 (Groene AI). - Corrigido o erro lógico
Multi-block postings must be compressedem consultas a tabelas com índice de texto no modo de aplicação tardia da lista de postagens, quando a consulta era cancelada durante a leitura. #114636 (Anton Popov). - Corrigida a formatação de um argumento de subconsulta das funções de tabela
vieweviewIfPermittedquando a consulta externa tem uma cláusulaSETTINGSao final. Essa consulta era formatada comoview((SELECT ...)), que não pode ser analisada novamente; por isso, falhava na verificação interna de formatação-análise-formatação e geravaInconsistent AST formatting. #114658 (Groene AI). - Corrigida a corrupção de memória heap ao ler Parquet por meio de um formato de entrada que gerencia seu próprio buffer de leitura, por exemplo, um Dicionário com
SOURCE(FILE(... format 'Parquet')). Tarefas de pré-busca e decodificação em segundo plano ainda podiam ler e gravar no buffer após o pipeline liberá-lo, o que poderia interromper o servidor. #114668 (Groene AI). - Corrige a leitura de uma subcoluna (
.size0,.null, um elemento de tupla,String.size) por meio de uma tabelaMergequando a tabela subjacente declara a coluna pai comoALIAS. Essa leitura retornava o valor padrão do tipo e, quando a coluna pai era selecionada na mesma consulta, podia retornar o valor de uma coluna não relacionada. #114673 (Groene AI). - Corrige
ANY RIGHT JOINeSEMI RIGHT JOINcom várias condições combinadas porORna seçãoON, que retornavam algumas linhas da tabela à direita duas vezes e perdiam as correspondências de outras. UmANY LEFT JOINexplicitamente escrito também era afetado, pois o planejador pode trocar as tabelas e executá-lo comoANY RIGHT JOIN. #114676 (Vladimir Cherkasov). - Corrigidos resultados incorretos da otimização trivial
GROUP BY ... LIMIT(configuraçãooptimize_trivial_group_by_limit_query) para consultas comDISTINCT,QUALIFY, funções de janela ouarrayJoinna projeção: esses elementos consomem ou filtram os grupos após a agregação; portanto, limitar a agregação aLIMIT + OFFSETchaves podia retornar poucas linhas ou valores incorretos. A otimização não se aplica mais a essas consultas. #114695 (Alexey Milovidov). - Corrigidas linhas ausentes no resultado de um
SELECTfiltrado porpointInPolygonem uma chave primária MergeTree quando o argumento do polígono é um literal constante inválido evalidate_polygons = 0. A análise da chave primária derivava a eliminação de grânulos de um polígono que nunca validava e descartava grânulos que continham linhas correspondentes. #114710 (Groene AI). - Corrige uma falha do servidor que ocorre quando estados agregados dos combinadores
-OrNullou-OrDefaultsão mesclados comgroup_by_overflow_mode = 'any'emax_rows_to_group_bydiferente de zero, por exemplo, quando uma consulta lê por meio de uma projeção agregada. #114740 (Groene AI). - Corrigido um
LOGICAL_ERROR(“Unexpected number of kept output positions after removing unused columns fromReadFromMergeTree”) gerado por umSELECT ... FINALcujoPREWHEREusa uma coluna necessária para a mesclagem porFINAL(ver,is_deleted,sign) e que não seleciona essa coluna. #114746 (Groene AI). - Corrige um erro lógico (
Block structure mismatch) ao ler uma tabelaMergecommake_distributed_planhabilitado em nós filhos com operações de conjunto internas. #114753 (Alexey Milovidov). - Rejeita um
kafka_num_consumersabsurdamente grande com uma mensagem de erro clara, em vez de falhar durante uma alocação no motor de tabelaKafka. Antes, comkafka_disable_num_consumers_limithabilitado, esse valor gerava uma exceçãostd::length_error. #114764 (Alexey Milovidov). - Corrige uma exceção
LOGICAL_ERROR: Context has expiredquando uma expressão armazenada contendoaccurateCastOrDefaultou uma funçãoto<Type>OrDefaulté avaliada após o término da consulta que a criou, por exemplo, um valor padrão de colunaMATERIALIZEDem umINSERTou uma expressão de mutação. #114769 (Groene AI). - Corrige um
LOGICAL_ERROR(Cannot find input column ... on its position in inputs of expression actions DAG) quando uma consulta tem umJOINsobre uma tabela cuja coluna indexada por texto é usada tanto por um predicado de pesquisa de texto emPREWHEREquanto emWHERE. #114771 (Groene AI). - Corrige a perda de uma sinalização da thread de reinicialização durante a inicialização pela thread de anexação. #114802 (Azat Khuzhin).
OPTIMIZE TABLEem uma tabela de armazenamento de objetos cujo motor não implementa compactação reportava sucesso sem realizar nenhuma ação. Agora, gera um erro, como ocorre com todos os outros motores que não oferecem suporte à instrução. Isso afetaDeltaLake,Paimon,Hudie motores simples de armazenamento de objetos (S3,GCS,COSN,OSS,AzureBlobStorage,HDFSeURLcom suporte de armazenamento de objetos);Iceberg, que implementa compactação, permanece inalterado. Fecha #114765. #114805 (Groene AI).timeSeriesRangeetimeSeriesFromGridgeravam um falsoDECIMAL_OVERFLOWpara timestamps anteriores a 1970 porque os timestamps de início e fim eram lidos como valores sem sinal. Além disso, para timestampsDateTime/UInt32, o passo era truncado silenciosamente para os 32 bits menos significativos. Agora, todos os cálculos são feitos emInt64. #114815 (Vitaly Baranov).- Corrige um aborto do servidor (
Logical error: Part patch-... doesn't exist) quando umDROP TABLEé executado simultaneamente a umUPDATElightweight em uma tabelaReplicatedMergeTree. A atualização agora mantém o bloqueio compartilhado da tabela até que sua patch part seja confirmada, fazendo com que oDROPaguarde em vez de removê-la. #114826 (Groene AI). - Corrige alguns bugs em inserts assíncronos (possível falha quando algumas consultas falham com
MEMORY_LIMIT_EXCEEDEDeasync_insert_queue_flush_on_shutdownnunca funcionava). #114839 (Azat Khuzhin). - Corrigido
LOGICAL_ERROR: Unexpected return type from tuple. Expected Tuple(..., UInt8). Got Tuple(..., LowCardinality(UInt8))quando uma colunaLowCardinalitycomparada comIN (subquery)é lida viatuple(...)além do limite de uma subconsulta, comenable_analyzer = 0. Com o analisador antigo,x IN (subquery)em uma colunaLowCardinalityagora retornaLowCardinality(UInt8), o mesmo tipo dex IN (literal list)e de quandoenable_analyzer = 1. #114856 (Nikita Fomichev). - As configurações de cota das funções de IA (
ai_function_max_api_calls_per_query,ai_function_max_input_tokens_per_query,ai_function_max_output_tokens_per_query) eram aplicadas por bloco, em vez de por consulta, permitindo que uma consulta excedesse o limite configurado proporcionalmente ao número de blocos e threads processados. Agora, elas limitam a consulta inteira em cada servidor: o limite de chamadas de API é exato (com reserva atômica), e os limites de tokens são de melhor esforço. Uma consulta distribuída aplica os limites de forma independente em cada servidor/fragmento participante. #114885 (George Larionov). - Corrigido um abort do servidor que ocorre quando o pool global de threads fica momentaneamente saturado enquanto as tabelas ainda estão sendo carregadas. O
AsyncLoaderagora continua em execução se não puder iniciar um worker de carregamento adicional, desde que algum worker ainda possa processar os trabalhos enfileirados, em vez de chamarstd::terminate. #114897 (Groene AI). - Corrigidos comportamento indefinido e resultados incorretos nos limites em
quantileequantilespara valoresDateTime64eDecimalde alta precisão. #114919 (Alexey Milovidov). - Corrigido abort do servidor causado por um rodapé de stripe ORC corrompido. #114924 (Groene AI).
- Corrigido possível travamento devido ao uso de ThreadGroup após sua liberação (para INSERTs assíncronos/MVs/EXPLAIN ANALYZE). #114940 (Azat Khuzhin).
- Corrigido um travamento ao remover uma tabela
TimeSeriescujo nome é ordenado lexicograficamente antes dos nomes de suas tabelas internas, por exemplo,DROP TABLE `-ts`, ou ao remover uma visão materializada declarada comENGINE = TimeSeries. A operação de remoção entrava em deadlock consigo mesma no bloqueio DDL e não podia ser cancelada comKILL QUERY. #114953 (Groene AI). - Corrigido
BAD_DATA_PART_NAME(“Trying to get part name in new format for old format version”) em umReplicatedMergeTreecriado com a sintaxe posicional obsoleta soballow_deprecated_syntax_for_merge_tree. Uma mutação poderia ser reportada como concluída em uma réplica que não a havia aplicado, e a tabela poderia permanecer readonly após uma reinicialização. #114980 (Groene AI). - Corrigido o erro lógico
Not-ready Set is passed as the second argument for function 'in'em uma consulta com uma subconsultaINque lê de um cluster remoto: agora a consulta falha com o erro real da subconsulta, como uma falha de conexão. #114983 (Alexey Milovidov). - Corrigido erro lógico para
INcom uma tupla não constante idêntica em ambos os lados no analisador antigo. #114988 (Groene AI). - Corrigida a leitura de um elemento de tupla por meio de uma dica posicional de estrutura
Tuple. #115000 (Groene AI). - Não crie aliases para estados de pré-agregação de um agregado de tamanho zero em arrayReduceInRanges. #115008 (Groene AI).
- Corrigido um
INSERTem uma tabelaLog,TinyLogouStripeLogque falhava ao confirmar os tamanhos dos arquivos registrados. Esse insert podia manter suas linhas na tabela mesmo após reportar um erro ou deixar os arquivos de dados de uma coluna de array inconsistentes entre si. A leitura de uma tabelaLogouTinyLogcuja coluna de array não contém elementos, embora seus offsets indiquem alguns, agora gera um erro que identifica a coluna, em vez de ler além do fim dos elementos. Uma coluna de elementos parcialmente gravada já era rejeitada. #115027 (Groene AI). - Corrigida uma interrupção do agregador adaptativo em colunas com replicação sob demanda. #115034 (Groene AI).
- Corrigida uma leitura fora dos limites em
pointInPolygoncom um polígono constante cuja caixa delimitadora é ilimitada, por exemplo, quando uma coordenada atinge+-DBL_MAX. Esse polígono agora é rejeitado comBAD_ARGUMENTS, e um polígono com um anel vazio é tratado como sem interior. Anteriormente, a consulta podia retornar um resultado incorreto ou interromper o servidor em builds com hardening ou sanitizers ativados. #115035 (Groene AI). - Corrigida uma exceção
out_of_rangegerada como erro internoCode: 1001quando um padrão desequenceMatch,sequenceCountousequenceMatchEventscontém o número de evento0, por exemplo,sequenceMatch('(?0)'). Esse padrão agora é rejeitado comBAD_ARGUMENTS. Uma condição temporal contendo um sinal isolado, comosequenceMatch('(?1)(?t>+)(?2)'), era silenciosamente tratada como(?t>0)e agora é rejeitada comSYNTAX_ERROR. #115056 (Groene AI). - Corrigido
Found patch part ... that intersects mutation with version ...(LOGICAL_ERROR) em tabelas com atualizações leves. A mesclagem de partes de patch podia produzir um patch cujo intervalo de versões de dados abrangia a versão de dados de uma parte existente; esse patch não podia ser aplicado nem ignorado, fazendo com que todas as operações subsequentes na partição falhassem e a fila de replicação ficasse parada. Essas mesclagens não são mais atribuídas. #115064 (Alexey Milovidov). - Corrigido um
LOGICAL_ERROR(Cache file segment is in detached state) ao ler por meio do cache do sistema de arquivos com a configuração experimentaluse_reader_executor. A regressão foi introduzida por #110029 e não está presente em nenhuma versão; portanto, não requer retroport. #115070 (Groene AI). - Servidor Arrow Flight: aceita credenciais de autenticação
Basiccodificadas em Base64 sem preenchimento, conforme enviadas por clientes Flight baseados em Go, como o driver ADBC Flight SQL, e retorna um erro de autenticação adequado, em vez de umUnexpected error in RPC handlinggenérico, quando o cabeçalhoauthorizationestá malformado. #115085 (Alexey Milovidov). - Corrigido o autocompletar (dicas e conclusão com TAB de
system.completions) no cliente integrado usado pela interface SSH e pelo terminal Web: as sugestões eram carregadas por uma conexão separada que se autenticava como o usuáriodefaultcom uma senha vazia, o que falhava em servidores nos quaisdefaulttem uma senha e, caso contrário, expunha nomes de entidades às quais o usuário conectado não tem acesso. As sugestões agora são carregadas pela própria conexão da sessão. #115086 (Alexey Milovidov). - Corrigido um problema que impedia o servidor de iniciar após a criação de uma tabela com
CREATE TABLE ... AS url('http://host/**/', ...)enquantoallow_experimental_url_wildcard_from_index_pagesestava habilitado. O carregamento dos metadados dessa tabela reavaliava a verificação experimental e falhava comSUPPORT_IS_DISABLED, interrompendo a inicialização. #115095 (Groene AI). - Reescrita de bucketIndexForTimestamp com aritmética de 64 bits. #115097 (Vitaly Baranov).
- Corrigida a formatação de
ALTER TABLE ... MATERIALIZE INDEX,MATERIALIZE STATISTICSeMATERIALIZE PROJECTION, que removia a cláusulaIF EXISTS, fazendo com que a consulta formatada fosse diferente da consulta analisada. Também foram rejeitados quatro payloads JSON de AST deALTER ... STATISTICSque o analisador SQL não consegue produzir e que eram formatados como um comando diferente. #115099 (Groene AI). - Corrigida uma exceção (
Block structure mismatch in Expression for FilterSortedStreamByRange) em algumas consultasSELECT ... FINALcomPREWHEREem uma tabela cuja chave de ordenação é uma expressão. #115113 (Shaohua Wang). - Corrigidos os overrides de CORS da CLI do clickhouse-local. #115129 (Alexey Milovidov).
- Desabilitada a análise de índice distribuída com projeções (resultados incorretos). #115132 (Azat Khuzhin).
- Corrigido o retorno de um valor positivo grande, em vez de um negativo, por
ifemultiIfquando uma ramificaçãoTimeé combinada comTime64,DateTimeouDateTime64e a expressão é compilada por JIT. #115146 (Groene AI). - Um terminal web embutido em outra página, como o SQL Console ou
play.html, recebe suas credenciais dessa página e não abre mais uma conexão própria antes de recebê-las. Anteriormente, ele se conectava duas vezes — uma com uma senha vazia e outra com as credenciais reais — e exibiaConnecting...duas vezes. #115148 (Alexey Milovidov). - Corrigidos resultados incorretos quando uma cláusula
WHEREcontinha uma expressãoNULLsob umNOT, por exemplo,SELECT count() FROM t WHERE NOT (id >= 20 AND NULL). A análise de índice tratava essa condição como comprovadamente verdadeira para todo o intervalo, ignorando o filtro:count()retornava linhas que a consulta rejeitava, eALTER TABLE ... DELETEcom essa condição removia linhas que deveria manter. #115152 (Groene AI). - Corrigida a perda das estatísticas de join por
EXPLAIN ANALYZEem uma visualização declarada comoSQL SECURITY DEFINERouSQL SECURITY NONEcujo corpo contém um JOIN. Em builds de depuração e com sanitizer, a consulta era interrompida com o erro lógicoJoinStep analyzed without the analyze mode. #115156 (Groene AI). - Corrigida uma leitura fora dos limites ao desserializar listas de postings corrompidas de um índice de texto. #115222 (Anton Popov).
- Corrigidos resultados incorretos para
SELECT count(arrayJoin(arr))com o padrãooptimize_trivial_count_query = 1. A contagem de linhas armazenada era retornada em vez do número de elementos do array, e, emfile()eurl(), a consulta retornava0. Fecha #115123. #115227 (Groene AI). - Corrige
NOT_FOUND_COLUMN_IN_BLOCKem todos osINSERTem tabelas que declaramSTATISTICS(...)em uma colunaALIASouEPHEMERAL, o que tornava essas tabelas somente leitura. #115231 (Groene AI). - Corrige a exibição das estatísticas finais de uma consulta concluída (
N rows in result,Read ... rows) em uma cor invisível na interface Web. #115245 (Alexey Milovidov). - Corrige resultados incorretos sem aviso e comportamento indefinido ao ler um estado
AggregateFunction(uniq, ...)malformado. O camposkip_degreedo estado serializado era usado como expoente de deslocamento sem validação; portanto, um valor fora do intervalo produzia uma cardinalidade arbitrária em vez de um erro. Esses estados agora são rejeitados comINCORRECT_DATA. #115276 (Groene AI). - Corrige uma forma de contornar a política de linha em que a função de tabela mergeTreeIndex expunha valores da chave primária e do índice minmax de linhas ocultas por uma política de linha
SELECTna tabela de origem; agora, a leitura de mergeTreeIndex em uma tabela com política de linha é negada. #115304 (Yarik Briukhovetskyi). - Corrige
CREATE QUOTAeALTER QUOTA, que descartavam silenciosamente todos os blocosFOR INTERVAL, exceto o último, quando a vírgula entre os intervalos era omitida. Essa instrução era executada com êxito sem aplicar nenhum dos limites anteriores. Os intervalos agora voltam a ser acumulados, como antes de 2020. Fecha #115282. #115320 (Groene AI). - Corrige resultados incorretos de
if,multiIfeCASEquando uma ramificação éDateouDate32e o tipo de resultado éDateTimeouDateTime64. Comcompile_expressions = 1(o padrão), a expressão compilada copiava a contagem de dias da data para a coluna de timestamp sem converter dias em segundos; portanto,if(cond, toDate32('1900-01-01'), toDateTime64('1970-01-01', 3))retornava1969-12-31 23:59:34.433. Fecha #115272. #115325 (Groene AI). - Evita deixar metadados que fazem referência a uma coleção nomeada removida. #115326 (Groene AI).
- Corrige
timezoneOffset(aliastimeZoneOffset), que retornava um deslocamento incorreto de exatamente um dia para fusos horários cujo deslocamento UTC difere do deslocamento em 1970-01-01 por um dia inteiro, comoPacific/KiritimatiePacific/Apiaapós cruzarem a Linha Internacional de Data, além da maioria dos fusos antes de 1970. Isso também corrigeparseDateTime,parseDateTimeOrNull,parseDateTime64,parseDateTimeInJodaSyntax,EXTRACT(TIMEZONE_HOUR / TIMEZONE_MINUTE ...),%zdeformatDateTime,toUTCTimestampefromUTCTimestamp, que usam esse deslocamento. Fecha #115281. #115332 (Groene AI). - Corrige uma forma de contornar restrições de configuração:
SET <name> = DEFAULTredefinia uma configuração sem verificar as restrições do perfil do usuário; assim, uma restriçãoMIN/MAX/CONSTpodia ser contornada ao redefinir a configuração em vez de atribuir um valor a ela, e uma sessão podia sair do modo somente leitura comSET readonly = DEFAULT. #115334 (Alexey Milovidov). - Servidor Arrow Flight: rejeita credenciais de autenticação básica malformadas que não contêm o separador entre nome de usuário e senha. #115347 (Alexey Milovidov).
- Corrigido um
LOGICAL_ERROR(Join is supported only for pipelines with one output port) em um JOINfull_sorting_mergecomquery_plan_join_shard_by_pk_rangeshabilitado quando um dos lados não tem nenhuma parte, seja devido à chave primária, às estatísticas de coluna ou porque a tabela está vazia. #115352 (Alexey Milovidov). - Desabilita o cache de condições de consulta para filtros em _part_starting_offset. #115358 (Azat Khuzhin).
- Corrigido
randConstantretornando dois valores diferentes em uma consulta quando suas chamadas usam aliases diferentes. A documentação derandConstantestabelece que ele mantém um único valor para toda a consulta, eSELECT randConstant() = randConstant()já retornava1, mas adicionar aliases, como emSELECT randConstant() AS a, randConstant() AS b, produzia dois valores não relacionados. #115384 (Alexey Milovidov). - Corrigido
uniq,uniqExact,uniqHLL12euniqThetaretornando um resultado incorreto para um argumento envolvido em uma função injetiva que oculta a nulidade, comouniqExact(tuple(x))em uma colunaNullable. A otimizaçãooptimize_injective_functions_inside_uniqremovia a função envolvente, fazendo com que linhas NULL fossem ignoradas em vez de contadas. #115466 (Vladimir Cherkasov). - Corrigido
GroupingAggregatedTransformproduzindo blocos duplicados para o mesmo bucket. #115487 (Nikita Taranov). - Corrigida a mensagem de erro de
geoToH3, que indicava a posição e o tipo incorretos do argumento quando uma coordenada não éFloat64. Com o padrãogeotoh3_argument_order = 'lat_lon', a mensagem apontava para o outro argumento e exibia seu tipo. Fecha #101813. #115503 (Groene AI). - Rejeita um retorno de carro isolado (
\r), além de uma quebra de linha (\n), em nomes e valores de cabeçalhos HTTP que passam pelo filtro de cabeçalhos HTTP. Isso corrige uma brecha de injeção de cabeçalho HTTP (divisão de solicitação/resposta) em recursos que transmitem cabeçalhos fornecidos pelo usuário, como a função e o mecanismo de tabelaurl, dicionários HTTP e catálogos do lago de dados. #115510 (Sergei Trifonov). - Corrigidos caches configurados com um número máximo de entradas (política
SLRU) que deixavam silenciosamente de admitir novas entradas depois que essa quantidade de entradas tivesse sido acessada pelo menos duas vezes. Os caches afetados incluem os caches de arquivos de metadados do Iceberg e do Paimon, o cache de metadados Parquet, os caches de índice de texto, o cache de índice de similaridade vetorial, o cache de expressões compiladas e o cache de status de arquivos do ObjectStorageQueue. #115517 (Groene AI). - Corrigido um travamento de até uma hora em
BACKUP/RESTORE ... TO S3, discos GCS e na função de tabelas3quando a coleção nomeada definehttp_client = 'gcp_oauth'e o endpoint de token OAuth2 do Google aceita a conexão, mas nunca responde. A solicitação de token bearer não herda mais o tempo limite da solicitação de transferência de dados do chamador; a espera pela resposta é limitada a 10 segundos, correspondendo ao limite da solicitação STSAssumeRole. #115531 (Groene AI). - Corrige
dictGete suas variações em consultas distribuídas: um nome de dicionário não qualificado agora é vinculado ao banco de dados atual do iniciador, em vez de ser resolvido no banco de dados atual de cada shard, onde não era encontrado ou era resolvido para outro dicionário com o mesmo nome. #115541 (Alexey Milovidov). - Corrige uma condição de corrida que poderia fazer uma consulta
STREAM BOUNDEDretornar menos linhas do que as confirmadas antes de seu início, geralmente nenhuma. #115543 (Alexey Milovidov). - Corrigida a gravação de snapshots do Keeper como arquivos vazios quando
compress_snapshots_with_zstd_formatestá desabilitado. O servidor registravaCreated persistent snapshot, mas o arquivo de snapshot tinha 0 bytes, e o nó se recusava a iniciar comCORRUPTED_DATA. Fecha #115388. #115553 (Groene AI). - Corrige
read_rows,read_bytes,written_rowsewritten_bytesemsystem.query_thread_log, que informavam um total acumulado ao longo da vida da thread em vez dos valores da consulta registrada. As linhas de threads de pool de longa duração, em particular a threadHTTPHandlerque inicia a consulta, eram afetadas. #115596 (Groene AI). - Corrigida uma leitura fora dos limites dos hashes de dicionário em cache ao agregar ou fazer join em uma chave
LowCardinality(String)cujo dicionário cresce durante a agregação, acessível por meio deTTL ... GROUP BY. Isso poderia gerar um hash incorreto e um heap-buffer-overflow relatado em builds com sanitizer. #115604 (Groene AI). CREATE TABLEeALTER TABLEagora rejeitam um codec com perdas, comoSZ3, em uma coluna usada na chave de partição. #115626 (Groene AI).- Corrige caracteres de escape de barra invertida inválidos nos índices text, tokenbf_v1 e ngrambf_v1. #115634 (Elmi Ahmadov).
- Corrigido
removePartAndCoveredPartsquando chamado para uma parte presente no conjunto de partes de dados ativas. #115640 (Mikhail Artemenko). - Permite que leitores do KeeperMap aceitem metadados compartilhados quando chaves primárias equivalentes diferem apenas por parênteses externos redundantes. #115642 (Sergey Kuznetsov).
- Corrigido um bug em que a restauração de um banco de dados ou tabela com outro nome removia os aliases de tabela dos corpos de views armazenadas, fazendo com que a leitura de uma view restaurada falhasse com
UNKNOWN_IDENTIFIER. Fecha #115479. #115645 (Groene AI). - Corrigido
Code: 349. Cannot convert NULL value to non-Nullable typequando um predicadohasounotHascontém um elemento NULL de array e a chave primária éString,Array(String)ouMap(String, String), além de resultados incorretos quando esse elemento é umDynamicouVariantque contém NULL. O NULL agora é removido do conjunto durante a análise da chave, como já ocorria para outros tipos de chave. #115647 (Groene AI). - Corrigido um bug na função
formatRowNoNewlineque poderia produzir resultados incorretos ou um erro lógico quando uma linha é formatada como um resultado vazio. #115669 (Alexey Milovidov). - Rejeita valores zero e negativos de
stepem consultas de intervalo de ponto único do Prometheus. #115679 (Minh Vu). - Rejeita timestamps e durações do PromQL que excedam o intervalo de Int64. #115682 (Minh Vu).
- Corrige falhas do servidor causadas por entradas profundamente aninhadas em
readWKB,JSONMergePatch, no analisador de endereços das funções de tabelaurl/remote/cluster/mysql/postgresql, no analisador da cláusulaCURSORe no analisador de esquema CapnProto. Corrige uma falha no analisador da instruçãoEXECUTEquando um argumento não é um literal. #115700 (Alexey Milovidov). - Impede o retorno de memória não inicializada no resultado de um literal de string binária cujo comprimento não seja múltiplo de oito e pelo descompressor LZ4 quando um bloco comprimido não tiver corpo. #115704 (Alexey Milovidov).
- Limita o tamanho da mensagem de inicialização do protocolo de comunicação do PostgreSQL, lida antes da autenticação. #115708 (Alexey Milovidov).
- Corrige o erro
MULTIPLE_EXPRESSIONS_FOR_ALIASem consultas nas quais um alias de coluna coincide com o alias de uma expressão de tabela na seçãoFROM(uma regressão do analyzer na versão 25.2). #115714 (Alexey Milovidov). - Corrige o encerramento de todo o processo pelo
clickhouse-localquando um manipulador de conexão de um listener iniciado comSYSTEM START LISTENlançava uma exceção, por exemplo, porque um cliente enviava um pacote malformado ou redefinia um socket keep-alive. Esse processo agora registra o erro e continua atendendo, como oclickhouse-server. #115715 (Groene AI). - Corrige
LOGICAL_ERROR: No available columnsquando uma consulta não lê nenhuma coluna de uma expressão de tabela que não possui colunas, por exemplo,SELECT count() FROM loop(db, tbl), em quetblé uma tabelaAliascujo destino foi removido, ou uma visualização parametrizada. Essa consulta agora falha comUNSUPPORTED_METHODem vez de abortar o servidor em builds de depuração e com sanitizer. #115716 (Groene AI). - Corrige
LOGICAL_ERROR“Reading from materialized CTE ‘X’ before its materialization completed - DelayedPortsProcessor gate is missing in the query plan” quando uma CTEMATERIALIZEDé lida dentro de uma subconsultaINem uma tabelaDistributed. Fecha #113184. #115740 (Groene AI). - Rejeita nomes inválidos de projeções e índices. #115824 (Alexander Tokmakov).
- Rejeita modificadores de correspondência de vetores do PromQL quando um dos operandos é escalar. #115828 (Minh Vu).
- Corrige o fato de
cast_keep_nullablenão preservar a capacidade de aceitar NULL quando o tipo de destino éLowCardinality. A conversão de um valor que aceita NULL paraLowCardinality(T)lançavaCANNOT_INSERT_NULL_IN_ORDINARY_COLUMNem vez de produzirLowCardinality(Nullable(T)). Fecha #103485. #115851 (Groene AI). - Adiciona os caminhos de Objects ao hash de desduplicação, evitando desduplicações incorretas. #115866 (Mikhail f. Shiryaev).
- Corrige
TYPE_MISMATCH(“CAST AS Array can only be performed between same-dimensional array types”) em uma consulta com uma constante do tipoArray(Map(...)), comohas([map('k', 'v')], m), executada em uma tabelaDistributedou com réplicas paralelas. #115883 (Alexey Milovidov). - Corrige
Unknown identifiergerado durante a otimização do plano de consulta commake_distributed_plan = 1, quando a coluna de ordenação de uma consulta de janela passa por uma etapaExpressionque não a menciona. Fecha #115737. #115890 (Groene AI). - Corrige
h3kRing,h3HexRing,h3Lineeh3ToChildren, que ignoravammax_execution_timeeKILL QUERYao expandir um bloco de linhas. #115893 (Alexey Milovidov). - A leitura por meio de uma tabela
Mergeque corresponde a uma tabelaAliascujo destino é uma visão parametrizada não gera maisLOGICAL_ERROR: Table has no columns.(que encerra o servidor em compilações de depuração e com sanitizer). Essa tabela agora informaSTORAGE_REQUIRES_PARAMETER, o mesmo erro informado pela própria visão parametrizada. Qualquer outra tabela correspondente que não possa fornecer colunas agora informaUNSUPPORTED_METHODem vez de um erro interno. #115896 (Groene AI). - Corrige a prévia dinâmica de uma mutação pendente cuja expressão referencia
_sample_factor. Comapply_mutations_on_fly = 1e uma cláusulaSAMPLE, a expressão era avaliada com o fator de amostragem da consulta de leitura em vez do valor persistido pela materialização em segundo plano. Como resultado, as linhas visualizadas divergiam do resultado materializado final, e umALTER TABLE t DELETE WHERE _sample_factor > 1pendente podia fazer com que uma leituraSAMPLEnão retornasse nenhuma linha. A própria coluna_sample_factorda consulta permanece inalterada. #115906 (Groene AI). - Corrige um caso em que
ATTACH TABLEcom uma definiçãoENGINE = URL(...)não verificava a permissãoTABLE ENGINEdo engine para o qual o esquema de URL encaminha. Um usuário com apenasTABLE ENGINE ON URLpodia anexar e então ler uma tabela baseada emFile,S3,AzureBlobStorageouHDFS, algo queCREATE TABLErejeita corretamente. #115914 (Groene AI). - Impede que um nó de metadados KeeperMap não analisável impeça a inicialização do servidor. #115941 (Groene AI).
- Corrige uma falha da função
showCertificateem um servidor que obtém seu certificado TLS via ACME (Let’s Encrypt). A função agora informa o certificado realmente servido, inclusive após o recarregamento do certificado. #115976 (Alexey Milovidov). - Corrige o encerramento do servidor em compilações de depuração e com sanitizer ao inserir em uma visão materializada cujo destino
TOé outra visão materializada. Essa inserção já falhava nas versões lançadas, com umCode: 1001 STD_EXCEPTIONpouco informativo; agora informaNOT_IMPLEMENTED, identificando a visão problemática. #115985 (Groene AI). - Arquivos de estatísticas no formato versão
V3agora são lidos em vez de rejeitados comILLEGAL_STATISTICS. Esses arquivos foram produzidos apenas por compilações demasterem um período restrito, mas as partes que os continham eram totalmente ilegíveis e, em um disco readonly,ALTER TABLE ... MATERIALIZE STATISTICSnão pode regenerá-los. #116030 (Alexey Milovidov). - Corrigido
LOGICAL_ERROR: Index with name auto_minmax_index_<column> already existsquando uma única instruçãoALTER TABLEcombinavaRENAME COLUMNcom outro comando, comoMODIFY SETTING, em uma tabela com índices minmax implícitos (add_minmax_index_for_numeric_columnse similares). Renomear uma coluna comum também não faz mais com que umDROP COLUMNsubsequente falhe comUNKNOWN_IDENTIFIER, nem deixa umADD COLUMNsubsequente sem seu índice implícito. #116063 (Groene AI). - Corrigida falha de workers sem estado com armazenamento de objetos. #116067 (Konstantin Vedernikov).
Melhoria na compilação, nos testes e no empacotamento
- Disponibilizados artefatos assinados para macOS. #115169 (Konstantin Bogdanov).
- Corrigida a compilação a partir do código-fonte com clang 23. #112288 (Azat Khuzhin).
- Reduzidas as dependências e o tamanho do código do parser SQL, que agora pode ser compilado de forma independente — consulte
utils/wasm-parserpara uma compilação WebAssembly independente dele. As tabelas de palavras-chave SQL e tipos de acesso agora são geradas em tempo de compilação, em vez de a cada inicialização do servidor. #112067 (Alexey Milovidov). - A compilação a partir do código-fonte agora falha durante a geração do CMake, em vez de corromper
StorageSystemLicenses.generated.cppquando a geração de licenças falha. #111222 (Mikhail Artemenko). - Atualizada a biblioteca Apache Thrift incluída para a versão 0.24.0. #111278 (Groene AI).
- Adicionada a
libucontextpara compilações com musl, habilitando o backenducontextdoboost::contextusado por compilações com sanitizer. #111437 (Konstantin Bogdanov). - Corrigidos problemas de portabilidade no código-fonte ao compilar com musl. #111631 (Konstantin Bogdanov).
- A edição de
Core/ProtocolDefines.hnão aciona mais uma recompilação quase completa ao compilar a partir do código-fonte: a inclusão foi removida deBlockInfo.he adicionada apenas aos arquivos que usam suas constantes. #111650 (Alexander Gololobov). - Corrigido um abortamento na inicialização em compilações de depuração no macOS, desabilitando verificações de depuração do rastreador de memória para alocações feitas por bibliotecas do sistema. #112080 (Arsen Muk).
- Atualizada a
libarchiveincluída para a versão 3.8.9. #112434 (Konstantin Bogdanov). - Atualizado o
StringZillapara a versão 5.0.5. #112319 (Konstantin Bogdanov). - Atualizado o
jwt-cpppara v0.7.2. #112595 (Konstantin Bogdanov). - Atualizado o amalgamado SQLite incluído de 3.41.2 para 3.53.4. #112599 (Konstantin Bogdanov).
- Atualizado o
aws-c-httppara a versão 0.11.0. #112413 (Govind R Nair). - Atualizado o
libcotppara v4.2.1. #112596 (Konstantin Bogdanov). - Agora, o OpenSSL pode ser compilado a partir de seu código-fonte C portável em arquiteturas sem assembly escrito manualmente na descrição da compilação, em vez de falhar na etapa final de vinculação com símbolos indefinidos. A nova opção CMake
OPENSSL_NO_ASMseleciona explicitamente o mesmo caminho. #112863 (Alexey Milovidov). - Adicionada uma opção CMake
ENABLE_ORC(ativada por padrão), para que uma compilação possa incluir Parquet sem ORC e sem o protobuf e oprotoctrazidos pelo ORC. #112864 (Alexey Milovidov). Common/Exception.cppnão exige mais a libc++ corrigida do ClickHouse para compilar. Assim, uma compilação vinculada a uma biblioteca padrão C++ diferente passa a gerar exceções sem um stack trace do ponto de lançamento, em vez de falhar na compilação. #112865 (Alexey Milovidov).- O desenrolamento de pilha em compilações musl para aarch64 agora continua através de frames de sinal e syscalls bloqueadas, em vez de parar no frame da libc, melhorando os stack traces do handler de erros fatais e do sampling query profiler. #112592 (Konstantin Bogdanov).
- Atualizada a
libexpatincluída para 2.8.2. #112593 (Konstantin Bogdanov). - Atualizado o
simdjsonpara v4.6.5. #112594 (Konstantin Bogdanov). - Atualizados Apache Arrow para 25.0.0 e Apache ORC para 2.3.1. #112604 (Konstantin Bogdanov).
- As compilações de cobertura (
WITH_COVERAGE) agora vinculam o runtime de profiling compilado na árvore a partir das fontes LLVM incluídas, em vez do arquivo compactado incluído na cadeia de ferramentas clang do host. #112607 (Konstantin Bogdanov). - Atualizados Protocol Buffers para v35.1 e gRPC para v1.83.0. #112614 (Konstantin Bogdanov).
- Adicionado um alvo experimental para WebAssembly (
wasm64, via Emscripten):emcmake cmakeagora configura a árvore, e as camadas inferiores são compiladas. Também corrigido-DENABLE_LIBFIU=OFF, que não compilava em nenhuma plataforma. #112911 (Alexey Milovidov). - Corrigidos todos os casos de
-Wunique-object-duplication: singletons mutáveis definidos em headers que teriam uma cópia por objeto compartilhado, em vez de uma por processo. Principalmente movendo a definição para um.cpp. #112995 (Alexey Milovidov). - A instalação de um pacote
tgzsobre um link simbólico pendente agora preserva a cadeia de links simbólicos e aplica as permissões e o proprietário do destino empacotado, em vez de permissões derivadas deumask. #112766 (Alexey Milovidov). - Em compilações musl para
aarch64,memmoveagora usa a implementação em assembly de rotinas otimizadas para ARM (compartilhada commemcpy) em vez do loop C genérico que processa uma palavra por vez. #113502 (Konstantin Bogdanov). - Em compilações musl,
getaddrinfocomAI_ADDRCONFIGagora segue a semântica da glibc. Assim,localhostdeixa de ser resolvido primeiro como um::1inutilizável em ambientes somente IPv4, esysconfretorna as indicações da glibc para tamanhos de buffer degetpwuid_r/getgrgid_r, em vez de -1, corrigindo o libhdfs3. #113485 (Konstantin Bogdanov). - Em compilações com musl,
sched_getcpuagora é uma leitura rseq (~1ns), em vez de uma syscall, equiparando-se à glibc e eliminando a sobrecarga de tempo de sistema dopercpu_arenado jemalloc em workloads com muitas alocações; o musl também registra rseq de forma imediata e exporta a ABI__rseq_*da glibc. #113501 (Konstantin Bogdanov). - Corrigida a compilação local (sem CI) de todo o código Rust fornecido (o codec
PCO, leituras do Delta Lake viadelta-kernel-rs,prqlc,chdig,wasmtimee a busca difusa no histórico do client viaskim) comopt-level = 0. A variável CMakeSANITIZEfoi declarada comoption, portanto seu valor padrão era o BOOLOFF, que não passava nas verificaçõesSTREQUAL ""de “sem sanitizer”; assim, todas as compilações configuradas sem um-DSANITIZE=...explícito seguiam o caminho alternativo para sanitizer, que desativa a otimização do Rust. #114083 (Alexey Milovidov). - Enviar camadas de imagens Docker comprimidas com zstd. #114342 (Alexey Milovidov).
- Compilar pacotes Debian apenas para compilações de lançamento. #114739 (Alexey Milovidov).
- Corrigida a compilação de
unit_tests_dbmsem configurações sem o conjunto completo de bibliotecas (ENABLE_LIBRARIES=0ouENABLE_ROCKSDB=0). #115655 (Alexey Milovidov).
Lançamento do ClickHouse 26.7, 2026-07-22. Apresentação, Vídeo
alteração incompatível com versões anteriores
- O acesso ao S3 originado de SQL de usuário não resolve mais, por padrão, as credenciais de nuvem do próprio servidor (ambiente, IMDS/IRSA, perfil de instância, arquivos de configuração da AWS, STS baseado em
role_arn, metadados OAuth do GCP); essa solicitação deve usar explicit credentials ouNOSIGN. As named collections agora usamuse_environment_credentials=0por padrão. O comportamento anterior pode ser restaurado por solicitação comuse_environment_credentials = 1(ou globalmente pela configuração<s3>), juntamente com a nova server settings3_allow_server_credentials_in_user_queries(desabilitada por padrão). As credenciais de configuração fornecidas explicitamente e provisionadas pelo operador não são afetadas. Na inicialização do servidor ou emRESTORE, uma table persistenteS3/S3Queue, um disk S3 dinâmico ou umDataLakeCatalogcuja definição resolva essas credenciais é carregado anonimamente (inacessível até receber novas credenciais), em vez de interromper a inicialização; isso é controlado pela nova server settings3_load_table_anonymously_if_credentials_restricted(habilitada por padrão). #106855 (Raúl Marín). - O glob
**/(qualquer número de diretórios) agora também corresponde ao próprio diretório. Antes,**/em glob patterns não era tratado como um caso especial, entãodata/**/file.txtnão correspondia adata/file.txt(zero níveis de diretório). #97676 (Alexey Milovidov). - Rejeita o formato de arquivo de backup
zip/zipxpara backups armazenados em armazenamento de objetos — destinos diretosS3(...)/AzureBlobStorage(...)e destinosDisk(...)backed by S3 ou Azure — tanto paraBACKUPquanto paraRESTORE. O Zip exige acesso aleatório para ler seu diretório central, o que é muito lento em armazenamento de objetos. Use um formato baseado em tar, comotar.gz, em vez disso. #101770 (Yash ). - Ampliou o intervalo suportado de
DateTime64de[1900-01-01, 2299-12-31]para[0000-01-01, 9999-12-31]. Valores fora do intervalo anterior agora são calculados corretamente (via cctz), em vez de serem limitados aos limites do intervalo. Com precision 8 ou 9, o intervalo continua mais estreito porque os ticks são armazenados comoInt64(com precisão de nanossegundos, o máximo continua sendo2262-04-11). compatibilidade retroativa: se você usava date-times fora do intervalo antes, mas dependia das regras muito específicas de saturação dentro do intervalo antigo, tenha em mente que agora os resultados mudam para ficarem mais corretos. #107907 (Alexey Milovidov). AggregatingMergeTreeagora rejeita, no momento da criação da table, esquemas em que uma coluna não faz parte da sorting key nem é uma medida de estado agregado (AggregateFunction/SimpleAggregateFunction). Essas colunas são colapsadas silenciosamente para um valor arbitrário durante os background merges, produzindo resultados incorretos para queries que fazemGROUP BYou filtram por elas. Definaallow_dimensions_outside_sorting_key = 1para restaurar o comportamento anterior. Fecha #751. #108087 (Alexey Milovidov).- Removeu a configuração de Workload scheduling baseada em config (as seções de configuração do servidor
resourceseworkload_classifiers). Use queriesCREATE RESOURCEeCREATE WORKLOADem vez disso. As seções de configuração obsoletas são ignoradas com um aviso. #108286 (Sergei Trifonov). - O ClickHouse agora sempre usa o hash unificado de desduplicação de inserts tanto para inserts síncronos quanto assíncronos; os comportamentos legados de desduplicação por insert foram removidos. A configuração do servidor
insert_deduplication_versioné mantida como uma proteção de migração: o servidor se recusa a iniciar se ela estiver definida com um valor legado (old_separate_hashesoucompatible_double_hashes). Para atualizar a partir de uma versão que usava um valor legado, primeiro execute uma versão que ofereça suporte acompatible_double_hashes(que grava tanto os hashes legados quanto os unificados). Para tabelas replicadas, execute-a por pelo menosreplicated_deduplication_window_seconds(uma hora por padrão; as janelas padrão retêm os hashes unificados de todos os inserts durante esse intervalo, o que é considerado suficiente para um loop de repetição de insert). Para tabelas não replicadas comnon_replicated_deduplication_window> 0, essa janela é baseada em contagem, e não em tempo, então executecompatible_double_hashespor pelo menos essa quantidade de inserts. Em seguida, remova a configuração (ou defina-a comonew_unified_hash) antes de atualizar para esta versão. #108361 (Sema Checherinda). Se você nunca definiuinsert_deduplication_version, pode ignorar este item. - Foram removidas as funções há muito tempo obsoletas
snowflakeToDateTime,snowflakeToDateTime64,dateTimeToSnowflakeedateTime64ToSnowflake. Elas foram descontinuadas ainda na v24.6 em favor desnowflakeIDToDateTime,snowflakeIDToDateTime64,dateTimeToSnowflakeIDedateTime64ToSnowflakeID, que devem ser usadas no lugar. A configuraçãoallow_deprecated_snowflake_conversion_functions(que antes as reativava) agora está obsoleta e não tem efeito. #108711 (Alexey Milovidov). - A configuração
use_legacy_to_timeagora é0por padrão, entãotoTimeconverte valores para o tipo de dadoTimeem vez de converter uma data com hora em uma data fixa. O comportamento legado ainda está disponível por meio da funçãotoTimeWithFixedDateou definindouse_legacy_to_time = 1. #108729 (Alexey Milovidov). - Os modelos Naive Bayes (usados por
naiveBayesClassifier) agora são configurados como um dicionário com o layoutNAIVE_BAYES, criado no momento do carregamento a partir de uma tabela de contagens de n-gramas pré-agregadas por classe, em vez da configuração anterior no servidor (um arquivo de configuração XML que referencia arquivos de modelo.binserializados), que não é mais compatível — os modelos existentes devem ser recriados como dicionários. Três novas funções foram adicionadas junto comnaiveBayesClassifier:naiveBayesClassifierWithProbretorna a classe prevista junto com sua probabilidade,naiveBayesClassifierWithAllProbsretorna cada classe com sua probabilidade, enaiveBayesNgramstokeniza o texto em n-gramas da mesma forma que o dicionário faz, para criar os dados de treinamento a partir de texto bruto rotulado. Além disso, várias otimizações de desempenho foram aplicadas: em um modelo de linguagem de trigramas de pontos de código de 9.7 MiB, ele usa ~49× menos memória (de 1.84 GiB para 38 MiB), carrega ~11× mais rápido e classifica ~11× mais rápido. #108773 (Nihal Z. Miaji). - A função
hasColumnInTablenão aceita mais os argumentos opcionaishostname,usernameepasswordpara verificar uma coluna em um servidor remoto arbitrário; apenas a formahasColumnInTable(database, table, column)permanece. O modo remoto removido era uma preocupação de segurança: ele permitia que qualquer usuário disparasse conexões de saída para hosts arbitrários e vazava credenciais para os logs de consultas, além de não ser controlado por nenhum privilégio. #110881 (Alexey Milovidov).
Novo recurso
- Adicionado
EXPLAIN ANALYZEpara examinar o desempenho da consulta: a consulta é executada, e as métricas reais de execução são apresentadas no formato familiar de plano de consulta. #106586 (Kirill Kopnev). #110668 (Kirill Kopnev). - Adicionado suporte a cláusulas
WHEREem definições de projeções. Projeções comWHEREmaterializam apenas as linhas que correspondem ao predicado, e o otimizador pode usá-las (com base em custo) quando oWHEREda consulta implica oWHEREda projeção. #102347 (S Bala Vignesh). - Adicionada a configuração
skip_unavailable_shards_mode(também disponível como uma configuração da engineDistributed) para controlar quais exceções de um shard remoto são ignoradas silenciosamente quandoskip_unavailable_shardsestá habilitado. #79091 (cjw). - Adicionada a função de agregação
groupFormat, que formata as linhas de cada grupo usando um formato de saída especificado e retorna o resultado como string. #93201 (Yang Hu). - Adicionado
AWS_MSK_IAMcomo valor compatível parakafka_sasl_mechanism, permitindo que o ClickHouse se autentique no Amazon MSK usando IAM roles sem precisar gerenciar credenciais SASL/SCRAM. #96100 (kalavt). - Adicionado o combinador de função de agregação
-Tuple, que aplica a função de agregação subjacente a cada elemento de uma colunaTupleindependentemente e retorna umaTuplecom os resultados, preservando os nomes dos elementos:sumTuple(t)parat = (a, b)retorna(sum(a), sum(b)). Funções de agregação com vários argumentos recebem uma tupla por argumento, pareadas por posição:corrTuple((a1, a2), (b1, b2))retorna(corr(a1, b1), corr(a2, b2)). Diferentemente de-ForEachem arrays, os elementos podem ter tipos diferentes, e os tipos e nomes dos resultados por elemento são preservados. #98190 (RinChanNOW). - Índices de texto agora oferecem suporte a um argumento
postprocessor— uma expressão arbitrária que transforma cada token após a tokenização (por exemplo,lower). #98939 (Jimmy Aguilar Mena). #108606 (Jimmy Aguilar Mena). - Adicionada a tabela de sistema
system.stemmers, que lista todos os idiomas que podem ser especificados para a funçãostem. #100611 (Jimmy Aguilar Mena). - Adicionado suporte a
WITH TIESparaLIMITnegativo. #100930 (Nihal Z. Miaji). - Adicionado suporte aos operadores pós-fixos do SQL padrão
AT TIME ZONEeAT LOCALcomo açúcar sintático paratoTimeZone. A expressãoexpr AT TIME ZONE zoneagora é equivalente atoTimeZone(expr, zone), eexpr AT LOCALé equivalente atoTimeZone(expr, timeZone()). #106092 (lizepeng). - O motor de tabela
URLe a table functionurlagora fazem o encaminhamento para o backend apropriado com base no esquema da URL:file://é atendido pelo motorFile,s3:///gs:///gcs:///oss://porS3,az:///azure:///abfss:///abfs://porAzureBlobStorage,hdfs://porHDFSehttp(s)://pelo motorURL, como antes. A configuraçãourl_baseé aplicada antes do encaminhamento por esquema. Apenas os esquemas S3 resolvidos pelosurl_scheme_mapperspadrão são encaminhados; outros esquemas de fornecedores compatíveis com S3 (cos,obs, …) não são e exigem o uso direto do motor/funçãos3. #106093 (Alexey Milovidov). - Foram adicionados os motores de tabela
RemoteeRemoteSecure, as contrapartes persistentes das table functionsremoteeremoteSecure.CREATE TABLE ... ENGINE = Remote('addresses', db, table, ...)agora funciona além deCREATE TABLE ... AS remote(...). #106189 (Alexey Milovidov). - Foram adicionados os comandos
SYSTEM STOP,SYSTEM START,SYSTEM PAUSE,SYSTEM CANCELeSYSTEM REFRESH, independentes do motor, e suas formas... ALL BACKGROUNDpara todo o servidor, para controlar a atividade em segundo plano de tabelasKafka,RabbitMQ,NATS,S3Queue/AzureQueuee views materializadas atualizáveis por meio de uma interface unificada. No caso de views materializadas atualizáveis, eles são aliases dos comandosSYSTEM ... VIEWjá existentes. Como parte do suporte a esses controles no NATS, as tabelas JetStream agora confirmam mensagens apenas após um insert bem-sucedido (pelo menos uma vez; antes, as mensagens eram confirmadas automaticamente na entrega e podiam ser perdidas se o insert falhasse). Uma nova configuraçãonats_wait_for_flush_interval(padrãofalse, preservando o comportamento anterior de baixa latência) opcionalmente mantém um ciclo de consumption aberto durante todo o intervalo de flush, em vez de fazer flush assim que a fila se esvazia. Uma nova configuraçãonats_commit_on_selectfaz com que umSELECTdireto em uma tabela JetStream consuma (confirme) as mensagens que lê. #107476 (Samuel Krempaský). - Foi adicionado suporte para que as table functions e os motores de tabela
mysql,postgresqlesqliteaceitem uma consulta do usuário (em vez de um nome de tabela) e a repassem ao banco de dados externo exatamente como foi escrita, seja como uma subconsulta(SELECT ...)ou comoquery('SELECT ...'). A estrutura da tabela resultante é inferida a partir do query result, e essa tabela é somente leitura. Fecha #46758. Com base na implementação inicial de Denis Vidiaev (#79652). #107740 (Alexey Milovidov). - Foram adicionadas tabs à UI Web do ClickHouse (Play) para trabalhar com várias consultas ao mesmo tempo. As tabs, seus títulos, parâmetros, estado ativo e pequenos snapshots de resultados são persistidos entre recarregamentos (resultados grandes e imagens não são restaurados), integram-se ao histórico do navegador e à URL, e podem ser alternadas com a roda do mouse. #107826 (Alexey Milovidov).
- Foi introduzido o motor de tabela
QueryRunner. Registros inserted em uma tabelaQueryRunnerrepresentam consultas que o motor executa. O motor pode ser usado para query execution assíncrona, execução em lote de consultas geradas, direcionamento de consultas para clusters remotos, benchmarks, fuzzing e testes com tráfego espelho. #107888 (Miсhael Stetsyuk). - Adicionado o formato de saída
GeoJSONpara gravar documentosFeatureCollectiondo GeoJSON, produzindo uma feature por linha. A única coluna do tipo geo (Point,LineString,MultiLineString,Polygon,MultiPolygon,RingouGeometry) torna-se ageometryde cada feature; uma coluna chamadaidtorna-se oidda feature; e todas as demais colunas tornam-se aspropertiesda feature, sendo que uma única coluna do tipo objeto chamadaproperties(umJSON,MapouTuplenomeado) é gravada diretamente como o objetoproperties. UmRingé gravado como umPolygonde anel único. A nova configuraçãoformat_geojson_validate_geometry(habilitada por padrão) controla se geometrias que não são formas GeoJSON válidas — como umPolygoncom menos de quatro pontos ou um anel dePolygonnão fechado — são rejeitadas na leitura e na gravação. Além disso, o formato de entradaGeoJSONagora infere a colunaidcomoNullable(String)em vez deString, de modo que uma feature com o membro"id": nullausente ou explicitamente definido seja lida comoNULLe permaneça distinta de uma string vazia"". Baseado na implementação inicial de Mark Needham (#98124). #108065 (Nihal Z. Miaji). - Adicionada a função
dotProductTransposed(aliasscalarProductTransposed), que calcula o produto interno aproximado entre uma colunaQBite um vetor de referência, complementando as funções existentesL2DistanceTransposedecosineDistanceTransposed. #108100 (Alexey Milovidov). Também foram adicionadas as funções de distância transposta quantizadacosineDistanceTransposedQuantized,L2DistanceTransposedQuantizededotProductTransposedQuantized, que operam sobre umQBit(Int8)de códigos Lloyd-Max dequantizeBFloat16ToInt8, desquantizando os códigos armazenados dinamicamente. Um vetor de referência de ponto flutuante é a consulta em precisão total, comparada com precisãoFloat32(uma consultaFloat64é reduzida); uma referênciaArray(Int8)é ela própria desquantizada, para uma distância simétrica quantized-vs-quantized. #109405 (Alexey Milovidov). - Adicionado um parâmetro opcional de stride ao tipo de dado
QBit(QBit(T, dimension, stride)), que armazena grupos de dimensões em fluxos separados, para que uma busca vetorial possa ler com eficiência apenas as primeiras dimensões (por exemplo, para Matryoshka embeddings). As funções de distância transposta aceitam um quarto argumento opcionalused_dimspara ler um número reduzido de dimensões. #108103 (Alexey Milovidov). - Adicionado suporte ao tipo de elemento
Int8no tipo de dadoQBit, permitindo armazenamento e busca vetorial por distância transposta (L2DistanceTransposed,cosineDistanceTransposed) sobre vetores inteiros quantizados de 8 bits. #108105 (Alexey Milovidov). - Nova função
randomHadamardTransform(vector[, seed[, output_dims]]): uma transformada Hadamard aleatória determinística de um vetor de ponto flutuante — uma rotação ortogonal que preserva a norma, útil para o pré-processamento de embeddings antes da quantização e, quando truncada, como projeção aleatória Johnson–Lindenstrauss / subsampled-randomized-Hadamard. #108227 (Alexey Milovidov). - Suporte para configurar o carregamento lazy de dicionários individualmente com a configuração
dictionary_lazy_loadna definição do dicionário, substituindo a configuração global de servidordictionaries_lazy_load, para que alguns dicionários possam ser carregados de forma lazy enquanto outros sejam carregados antecipadamente. #108314 (Miсhael Stetsyuk). - Adicionada uma página integrada de Busca na documentação, disponível no caminho
/docsda interface HTTP, que oferece busca instantânea na tabelasystem.documentatione renderiza a documentação de referência (com realce de sintaxe, fórmulas matemáticas e links cruzados). #108345 (Alexey Milovidov). - Adicionada a função
xxHash64Spark, que calcula valoresxxHash64compatíveis com o Spark para entradasStringeNULLusando a seed42e retornaInt64. #108436 (Lalit Yadav). ALTER USER,ALTER ROLEeALTER SETTINGS PROFILEagora aceitamSET name = valuecomo alias deMODIFY SETTING name = value. Isso altera configurações individuais no local, preservando as demais, ao contrário da cláusulaSETTINGSsem modificador, que substitui toda a lista de configurações. Com isso, fica menos provável apagar acidentalmente outras configurações de um usuário. #108722 (Groene AI).- Suporte a
ALTER TABLE ... MODIFY CONSTRAINT [IF EXISTS] name CHECK exprpara alterar, no local, a expressão de uma restrição existente. #108768 (Alexey Milovidov). - Web UI: adicionado um seletor de colorização por coluna (o ícone 🌈 no cabeçalho da coluna) para alternar entre barra, heatmap, categórica e nenhuma visualização. Os modos selecionados são mantidos na URL e no histórico do navegador. #108873 (Alexey Milovidov).
Keeperagora trata corretamente o opcodeCreateContainer(19) doZooKeeper, controlado por uma nova feature flag opcionalcreate_container(desabilitada por padrão, assim comocreate_ttl). Depois de habilitada após um upgrade completo do ensemble, clientes externos deZooKeeper(por exemplo,ZooKeeper3.9+ em Java) podem criar nós de contêiner noKeeperem vez de receberConnectionLoss; os nós de contêiner reportam o valor sentinelaephemeralOwneresperado, e uma thread de GC em background no líder exclui automaticamente contêineres sem filhos. Uma requisiçãoCreatesimples com a flag de modo de criaçãoCONTAINER, sem o opcode 19, continua sendo rejeitada (ZBADARGUMENTS): nenhum clienteZooKeeperconhecido emite essa combinação. Isso é apenas compatibilidade de protocolo server-side: o clienteZooKeeperdo próprio ClickHouse (zkutil) permanece inalterado e não tem API para criar nós de contêiner por conta própria. #108908 (unintended).- Adicionadas as funções
geoToUTM,UTMToGeo,geoToMGRSeMGRSToGeopara converter entre coordenadas geográficas WGS84 e os sistemas de coordenadas UTM e MGRS. #108939 (Alexey Milovidov). - Adicionada a função
digits(n, offset[, length]), que retorna os dígitos dena partir dooffset, com indexação iniciada em 1, abrangendolengthdígitos, ou até o fim do número selengthfor omitido. #109012 (Umang Agrawal). - Adicionada a função aritmética
sqrpara calcular o quadrado de um número. #109061 (Lalit Yadav). - Adicionada a nova função
dictGetRoot, que retorna o ancestral mais alto (a raiz) de uma chave em um dicionário hierárquico. Ela é um equivalente prático dedictGetHierarchy(dict_name, key)[-1]. #109459 (Alexey Milovidov). - Adicionados os comandos
SYSTEM UNLOAD DICTIONARYeSYSTEM UNLOAD DICTIONARIESpara liberar a memória do dicionário sem remover sua definição. Os dicionários serão recarregados sob demanda no próximo acesso. #109639 (Matheus Nerone). - Adicionadas as funções
geometryIntersectCartesianegeometryIntersectSpherical, que indicam se duas geometrias se intersectam. Diferentemente depolygonsIntersectCartesian/polygonsIntersectSpherical, elas aceitam qualquer tipo de geometria (Point,LineString,MultiLineString,Ring,Polygon,MultiPolygon), incluindo o tipo comumGeometry, e os dois argumentos podem ser de tipos diferentes. #110062 (Alexey Milovidov). - Parâmetros de consulta (substituições
{name:Type}) agora podem ser usados como valores de configuração, tanto na cláusulaSETTINGSde uma consulta (comoSELECTouINSERT) quanto em consultasSETindependentes, por exemplo,SELECT ... SETTINGS max_threads = {threads:UInt64}eSET max_threads = {threads:UInt64}. #108760 (Alexey Milovidov).
Funcionalidade experimental
- Expansão de curingas para a table function
urle o table engineURL: os curingas no caminho da URL são expandidos listando páginas de índice HTTP (listagens de diretório em HTML ou plaintext) e extraindo as URLs correspondentes, com limites para o tamanho da página de índice e para o número de diretórios lidos. Habilitado pela configuraçãoallow_experimental_url_wildcard_from_index_pages. #95181 (Yue Ni). - Os índices de texto agora podem armazenar posições de tokens (o argumento de índice
support_phrase_search) para permitir correspondência exata de frases com leituras diretas na funçãohasPhrase. Requer a habilitação da configuraçãoallow_experimental_text_index_phrase_searchdoMergeTree. #103172 (Elmi Ahmadov). O argumento foi introduzido inicialmente com o nomepositions. #109900 (Elmi Ahmadov). - Suporte à compactação de arquivos manifest para tabelas
IcebergviaOPTIMIZE TABLE ... MANIFEST(controlado pela configuraçãoallow_experimental_iceberg_compaction). Fecha #95174. #98178 (Smita Kulkarni). CorrigeOPTIMIZE TABLE ... MANIFESTpara tabelasIcebergquando as tuplas de partição do manifest não correspondem à respectiva especificação de partição. #111368 (Smita Kulkarni). - Adiciona uma variante Real Doubles (RD) e um argumento opcional
ALP(AUTO|STD|RD)ao codec experimentalALP.ALPsem argumentos agora seleciona automaticamente entre o esquemaSTDexistente eRD, em vez de sempre usarSTD. #99654 (Nazarii Piontko). - Adiciona um cache SLRU em memória para arquivos de metadados
Paimondesserializados (manifest lists e manifests). Quando habilitado pela configuraçãouse_paimon_metadata_files_cache, consultas repetidas na mesma tabelaPaimonevitam baixar novamente e reprocessar os metadados do armazenamento de objetos. #104657 (XiaoBinMu). - Adicionados “drivers” para Funções Definidas pelo Usuário executáveis. Um driver declarado em
<user_defined_executable_function_drivers_config>pode ser usado emCREATE FUNCTION name ARGUMENTS (...) RETURNS T ENGINE = DriverName(...) AS '...code...'para compilar ou processar de outra forma um trecho de código do usuário no momento da criação da função e produzir uma UDF executável pronta para uso. A configuração resultante é armazenada em<dynamic_user_defined_executable_functions_path>, e a consulta de origem é persistida comoATTACH FUNCTIONpara que a função sobreviva a reinicializações do servidor. Um driverc_function_bodyde prova de conceito compila e executa corpos de função em C dentro de contêineres Docker isolados no modoexecutable_pool. Baseado na implementação inicial de Daniil Timižev (#77128). #105131 (Alexey Milovidov). - Atende
SELECT count(*) FROM t WHERE col <op> default(col)usando estatísticas de esparsidade por coluna emserialization.json, sem varredura de dados, quando o predicado particiona exatamente a coluna entre valores default e não default (sob a nova configuração experimentaloptimize_trivial_count_with_sparsity_filter, desabilitada por padrão). #105890 (Raúl Marín). - Requisições da Prometheus Query API para
/api/v1/querye/api/v1/query_rangeagora são registradas emsystem.query_logcom as métricasread_rowseread_bytes. #106611 (James Cunningham). - O caminho de leitura experimental do
ReaderExecutor(use_reader_executor, desativado por padrão) agora pode manter aberta uma conexão remota com a fonte e reutilizá-la em leituras sequenciais, reduzindo o número de solicitações ao armazenamento de objetos durante varreduras. #107735 (Sema Checherinda). Agora ele também oferece suporte à leitura de arquivos criptografados, com um cache global de cabeçalhos de criptografia configurado pela server settingencryption_header_cache_sizee limpo porSYSTEM DROP ENCRYPTION HEADERS CACHE. #109702 (Sema Checherinda). - Suporte a leituras com plano de consulta distribuído para
SELECT ... FINALem tabelas da famíliaMergeTreequandomake_distributed_planestá habilitado. #108148 (Alexander Gololobov). - Adicionada execução experimental de réplicas paralelas baseada em plano para consultas
MergeTree. #108504 (Igor Nikonov). - Adicionada a família experimental de codec vetorial
Quantizee uma reescrita opcional de busca vetorial aproximada em dois estágios sobre streams complementares quantizados. #108565 (Shankar Iyer). - Reativado o codec experimental de compressão com perda
SZ3, com erro limitado, para colunasFloat32/Float64(e arrays delas), implementado originalmente por Konstantin Vedernikov (#83088). Ele requerallow_experimental_codecs. #108788 (Alexey Milovidov). Corrigida a leitura de dados comprimidos comSZ3('ALGO_LORENZO_REG', ...), que antes falhava comCORRUPTED_DATA, e evitado comportamento indefinido ao comprimir valores de ponto flutuante não finitos (NaNe infinitos). #110762 (Alexey Milovidov). - Adicionado o codec experimental
ZXC— um codec LZ assimétrico com compressão lenta e descompressão muito rápida, com uma taxa de compressão entreLZ4eZSTD. Ele requerallow_experimental_codecs = 1, esystem.compression_codecso informa como experimental. #110620 (Alexey Milovidov). #111007 (Alexey Milovidov). - Agora você pode se autenticar no OneLake usando um bearer token obtido previamente por meio da configuração
onelake_bearer_token, em vez deonelake_client_ideonelake_client_secret. Isso evita compartilhar um client secret de longa duração. O token não é renovado, então o banco de dados deve ser recriado quando ele expirar. #109104 (Asya Shneerson). - As funções de IA não usam mais a coleção nomeada como primeiro argumento posicional. As credenciais vêm das configurações
ai_function_text_default_credentials/ai_function_embedding_default_credentialsou de uma chavecredentialsem um argumento opcional finalMap(String, String), que também carrega parâmetros ajustáveis (model,max_tokens,temperature,system_prompt,instructions,dimensions). #109232 (George Larionov). A funçãoaiEmbedagora recebemodelcomo um argumento posicional obrigatório (aiEmbed(text, model[, params])) em vez de lê-lo da coleção nomeada, o que garante reprodutibilidade para embeddings. #110619 (George Larionov). - Corrigido
data_uncompressed_bytespara índices de salto empacotados emskp_idx.packed(viapacked_skip_index_max_bytes): o tamanho não comprimido reportado era, na verdade, o tamanho comprimido, o que também podia impedir a ativação dedistributed_index_analysis. #109272 (Raúl Marín). - Adicionado armazenamento experimental de data part empacotada para tabelas
MergeTree, que armazena a maioria dos arquivos de uma part em um único arquivodata.packed, em vez de um arquivo por stream (as projeções e alguns arquivos de serviço, comotxn_version.txt, ainda são gravados separadamente). Ele é controlado pelas configuraçõesmin_bytes_for_full_part_storage,min_rows_for_full_part_storageemin_level_for_full_part_storagee fica desabilitado por padrão. Depois que uma tabela grava parts empacotadas, versões mais antigas do servidor não conseguem lê-las; portanto, habilitar esse formato impede o downgrade do servidor. #108118 (Raúl Marín). - Adicionada a table function experimental
eval, que avalia uma expressão constante como uma string de consulta e executa a única consultaSELECTresultante. O recurso fica desabilitado por padrão e pode ser habilitado com a configuraçãoallow_experimental_eval_table_function. Autor: Yue Ni. #110132 (Alexey Milovidov). - Adicionado suporte à compressão
zstdao handler HTTP experimental de remote-write v1 do Prometheus. #110907 (James Cunningham). - A gravação em tabelas
DeltaLake(a configuraçãoallow_experimental_delta_lake_writes) foi promovida a Beta. #107034 (Kseniia Sumarokova). - Adicionados os
ProfileEventsDistributedPlanRemoteTasks,DistributedPlanLocalExecutioneDistributedPlanHostsUsedpara observar a execução de planos de consulta distribuída experimentais (make_distributed_plan). #107985 (Shankar Iyer). - Removido o armazenamento experimental baseado em RocksDB no Keeper (
experimental_use_rocksdb). Um armazenamento em disco novo e melhor estará disponível em breve. #108000 (Michael Kolupaev). - A análise de índice distribuída (um recurso experimental controlado pela configuração
distributed_index_analysis) agora envia grandes listas de nomes de data parts para servidores remotos como escalares, em vez de incorporá-las ao texto da consulta. Isso evita possíveis falhas devido aos limitesmax_ast_elements/max_query_sizee elimina a sobrecarga de parsing da AST. #110419 (Azat Khuzhin). - Otimizadas as funções experimentais de agregação
timeSeries*ToGrid: os buckets agora são alinhados tanto ao passo quanto à window, e a agregação final é muito mais rápida quando a window é muito maior que o passo. O formato de serialização do estado de agregação foi alterado de forma incompatível (essas funções são experimentais). #106724 (Vitaly Baranov). - As target tables externas de uma tabela
TimeSeriesagora são registradas como dependências referenciais: assim como ocorre com visões materializadas, isso impede remover uma target table externa antes de remover a tabelaTimeSeriesque a referencia (secheck_referential_table_dependenciesestiver habilitado). #108388 (Vitaly Baranov). - Adicionada a função PromQL
increase. #111023 (Vitaly Baranov).
Melhorias de desempenho
JOINs agora podem usar o índice de chave primária ou skip indexes na tabela do lado esquerdo para podar grânulos. Controlado pela configuraçãoenable_join_runtime_filters_index_analysis. #109085 (Shankar Iyer).- A serialização e a desserialização de vetores de tipos trivialmente serializáveis agora usam uma única chamada de E/S em buffer, em vez de processar elementos individualmente. #89842 (Jimmy Aguilar Mena).
- Otimiza buscas inversas em Dicionário: um predicado de igualdade constante como
WHERE dictGet(dict, attr, key_expr) = valueagora é simplificado diretamente para um filtro de chave (key_expr = const,key_expr IN [...]ouWHERE 0), em vez de ser reescrito como uma subconsultaIN (SELECT ... FROM dictionary(...)), e o caminho constante dedictGetKeysagora é executado em paralelo. #91164 (Nihal Z. Miaji). - Adiciona uma nova configuração
merge_tree_generic_exclusion_search_max_stepsque limita o número de passos que o algoritmo generic exclusion search gasta analisando o índice de chave primária de cada parte de dados. O orçamento é gasto primeiro nos maiores intervalos de chave restantes, de modo que mesmo um orçamento pequeno poda a maior parte dos dados; intervalos que não forem totalmente analisados são lidos por completo, de modo que os resultados da consulta permaneçam corretos, mas mais grânulos possam ser lidos. O limite é aplicado de forma flexível: ele pode ser excedido em no máximomerge_tree_coarse_index_granularitypassos, mais um passo para cada intervalo em que a parte já esteja dividida (por exemplo, pelo cache de condição de consulta). O valor padrão 0 significa passos ilimitados. #92779 (Michael Jarrett). - Consultas com
ORDER BYeLIMITem views sobre tabelasDistributedagora usam a otimização merge-sorted-streams: oORDER BY/LIMITexterno é enviado para a consulta interna de uma view simples, para que cada shard ordene seus dados localmente e o coordinator faça o merge de streams pré-ordenados, em vez de realizar uma ordenação completa. #94102 (matanper). - Habilita
optimize_or_like_chainpor padrão. Fecha #87779. #94517 (Alexey Milovidov). - Marca tabelas de log do sistema
MergeTreerotacionadas e não replicadas sem TTL comotable_readonlypara evitar operações em segundo plano desnecessárias. A configuraçãotable_readonlydeMergeTreeagora também suprime todo o trabalho em segundo plano em uma tabelaMergeTreesimples — merges regulares, de TTL (DELETE/MOVE/recompressão) e de recompressão, mutações em segundo plano e movimentações de partes em segundo plano — e rejeita os comandos de partição mutáveis (ATTACH/MOVE/DROP/DROP DETACHED/FETCH/REPLACE PARTITIONeMOVE PARTITION ... TO TABLEpara dentro da tabela), além dos inserts, mutações eOPTIMIZEque já rejeitava. Como resultado, uma tabelatable_readonlycom TTL deixa de remover seus dados expirados enquanto a configuração estiver habilitada. #95079 (Mathuranath Metivier). - Melhora o desempenho da busca de um único registro de usuário em
system.usersquando o servidor tem muitos usuários. #96699 (Alistair Evans). - A leitura ordenada com parallel replicas agora usa a mesma lógica da leitura local para dividir a tabela em
max_threadspartes, para melhor paralelismo. #101434 (Nikita Taranov). - Use os limites do índice minmax da partição para fazer pruning de mais grânulos durante a análise da chave primária em tabelas
MergeTree, quando uma coluna da chave primária também é uma coluna de entrada da chave de partição. Por exemplo, em uma tabelaMergeTreecomORDER BY (id, event_time)ePARTITION BY toYYYYMM(event_time), o ClickHouse usará o índice minmax da partição emevent_timedurante a análise do índice da chave primária para tomar decisões de pruning de grânulos mais precisas. Controlado pela nova configuraçãouse_partition_minmax_for_primary_key_pruning(habilitada por padrão). #103480 (UnamedRus). - Habilita o cache de condições da consulta para consultas que usam filtragem dinâmica Top-K (
ORDER BY ... LIMIT n). A entrada do cache é particionada pelos parâmetros do plano Top-K, de modo que a mesma consulta reutiliza os resultados em cache do filtroWHERE, enquanto umLIMIT, uma coluna de ordenação ou uma direção de ordenação diferente gera uma nova entrada. #104478 (Alexey Milovidov). - Adiciona a configuração
use_constant_folding_in_index_analysis(desabilitada por padrão). Quando habilitada, a análise da chave primária, deMinMaxe de índices de skip doMergeTreeincorpora constantes no nível da partição ao predicado de filtro separadamente para cada part, melhorando o pruning para filtros cujos branches dependem de valores da partição, por exemplo(a = 1 AND b >= 1) OR (a = 2 AND b > 10)comPARTITION BY a. #104582 (Mikhail Artemenko). - Envia
LIMITpara a agregação em ordem para permitir encerramento antecipado quando a chaveGROUP BYcorresponde à chaveORDER BYe à chave de ordenação da tabela, reduzindo significativamente o número de linhas lidas. #104859 (Konstantin Bogdanov). - A atualização de profile events agora é até 30 vezes mais rápida, usando operações atômicas por CPU para contadores de todo o servidor e por usuário. Controlado pela configuração no nível do servidor
user_profile_events_per_cpu(ela usa cerca de 640 KiB por usuário em 64 núcleos, então, com um número muito grande de usuários, pode fazer sentido mantê-la desabilitada). #105056 (Azat Khuzhin). - Habilita
allow_aggregate_partitions_independentlypor padrão. Quando uma chaveGROUP BYse adequa à chave de partição, o ClickHouse pode agregar cada partição de forma independente e pular a etapa de merge global. Heurísticas em tempo de execução ignoram automaticamente a otimização quando o layout das partições a tornaria desfavorável (partições demais ou de menos, ou tamanhos de partição significativamente desbalanceados). #105128 (Alexey Milovidov). - Consultas de busca vetorial com rescoring (
vector_search_with_rescoring = 1) agora calculam a distância exata apenas para as linhas retornadas pelo índice vetorial, aplicando um filtro exato por posição da linha em vez de rescoring por força bruta de linhas vizinhas do mesmo grânuloMergeTree. #105591 (Sergey Kuznetsov). #108846 (Sergey Kuznetsov). - Melhora o desempenho do algoritmo de join
partial_mergeem chavesFixedStringao comparar sequências de valores de uma só vez, em vez de fazer uma chamada de comparação para cada valor. #105737 (Artem Zuikov). SHOW TABLESesystem.tablesem catálogos de lago de dados (Iceberg REST, Glue, Unity, Hive, Paimon) agora fazem pushdown de predicados limitados ao espaço de nomes para o catálogo, evitando uma varredura completa. Fecha #105022. #106029 (Smita Kulkarni).- Limitou a memória não rastreada por CPU para evitar overcommit e erros de falta de memória (os limites são configurados com as configurações do servidor
max_per_cpu_untracked_memoryeper_cpu_untracked_memory_thread_buffer). #106055 (Azat Khuzhin). - Acelerou os operadores que varrem um stream ordenado em busca de sequências de valores de chave iguais —
DISTINCTin order,LIMIT BYin order, negativeLIMIT BYin order e junçõesfull_sorting_mergeepartial_merge. #106502 (Nihal Z. Miaji). - Implementou um leitor e um gravador nativos para os formatos
ArroweArrowStreamque não usam a biblioteca Apache Arrow, evitando cópias e conversões extras de dados. Agora essa é a opção padrão (settingsinput_format_arrow_use_native_readereoutput_format_arrow_use_native_writer) e ela é mais rápida tanto para leitura quanto para gravação. #106522 (Alexey Milovidov). - Reativou o LTO para o jemalloc após corrigir uma corrupção no cache de threads que aparecia com LTO, o que melhora o desempenho. #106898 (Azat Khuzhin).
- Reduziu o uso de memória e melhorou o desempenho de
JOINs. O lado direito de uma hash join agora usa uma referência de linha compacta de 8 bytes baseada em índice, de modo que as entradas da tabela hash de junçõesALLsejam tão pequenas quanto as de junçõesANYpara qualquer tipo de chave. Em benchmarks com consultas de joinparallel_hashde grande porte — junçõesINNEReANYde tabelas com 100 a 300 milhões de linhas em chavesUInt64eString, com chaves únicas e duplicadas — a consulta mediana ficou cerca de 12% mais rápida e usou cerca de 15% menos memória de pico, sem que nenhuma consulta tenha ficado mais lenta. As junçõesINNERcom chavesUInt64tiveram o maior ganho (mediana de cerca de 21% mais rapidez com 38% menos memória). #107189 (Harikrishnan Prabakaran). - Chaves de junção
LowCardinality(String)nãoNullablede coluna única agora têm suporte nativo em hash join. #107264 (Nikita Taranov). - Adicionou o algoritmo
dpsubde enumeração de ordem de join (programação dinâmica sobre subconjuntos), fornecendo planos de join ideais com menor sobrecarga de otimização do quedpsizee suporte a junções não internas. #107351 (Fisnik Kastrati). - Acelerou o carregamento do cache do filesystem na inicialização ao codificar o tamanho de cada arquivo de cache no próprio nome (
<offset>_<size>), evitando umstatpor arquivo. O carregamento de arquivos de cache gravados por versões mais antigas continua sendo compatível. #107415 (Alexey Milovidov). - Melhorou o desempenho de
arrayElementemArray(LowCardinality(String))e das funçõesLIKEde map emMaps com chaves ou valoresLowCardinality(String), evitando a materialização desnecessária de strings. #107450 (Michael Jarrett). - Evitou converter aggregation de nível único em aggregation two-level quando o uso de memória é baixo, rastreando a memória do próprio aggregation state em vez da memória da consulta inteira. #107490 (Hechem Selmi).
- Acelerou a análise de consultas com aggregation: a chave de cache para as estatísticas de tamanho da tabela hash de aggregation agora é calculada a partir do plano da consulta, em vez de construir a AST completa da consulta. #107643 (Dmitry Novik).
- Melhora o desempenho de
INTERSECT ALLeEXCEPT ALL(o modo padrão deINTERSECTeEXCEPT) em várias vezes, usando o valor da linha como chave do multiconjunto em vez de aplicar SipHash a cada linha. #107649 (Raúl Marín). - Recria filtros de ROW POLICY sem manter o bloqueio do cache, melhorando a escalabilidade das consultas durante operações concorrentes de
CREATE ROW POLICYeDROP ROW POLICY. #107917 (Azat Khuzhin). - Acelera as funções
match,extract,extractAll,replaceRegexpOneereplaceRegexpAllpara expressões regulares simples, compilando-as em código nativo com LLVM. Controlado pela nova configuraçãocompile_regular_expressions(habilitada por padrão); padrões fora do subconjunto compatível recorrem de forma transparente ao mecanismo RE2. #108004 (Alexey Milovidov). - Acelera a descompressão ZSTD em AArch64 (ARM) para colunas com offsets de correspondência pequenos, como colunas inteiras de largura fixa, vetorizando cópias sobrepostas de offset curto com NEON. Por exemplo, a descompressão de uma coluna
UInt64fica até ~2,3x mais rápida no AWS Graviton 4. #108049 (Alexey Milovidov). - Usa a biblioteca
libdeflatepara compressão e descompressão gzip/zlib/deflate, tornando-as mais rápidas (compressão ~1,15× com melhor razão, descompressão ~1,4–1,5×) para dados.gz/HTTP/url/s3e para o codec GZIP do Parquet. #108074 (Alexey Milovidov). - Melhora o desempenho de consultas de busca textual combinadas com um filtro de chave primária. #108114 (Anton Popov).
- Usa estatísticas de runtime coletadas durante a primeira execução de uma consulta para otimizar execuções subsequentes: o algoritmo de join
hashpode mudar automaticamente paraparallel_hashcom base nas estatísticas coletadas. #108125 (Hechem Selmi). O tamanho dos filtros de runtime de join é otimizado usando o tamanho da tabela hash das estatísticas de join em runtime, controlado pela nova configuraçãojoin_runtime_filter_size_from_hash_table_stats. #108313 (Hechem Selmi). - Melhora a velocidade de descompressão LZ4 para colunas de tamanho fixo e baixa cardinalidade. #108175 (Nikita Taranov).
- Acelera as funções
trimLeft/trimRight/trimBothpara espaços em branco padrão (e seus aliasesltrim/rtrim/trim): linhas consecutivas que não precisam de trim são copiadas em um único lote, e a varredura de espaços por linha é executada apenas nas linhas que realmente têm espaço no início ou no fim. #108177 (Groene AI). - Melhora o desempenho de
replaceAllereplaceRegexpAllquando o padrão é um único caractere e a substituição é um único caractere (por exemplo,replaceRegexpAll(s, ' ', '_')). Essas substituições não alteram mais o layout da string, então a coluna agora é copiada uma vez, e os bytes correspondentes são reescritos no local em vez de executar um loop de busca por correspondência. #108178 (Groene AI). - Melhora o desempenho da função
pointInPolygoncom um polígono constante. O cache de polígonos pré-processados agora usa os argumentos constantes brutos como chave, de modo que um polígono constante é analisado apenas uma vez (em caso de cache miss), em vez de ser analisado novamente a cada bloco de entrada. #108184 (Groene AI). - Acelera a análise da representação canônica de data e hora
YYYY-MM-DD hh:mm:ssno modo best-effort (date_time_input_format = 'best_effort',cast_string_to_date_time_mode = 'best_effort'), que é o padrão. Isso recupera uma regressão de desempenho na análise introduzida quando esses padrões foram alterados debasicparabest_effort. #108187 (Groene AI). - Evita manter os contadores de seletividade de
system.predicate_statistics_logno caminho de leitura doMergeTreequando o recurso está desativado (predicate_statistics_sample_rate = 0, o padrão). Isso remove, de cada leitura, uma atualização atômica por grânulo e umpopcountde filtro emO(rows), recuperando uma regressão de desempenho mais visível em AArch64. #108190 (Groene AI). - Acelera a análise de números de ponto flutuante a partir de texto com
precise_float_parsing = 1, tornando-a tão rápida quanto ou mais rápida que o analisador padrão em quase todas as entradas. Também atualiza a bibliotecafast_floatincluída para a v8.2.10. #108205 (Raúl Marín). - Usa a biblioteca
simdutfnas funções de codificação e decodificação em base64, melhorando seu desempenho. #108333 (Konstantin Bogdanov). - Otimiza
DISTINCTpara chaves caras de alta cardinalidade. #108366 (Nihal Z. Miaji). - Em compilações que não são para Linux (macOS e FreeBSD), o jemalloc não remove mais dirty pages de forma agressiva (uma syscall
madviseporfree); agora, ele usa uma thread de limpeza em background comdirty_decay_msfinito, como no Linux. Isso acelera significativamente workloads com alta rotatividade de alocação, como CTEs recursivas (~2x em um benchmark de CTE recursiva no macOS), com impacto desprezível no RSS. #108430 (Alexey Milovidov). - Acelera o planejamento de consultas no analisador para expressões que referenciam o mesmo alias
WITHou repetem a mesma subexpressão muitas vezes (por exemplo, cadeiasif/multiIfprofundamente aninhadas), evitando reconstruir subexpressões compartilhadas ao construir o DAG de ações. #108523 (Dmitry Novik). - Runtime filters agora são criados com base em chaves de igualdade mesmo quando a cláusula
ONtambém contém predicados sem igualdade, reduzindo o número de linhas que entram no hash join em joins que misturam condições de igualdade e desigualdade.LEFT ANTI JOINnão é afetado. #108579 (Antonio Álvarez Caballero). - Habilita
-fno-math-errnoglobalmente em todo o codebase, permitindo que o compilador otimize melhor as funções matemáticas. #108628 (Nikita Taranov). - Reduz o limite de prefetch por software para tabelas hash de aggregation e join de
4 * L2 cache sizeparaL2 cache size, para que o prefetch seja habilitado assim que a tabela hash deixar de caber na L2. Isso recupera uma regressão emGROUP BYeJOINsobre tabelas hash de tamanho médio (~1-8 MiB) em plataformas cujo L2 reportado é grande (por exemplo, AArch64 com L2 de 2 MiB). #108655 (Groene AI). - Melhora o desempenho de window functions. Consultas com funções de janela em wide tables que incluem
SELECT *agora usam significativamente menos memória e são executadas mais rapidamente. Agregações de janela, incluindoquantile*,uniq*egroupArray, ficaram mais rápidas comOVER ()eOVER (ORDER BY ... RANGE ...). A funçãocume_disttambém ficou mais rápida, e janelas que usamPARTITION BYouORDER BYagora têm melhor desempenho em colunas com muitos valores repetidos. #108688 (Nihal Z. Miaji). - A análise de consultas foi acelerada para consultas com muitas cadeias de comparações com
ANDou cadeias deANDmuito grandes: a otimizaçãooptimize_and_compare_chainagora é limitada por um orçamento de trabalho (nova configuraçãooptimize_and_compare_chain_max_hash_work) em vez de calcular hash de uma grande fração da árvore da consulta, e a resolução de lambda não recalcula mais os hashes do corpo da lambda para proteção contra recursão. #108757 (Alexey Milovidov). - Corrige uma regressão de desempenho ao ler colunas
JSON/Dynamiccom múltiplas threads: uma consulta por valor da configuraçãoinput_format_binary_max_type_complexitycausava contenção na contagem de referências no contexto compartilhado da consulta, serializando leituras paralelas; o valor da configuração agora é armazenado em cache por thread. #108797 (Seva Potapov). - Corrige uma regressão de desempenho (introduzida em #71781) em que a leitura de muitos arquivos pequenos do armazenamento de objetos por meio da table function
s3e de outras table functions deixou de fazer prefetching e passou a recorrer a leituras síncronas, tornando significativamente mais lentas as leituras, com baixa concorrência ou de thread única, de muitos arquivos minúsculos. #108872 (Nikita Fomichev). O prefetch inicial de objetos pequenos agora também é disparado quando as leituras do armazenamento de objetos passam pelo cache do sistema de arquivos (filesystem_cache_name), de modo que leituras de muitos arquivos pequenos (por exemplo, ingestão doS3Queue) com o cache ativado não são mais síncronas nem limitadas pela latência. #109478 (Nikita Fomichev). - Faz o parse de literais de array e tupla profundamente aninhados em tempo linear, em vez de quadrático. #108892 (Alexey Milovidov).
- Reduz a sobrecarga causada pela contenção de locks no algoritmo de join
parallel_hash. #108938 (Hechem Selmi). - Acelera
estimateCompressionRatiopara colunas codificadas comT64ao calcular analiticamente o tamanho comprimido em vez de comprimir. #109054 (Raufs Dunamalijevs). - Remove um gargalo de thread única na etapa de embaralhamento de planos de consultas distribuídas: cada stream de entrada agora distribui suas linhas por bucket de destino de forma independente, em vez de fazer todo o stream de dados passar por uma única transformação. #109206 (Alexander Gololobov).
- Reduz o uso de CPU ociosa do servidor Keeper. #109255 (Michael Kolupaev).
- Acelera a serialização e os merges de colunas
JSONcujos dados compartilhados contêm muitos caminhos esparsos: ao achatar dados compartilhados em colunas por caminho, a varredura por linha em todas as colunas de caminho acumuladas é removida, e as lacunas são preenchidas em lote em vez de inserir valores padrão uma célula por vez. #109341 (Groene AI). - Reduz a sobrecarga de CPU da avaliação de expressões em consultas com um grande número de colunas (por exemplo, busca vetorial em uma coluna
QBitcom stride pequeno, em que cada vetor se expande em centenas de subcolunas de planos de bits, todas passadas para uma única chamada*DistanceTransposed). #109380 (Alexey Milovidov). - Melhora o desempenho das funções Geo do H3 (
h3ToGeoBoundary,h3ToGeo,h3CellAreaM2/h3CellAreaRads2,geoToH3) ao calcular pares de seno/cosseno em conjunto e eliminar chamadas trigonométricas redundantes nas transformadas de coordenadas. Os resultados permanecem inalterados (idênticos bit a bit). #109399 (Alexey Milovidov). - Melhora em até 7 vezes o desempenho de comparações (
<,>,<=,>=) de tipos inteiros largos (Int128,UInt128,Int256,UInt256e tipos baseados neles, comoDecimal128) e da conversão de inteiros com sinal paraInt256(até 7 vezes em dados com sinais mistos), tornando o código de comparação e extensão de sinal livre de desvios condicionais. #109474 (Manuel). - Otimizou
uniqCombined(incluindo o caso de agregação sem chaves) euniqHLL12. #109794 (Anton Popov). #109831 (Anton Popov). - As funções
arraySortearrayReverseSortficam várias vezes mais rápidas em arrays numéricos (incluindoDecimaleDateTime64) quando chamadas sem uma lambda. #109832 (Manuel). - Acelera
addDays,addWeeks,subtractDaysesubtractWeeksem valoresDateTimeeDateTime64em fusos horários com deslocamento fixo (como UTC) ao usar um caminho aritmético rápido. #109836 (Manuel). - Otimizou a análise do índice de texto. #109886 (Anton Popov).
- Paraleliza o processamento de linhas sem correspondência no algoritmo de join
parallel_hashem mais dois casos: quando há um filtro residual e no caso de chaves de junção pequenas (mapa hash de nível único). #110008 (Hechem Selmi). - As respostas internas da interface web (a UI Play, os painéis e os manipuladores de arquivos estáticos) agora são comprimidas de acordo com o cabeçalho
Accept-Encodingdo cliente, usando zstd, gzip, deflate, brotli, lz4, xz, snappy ou bzip2. Por exemplo, a página/playpassa de ~350 KB sem compressão para menos de 120 KB com zstd, reduzindo o tempo de carregamento em conexões lentas. Respostas já comprimidas permanecem intocadas, eVary: Accept-Encodingé emitido para o particionamento correto de CDN e cache. #110108 (Sayantanu Dey). - Empurra um filtro para baixo de uma função de janela ou de
LIMIT BYquando isso é seguro: um predicado escrito acima deles (umWHEREexterno em torno da subconsulta, ou uma conjunção emQUALIFY) que referencia apenas as colunas dePARTITION BYda janela, ou apenas as colunas-chave deLIMIT BY(paraLIMIT n BYcomn >= 1e semOFFSET), agora chega ao armazenamento e habilita a poda por chave primária e por partição, skip indexes e projeções. Por exemplo,SELECT ... row_number() OVER (PARTITION BY key ORDER BY ts) AS rn ... QUALIFY rn = 1 AND key = 'x'não lê mais a tabela inteira nem calcula a janela sobre ela. #110114 (Groene AI). #110116 (Groene AI). - Com
join_use_nulls = 1, umWHEREque rejeita nulos e referencia colunas de ambos os lados de um outer join (por exemplo,WHERE l.k = 42 AND r.k = 42) agora converte o join emINNER(ouLEFT/RIGHT) e faz a poda da chave primária, da mesma forma que comjoin_use_nulls = 0. Antes, a conversão era ignorada nesse caso, e ambas as tabelas eram lidas por completo. #110121 (Groene AI). - Funções com um único argumento
Nullablenão constante agora compartilham o mapa de nulos do argumento com o resultado, em vez de alocar e mesclar um novo. #110151 (Manuel). - Evita uma alocação na heap por verificação de hiper-retângulo na análise do índice de chave primária, acelerando a filtragem de marcas em 5-26%, dependendo do formato da consulta. #110153 (Manuel).
- Melhora o desempenho das funções
arrayMinearrayMaxem arrays numéricos em ~1,3-1,5x ao usar redução vetorizada em vez de um loop de comparação por elemento. #110163 (Manuel). - Vetoriza a descompressão do codec
Delta. A decodificação agora é de 1,5 a 5 vezes mais rápida para tipos de dados de 8/16/32 bits, tornando as varreduras de colunas comprimidas comDeltaaté 20% mais rápidas. #110189 (Manuel). - Acelera as funções de busca em strings (
like,position,match,countSubstrings,hasTokenetc.) em colunasEnumcom um padrão constante, buscando apenas os nomes distintos do enum e mapeando os resultados de volta para cada linha, em vez de buscar em todas as linhas. #110325 (Alexey Milovidov). - Acelera as funções de agregação
groupBitOr/groupBitAnd/groupBitXore a família de variância (varPop,varSamp,stddevPop,stddevSamp,skewPop,skewSamp,kurtPop,kurtSamp,covarPop,covarSamp,corr) com processamento vetorizado em lote: até 4x mais rápidas com o combinador-Ifem condições imprevisíveis e até 3x mais rápidas para a família de variância sem ele. #110461 (Manuel). - Acelera a análise do índice de texto (a etapa que seleciona quais grânulos ler): usa busca por exclusão em vez de iterar por todos os grânulos e evita criar um bitmap temporário para cada verificação de intervalo. #110530 (Anton Popov).
- Leva em conta o tamanho em disco das subcolunas de
Mapna otimização automática dePREWHERE. Isso corrige uma regressão de desempenho emPREWHEREintroduzida em #99200. Parte de #110462. #110623 (Pavel Kruglov). - Acelera a análise de valores
UUIDa partir de texto (por exemplo,JSONExtractemLowCardinality(UUID),toUUID,CAST AS UUID) ao validar e converter dígitos hexadecimais em uma única passada, em vez de duas. #110625 (Groene AI). - Melhora significativamente o desempenho das funções de agregação
timeSeries*ToGridusando implementações mais rápidas de ordenação e tabela hash. #110875 (Nikita Mikhaylov). - Consultas como
SELECT * FROM t WHERE idagora usam o índice para ignorar blocos de dados na colunaid. Fecha #89222. #89603 (Aditya Chopra). - Adicionada a configuração
query_plan_merge_expression_into_join(habilitada por padrão) para permitir a mesclagem de etapas de expressão em etapas deJOINdurante a otimização de reordenação deJOIN. Isso permite reordenarJOINs entre subconsultas que encapsulam junções (por exemplo, quando umJOINestá dentro de uma subconsulta com colunas calculadas), resultando em uma otimização melhor de árvores complexas deJOIN. #98533 (Vladimir Cherkasov). - Otimiza cadeias de
ANDcom múltiplas condições de comparação sobre a mesma expressão: detecta contradições (por exemplo,a < 3 AND a > 5→false) e elimina condições redundantes (por exemplo,a = 3 AND a < 5→a = 3). #99736 (Xiaozhe Yu). - Materialized CTEs referenciadas por múltiplos branches de uma consulta
UNIONagora são materializadas uma única vez e compartilhadas entre todos os branches. Antes, cada branch recebia sua própria cópia da CTE, que era inline e avaliada separadamente. #102107 (Dmitry Novik). - Threads em
BackgroundSchedulePoolagora são criadas sob demanda, em vez de todas de uma vez na inicialização do servidor. Uma nova configuração de servidor,background_schedule_pool_initial_size(padrão16), controla quantos workers são pré-iniciados; o pool cresce atébackground_schedule_pool_sizequando necessário. Isso reduz o número de threads ociosas em servidores com pouca carga. Fecha #85265. #105066 (Alexey Milovidov). - Evita carregamentos desnecessários de mark files para a serialização avançada de shared data do tipo
JSON. #107051 (Pavel Kruglov). - O cache de polígonos constantes pré-processados da função
pointInPolygonagora é compartilhado entre consultas e threads e é limitado pela nova configuração de servidorpoint_in_polygon_cache_size(padrão de 256 MiB,0desabilita o cache, alterável em tempo de execução). Antes, o cache mantinha atémax_threadscópias de cada polígono pré-processado, crescia sem limite entre polígonos distintos e nunca era liberado até o reinício do servidor. Ele pode ser limpo comSYSTEM DROP POINT IN POLYGON CACHE, e o uso atual é reportado emsystem.metricscomoPointInPolygonCacheBytes,PointInPolygonCacheCellsePointInPolygonCacheSizeLimit. Fecha #106393. #107247 (Nihal Z. Miaji). - O Keeper não mantém mais seu bloqueio interno de snapshots enquanto serializa e grava um snapshot em disco ou move snapshots entre discos, de modo que as transferências de snapshots para outros nós e o processamento do Raft não ficam mais paralisados pela criação local de snapshots. #107595 (Antonio Andelic).
- Paraleliza a remoção em segundo plano do cache do sistema de arquivos (controlada pelas configurações
keep_free_space_ratio). Foi adicionada uma nova configuraçãokeep_free_space_eviction_threadspara controlar o paralelismo, e o valor padrão dekeep_free_space_remove_batchfoi aumentado de100para250. #108147 (Kseniia Sumarokova). - Limita o número de partes preparadas simultaneamente na cópia com leitura seguida de gravação do Azure Blob Storage (usada por backups quando a cópia nativa não está disponível) a
max_inflight_parts_for_one_file, evitando uso excessivo de memória quando muitos arquivos grandes são copiados em paralelo. #108232 (Smita Kulkarni). - Habilitou globalmente os três caches de índice de texto — antes, eles só eram habilitados dentro das consultas. Além disso, o tamanho do cache de posting lists agora é zero, o que o desabilita efetivamente de novo, porque posting lists são grandes e armazená-las em cache é custoso demais. #108274 (Robert Schulze).
- Adiciona compressão em fluxo das marcas em memória durante o carregamento das marcas para reduzir o pico de uso de memória. Fecha #108285. #108325 (Pavel Kruglov).
- A nova configuração
reserve_granularitydo cache do sistema de arquivos (padrão de 4 MiB) reserva espaço antecipadamente em grânulos maiores, reduzindo a contenção de bloqueio no caminho crítico de reserva de espaço do cache do sistema de arquivos. #108369 (Kseniia Sumarokova). - Reduz a quantidade de memória usada pelos metadados do cache do sistema de arquivos (por segmento de arquivo e por chave). #108477 (Kseniia Sumarokova).
- Consultas a
system.iceberg_historycom filtrosWHEREnas colunasdatabaseetableagora acessam apenas os bancos de dados correspondentes, o que pode economizar tempo se você tiver muitos bancos de dados remotos não relacionados no servidor. #108492 (Den Kalantaevskii). - Removeu bloqueios desnecessários no cache do sistema de arquivos para reduzir a contenção de bloqueio. #108932 (Kseniia Sumarokova).
- Reduzido o uso de memória no tratamento de metadados de
BACKUPeRESTORE. Abrir um backup (paraRESTOREou como base de umBACKUPincremental) agora analisa os metadados.backupcomo fluxo, em vez de carregá-los em uma árvore XML DOM em memória, o que, no caso de backups grandes (especialmente incrementais), evita a alocação de uma árvore DOM de vários gigabytes. #109107 (Julia Kartseva). A finalização de umBACKUPtambém não copia mais as informações de todos os arquivos para um vetor temporário, o que, em backups com milhões de arquivos, chegava a consumir vários gigabytes temporariamente. #109861 (Julia Kartseva). A gravação de entradas de backup também não copia mais a lista de informações de arquivos do host atual. #111162 (Julia Kartseva). - Redução do consumo de memória no agregador. #109224 (Konstantin Vedernikov).
- Suporte ao cache de condições de consulta para arquivos
Parquetlocais lidos pelo table engineFile(antes compatível apenas com armazenamento de objetos e lagos de dados). #109247 (Alexey Milovidov). - Reduzido em 2 a 2,5 vezes o uso de memória do cache de cabeçalhos do índice de texto. Com isso, mais cabeçalhos de partes de dados cabem no cache (configuração
text_index_header_cache_size), reduzindo leituras em disco em consultas de busca textual. #109332 (Anton Popov). - As funções transpostas de distância vetorial
L2DistanceTransposed,cosineDistanceTransposededotProductTransposedagora aplicam a otimização de leitura parcial de bit planes a colunasNullable(QBit), lendo apenas os bit planes solicitados em vez da coluna inteira. #109358 (Alexey Milovidov). IS NOT DISTINCT FROMeIS TRUEagora usam a chave primária e índices MinMax para podar grânulos, assim como=. Antes,k IS NOT DISTINCT FROM 42e(k = 42) IS TRUEfaziam varredura de todos os grânulos. #110006 (Groene AI).- Conexões em pool não são mais verificadas com ping antes de cada uso. Isso elimina uma ida e volta
Ping-Pongque era adicionada a cada conexão reutilizada, reduzindo a latência de consultas distribuídas e doclickhouse-benchmark. Uma conexão em pool obsoleta é detectada com umpollde timeout zero (uma verificação non-blocking que não adiciona ida e volta) e recuperada por meio de uma nova conexão. #110068 (Alexey Milovidov). - Corrigidas reconexões espúrias de conexões HTTP keep-alive em pool via TLS (HTTPS, S3). A verificação de conexão obsoleta usava
pollno socket, o que informava incorretamente como fechada uma conexão segura ativa que carregava um registro TLS pós-handshake ainda não lido (um ticket de sessão ouKeyUpdate); agora, ela usaMSG_PEEKnon-blocking em sockets sem TLS eSSL_peek/SSL_has_pendingem sockets TLS, o que também detecta corretamente um encerramento ordenado de TLS e um registro TLS que chegou apenas parcialmente. #110402 (Alexey Milovidov). - Consultas aceleradas por filtragem dinâmica TopK (
ORDER BY ... LIMIT k) agora fazem uso mais completo do cache de condições de consulta: o cache é populado mesmo quandolazy materializationé aplicada à consulta, e essas consultas podem reutilizar entradas gravadas anteriormente por uma consulta comum com o mesmo predicadoWHERE. #110507 (Shankar Iyer). - Um padrão
LIKE/NOT LIKEsem curingas (%,_) agora usa um intervalo exato da chave primária, de modo que lê o mesmo número de grânulos que o predicado=/!=equivalente, em vez de um intervalo de prefixo mais amplo. #107077 (Groene AI). - Corrige a contenção redundante no bloqueio de segmentos de arquivo (uma regressão de desempenho introduzida na 26.1) ao ler dados pelo cache do sistema de arquivos. #109577 (Kseniia Sumarokova).
- Corrigido o problema em que skip indexes definidos em subcolunas
Tuplenão eram usados quando o campo era acessado viatupleElement(t, 'name'),tupleElement(t, N)out.N, enquanto a tupla completa também era lida na mesma consulta (por exemplo,SELECT *). Todas essas formas agora descartam grânulos da mesma forma que o acesso à subcoluna nomeadat.name. #110056 (Groene AI). - Corrigidas consultas lentas com
ORDER BY ... LIMITem tabelasDistributedquandoprefer_localhost_replicaseleciona uma réplica local: o limite preliminar foi removido do plano do shard local, o que impedia a materialização lazy e a filtragem top-K dinâmica. #110136 (Michael Jarrett). - Corrigido o problema em que o índice de texto não era usado com o operador
ILIKEquando o índice era definido sobre uma expressão, em vez de uma coluna simples (por exemplo,assumeNotNull(col)com um pré-processadorlower(...)): essas consultas liam todos os grânulos em vez de usar o índice. Isto encerra #110350. #110595 (Elmi Ahmadov). - Reduz a contenção de bloqueio no cache do sistema de arquivos: consultas que leem do cache não ficam mais bloqueadas no lock da fila de prioridade ao atualizar a prioridade LRU de uma entrada. #109065 (Antonio Andelic).
- Consultas de índice de texto que usam uma expressão
postprocessorapenas para filtragem (por exemplo,if(..., '', token)) agora descartam tokens vazios de antemão, em vez de materializá-los linha por linha, melhorando o desempenho. #109049 (Elmi Ahmadov). - Reduz a contenção de bloqueio nas filas de logs do sistema, diminuindo a latência de cauda das consultas em clusters sobrecarregados. #110539 (Sean Haynes).
- Melhorado o desempenho das funções de busca de substring (
position,countSubstrings,multiSearch*,replaceAll,replaceOnee suas variantes case-insensitive e UTF-8) com uma agulha não constante em até 1,5x, usando buscadores de string com suporte a SIMD no caminho por linha em vez de uma implementação ingênua. #110580 (Raúl Marín). - A materialização lazy agora é aplicada a consultas
ReplacingMergeTreecomFINAL, um filtro e umLIMITpequeno, mesmo semORDER BY. Colunas desnecessárias para o filtro e para o mergeFINALsão buscadas apenas para as linhas que restam após o limite, o que torna essas consultas muito mais rápidas quando selecionam colunas largas com um filtro seletivo. Controlado porquery_plan_optimize_lazy_materializationequery_plan_max_limit_for_lazy_materialization. #110722 (Nikolai Kochetov). - Melhorado o desempenho de async insert quando a desduplicação está habilitada e um flush é dividido entre várias partições: o ClickHouse agora reutiliza os hashes de desduplicação calculados entre as partições, em vez de recalculá-los para cada uma. #111150 (Valery Petrov).
Melhoria
- Adicionada a configuração
input_format_csv_missing_nullable_as_empty_string(desabilitada por padrão). Quando habilitada, um valor ausente em uma colunaNullable(String)na entrada CSV é lido como umaStringvazia em vez deNULL, independentemente deinput_format_csv_empty_as_default. #58225 (kevinyhzou). #107577 (Alexey Milovidov). - As funções
toDateOrNull,toDateTimeOrNulletoDateTime64OrNullagora aceitam argumentos inteiros de todos os tipos inteiros nativos (interpretados da mesma forma que emtoDate,toDateTimeetoDateTime64, com um argumento opcional de timezone), retornandoNULLpara valores fora do intervalo do tipo de resultado. Por exemplo,toDateTimeOrNull(1583851242, 'Asia/Shanghai')retorna2020-03-10 22:40:42etoDateTimeOrNull(4294967296)retornaNULL. #79791 (Jitendra). - Adicionada uma coluna
is_wildcardà tabelasystem.grantsque indica se um grant usa correspondência de prefixo com curinga (por exemplo,GRANT SELECT ON db*.*). Antes, grants com curinga e grants exatos com o mesmo nome eram indistinguíveis emsystem.grants. Fecha #92835. #98577 (DQ). - Permite compactação Snappy na interface HTTP (
Accept-Encoding: snappy) e adiciona a configuraçãosnappy_modepara escolher entre o formato de bloco Hadoop Snappy e o formato de framing do Snappy para E/S genérica com snappy emfile/url. #100752 (Alexey Milovidov). - Adiciona suporte à compatibilidade com o analyzer antigo por meio da configuração
analyzer_compatibility_allow_non_aggregate_in_having. Se habilitada, conjunções não agregadas são movidas deHAVINGparaWHERE. #104232 (Dmitry Novik). - Adicionada uma nova configuração de servidor
memory_worker_rss_speculative_reserve_ratio(padrão1.0) que faz com que o memory tracker global reserve memória especulativamente além do RSS observado quando o crescimento do RSS supera o rastreamento do tracker entre as amostras. Com isso, as alocações recebemMEMORY_LIMIT_EXCEEDEDmais cedo, e é menos provável que o OOM-killer do kernel seja acionado primeiro. Defina a razão como0para desabilitar a especulação. #104976 (Alexey Milovidov). - Adicionadas métricas Prometheus opt-in para atividade de eviction do filesystem cache (
filesystem_cache_evictions_total,filesystem_cache_evicted_bytes_total,filesystem_cache_evicted_segment_hits,filesystem_cache_evicted_segment_size_bytese suas variantes por usuário rotuladas comuser_id), expostas por cache viasystem.dimensional_metrics,system.histogram_metricse o Prometheus endpoint. Elas são controladas pelas configurações do cache diskexpose_prometheus_eviction_metricseexpose_prometheus_eviction_metrics_per_user(ambas desativadas por padrão), que podem ser alternadas em runtime viaSYSTEM RELOAD CONFIG. #105020 (Sacheendra Talluri). - Define
EXPLAIN [PLAN] actions=1, compact=1, pretty=1como padrão. #105036 (Kirill Kopnev). - Atualiza
delta-kernel-rs(a library por trás da integraçãoDeltaLake) para a v0.23.0. #105861 (Smita Kulkarni). - Adicionados os comandos
duewcaoclickhouse-disks. Eles, respectivamente, exibem o tamanho total em bytes de um determinado arquivo ou diretório e listam o número de bytes, linhas e palavras em um arquivo. #106268 (Asya Shneerson). - Adicionada uma nova métrica assíncrona
UntrackedMemory(visível emsystem.asynchronous_metrics) que informa a memória já alocada por threads, mas ainda não contabilizada no contador global de rastreamento de memória: cada thread acumula pequenas alocações localmente e as reporta em lote. Isso ajuda a explicar discrepâncias entreMemoryTrackinge o uso real de memória do processo. As mensagens de erroMEMORY_LIMIT_EXCEEDEDagora também incluem a quantidade de memória não rastreada, facilitando entender por que uma consulta ou o servidor atingiu o limite de memória. #106386 (Miсhael Stetsyuk). - Upgrade do ClickStack (a interface de observabilidade) para a versão 2.28.0. #106406 (Aaron Knudtson).
- Adicionado suporte a
BFloat16emdotProducte melhorado seu desempenho com batching no caminho SIMD. #106569 (Nikita Taranov). - As configurações
max_named_collection_num_to_throw,max_table_num_to_throw,max_replicated_table_num_to_throw,max_view_num_to_throw,max_dictionary_num_to_throwemax_database_num_to_throwagora podem ser alteradas sem reiniciar o servidor. #106821 (Maxim Orlovsky). - Adicionado suporte aos valores
REDUCED_REDUNDANCY,STANDARD_IA,ONEZONE_IA,GLACIER_IReEXPRESS_ONEZONE(além deSTANDARDeINTELLIGENT_TIERING) na configuraçãos3_storage_class_name. #107251 (Aditya Kumar). - Adicionada a configuração em tempo de criação
materialized_postgresql_use_extended_date_and_time_typespara o database engineMaterializedPostgreSQL. Por padrão (enabled), as colunas PostgreSQLdate/timestampsão inferidas comoDate32/DateTime64; ao defini-la como0no momento deCREATE DATABASE, são inferidos os tipos mais restritosDate/DateTime. A configuração não se aplica ao table engineMaterializedPostgreSQL. #107428 (Alexey Milovidov). - O quantificador de Array
SOME/ALL(expr OP SOME(array)/expr OP ALL(array)) agora também oferece suporte aos predicates de comparação por palavra-chaveIS DISTINCT FROMeIS NOT DISTINCT FROM, e aos predicates de busca de stringsLIKE,ILIKE,NOT LIKE,NOT ILIKEeREGEXP, reescritos comoarrayExists/arrayAll. #107454 (Alexey Milovidov). - Corrigido um vazamento de memória que ocorria quando a abertura de um database SQLite falhava (por exemplo, quando a table function
sqliteou o database engineSQLiterecebe um path que não pode ser aberto). #107807 (Alexey Milovidov). - Na interface web (
play.html), a indicação do atalho de execução agora mostraCmd+Enterno Mac eCtrl+Enterem outras plataformas, em vez de sempre mostrarCtrl/Cmd+Enter, e a parte, +Shift to run allda indicação é exibida apenas quando há várias consultas. #107817 (Alexey Milovidov). #108957 (Alexey Milovidov). - O table engine
Aliasagora oferece suporte à leitura com réplicas paralelas quando a tabela de destino é da famíliaMergeTree. #107830 (Kai Zhu). - Adicionado o tipo de estatísticas de coluna
uniq_v2— uma alternativa leve às estatísticasuniq, baseada no sketchuniqCombined64. #107863 (Han Fei). O tipo de estatísticas de colunaminmaxfoi descontinuado, e o valor padrão deauto_statistics_typesfoi alterado parabasic, uniq_v2. #108680 (Han Fei). - As AI functions (
aiGenerate,aiEmbed,aiClassify,aiExtract,aiTranslate) agora tentam novamente após falhas transitórias de rede (redefinições de conexão, falhas na conexão TLS, timeouts, endereços inacessíveis) quandoai_function_max_retriesestá definido, seguindo o comportamento de retry da table functionurl. Antes, apenas respostas de erro HTTP do lado do provider eram repetidas. #107927 (Alexey Milovidov). INSERTem uma tabelaMergeTreeagora respeita o cancelamento da consulta emax_execution_timeao gravar muitas parts, em vez de potencialmente continuar em execução por muito tempo após ser interrompido. #107929 (Michael Kolupaev).- Na interface web (
play.html), o ícone do Terminal Web agora pode ser aberto em uma nova guia do navegador com clique do botão do meio ou Ctrl/Cmd/Shift+clique. #108006 (Alexey Milovidov). - A geração de SQL com IA no cliente não envia mais o parâmetro
temperature, a menos que ele seja definido explicitamente por meio deai.temperaturena configuração. Isso corrige a geração de SQL com IA para modelos que rejeitam o parâmetrotemperature. #108014 (Alexey Milovidov). - Adicionadas a tabela
system.masking_policiese a introspecçãoSHOW MASKING POLICIESàs compilações de código aberto. As masking policies em si continuam sendo um recurso do ClickHouse Cloud, portanto a tabela fica vazia nas compilações de código aberto, mas as consultas de introspecção não falham mais com erro. #108030 (Alexey Milovidov). - O consumer Kafka baseado em Keeper agora embaralha a ordem em que adquire locks temporários de partição entre as réplicas, melhorando a distribuição equilibrada das partições e reduzindo a contenção de lock. Antes, o embaralhamento pretendido não tinha efeito. #108033 (Alexey Milovidov).
- Adicionado autocompletar à interface web (
play.html), com base emsystem.completionse no lexer SQL baseado em WASM. #108059 (Alexey Milovidov). clickhouse-clienteclickhouse-localagora mostram sugestões de preenchimento automático à medida que você digita (texto “fantasma” em linha) com a melhor correspondência quando o cursor está no fim da entrada. As sugestões mais relevantes (usadas recentemente e identificadores já presentes na consulta) aparecem primeiro. Navegue com Up/Down (ou Ctrl-Up/Ctrl-Down); aceite uma sugestão única ou selecionada com Tab ou Right, e aceite uma sugestão selecionada com Enter; Tab também abre a lista clássica de preenchimento. Controlado pela nova opção--hints(ativada por padrão; requer--highlight). #108070 (Alexey Milovidov).- Suporte à função
lengthpara o tipo de dadosQBit— ela retorna a dimensão do vetor como uma constante. #108071 (Alexey Milovidov). Suporte aCASTdeQBitparaArray, reconstruindo o vetor original — o inverso da conversão existente deArrayparaQBit. #108072 (Alexey Milovidov). - Requisições para catálogos REST de lago de dados (como OneLake) agora incluem um cabeçalho
User-Agentdo ClickHouse. #108117 (Konstantin Vedernikov). arrayFoldagora respeita o cancelamento de consulta emax_execution_time. Antes, uma redução sobre um array muito longo era executada inteiramente dentro de uma única chamada de função e não podia ser interrompida, entãoKILL QUERYe os limites de tempo eram ignorados até que a redução terminasse. #108192 (Groene AI).MVTEncodeGeomagora ajusta a geometria à grade de pixels inteiros antes do recorte e recorta polígonos com a bibliotecawagyu, para que a saída recortada seja válida (anéis com autointerseção são corrigidos) e alinhada às bordas, correspondendo ao PostGISST_AsMVTGeom. #108248 (Saarthak Gupta).- Adiciona
ProfileEventsde pré-execução de consulta por fase:QueryParseMicroseconds,QueryAnalysisMicroseconds,QueryPlanBuildMicrosecondseQueryPipelineBuildMicroseconds. Eles mostram onde o tempo é gasto antes da execução da consulta (parsing, análise, compilação do plano de consulta e compilação do pipeline) e estão disponíveis emsystem.query_logesystem.events. #108282 (Jordi Villar). - Operações
ALTER TABLEque produziriam metadados da tabela acima demax_query_sizeagora são rejeitadas antecipadamente, evitando que tabelas se tornem impossíveis de carregar por componentes como a distribuição de DDL e a recuperação de réplica. #108283 (Andrew Kravchuk). - Adicionadas as colunas
settingseengine_settingsasystem.backupsesystem.backup_log.settingsexpõe as configurações específicas de backup/restore solicitadas para uma operação (por exemplo,allow_s3_native_copy,deduplicate_files,structure_only), eengine_settingsexpõe as configurações efetivamente usadas pelo leitor e gravador do mecanismo de backup (por exemplo, as configurações de requisição S3, comoallow_native_copy, que podem diferir do que foi solicitado após a mesclagem da configuração do endpoint). Isso torna possível ver com quais configurações uma operaçãoBACKUP/RESTORErealmente foi executada. #108334 (Julia Kartseva). - Adicionada uma coluna
sourceasystem.documentationcontendo o caminho do arquivo-fonte em que a documentação de cada entidade é definida. A tabela agora também documenta codecs de compressão, eventos de perfil, métricas atuais, métricas assíncronas e as próprias tabelas do sistema (com suas colunas), e a documentação das configurações agora inclui seu tipo e valor padrão. #108346 (Alexey Milovidov). Um valor padrão de configuração vazio agora é exibido como string vazia em vez de backticks vazios. #108708 (Alexey Milovidov). - Suporte a leituras assíncronas de réplicas remotas (
async_socket_for_remote) no macOS por meio da implementação dos primitivos de polling baseados em epoll sobrekqueue. Isso permite que consultas distribuídas leiam shards em paralelo no macOS, em vez de de forma serial. #108403 (Raúl Marín). - Suporte a
BFloat16em funções matemáticas binárias. #108442 (Zhang Yifan). MergeTreeagora pode ler um fluxo comprimido cujos blocos usam codecs diferentes. Este é o pré-requisito do lado da leitura para a seleção adaptativa de codec (#105404). #108592 (Raufs Dunamalijevs).- O valor automático de
max_threadse de configurações semelhantes agora é mostrado emsystem.settingscomoauto(8)em vez de'auto(8)'; as aspas simples ao redor eram um artefato antigo incorporado ao valor. A compatibilidade entre versões foi preservada: a forma legada com aspas ainda é aceita ao processar configurações recebidas de servidores mais antigos. #108657 (Alexey Milovidov). - Várias correções de usabilidade para a UI web
/schema: carregar o esquema ao pressionar Enter, barras de rolagem adaptadas ao tema, nomes de tabela legíveis, agrupamento consistente por banco de dados de tabelas independentes, sem seleção de texto ao arrastar e um formulário de autenticação no estiloplay(Credential Management API, credenciais fornecidas por URL com remoção de senha e validação de credenciais em tempo real). #108724 (Alexey Milovidov). - O modo lazy de aplicação da posting list do índice de texto não é mais experimental e pode ser selecionado com
text_index_posting_list_apply_mode = 'lazy'semallow_experimental_text_index_lazy_apply. A configuração de limite de densidade foi renomeada detext_index_density_thresholdparatext_index_lazy_intersection_density_threshold. #108814 (Anton Popov). - Adicionado um novo tipo de catálogo
delta_sharingaoDataLakeCatalogpara o endpoint REST Iceberg do Databricks Delta Sharing, cujos espaços de nomes são planos e que ignora o filtro de listagemparent. Use-o em vez decatalog_type = 'rest'para esses endpoints, nos quaisSHOW TABLESficaria travado de outra forma. #108865 (Seva Potapov). - Adicionada uma nova opção de
clickhouse-client/clickhouse-local,--echo-query-separator, que imprime um separador personalizado antes da consulta formatada exibida em eco, facilitando distinguir a consulta digitada do eco reformatado. Desabilitada por padrão. #108888 (David Meng). - Melhorias no painel de bancos de dados da interface web: o número de tabelas é exibido entre parênteses ao lado do nome do banco de dados quando ele é expandido. #108891 (Alexey Milovidov). Um botão de atualização ao lado de um banco de dados expandido recarrega sua lista de tabelas. #108958 (Alexey Milovidov). Ao reabrir o painel, os bancos de dados expandidos anteriormente são restaurados. #108964 (Alexey Milovidov).
- Permite calcular o benefício combinado do skip-index em
EXPLAIN WHATIF: ele mostra a proporção de dados para a interseção de todos os índices hipotéticos adequados existentes. #108934 (Yarik Briukhovetskyi). - Corrigido o problema de a posição da rolagem horizontal da tabela de resultados ser redefinida na interface web ao clicar em um link em uma célula e voltar para a página. #108941 (Alexey Milovidov).
- O mecanismo de banco de dados
MySQL, o mecanismo de tabela e a função de tabela agora mapeiam os tipos de coluna espaciais do MySQL (LINESTRING,POLYGON,MULTILINESTRING,MULTIPOLYGONe o genéricoGEOMETRY) para os tipos geométricos correspondentes do ClickHouse, em vez deString. Isso é controlado pelo novo sinalizadorgeometryda configuraçãomysql_datatypes_support_level, habilitado por padrão.POINTainda é sempre convertido paraPoint. A coluna genéricaGEOMETRYé mapeada para o tipo abrangenteGeometry; ler um valor cujo subtipo não tenha correspondente no ClickHouse (MULTIPOINT,GEOMETRYCOLLECTION) gera uma exceção no momento da leitura. #108944 (Alexey Milovidov). - Interface web (
play.html): navegação completa por teclado — navegação com as teclas de seta no painel de bancos de dados e na tabela de resultados, acesso por teclado aos botões da barra de ferramentas, ao seletor de tema e ao menu de download, além de contornos de foco visíveis. #108972 (Alexey Milovidov). - interface HTTP: quando credenciais são fornecidas tanto por parâmetros de URL (
user/password) quanto por um cabeçalhoAuthorization, os parâmetros de URL agora têm precedência, em vez de a solicitação ser rejeitada. Isso corrige a falha no download de resultados pela interface web (play.html) quando o navegador memorizou credenciais Basic, causandoAUTHENTICATION_FAILED(erro 516). #108980 (Alexey Milovidov). - Restaura
show_data_lake_catalogs_in_system_tablescomo a configuração que controla apenas a visibilidade deDataLakeCatalogemsystem.tables,system.columnsesystem.completions. Adicionadoshow_remote_databases_in_system_tables, habilitado por padrão, para permitir que os usuários ocultem bancos de dadosMySQLePostgreSQLdessas tabelas de sistema separadamente. #109082 (Pablo Marcos). - Passa a usar por padrão o algoritmo preciso de parsing de ponto flutuante (o representável mais próximo) e aplica a configuração
precise_float_parsingaos formatos de entrada (CSV,TSV,JSON,VALUES, …) e a literais numéricos, não apenas atoFloat*/CAST. Definaprecise_float_parsing = 0para voltar ao comportamento anterior, mais rápido em alguns casos, mas menos preciso. Fecha #60146. Fecha #74647. Fecha #68914. #109086 (Raúl Marín). - Uma consulta com um único CTE agora é formatada com a mesma quebra de linha e o mesmo recuo de uma consulta com vários CTEs. Antes,
WITH a AS (...)mantinha o CTE na mesma linha deWITH, enquanto dois ou mais CTEs colocavamWITHem uma linha própria, com cada CTE recuado. #109092 (Groene AI). - Interface web: quando a conclusão destacada é igual à palavra já digitada, ou à mesma palavra com capitalização diferente (por exemplo,
HASHsugerido para umhashdigitado), pressionar Right/Tab/Enter não reescreve mais a palavra nem é interceptado pelo autocompletar — a tecla move o cursor ou insere uma nova linha como esperado. #109106 (Alexey Milovidov). #109384 (Alexey Milovidov). - Adicionado à interface web (
play.html) o destaque de parênteses coloridos, colchetes correspondentes, identificadores correspondentes e grupos de dígitos, assim como noclickhouse-client. #109108 (Alexey Milovidov). - Na interface web,
TabeShift+Tabagora aumentam e reduzem o recuo das linhas selecionadas em 4 espaços. #109110 (Alexey Milovidov). - Interface web: a posição de um erro de sintaxe no editor de consultas passa a ser destacada com fundo vermelho. O destaque é removido assim que o usuário volta o foco ao editor. #109112 (Alexey Milovidov).
clickhouse-compressor --state a detecção do codec padrão para partes antigas agora relatam cabeçalhos de bloco corrompidos como corrupção, em vez de um enganoso erro de fim de arquivo. #109157 (Raufs Dunamalijevs).- O ClickHouse Keeper agora respeita a configuração
os_collect_psi_metricse pula a coleta de métricas PSI quando ela está desabilitada. #109179 (Maxim Orlovsky). - Na interface web, quando as abas de consulta são exibidas, os parâmetros de conexão (host, usuário, senha) ficam ocultos atrás de um ícone de chave no canto superior direito e são mostrados em um menu suspenso quando necessário. #109243 (Alexey Milovidov).
- Interface web: exibe um resultado com valor único (uma linha, uma coluna, por exemplo
SHOW CREATE TABLE) com altura completa, em vez de limitá-lo a três linhas. #109245 (Alexey Milovidov). - Na interface web, clicar em uma tabela no painel de bancos de dados com o botão do meio do mouse, com Shift ou com o modificador de nova aba da plataforma (Cmd no macOS, Ctrl em outros lugares) agora abre a consulta em uma nova aba da interface web. #109246 (Alexey Milovidov).
- O cache de condição de consulta para arquivos
Parquetremotos em armazenamento de objetos agora usa o ETag, além do caminho, como chave, para que sobrescrever um objeto no mesmo local não sirva mais resultados em cache desatualizados. #109310 (Alexey Milovidov). - Na interface web, strings vazias e NULLs não são mais colorizados no modo de coloração categórica. #109342 (Alexey Milovidov).
- Interface web: clicar no ícone de uma tabela no painel do banco de dados agora mostra a lista de colunas, com ícones de tipo, uma barra de tamanho proporcional ao tamanho comprimido e um tooltip com o tamanho comprimido/descomprimido e a razão de compressão. #109346 (Alexey Milovidov).
- Interface web: exibir o título completo da aba como tooltip ao passar o cursor quando ele estiver truncado. #109354 (Alexey Milovidov).
- Na interface web, clicar com o botão do meio no título de uma aba (ou Ctrl/Shift/Cmd+clique nela) agora duplica a aba. #109357 (Alexey Milovidov).
- Interface web: redimensionar uniformemente as áreas de progresso final e estatísticas da consulta para que não quebrem de forma estranha quando a janela do navegador estiver estreita. #109363 (Alexey Milovidov).
- Interface web: selecionar um banco de dados no painel de banco de dados agora o usa como banco de dados padrão para consultas executadas no editor. #109372 (Alexey Milovidov).
- Suporte a
reinterpretde umArrayde elementos de tamanho fixo comoString, o inverso doreinterpretjá existente deString/FixedStringcomoArray. #109383 (Alexey Milovidov). - Na interface web, não exibir os toggles de colorização por coluna quando o resultado tiver no máximo uma linha. #109385 (Alexey Milovidov).
- Permitir
CASTentre tiposQBitque diferem no tipo de elemento e/ou no stride, desde que a dimensão permaneça a mesma (por exemplo,CAST(x AS QBit(Float64, N))a partir de umQBit(Float32, N)). Alterações apenas no stride não causam perda; alterações no tipo de elemento seguem a semântica de conversão correspondente deArray(por exemplo,Float32paraBFloat16pode perder precisão, eaccurateCast/accurateCastOrNullrejeitam linhas que não são exatamente representáveis). #109387 (Alexey Milovidov). - As funções
quantizeBFloat16ToInt8edequantizeInt8ToBFloat16agora também aceitam argumentosArrayeQBit, aplicando o codec Lloyd-Max ao vetor inteiro (retornandoArray/QBitdo tipo de elemento correspondente), além das sobrecargas escalares já existentes. #109398 (Alexey Milovidov). - Interface web: o link
Documentationagora inclui o nome do usuário atual na URL. #109419 (Alexey Milovidov). - Suporte a
arraySum,arrayAvgearrayProductpara arrays deBFloat16. #109420 (Alexey Milovidov). - O especificador de formato no estilo MySQL
%femparseDateTime/parseDateTime64(e suas variantesOrZero/OrNull) agora aceita entre 1 e 6 dígitos fracionários, interpretados como microssegundos alinhados à esquerda, como noSTR_TO_DATEdo MySQL, em vez de exigir exatamente 6. Também foram corrigidas tabelasPrettyCompactdesalinhadas nos exemplos da documentação de funções integradas. #109421 (Alexey Milovidov). - Interface web: as abas de consulta agora são persistentes — cada aba mantém o resultado renderizado (incluindo imagens e gráficos) e a consulta em execução quando você alterna para outra aba e volta, e consultas longas continuam sendo executadas em segundo plano. Os títulos das abas mostram um spinner, uma barra de progresso e uma marca de verificação de conclusão para a consulta. #109425 (Alexey Milovidov).
- Interface web: exibição correta de erro quando uma consulta falha depois que parte do resultado já foi transmitida via streaming, em vez de mostrar
SyntaxError: Unexpected end of JSON inputno lado do cliente (ou, comhttp_write_exception_in_output_format, marcar a consulta com falha como bem-sucedida). #109430 (Alexey Milovidov). - Adicionadas colunas fixadas à interface web: uma coluna pode ser fixada pelo cabeçalho para permanecer visível (presa à borda) enquanto a tabela de resultados é rolada horizontalmente. #109439 (Alexey Milovidov).
- No dashboard avançado (
/dashboard), gráficos de métricas específicas agora podem ser adicionados diretamente pelo nome da métrica, como aparece no código-fonte ou na documentação, o que facilita adicionar várias métricas durante sessões de depuração. #109449 (Mikhail Artemenko). - Interface web: corrigido o fechamento do menu suspenso de configurações de conexão ao selecionar texto com o mouse e arrastar além da borda. #109451 (Alexey Milovidov).
- Interface web: ao passar o cursor sobre o cabeçalho de uma coluna da tabela de resultados, agora são exibidos o nome completo da coluna e o tipo em uma dica de ferramenta, para que cabeçalhos truncados possam ser lidos por inteiro. #109463 (Alexey Milovidov). Corrigido o recorte dos títulos dos cabeçalhos de coluna com reticências mesmo quando a coluna era larga o suficiente para mostrar o título completo. #110397 (Alexey Milovidov).
- Adicionado suporte a dicionários de cache SSD (layout
SSD_CACHE) e ao mecanismo de tabelaFileLogem compilações para macOS. #109493 (Raúl Marín). - Interface web: não restaurar abas com consultas vazias ao abrir a página. #109529 (Alexey Milovidov).
- Corrigidas dicas de autocompletar ilegíveis durante a digitação e cores fortes no cliente interativo em terminais cujo
TERMnão contém256(por exemplo, Ghostty, kitty, Alacritty, foot): as cores fortes agora são emitidas incondicionalmente como códigos de cor brilhante aixterm, em vez de recorrer a negrito + cor escura, que terminais modernos renderizam como uma cor escura e difícil de ler em fundos escuros. #109622 (Alasdair Brown). - Habilitadas arenas jemalloc por CPU e profiling de alocação em compilações para macOS. #109684 (Raúl Marín).
- Permitida a alteração de algumas configurações de autenticação de um banco de dados de catálogo de lago de dados
OneLakecomALTER DATABASE ... MODIFY SETTING. #110019 (alesapin). - O engine
Hiveagora lê metadados de arquivosORC(índices min/max, contagens de linhas) com o leitor nativo deORCdo ClickHouse, em vez do adaptadorORCdo Apache Arrow. #110086 (Alexey Milovidov). - Reduziu o tamanho do binário em ~10,5 MB ao executar operações de comparação e aritméticas em pares de tipos mistos raramente usados (
Decimalvs. inteiro com largura diferente, e pares envolvendoInt128/UInt128/Int256/UInt256) por meio da conversão para um tipo comum, em vez de usar um kernel compilado dedicado para cada combinação de tipos. Pares do mesmo tipo, pares usados com frequência e as operaçõesplus/minus/multiply, limitadas por memória, mantêm seus kernels dedicados; os resultados, os tipos de resultado e os casos excepcionais permanecem inalterados. #110131 (Alexey Milovidov). - Uma subquery no lado direito de
IN, cuja única coluna é um array com uma dimensão a mais que o argumento à esquerda, agora é interpretada como o conjunto dos elementos do array (como um literal de array ou uma função que retorna array), em vez de falhar com um erro confuso de incompatibilidade de tipos. Por exemplo,x IN (SELECT groupArray(x) FROM ...)agora funciona. #110169 (Alexey Milovidov). - Ler de um table engine
SQLiteou de uma table functionsqlitenão consome mais, em loop, um CPU core inteiro quando o banco de dados SQLite está bloqueado por outra conexão. A leitura agora fica ociosa enquanto aguarda o lock e continua podendo ser cancelada. #110248 (Groene AI). - Arredonda valores de tempo decorrido, taxa e razão em mensagens de log e exceção para três dígitos, para que números como
1.345844286 sec.não sejam mais exibidos com precisão total. #110277 (Alexey Milovidov). - Na interface web (Play),
BFloat16agora é reconhecido como um número de ponto flutuante, e suas colunas são alinhadas à direita e coloridas de acordo. #110433 (Alexey Milovidov). - Adiciona suporte à cláusula
SETTINGSpara o table enginePostgreSQLe a table functionpostgresql(por exemplo,SETTINGS postgresql_connection_pool_size = 50), trazendo paridade de recursos com o engineMySQL. #110614 (Alexey Milovidov). SHOW CREATE TABLE(eSHOW CREATE VIEW/SHOW CREATE DICTIONARY) agora sugere uma tabela com nome semelhante na mensagem de erro quando a tabela solicitada não existe, da mesma forma que as queriesSELECT. #110633 (Alexey Milovidov).- Habilita a setting
merge_selector_enable_heuristic_to_lower_max_parts_to_merge_at_oncepor padrão: o merge selector agora reduz automaticamente o número máximo de partes a mesclar de uma vez com base em quão cheia está a partição. Veja #91163. #110726 (Mikhail Artemenko). - Aceita os comandos de limpeza do PostgreSQL
RESET,UNLISTENeDISCARDcomo no-ops no PostgreSQL wire protocol, em vez de falhar com erro de sintaxe. Isso melhora a compatibilidade com drivers como Skunk, que enviamRESET ALLeUNLISTEN *durante a configuração e a limpeza da conexão. #110780 (Alexey Milovidov). - Altera o valor padrão da setting
auto_statistics_typesdebasic, uniqparabasic, uniq_v2. #110878 (Han Fei). randomHadamardTransformagora calcula uma transformada exata que preserva o comprimento para qualquer vetor cujo maior fator ímpar seja no máximo 64 (por exemplo,3584 = 512 * 7, comum em modelos de embedding), ampliando as famílias anteriores2^N,2^k * {12, 20}e2^k * 9. Uma transformada completa de um comprimento que não pode ser representado exatamente agora gera uma exceção, em vez de preencher silenciosamente com zeros até um vetor maior; passeoutput_dimspara calcular uma projeção truncada com comprimento arbitrário. #111006 (Alexey Milovidov).- Corrigida uma exceção
LOGICAL_ERRORdurante o backup de um banco de dadosReplicatedque está sendo removido e recriado de forma concorrente; esses backups agora falham de forma controlada comCANNOT_GET_REPLICATED_DATABASE_SNAPSHOT. #100651 (Alexey Milovidov). - Agora exibe o erro real subjacente quando um arquivo zip não pode ser descompactado (por exemplo, quando o arquivo é lido do S3 e o read buffer recusa um seek). Antes, o erro real ficava oculto atrás da mensagem genérica
Couldn't unpack zip archive: Code = -100/Couldn't open zip archive. #105103 (Groene AI). - Corrige uma dica confusa “Maybe you meant X?” após uma reinicialização do servidor (ou
DETACH DATABASE/ATTACH DATABASE): remover uma tabela já removida podia sugerir, como alternativa, o nome que acabara de ser removido. #106238 (Groene AI). - Corrigido um erro lógico (
Logical error: 'removed', que abortava o servidor em compilações de debug) na fila em segundo plano de remoção de tabelas, acionado quando o mesmo UUID explícito é reutilizado em várias consultasCREATE OR REPLACE TABLE, o que enfileira mais de uma tabela removida com esse UUID. #107031 (Groene AI). - Corrigido um erro lógico
Inconsistent AST formattingque podia abortar o servidor em compilações de debug e com sanitizer quando uma lambda com alias era usada como operando de um operador de acesso (elemento de tupla.Nou elemento de array[]) em uma posição que não fosse a primeira em uma lista de expressões, por exemploSELECT 1, ((p0, p1) -> p0 AS a7).4[3] FROM t. #107092 (Groene AI). - Uma cluster table function (
urlCluster,fileCluster,s3Cluster, …) aninhada em outra consulta distribuída, comoclusterAllReplicas(..., urlCluster(...)), agora é rejeitada com um erroBAD_ARGUMENTSem vez de falhar com um erro lógico (Distributed task iterator is not initialized). #107107 (Groene AI). OPTIMIZE ... DRY RUNinterrompido por um timeout de consulta (max_execution_timecomtimeout_overflow_mode = 'break') agora retornaTIMEOUT_EXCEEDEDem vez de um erro lógico relacionado arows_sources(que abortava o servidor em compilações de debug/sanitizer). #107114 (Groene AI).- Deixa de registrar o erro benigno
Net Exception: Socket is not connecteddurante a finalização da sessão doZooKeeperno macOS.clickhouse keeper-clientnão imprime mais esse erro espúrio em stderr ao encerrar. #107438 (Groene AI). - Corrigido um overflow de inteiro com sinal quando uma view materializada atualizável tenta novamente uma atualização com falha com
refresh_retriesdefinido como um valor muito alto (próximo ao máximo deInt64). O overflow podia abortar o servidor em compilações com o sanitizer de comportamento indefinido. #108005 (Groene AI). - Corrige um
LOGICAL_ERROR(aborto do servidor em compilações de debug/sanitizer) quando umJOINusa o operador de comparação null-safe (<=>/IS NOT DISTINCT FROM) e uma das chaves é uma subconsulta escalar, por exemplo... JOIN t2 ON (SELECT x FROM t1) <=> t2.k, com o analyzer antigo (enable_analyzer = 0). Agora, essa consulta retorna um erroNOT_FOUND_COLUMN_IN_BLOCKnormal em vez de um erro lógico. #108123 (Groene AI). - Consultas de busca vetorial que selecionam a coluna
_distanceagora retornam um erro apropriado em vez de falharem com um erro lógico. #108423 (Robert Schulze). - Corrige um
std::future_error(The associated promise has been destructed prior to the associated state becoming ready) que podia ocorrer e abortar o servidor em compilações de debug e sanitizer quando falhava o agendamento da tarefa assíncrona final de conclusão do upload multipart para S3/Azure (por exemplo, em caso de esgotamento do pool de threads). Agora, o erro real de agendamento é reportado em seu lugar. #108730 (Groene AI). - Evita saída excessiva no log do servidor e uma mensagem de erro grande demais ao compilar uma expressão regular muito grande (por exemplo, um padrão
LIKEoumatchcom centenas de milhares de curingas); esses padrões agora falham com um erroCANNOT_COMPILE_REGEXPclaro. #108821 (Raúl Marín). - Corrige comportamento indefinido ao converter em string um packet type de protocolo fora do intervalo (por exemplo, nas mensagens de erro
Unexpected packet from server/Received ... packet) em uma conexão dessincronizada ou submetida a fuzzing. #108885 (Groene AI). - Corrige um erro interno confuso (
Method getResultType is not supported for TABLE query tree node) quando uma expressão de tabela era usada como argumento à esquerda do operadorIN; essas consultas agora produzem uma mensagem de erro clara. #109412 (Alexey Milovidov). - Corrige a leitura de uma tabela Iceberg com um arquivo de metadados cujo número da versão é composto apenas por dígitos, mas excede o intervalo de inteiro de 32 bits (por exemplo
v99999999999999999999.metadata.json). Antes, esse nome produzia umstd::out_of_rangeopaco (STD_EXCEPTION) em vez de um erroBAD_ARGUMENTSclaro. #109619 (Groene AI). - Corrige um possível
Logical error: 'ReadBuffer is canceled. Can't read from it.'quando um formato de entrada baseado em linhas (por exemploTSV/CSV) falhava ao analisar a entrada e a leitura subjacente já havia sido cancelada (por exemplo, um chunk HTTP malformado ou um corpo truncado). A geração dos diagnósticos detalhados de análise não lê mais a partir de um buffer cancelado. #109708 (Groene AI). - Expressões de filtro de ROW POLICY que usam
arrayJoin(ou seu aliasunnest) agora são rejeitadas com um erro claro; anteriormente, essas policies geravam um erro lógicocolumn->size() == num_rowsno momento da consulta. #109753 (Raúl Marín). #109973 (Raúl Marín). - Ler uma tabela Paimon cujo schema contém um tipo Nested sem suporte (por exemplo, um campo
ROW) agora reporta um erroBAD_ARGUMENTSclaro informando o tipo sem suporte, em vez de um simplesDB::Exception. (OK)com código de erro 0 e sem mensagem. #109762 (Groene AI). - Corrigido um
LOGICAL_ERROR(std::length_error) quando uma consulta com a configuração experimentalmake_distributed_plan = 1usava um valor muito alto paradistributed_plan_default_reader_bucket_countoudistributed_plan_default_shuffle_join_bucket_count. Esses valores agora são rejeitados comINVALID_SETTING_VALUE. #109770 (Groene AI). - Corrigido um
LOGICAL_ERROR(query tree node does not have valid source node) quando uma CTE recursiva resolvia um identificador de um escopo externo como coluna correlacionada (comallow_experimental_correlated_subqueries = 1). Essas consultas agora retornam um erroUNSUPPORTED_METHODclaro. #109863 (Groene AI). - Corrigido um overflow de inteiro com sinal quando
ORDER BY ... WITH FILLpula uma lacuna muito grande em uma colunaInt64/UInt64(por exemplo, um passo de 2 sobre uma lacuna próxima de 2^63). O overflow era um comportamento indefinido em builds com sanitizers e fazia wrap silenciosamente em builds de release. #109937 (Groene AI). - Corrigido um erro lógico
Bad cast from type DB::FunctionNode to DB::ConstantNode(aborto do servidor em builds de debug/sanitizer) ao executarSELECT ... ORDER BY ... WITH FILLem uma tabelaDistributedcomoptimize_const_name_sizebaixo. #109938 (Groene AI). - Corrigido um erro lógico
Invalid number of rows in Chunkquando um destinoINTERPOLATEé um alias de uma colunaWITH FILLcom o analyzer antigo (enable_analyzer = 0). Essas consultas agora são rejeitadas com um erroINVALID_WITH_FILL_EXPRESSIONclaro. #110103 (Groene AI). - Corrigido um erro lógico (aborto do servidor em builds de debug/sanitizer) quando as funções
indexHint/ignore/isZeroOrNullrecebem um argumento cujo tipo é resolvido comoNothing, por exemplo, em expressões comoindexHint(assumeNotNull(materialize(NULL))). #110192 (Groene AI). - Corrigido um erro lógico
Too large size (...) passed to allocatorque podia ocorrer quando um valor fora do intervalo era definido para uma configuração de tamanho de read buffer, comomax_read_buffer_sizeoumax_read_buffer_size_local_fs. Esses valores agora são limitados a 256 MiB pela verificação de sanidade das configurações e, adicionalmente, no ponto de consumo deINSERT ... FROM INFILE, que lê arquivos dentro doclickhouse-client, onde a verificação de sanidade não se aplica. #110207 (Alexey Milovidov). CHECK TABLEagora relata a corrupção real de uma projection part que falhou ao carregar seus metadados, em vez do erro enganosoColumns doesn't match ... Expected: 0 columns. #110262 (Raúl Marín).- Uma incompatibilidade de tipo ao ler um valor de uma source PostgreSQL (por exemplo, a table function
postgresqlou o table enginePostgreSQL) que não pode ser convertido para o tipo de coluna declarado (por exemplo, uma colunatextdeclarada comoInt32) agora é reportada como um erro de consulta apropriado; anteriormente, isso abortava o servidor em builds de debug e sanitizer. #110264 (Groene AI). - Suporte ao query profiler, aos profilers de memória e de trace e à simbolização de
system.trace_logno macOS. #109825 (Raúl Marín). - Atualiza o
chdigpara v26.7.1: stack traces comprimidos para compartilhamento, padrões de consulta, suporte a memória com arena separada, melhorias no Perfetto e correções de compatibilidade. #110938 (Azat Khuzhin). - Corrige a inferência incorreta de monotonicidade para
intDivem uma chave sem sinal dividida por uma constante com sinal, o que podia desativar a poda de índice da chave primária para predicadosIN/NOT INque cruzam o limite de sinal do tipo de resultado; compilações de depuração também encontravam umLOGICAL_ERRORInvalid binary search result in MergeTreeSetIndex. #107586 (Groene AI). - Adiciona a configuração
allow_lossy_numeric_supertype(desabilitada por padrão). Quando habilitada,if,multiIf,coalesce,ifNull,arrayemapcom argumentos numéricos que não têm um tipo comum sem perda (por exemplo,DecimaleFloat64, ouInt64eFloat64) passam a resultar emFloat64em vez deVariant, para que o resultado possa ser usado com funções de agregação comosum,avg,minemax. As mensagens de erro relevantes de funções de agregação agora mencionam a configuração pelo nome. Fecha #106707. #107236 (Groene AI). - Inicia o endpoint do Prometheus (para configurações somente de métricas) e a coleta assíncrona de métricas antes do carregamento das tabelas, para que as métricas fiquem visíveis durante a fase potencialmente longa de carregamento de metadados. #108402 (Christoph Wurm).
Correção de bug (comportamento incorreto perceptível ao usuário em uma versão estável oficial)
- Corrige falhas em
TRUNCATE TABLEeDROP PARTITIONem tabelas com muitos blocos de desduplicação, em que removê-los em uma única request do ZooKeeper podia exceder o limite padrão de 1 MB dejute.maxbuffer. #105991 (Clayton McClure). Isso só afeta você se usar o Apache ZooKeeper (não recomendado) em vez do ClickHouse Keeper. - Corrige o uso de nomes de coluna qualificados (
database.table.column) na cláusulaWHEREde mutações, comoDELETE FROMeALTER TABLE ... UPDATE/DELETE, em tabelas da famíliaMergeTree; antes, essas consultas falhavam com um erro de colunas ausentes. Fecha #71760. #109491 (Mikhail Artemenko). - Corrige o cache de resultado de consulta para consultas PromQL. O dialeto
promqlignorava a verificação de funções não determinísticas e podia retornar resultados desatualizados ancorados emnow(); a API HTTP do Prometheus (/api/v1/query,/api/v1/query_range) nem sequer armazenava entradas de cache. #110887 (Nikita Mikhaylov). - Corrige a falha na inicialização do servidor quando a variável de ambiente
TZestá vazia. Fecha #68920. #68921 (Ardenwick). - Corrige a falha na inicialização do servidor quando um database engine
Backupfaz referência a um backup que se tornou indisponível (por exemplo, quando seus arquivos foram excluídos ou o armazenamento subjacente está inacessível). O banco de dados agora é carregado sem tabelas, em vez de impedir a inicialização de todo o servidor. #83188 (Vitaly Orlov). - Ao usar inserts em segundo plano em tabelas com o engine
Distributed, os atrasos causados por erros repetidos no envio de dados para shards remotos agora diminuem quando os erros são resolvidos. Antes, o atraso só aumentava e nunca era redefinido. #87378 (Andrei Kochemirovskii). - Corrige
broken_data_filesemsystem.distribution_queuee a métricaBrokenDistributedFilesToInsert, que sempre reportavam0para arquivos corrompidos descobertos ao varrer a fila de async-insert deDistributedna inicialização. #92124 (KG.Xu). - Corrige a recuperação do logging após erro de disco cheio. Antes, quando o disco de log ficava cheio, o ClickHouse entrava em estado de falha e passava a enviar continuamente mensagens de erro para o syslog (potencialmente gravando mais de 100 GB/hora), sem nunca se recuperar, mesmo depois que espaço em disco fosse liberado. Agora, o sistema de logging se recupera automaticamente assim que há espaço em disco disponível, sem exigir reinicialização do servidor. #93127 (jaehanbyun).
- Encaminha credenciais estáticas do S3 para leituras de tabelas
DataLakeCatalogdo Unity quandovended_credentialsestá desabilitado, evitando falhas de acesso anônimo ao armazenamento de objetos. #96910 (kgeg401). - Corrige uma falha no código de parsing de esquema do table engine
DeltaLake. #97112 (Kseniia Sumarokova). - Corrige um problema de segurança em que um cliente TCP não autenticado podia sondar a existência de tabelas e o status da replicação pela porta interserver. #99854 (Shaohua Wang).
- Corrige um erro de sintaxe quando um alias vem após uma subconsulta em
DESCRIBE TABLE. Corrige #100031. #100205 (Yarik Briukhovetskyi). - Corrigida uma exceção em subconsultas correlacionadas quando colunas externas se tornam
Nullablecomgroup_by_use_nullseROLLUP/CUBE. #100365 (Alexey Milovidov). - Corrigido um encerramento abrupto do servidor (em builds com sanitizer) e perda silenciosa de dados durante a inicialização da tabela quando uma part
MergeTreetransacional revertida intersecta uma part confirmada. #100992 (Tuan Pham Anh). - Corrigido o
indexOfAssumeSorted, que retornava resultados incorretos para colunasArray(LowCardinality(String))em tabelasMergeTree. #101771 (Yash ). - Corrige a pruning incorreta da chave primária quando a chave de ordenação de uma tabela envolve uma coluna
DateemtoDateTime(por exemplo,ORDER BY toDateTime(date_column)) e uma consulta filtra a coluna original com uma comparação comoWHERE date_column >= '...'.toDateTime(Date)causa overflow para valoresDatefora do intervalo deDateTime(após2106-02-07), então a chave armazenada deixa de ser monotônica; o ClickHouse não usa mais a pruning da chave primária para essa combinação de chave/predicado, porque isso poderia descartar grânulos que contêm linhas correspondentes. Fecha #101744. #101814 (Nihal Z. Miaji). - Corrigidos
intDivOrNull,moduloOrNullepositiveModuloOrNull, que retornavam0em vez deNULL, eintDivOrNulleintDivOrZero, que geravam uma exceção em vez de retornarNULL/0, quando a divisão levava a uma exceção de ponto flutuante (divisão por zero ouINT_MIN / -1), inclusive para argumentos mistos signed/unsigned. #101976 (Yarik Briukhovetskyi). - Corrige exceções
LOGICAL_ERRORao ler tabelasIcebergouDeltaLakeem casos extremos, como atualizações simultâneas de metadados doIcebergou leituras pela função de tabelamergesobre tabelasDeltaLake. #102033 (Groene AI). - Corrige falhas em requisições HTTP de saída (por exemplo, a função
aiGenerate, a função de tabelaurl, S3) comNo route to hostem hosts que anunciam endereços IPv4 e IPv6 quando apenas uma das famílias de endereços é roteável. O pool de conexões HTTP agora passa a usar o próximo endereço resolvido quando o primeiro falha com um erro de rede, em vez de propagar o erro logo na primeira requisição. #103786 (Alexey Milovidov). - Corrige um encerramento abrupto do servidor durante
RESTOREde backups que contêm tabelas com dependências cíclicas. #103824 (Konstantin Bogdanov). - A inferência de esquema para colunas Arrow
time32/time64(por exemplo,SELECT * FROM file(..., 'Arrow')) agora infereTime64em vez deDateTime64; qualquer componente downstream que dependa do tipo inferido antigo passará a observar o novo tipo após uma atualização. Além disso, valoresTime/Time64agora podem ser exportados para Arrow com o tipo de tempo apropriado do Apache Arrow selecionado de acordo com a precisão. Corrige #104038. #104316 (/bin/cat). - Corrigida uma condição de corrida entre
ALTER TABLE ... RENAME COLUMNe umOPTIMIZE TABLE ... FINALconcorrente (ou qualquer merge em segundo plano) emMergeTree, que podia substituir silenciosamente os dados da coluna renomeada por valores padrão. #104822 (Groene AI). - Corrigido um erro lógico
Block structure mismatchdurante umINSERTconcorrente enquanto umALTER TABLE ... RENAME COLUMNestá em andamento, em um banco de dadosAtomiccomlazy_load_tables = 1, apósDETACH DATABASE/ATTACH DATABASE. #104852 (Groene AI). - Corrigido
groupConcatquando as formas paramétrica e de dois argumentos são misturadas, por exemplo,groupConcat(',', 2)(x, '/'): o parâmetro de limite de linhas era ignorado silenciosamente, então todas as linhas eram retornadas em vez da quantidade solicitada; o delimitador do segundo argumento agora substitui corretamente o parâmetro. #104882 (Yarik Briukhovetskyi). - Corrigido um
LOGICAL_ERROR(Expected one block from input stream) lançado porKILL QUERY/KILL MUTATION/KILL PART_MOVE_TO_SHARD/KILL TRANSACTIONquando a cláusulaWHEREcontém uma subconsulta por linha, ou quandomax_block_sizeé pequeno o bastante para que oSELECTinterno sobre a tabelasystem.*relevante emita mais de um bloco. #104927 (Groene AI). - Corrigido
CASTde unidades de interval menores para maiores que retornava resultados incorretos (por exemplo,CAST(toIntervalSecond(60) AS IntervalMinute)retornava0em vez de1). Fecha #104986. #105058 (Yarik Briukhovetskyi). - Corrigido um erro lógico (
Assertion 'row < chunk.getNumRows()' failed) em consultasLIMIT ... WITH TIESexecutadas com o pipeline de leitura em ordem (optimize_read_in_order = 1eread_in_order_use_virtual_row_per_block = 1). #105102 (Groene AI). - Corrigido um vazamento em views materializadas atualizáveis (
MATERIALIZED VIEW ... REFRESH ...): a tabela interna temporária que uma atualização removia por rotação viaEXCHANGE TABLESnão podia ser removida se fosse maior quemax_table_size_to_drop, então cada atualização subsequente criava outra tabela interna temporária, fazendo o diretório de dados da view crescer até esgotar o disco. O drop interno da tarefa de atualização agora ignoramax_table_size_to_dropemax_partition_size_to_drop; essas proteções continuam valendo paraDROP TABLEda própria view emitido pelo usuário. Fecha #104900. #105106 (Groene AI). - Corrigido um erro inesperado
DATA_TYPE_CANNOT_BE_USED_IN_KEYem consultasALTERque não alteram a chave de ordenação (alteração de settings, comments, codecs, adição de uma coluna que não faz parte da chave etc.) em tabelasMergeTreeque têm umaSimpleAggregateFunction(ou outro tipo permitido somente comallow_suspicious_primary_key = 1) na chave de ordenação. #105111 (Groene AI). - Corrigido um uso após liberação ao consultar colunas de estado de réplica de
system.clusters(comois_active,unsynced_after_recovery,recovery_time) enquanto um banco de dadosReplicatedestá sendo removido ou desanexado. Além disso, exceções benignas do Keeper suprimidas nesse caminho de código (o banco de dados afetado é tratado como temporariamente indisponível e ignorado) agora são registradas no nívelInformation, em vez deError, e por isso não chegam mais aos clientes com o padrãosend_logs_level = 'warning'. #105149 (Groene AI). - Corrigido um problema em que executar várias instruções em
clickhouse-local --ignore-errorfazia com que cada instrução subsequente fosse repetida na mensagem de erro para cada erro léxico ou de parênteses não correspondentes. #105480 (Groene AI). - Corrigida uma falha rara do servidor quando views materializadas atualizáveis são removidas ou substituídas concorrentemente com seu agendamento de atualização. #105588 (Groene AI).
- Rejeita
ALTER TABLE ... DELETEeALTER TABLE ... UPDATEem tabelasIcebergcujo formato de arquivo de dados não sejaParquet, com um erroNOT_IMPLEMENTEDclaro, em vez de derrubar o servidor ou corromper silenciosamente a tabela. #105893 (Groene AI). - Corrige resultados incorretos de uma view definida com
EXCEPTouINTERSECTcujo operando é uma cadeia deUNION, apósDETACH/ATTACHou a reinicialização do servidor. No formatter, faltavam parênteses ao redor de filhosUNIONdeINTERSECT/EXCEPT, então o SQL armazenado era analisado novamente com precedência invertida. #105935 (Groene AI). - Corrige dados
JSONdetectados incorretamente comoTSKVdurante a autodetecção de formato. Fecha #100797. #106009 (Pavel Kruglov). - Proíbe criar um índice de salto
minmaxdiretamente em colunasJSON— isso podia fazer com que inserções falhassem mais tarde com uma exceçãoNO_COMMON_TYPEquando arrays de tipos mistos eram inseridos. Em vez disso, crie o índice em subcolunas tipadas (por exemplo,INDEX idx json.field TYPE minmax). #106094 (linhaojie). - Corrigido um erro lógico (
Parsed partition value ... doesn't match partition value for an existing part with the same partition ID) gerado porOPTIMIZE TABLE ... PARTITION ...e outras consultas que resolvem um valor de partição, em tabelas com uma chave de partição do tipoTime. #106202 (Groene AI). - Corrige um data part marcado incorretamente como tendo uma projeção corrompida depois que uma exclusão leve não deixa nenhum projection part — seja quando a projeção é reconstruída com zero linhas de saída, seja quando é removida (
lightweight_mutation_projection_mode = 'rebuild'/'drop'). Esse estado corrompido antes desabilitava a otimização de projeção para consultas nesse part. #106273 (Shaohua Wang). - Corrigido
removeDirectoryem discosplainde armazenamento de objetos (comos3_plain), que removia todos os arquivos dentro de um diretório não vazio como se a remoção fosse recursiva; agora, remover um diretório não vazio falha comCANNOT_RMDIR, e a remoção recursiva lida explicitamente com o conteúdo. #106281 (RinChanNOW). - Corrigido um erro lógico (
Part ... doesn't exist) que podia abortar o servidor durante a recuperação de umINSERTcom quorum a partir de um erro de hardware do Keeper, quando o quorum era marcado concorrentemente como com falha. #106424 (Alexey Milovidov). - Corrige uma exceção
LOGICAL_ERRORsobre nomes de coluna duplicados ao aplicar políticas de linha. #106438 (János Benjamin Antal). - Corrige
CREATE OR REPLACE TABLEeREPLACE TABLE, que deixavam uma tabela_tmp_replace_*órfã no disco e substituíam a tabela original por uma vazia quando o destino existente excediamax_table_size_to_drop. A verificação de tamanho agora é executada antes da troca, para que a violação seja interrompida corretamente, com o nome da tabela visível ao usuário no erro. #106782 (Groene AI). - Corrige
JSON_QUERY/JSON_VALUE/JSON_EXISTSretornandoDynamicem vez deString/UInt8para argumentosDynamic. Fecha #106461. #106877 (Pavel Kruglov). - Corrige resultados incorretos ao consultar uma tabela
ReplacingMergeTreecomFINALe um filtro em um índice de texto enquantoquery_plan_optimize_lazy_finalestava habilitado. A otimizaçãoFINALlazy criava etapas de leitura que não reproduziam a leitura direta do índice de texto, fazendo com que o filtro descartasse todas as linhas correspondentes. #106894 (Jimmy Aguilar Mena). - Aplica
query_masking_rulesàs mensagens anexadas a exceções, para que credenciais codificadas em URL em sufixos(in file/uri ...)de erros das funções de tabelajdbc/odbcnão vazem quando regras de mascaramento estiverem configuradas. #106916 (Gaurav Dubey). - Corrige partes sendo marcadas como corrompidas e desanexadas em qualquer recarga de parte (reinicialização do servidor,
DETACH/ATTACH) para tabelas com uma colunaLowCardinality(Nullable(...))na chave de partição. Desde a 26.5, o arquivo de índice minmax por parte não era gravado quando o mínimo e o máximo dessa coluna eramNULL, enquanto a verificação de consistência da parte ainda exigia o arquivo. Partes gravadas por versões afetadas não têm o arquivo de índice minmax e ainda precisam ser reanexadas manualmente. Fecha #106837. #106945 (Pedro Ferreira). - Corrige um
LOGICAL_ERROR(Unexpected expression in JOIN ON section. Expected boolean (UInt8), got 'Nothing') quando um predicado não equi emJOIN ... ONfaz referência a uma coluna tipada comoNothing, como uma produzida porARRAY JOIN []. #106981 (Groene AI). - Corrige um raro
LOGICAL_ERROR(Attempt to release query context that does not exist) e o crash do servidor associado ao ler tabelasMergeTreepor meio de um disco de cache do sistema de arquivos criado comenable_filesystem_query_cache_limit = 1. #107028 (Groene AI). - Corrige um crash do servidor ao mover uma parte vazia para um disco
plain_rewritable(por exemplo, comALTER TABLE ... MOVE PARTITION ... TO DISKpara uma parte vazia mantida porremove_empty_parts = 0). #107040 (Groene AI). - Corrige a ordem incorreta das linhas em consultas
ORDER BYsobreUNION ALLcomoptimize_read_in_ordereread_in_order_use_virtual_rowhabilitados. Fecha #106879. #107053 (Vladimir Cherkasov). - Corrigido um
LOGICAL_ERROR(Unsupported argument types) na funçãogeohashesInBoxquando seus argumentos de coordenadas misturavam valores constantes e não constantes, ou quando uma coordenada eraBFloat16. ArgumentosFloat32mistos entre constantes e não constantes agora funcionam, e argumentosBFloat16são rejeitados com um erro claro. #107063 (Groene AI). - Corrigidos resultados incorretos (linhas duplicadas) para
SELECT DISTINCTsobre umGROUP BYcomWITH CUBE,WITH ROLLUPouGROUPING SETSnas mesmas chaves. A otimizaçãoquery_plan_remove_redundant_distinctnão remove mais oDISTINCTnesses casos, porque os modificadores de agrupamento emitem linhas extras com as colunas de chave preenchidas com o valor padrão, o que pode colidir com valores reais de grupos. #107072 (Groene AI). - Corrigido um resultado incorreto em um
OUTER JOINquando o filtroWHEREé uma conjunção que contém um termo constante (por exemplo,p AND 1, ouWHERE p QUALIFY NULL, quandoQUALIFY NULLé mesclado emWHERE). O termo constante podia ser empurrado para o lado não preservado do join e removido do filtro pós-join, fazendo com que o join produzisse linhas sem correspondência com as colunas desse lado preenchidas com o valor padrão, e essas linhas passassem incorretamente pelo filtro. #107084 (Groene AI). - Corrigidas Funções Definidas pelo Usuário
executable_poolconfiguradas com<lifetime>que não captavam alterações no script subjacente. Anteriormente, apenasSYSTEM RELOAD FUNCTIONSrelia um script editado; as recargas periódicas de<lifetime>continuavam executando a versão antiga. #107087 (Groene AI). - Corrigida uma exceção
LOGICAL_ERROR(Cannot find input column ... on its position in inputs of expression actions DAG) para uma subconsulta escalar correlacionada sobre uma origem que projetava o mesmo identificador de coluna duas vezes (por exemplo,SELECT number, *) quandocorrelated_subqueries_default_join_kind = 'left'. #107112 (Groene AI). - Corrigida uma condição de corrida no coletor global de traces do servidor entre uma worker thread iniciando seu profiler e o desligamento do servidor. #107307 (Groene AI).
- Backups incrementais não armazenam mais credenciais
S3no localizador<base_backup>do arquivo de metadados.backup. Backups criados comuse_same_s3_credentials_for_base_backup = 1, ou com credenciais explícitas do backup base correspondentes a este localizador de backup, armazenam um marcador sem segredo e são restaurados sem configurações extras no momento da restauração; para backups criados com credenciais explícitas diferentes para o backup base ou com argumentos extras de autenticação do backup base, passe-os paraRESTOREcom a configuraçãobase_backup. Backups criados por versões antigas com credenciais incorporadas continuam podendo ser restaurados. #107357 (Pablo Marcos). - Corrigido o
headerdeCSVWithNameseCSVWithNamesAndTypes, que tinha menos colunas do que os dados quandooutput_format_csv_serialize_tuple_into_separate_columnsestá habilitado (padrão). O cabeçalho (e a linha de tipos) agora expande colunasTupleem seus campos folha com nomes pontilhados (por exemplo,t.a,t.b), para que a contagem de colunas do cabeçalho corresponda aos dados. Uma nova configuração,output_format_csv_header_serialize_tuple_into_separate_columns(padrão1), controla isso e pode ser definida como0para restaurar o cabeçalho anterior com um único nome. #107371 (Groene AI). - Corrigida a leitura de tabelas
Icebergv3 cujos arquivos de dadosParquetcontêm colunas reservadas de linhagem de linha (como_row_id); o leitor nativo deParquetnão gera maisICEBERG_SPECIFICATION_VIOLATIONpara IDs de campo reservados que não fazem parte do esquema da tabela. #107377 (Greg Maher). - Corrigido um raro abortamento do servidor durante o desligamento (
std::future_error:The associated promise has been destructed prior to the associated state becoming ready), causado pela remoção de uma tarefa agendada da fila de um thread pool antes de sua execução. #107383 (Groene AI). - Corrigidos os engines de tabela e de banco de dados
MaterializedPostgreSQLpara permitir a replicação de uma única tabela ou banco de dados a partir de um schema não padrão do PostgreSQL (materialized_postgresql_schema), inclusive quando existem tabelas com o mesmo nome em vários schemas do mesmo banco de dados (antes, elas compartilhavam uma publication e um replication slot, causando interferência entre si). #107425 (Alexey Milovidov). - Corrigida a interrupção da replicação de um banco de dados inteiro pelo
MaterializedPostgreSQL(comLOGICAL_ERROR: Columns number mismatch) quando a structure de uma única tabela replicada era alterada enquanto o servidor estava fora do ar. Agora, apenas a tabela afetada é ignorada e pode ser recuperada comDETACH/ATTACH. #107427 (Alexey Milovidov). - O
BACKUPde um banco de dadosMaterializedPostgreSQLnão fica mais travado indefinidamente comTable ... were created or changed its definition during scanninge agora realmente faz backup dos dados da tabela (delegado aoReplacingMergeTreesubjacente), que pode ser restaurado como umReplacingMergeTreestandalone. #107433 (Alexey Milovidov). - Corrigida uma regressão em que a configuração
compatibility = '26.6'(que habilita implicitamente a partition strategyhive) aceitava silenciosamente{_partition_id}em caminhos de tabela S3/armazenamento de objetos, em vez de gerarBAD_ARGUMENTS. #107437 (Lefteris). - Corrigido um vazamento de memória no
mongo-c-driverincluído, que podia ocorrer ao ler do MongoDB (por exemplo, por meio de um Dicionário do MongoDB ou da table functionmongodb) se um erro de leitura retryable fosse seguido por uma falha na seleção do servidor para a nova tentativa. #107448 (Groene AI). - Corrigida uma exceção ao inserir em uma tabela
Icebergcujos metadados foram criados por um external engine e omitem os arrays opcionaissnapshots,metadata-logousnapshot-log. Essas inserções agora são concluídas com sucesso, em vez de falhar. #107473 (Shaohua Wang). - Corrigido o fato de
DELETE FROM(exclusão leve) exigir o privilegeALTER UPDATEalém deALTER DELETE. Um usuário com apenasALTER DELETEagora pode executarDELETE FROM, como documentado. #107491 (Shaohua Wang). - Corrigido
NOT_FOUND_COLUMN_IN_BLOCKao ler arquivos particionados por Hive comuse_hive_partitioning = 1e uma cláusulaWHERE/PREWHEREque filtra uma coluna real (não virtual), enquanto uma coluna de partição do Hive também é selecionada. #107505 (Groene AI). - Corrigido um
LOGICAL_ERROR(Different order of columns in UNION subquery) quando o analyzer antigo (enable_analyzer = 0) lê um subconjunto de colunas de uma subquery cujos filhos deUNIONsão set operationsINTERSECT/EXCEPT. #107511 (Groene AI). - Corrigida a conversão silenciosa de valores
NULLem strings vazias ao inserir dadosArrow/ORCem uma colunaLowCardinality(Nullable(...)). Essa regressão foi introduzida na versão 26.5. #107532 (Jimmy Aguilar Mena). - Corrige um erro lógico (
Stream ... variant_discr ... is not found) que podia ocorrer ao mesclar ou ler uma part deMergeTreeproduzida por uma mutation de uma tabela com uma colunaDynamic. #107562 (Alexey Milovidov). - Corrigido um erro lógico (
WhichDataType(const_type).isArray()) durante a análise da primary key quandopointInPolygoné chamado com um argumento de polígono constante de um tipo encapsulador, comoVariantouDynamic(por exemplo,pointInPolygon((x, y), if(c, [(0, 0), ...], NULL))). #107589 (Groene AI). - Corrigido um erro lógico (
Last stored last_written_position in meta file ... is bigger than current last_written_pos) no engineFileLogque podia ocorrer quando um arquivo monitorado era excluído e recriado reutilizando o mesmo inode. #107617 (Groene AI). - Corrige uma rara interrupção do servidor (
std::future_error:The associated promise has been destructed prior to the associated state becoming ready) durante o processamento de requests do cliente ZooKeeper, quando uma Keeper request assíncrona era descartada enquanto estava sendo enviada, por exemplo sob pressão de memória. #107647 (Groene AI). - Corrigido
RESTOREpara tabelasReplicatedMergeTree, para que parts com conteúdo duplicado de um backup sejam preservadas em vez de serem deduplicadas silenciosamente. #107652 (Pablo Marcos). - Corrige um filtro de join em tempo de execução que produzia resultados incorretos para colunas
JSON. Fecha #107646. #107663 (Pavel Kruglov). - Corrigidos resultados incorretos de consultas distribuídas que selecionavam colunas
ALIASque compartilhavam uma subexpressão comum: as colunas podiam ficar desalinhadas, e os valores eram retornados na coluna errada. #107675 (Vladimir Cherkasov). - Cotas indexadas por
normalized_query_hashagora contabilizam todos os recursos (read_rows,read_bytes,result_rows,result_bytes,execution_time,written_bytes,errors) por query pattern, como os counters de contagem de consultas, em vez de contabilizá-los em um único bucket compartilhado por usuário. #107681 (Alexey Milovidov). - Corrigido um erro lógico
Block structure mismatch in UnionStep stream(interrupção do servidor em builds de debug/sanitizer,Code: 49em builds de release) que ocorria quando branches irmãs de umUNION/INTERSECT/EXCEPTdiferiam apenas no predicadoWHEREe o predicado de uma das branches era constant-folded em uma colunaConst. #107719 (Groene AI). - Corrige erros lógicos (
Bad cast) causados pela remoção inconsistente deLowCardinalityaninhado dentro de colunasVarianteDynamic, por exemplo emconcat,formate na análise de primary key. Fecha #107598. #107773 (Pavel Kruglov). - Corrigida uma grave distorção na distribuição de trabalho com parallel replicas quando o cluster contém replicas inativas (por exemplo, entradas obsoletas deixadas após o autoscaling). Essas replicas não são mais contabilizadas pelo coordinator de leitura, de modo que o trabalho é balanceado entre as replicas online em vez de se concentrar em uma única. #107805 (Alexey Milovidov).
- Corrige a exceção
Not-ready Set is passed as the second argument, que podia ocorrer quando a construção de um conjunto de subconsultaINdurante a análise da chave primária falhava silenciosamente (por exemplo, por um timeout da subconsulta comoverflow_mode = 'break'), deixando o conjunto permanentemente sem ser construído no pipeline da consulta. #107924 (Alexey Milovidov). - Corrige uma falha do servidor no pushdown de predicado (
enable_optimize_predicate_expression, analyzer legado) quando uma subconsultaUNIONaparece dentro de uma condiçãoJOIN ... ON. #107930 (Groene AI). - Corrige erros espúrios de
CHECKSUM_DOESNT_MATCHe de leitura deParquet(e, para alguns formatos, resultados silenciosamente incorretos) quando um objeto do S3 ou compatível com S3 (por exemplo, GCS) é sobrescrito no mesmo local enquanto está sendo lido. Essas leituras agora falham com um erro claro, passível de nova tentativa, em vez de retornar dados costurados a partir de duas versões do objeto; isso é controlado pela nova configuraçãos3_validate_etag_on_read(ativada por padrão). #107934 (Shaohua Wang). - Corrige um
SELECTque falhava comNOT_FOUND_COLUMN_IN_BLOCKem uma tabela com índice de data-skippingsetquando uma política de linha a filtrava usando uma condição sempre verdadeira combinada com uma verificação em uma coluna não indexada. #107971 (Shaohua Wang). - Corrige o parsing dos parâmetros de comando de função definida pelo usuário executável para que placeholders com nomes vazios ou inválidos não sejam aceitos como parâmetros. #107983 (Goutam Adwant).
- Corrige uma regressão de desempenho em subcolunas de
MapcomPREWHERE. Fecha #107912. Causado por #99200. #107988 (Pavel Kruglov). - Corrige uma gravação fora dos limites ao ler uma coluna
Variantde um blocoNativemalformado cujos discriminadores fazem referência a um índice de variante que não existe. #107991 (uwezkhan). - Corrige resultados de consulta incorretos causados por poda incorreta da chave primária e da partição quando
toStartOfDay,toStartOfISOYear,toDaysSinceYearZero,toRelativeSecondNum,toRelativeMinuteNum,toRelativeHourNum,toRelativeWeekNum,toRelativeDayNum,toMonthNumSinceEpochoutoYearNumSinceEpoché aplicado a uma coluna-chaveDate32contendo datas fora do intervalo que a função consegue representar (em particular, datas anteriores a1970-01-01). Essas funções se declaram monotônicas para o índice primário, mas antes faziam wraparound para esses argumentos, de modo que o índice podia eliminar grânulos que na verdade continham linhas correspondentes; agora elas saturam nos limites do seu tipo de resultado e permanecem monotônicas em todo o intervalo deDate32. #108018 (Nihal Z. Miaji). - Corrige
accurateCastOrNullde umTuplecujo elemento éDynamic/Variant: umNULLde origem real era tratado como falha de conversão. Para um elemento de destinoNullable, umNULLde origem agora permanece como um elementoNULL(em linha com uma origem simplesTuple(Nullable(...))); para um elemento de destino nãoNullable, umNULLde origem agora tornaNULLa tupla inteira, em vez de produzir o valor padrão do elemento; falhas de parse/overflow ainda tornamNULLa tupla inteira. #108023 (Groene AI). Também corrige um erro lógico ao converter uma colunaDynamicouVariantaninhada dentro de umTuplepara um tipo de elemento nãoNullablecomaccurateCastOrNullouaccurateCastOrDefault. #108061 (Alexey Milovidov). - Corrigido
numericIndexedVectorPointwiseMultiply, que retornava um resultado vazio ao multiplicar por um vetor de uns com uma configuração de BSI (bit-sliced index) diferente. #108027 (Alexey Milovidov). - Corrigido
toTime64eCAST(... AS Time64), que não restringiam valores fora do intervalo ao intervalo deTime64nos modos de overflowsaturateeignore, o que podia produzir valores exibidos de forma idêntica, mas comparados como diferentes. #108028 (Alexey Milovidov). getClientHTTPHeaderagora é tratado corretamente como não determinístico, portanto seu resultado não é mais reutilizado incorretamente pelo cache de resultado da consulta. #108029 (Alexey Milovidov).clickhouse-client --port 9440volta a habilitar automaticamente uma conexão segura (TLS); isso havia sido quebrado por uma refatoração que deixou de passar a porta para a verificação de conexão segura. #108032 (Alexey Milovidov).- Um erro transitório durante a atualização de partes de dados de uma tabela read-only não interrompe mais permanentemente a tarefa de atualização em segundo plano. #108034 (Alexey Milovidov).
- Corrigido o atraso de um ciclo nos avisos de sobrecarga de memória/CPU/mutation em
system.warningsem relação ao ciclo de métricas assíncronas (além de sua ausência no primeiro ciclo). #108035 (Alexey Milovidov). - A table function
mongodbagora aceitaoid_columnspassado como argumento nomeado (por exemplo,oid_columns='_id'), em vez de rejeitá-lo comBAD_ARGUMENTS. #108039 (Alexey Milovidov). - Corrige uma exceção
Bad cast from type DB::ColumnNullable to DB::ColumnVector<...>(erro lógico) quando um asterisco qualificado (t.*) seleciona uma chaveJOIN USINGe esse join está aninhado sob um joinPASTE/CROSS/por vírgula ou um joinONexterno, comjoin_use_nulls = 0. #108043 (Groene AI). - Corrigido o tratamento incorreto de asserções de largura zero (
\b,^,$) nas funções regexp “match all”extractAll,extractAllGroupsVertical,extractAllGroupsHorizontal,countMatchesesplitByRegexp. Por exemplo,extractAll('new york is the greatest', '\b(\w)')agora retorna corretamente a primeira letra de cada palavra, em vez de todas as letras. #108047 (Alexey Milovidov). - Corrigido
CREATE TABLE ... AS SELECTem bancos de dadosAtomic, que deixava uma tabela vazia para trás quando a consulta falhava — por exemplo, quando o usuário não tem acesso a uma tabela referenciada em uma subconsulta. Anteriormente, uma nova tentativa informava que a tabela já existe em vez de retornar o erro original. A tabela agora é criada por meio de uma tabela temporária e se torna visível somente depois de ser totalmente populada. #108048 (Alexey Milovidov). - Permite consultar um Dicionário
range_hashedoucomplex_key_range_hashedque usa um intervaloDateTime64,Decimalou de ponto flutuante com um argumento correspondente paradictGet/dictHas. Anteriormente, essas consultas falhavam commust be convertible to Int64, e intervalos abertos de faixasDecimal/DateTime64retornavam incorretamente o valor padrão. #108052 (Alexey Milovidov). - Corrigida uma exceção (
CANNOT_PARSE_TEXT) ao carregar um Dicionário com uma chave composta cujas colunas-chave não são as primeiras colunas na definição do dicionário, com uma source localClickHouseusando uma consulta explícita. As colunas de origem agora são associadas à estrutura do dicionário pelo nome em vez da posição. #108053 (Alexey Milovidov). - Corrigida a falha da table function
valuescomARGUMENT_OUT_OF_BOUNDquando é usado um literal decimal que não pode ser representado exatamente em uma coluna de ponto flutuante estreita (como0.1para uma colunaFloat32), por exemplo,SELECT * FROM values('x Float32', 0.1). Esses valores agora são aceitos e convertidos para o valor representável mais próximo, de forma consistente comCASTeINSERT ... VALUES. #108055 (Alexey Milovidov). - Corrigido um
LOGICAL_ERROR(No available columns) ao executarSELECT count()(ou outras consultas triviais) em uma tabela na qual o usuário recebeu acessoSELECTapenas a uma colunaALIAS. #108056 (Alexey Milovidov). - Corrigido
mapFilter,mapSort(e suas variantes) emapConcat, que removiamLowCardinalitydos tipos de chave e valor de umMap. Anteriormente,mapFiltersobre uma colunaMap(LowCardinality(String), String)retornavaMap(String, String), o que podia corromper os metadados de uma tabela criada porCREATE TABLE ... AS SELECTe fazerCHECK TABLEfalhar. #108057 (Alexey Milovidov). - Corrige resultados incorretos ao usar
hasTokenem text indexes com um tokenizer diferente desplitByNonAlpha. #108066 (Robert Schulze). - Corrigido um travamento de
SYSTEM RELOAD DICTIONARIES(eRELOAD DICTIONARY) quando muitos dicionários MySQL definidos em XML compartilhavam um único pool de conexões por meio deshare_connection. Esses pools agora respeitamconnection_pool_sizeeconnection_wait_timeout(padrão de 5 segundos) da configuração, em conformidade com dicionários definidos por named collections. #108083 (Alexey Milovidov). - Permite
EXISTS <dictionary>para um usuário que tem apenas o privilégioSHOW DICTIONARIESno dicionário (anteriormente exigiaSHOW TABLES). #108084 (Alexey Milovidov). - Corrigido o caso em que
CREATE TABLE dst AS src SETTINGS ...(e variantes semelhantes comORDER BY/PARTITION BY, mas sem umENGINEexplícito) descartava silenciosamente o engine, as cláusulas de armazenamento (comoTTLda tabela e chaves) e as configurações da tabela de origem. O engine e as cláusulas de armazenamento não sobrescritas agora são herdados da tabela de origem, e as configurações especificadas são mescladas às configurações da tabela de origem. #108085 (Alexey Milovidov). - Corrigida a falha de
INSERTem tabelasMergeTreecomfilesystem error: in rename: Permission deniedem sistemas de arquivos baseados em Windows (WSL, CIFS/SMB, montagens bind do Docker Desktop), causada pelo gravador de partes deixar descritores de arquivo abertos durante a renomeação do diretório da partição. #108089 (Alexey Milovidov). - Corrigido um crash (desreferência de ponteiro nulo) ao executar uma consulta em uma tabela
Hivesem cláusulaWHERE, por exemploSELECT * FROM hive_table. #108094 (Alexey Milovidov). - Corrigido um
LOGICAL_ERROR(“Unexpected return type from if”) ao ler uma coluna comapply_mutations_on_fly = 1após umALTER UPDATE col = ... WHERE <cond>com uma condição não constante ou falsa, seguido deALTER MODIFY COLUMN col <new type>. #108128 (Groene AI). - Corrigidos
toStartOfIntervaledateTrunc, que retornavam um valor arredondado em vez do início do intervalo correspondente quando a entrada tinha precisão mais fina do que a unidade do intervalo; por exemplo,toStartOfInterval(toDateTime64('2023-10-09 10:11:12.000999', 6), INTERVAL 1 millisecond)retornava10:11:12.001em vez de10:11:12.000. A sobrecarga com uma origem explícita também era afetada. Fecha #103535. #108186 (Yarik Briukhovetskyi). - Oculta informações sensíveis na coluna
view_querydesystem.query_views_log. #108214 (Valerii Mordovskii). - Corrigido um travamento em uma tabela
MergeTreeanexada com um skip indexhypothesislegado (um tipo de índice removido mantido apenas para compatibilidade comATTACH). Antes, umDELETElightweight,OPTIMIZE, umINSERTsimples ou umSELECTcom filtro nessa tabela falhava comILLEGAL_INDEX(“Index of type ‘hypothesis’ is no longer supported”), e a mutaçãoDELETEera repetida indefinidamente. O índice obsoleto agora é tratado como inerte: é mantido intacto durante merge/mutation, ignorado no insert e no planejamento da consulta, e ainda pode ser removido comALTER TABLE ... DROP INDEX. #108217 (Groene AI). - Corrigida a configuração
type_json_allow_duplicated_key_with_literal_and_nested_object, que não funcionava com caminhos tipados emJSON. #108218 (Pavel Kruglov). - Corrigido um
LOGICAL_ERROR(Different list of shards in child plans) ao executar uma consulta commake_distributed_plan = 1em uma tabelaMergeTreeque tem uma projeção normal/agregada. #108256 (Groene AI). - Corrigidos
replaceRegexpOneereplaceRegexpAllpara que.corresponda a caracteres de nova linha por padrão, de forma consistente com outras funções de expressão regular. #108265 (linjiayu1025-collab). - Corrige um erro lógico ao converter um
Array(Dynamic)ouArray(Variant)paraQBitcomaccurateCastOrNull, por exemploaccurateCastOrNull(CAST(range(114), 'Array(Dynamic)'), 'QBit(Float32, 114)'). #108288 (Groene AI). index_granularity_bytesagora é respeitado para colunas de estadoAggregateFunction. Antes, o limite de bytes do grânulo era ignorado para essas colunas (por exemplo, estadosuniqExactem tabelasAggregatingMergeTreee projeções de agregação), produzindo grânulos muito maiores que o limite configurado e aumentando a amplificação de leitura e o uso de memória no momento da consulta. #108297 (Groene AI).- Corrige a avaliação duplicada de condições de
UPDATE/DELETElightweight, o que poderia causar comportamento incorreto para condições não determinísticas e trabalho extra para as determinísticas. Fecha #86032. #108323 (ofeliacode). - Corrige uma exceção em um manipulador HTTP predefinido quando um cabeçalho cuja expressão regular
headers_regexppermite um valor vazio está ausente da requisição. #108324 (Vitaly Baranov). - Corrige
arrayPartialSortcom um argumentolimitnão constante. #108327 (Vitaly Baranov). - Corrige um
INSERTcancelado ou encerrado comKILLque continuava em execução por muito tempo ao construir um skip index (por exemplo, um índiceset(0)sem limite em uma coluna de alta cardinalidade). A construção do índice agora é interrompida prontamente quando a consulta é cancelada. #108351 (Shaohua Wang). - Corrige um
SELECTda função de tabelaprimesque não respondia ao cancelamento: com umstepgrande (oulimit), a consulta podia continuar em execução por muito tempo apósKILL QUERYou um timeout. Agora ela para prontamente. #108353 (Shaohua Wang). - Corrige a análise de nomes de tipos de dados que contêm a substring
INT(por exemplo, um nome no estilo de função, comoquantileInterpolatedWeighted, usado em uma posição de tipo de dado). Esses nomes eram confundidos com tipos inteiros do MySQL e tinham seu primeiro grupo de argumentos(...)silenciosamente consumido como modificador de largura de exibição, o que podia quebrar a ida e volta da formatação da consulta. #108354 (Groene AI). - Corrige uma inconsistência em que um
ARRAY JOINmalformado, seguido por uma vírgula e uma lista de tabelas entre parênteses, era interpretado incorretamente como um cross join, em vez de ser rejeitado. #108365 (Raúl Marín). - Oculta argumentos secretos de funções como
encrypt,decrypteHMACna saída deEXPLAIN actions,EXPLAIN headereEXPLAIN PIPELINEquandoformat_display_secrets_in_show_and_selectestá desabilitado (o padrão). #108386 (Raúl Marín). - Corrige
CREATE OR REPLACEde uma view materializada atualizável com um destinoTO: ele era rejeitado incorretamente porque a tabela de destino já pertence à view que está sendo substituída. #108392 (Nikolay Degterinsky). - Corrigido um crash do servidor (
Received signal 4, instrução ilegal) que podia ser provocado por um fluxo malformado ou dessincronizado do protocolo TCP nativo. O endereço inicial fornecido pelo cliente agora é validado para garantir que seja umhost:portnumérico antes de ser analisado, em vez de permitir que uma porta não numérica chegue à função libcgetservbyname, que gerava o trap. #108410 (Groene AI). - Corrigido um crash do servidor durante o desligamento quando o desligamento de um banco de dados lança uma exceção (por exemplo, quando o flush de uma tabela atinge um timeout do ZooKeeper). O restante da sequência de desligamento não é mais ignorado, de modo que os logs do sistema são descarregados e suas threads são finalizadas antes de o servidor encerrar. #108417 (Groene AI).
- Corrigidas funções de expressão regular (
match,extract,extractAll,replaceRegexpOne,replaceRegexpAll, etc.) que retornavam resultados incorretos silenciosamente quando o padrão continha um byte NUL (\0). O NUL agora é tratado como um byte literal comum, em conformidade com o RE2. #108427 (Alexey Milovidov). - Corrigido o
clickhouse-local, que retornava uma resposta vazia a requisições HTTPOPTIONSquando nenhumhttp_options_responseestava configurado, o que fazia a UI web (/play) mostrar a conexão como quebrada, embora as consultas funcionassem. #108428 (Alexey Milovidov). - Corrigida uma exceção
LOGICAL_ERROR(“Invalid action query tree node …”) quando uma consulta distribuída tanto removia duplicatas de colunasALIASestruturalmente idênticas quanto referenciava uma função de tabela com um argumento de coleção nomeadakey = value(por exemplo,oss(s3_conn, filename = '...')). #108435 (Groene AI). - Corrigido um crash do servidor (
LOGICAL_ERROR: 'Unexpected exception in refresh scheduling') que podia acontecer na inicialização quando uma view materializada atualizável coordenada em um banco de dadosReplicatedera anexada a um Keeper que não oferece suporte à flag de recursoMULTI_READ(por exemplo, após um downgrade do Keeper). A view agora é interrompida de forma controlada em vez de abortar o servidor. #108441 (Groene AI). - Corrigido o erro
NOT_FOUND_COLUMN_IN_BLOCK(por exemplo,Column _part not found) ao selecionar colunas virtuais de uma tabelaMergeTreecom réplicas paralelas, incluindo viaSELECT *comasterisk_include_virtual_columns = 1. #108451 (Groene AI). SYSTEM RESET DDL WORKERagora requer o novo privilégioSYSTEM RESET DDL WORKER. Antes, qualquer usuário autenticado (incluindo osreadonly) podia executá-lo e redefinir repetidamente o estado do worker de DDL, bloqueando DDLON CLUSTER. #108460 (Groene AI).- Restrito o caminho do modelo de
catboostEvaluateao diretóriouser_files, assim como na função de tabelafilee nas fontes de dicionário. Antes, a função aceitava um caminho arbitrário do sistema de arquivos sem verificação de contenção, o que permitia sondar a existência de arquivos fora deuser_filese acionar leituras desses arquivos. Agora, os modelos devem estar localizados dentro deuser_files. #108463 (Groene AI). - A função
hasColumnInTableagora requer o privilégioSHOW COLUMNSna tabela de destino, a mesma permissão exigida porDESCRIBEeSHOW CREATE TABLE. Antes, qualquer usuário podia chamarhasColumnInTablepara sondar nomes de colunas e testar a existência de tabela e banco de dados sem qualquer verificação de acesso. #108464 (Groene AI). - Corrigida a alocação excessiva de memória ao desserializar estados de funções de agregação especialmente construídos para
mannWhitneyUTest,rankCorr,largestTriangleThreeBuckets,quantileGK,sequenceMatch/sequenceCountegroupArrayIntersect. Um estado malformado podia declarar uma quantidade enorme de elementos e fazer o servidor tentar alocar dezenas de gigabytes a partir de poucos bytes de entrada; esses estados agora são rejeitados comTOO_LARGE_ARRAY_SIZE. #108465 (Groene AI). - Validado o destino do redirecionamento de uma resposta S3
301 Moved Permanentlycom base emremote_url_allow_hosts(RemoteHostFilter). Antes, o tratamento de 301 do AWS SDK seguia o endpoint fornecido pelo atacante na resposta (cabeçalhoLocationou elemento<Endpoint>) sem verificar o host, de modo que um servidor compatível com S3 malicioso ou comprometido podia redirecionar o ClickHouse para um host arbitrário (SSRF). O caminho de redirecionamento 307 já fazia essa verificação; agora ambos os caminhos estão consistentes. #108466 (Groene AI). - Corrigido um vazamento de credenciais em que as configurações legadas
storage_aws_access_key_id,storage_aws_secret_access_key,storage_catalog_credentialestorage_auth_headerdo mecanismo de banco de dadosDataLakeCatalogeram exibidas em texto puro emsystem.databases.engine_fulleSHOW CREATE DATABASE. Agora elas são ocultadas como[HIDDEN]. #108470 (Groene AI). - Corrigida a identificação de usuário por
ssl_certificatepara que um único curinga*corresponda exatamente a um componente de nome (RFC 6125 6.4.3). Antes, um curinga em um sujeito SANCNouDNS:(por exemplo,*.corp.example.com) também correspondia a nomes com múltiplos rótulos, comoevil.deep.corp.example.com, permitindo que o portador de um certificado para um subdomínio mais profundo se autenticassse como o usuário curinga. A correspondência de SANURI:permanece inalterada. #108472 (Groene AI). - Corrigida uma injeção de SQL no MySQL wire protocol: o argumento de
SHOW TABLE STATUS LIKEe o valor deSET <mysql_setting>enviados pela MySQL interface (porta 9004) agora são analisados e colocados novamente entre aspas, em vez de serem concatenados literalmente na consulta reescrita. Também foi corrigido o fato deKILL QUERY <id>pela MySQL interface ignorar silenciosamente IDs de conexão com múltiplos dígitos. #108474 (Groene AI). - Valores sensíveis passados como parâmetros da query string HTTP (por exemplo, o binding de parâmetro de consulta
param_*, comoparam_secret_key/param_aws_secret_access_key, o parâmetropasswordou parâmetrossignatureno estilo S3) não são mais gravados literalmente emsystem.text_logou em spans do OpenTelemetry. A linha de logRequest URIagora oculta os valores de parâmetros cujos nomes parecem sensíveis, substituindo-os por[HIDDEN]. #108475 (Groene AI). - Passou a ser aplicada a configuração
http_forbid_headersdurante a inferência de esquema para a table functionurle o motor de armazenamentoURL. Antes, um header proibido ainda era enviado pela rede durante a inferência de esquema (por exemplo, com o formatoRegexpouDESCRIBE), e seu corpo da resposta podia ser refletido de volta em um erro de análise, vazando segredos. O filtro de header agora é verificado antes de qualquer acesso à rede no caminho de inferência, em conformidade com o comportamento já existente deurlCluster. #108476 (Groene AI). - Corrigidos resultados incorretos ao usar
SELECT ... SAMPLE ...junto com o cache de condições de consulta (configuraçãouse_query_condition_cache, habilitada por padrão). #108488 (Groene AI). - Corrigida uma falha do servidor (stack overflow) causada por expressões profundamente aninhadas, como
[[[ ... ]]]ouarray(array( ... )), quandomax_parser_depthé definido com um valor alto. #108493 (Raúl Marín). - Corrigido um problema em que o mecanismo de tabela
RabbitMQpodia ficar bloqueado indefinidamente emDROP TABLEou durante o desligamento do servidor quando o broker fechava a conexão AMQP devido à perda de heartbeats sem enviar um TCP RST. Agora, todas as chamadas bloqueantes do loop de eventos têm timeout de 30 segundos, para que o desligamento sempre seja concluído. #108497 (Aly Ayman). - Consultas secundárias executadas como parte de consultas internas agora serão registradas como consultas internas. #108506 (Miсhael Stetsyuk).
- O mecanismo de tabela
ArrowFlighte a função de tabelaarrowFlightagora respeitam a lista de permissões<remote_url_allow_hosts>. Antes, o host e a porta da conexão não eram validados, então uma consulta podia alcançar hosts que não estavam na lista de permissões. #108507 (Groene AI). - Os comandos do MySQL wire protocol
COM_FIELD_LIST(mysql_list_fields) eCOM_INIT_DB(USE database) agora aplicam o mesmo controle de acesso que seus equivalentes em SQL (SHOW COLUMNS/DESCRIBEeUSE). Antes, eles podiam expor nomes de colunas de tabelas nas quais o usuário tinha apenas permissões parciais em colunas e trocar o banco de dados atual sem o privilégioSHOW DATABASES. #108508 (Groene AI). - A correspondência de
http_forbid_headersagora não diferencia maiúsculas de minúsculas. Nomes de HTTP header não diferenciam maiúsculas de minúsculas, então proibirAuthorizationagora também bloqueiaauthorization,AUTHORIZATIONe outras variações de capitalização. Os padrões configurados deheader_regexpagora são correspondidos sem diferenciar maiúsculas de minúsculas, sem necessidade de uma flag(?i)explícita. #108509 (Groene AI). - Corrigida uma falha do servidor (falha de segmentação) que podia ocorrer quando uma consulta distribuída referenciava um CTE
MATERIALIZEDainda não materializado como tabela externa e a origem remota era criada sob demanda. #108547 (Groene AI). - Corrigidos resultados incorretos quando o cache de condições de consulta (
use_query_condition_cache = 1) reutilizava uma exclusão de marcas derivada de skip index para uma consulta que executava um conjunto diferente de skip indexes, por exemplo comuse_skip_indexes = 0,ignore_data_skipping_indicesou um modo diferente deuse_skip_indexes_for_disjunctions. As entradas de cache derivadas de skip index agora são indexadas pelo conjunto efetivo de skip indexes executado. #108548 (Groene AI). - Corrigidos vários bugs em
changeYear,changeMonth,changeDay,changeHour,changeMinuteechangeSecondcom argumentosDateTime64: a coluna de resultado era criada com a escala padrão 3 codificada em vez da escala do argumento, o que levava a umLOGICAL_ERROR(writeSlice expects same column types) quando o resultado era passado paraarrayPushBack/arrayPushFront/arrayConcat; entradas com precisão de nanossegundos (escala 9) geravamDECIMAL_OVERFLOW; e entradas subsegundo anteriores à epoch retornavam o segundo de calendário incorreto. Também foi corrigido otimeSlotssobreDateTime64, que ignorava a escala do argumento opcionalSizeem seu tipo de retorno declarado e retornava timestamps incorretos para a maior escala emSize. #108551 (Groene AI). #108681 (Takumi Hara). #108994 (Groene AI). - Corrige o erro
NOT_FOUND_COLUMN_IN_BLOCKquando um predicado composto recebe um alias emGROUP BYe é referenciado novamente, comenable_identifier_resolve_cachehabilitado (padrão). #108553 (Groene AI). - Corrige um erro lógico (
Equal values are not contiguous within the range assumed to be sorted) ao executarDISTINCTem uma leituraSTREAM(SELECT DISTINCT ... FROM table STREAM). As otimizações de leitura em ordem não são mais aplicadas a leiturasSTREAM, que produzem linhas na ordem de commit, e não na ordem da chave de ordenação. #108568 (Groene AI). - Corrige projeções que retornavam o valor padrão do tipo de uma coluna (por exemplo,
0) em vez do valorDEFAULTdeclarado (por exemplo,-1) em dois casos: ao ler uma coluna adicionada comALTER TABLE ... ADD COLUMN ... DEFAULTapós a criação da projeção (as leituras da tabela base já estavam corretas) e após oTTLda coluna expirar em uma Wide part. #108569 (Shaohua Wang). #109013 (Shaohua Wang). - Corrige um erro
ReadBuffer is canceled. Can't read from it.que podia ocorrer quando um upload para o S3 (por exemplo, de um backup) era repetido após um erro transitório de leitura. #108573 (Groene AI). - Corrige
ATTACH PARTITION ... FROMrejeitando tabelas cujas chaves primárias são equivalentes, mas declaradas de forma diferente (uma comPRIMARY KEYexplícita, a outra implícita a partir deORDER BY). #108590 (Jordi Orihuela). - Corrige falha na leitura direta do índice de texto quando vários índices de texto estão parcialmente materializados. Corrige #108530. #108607 (Anton Popov).
- Corrige uma exposição de metadados em que
DESCRIBE loop('db', 'table')eDESCRIBE loop(<inner table function>)contornavam a verificação de acesso à origem /SHOW COLUMNS, permitindo que um usuário sem privilégios lesse o esquema de colunas de uma tabela. #108624 (Groene AI). - Corrige a coluna virtual
_etagdos motores de tabelaS3QueueeAzureQueue: ela era declarada, mas nunca preenchida, entãoSELECT _etagsempre retornava uma string vazia. Agora, ela retorna o ETag do objeto, assim como o motorS3e a table functions3. #108625 (Groene AI). - Corrige a leitura de arquivos
Arrow,ArrowStreameORCbaseados em Arrow cuja coluna de timestamp usa um deslocamento UTC numérico fixo (por exemplo,+05:30,-08:00,00:00) ou o marcador não IANAfixedcomo timezone, o que antes falhava comCannot load time zone ...(BAD_ARGUMENTS). #108633 (Groene AI). - Corrige uma exceção (
LOGICAL_ERROR: Join is supported only for pipelines with one output portouNOT_IMPLEMENTED: MergeJoinAlgorithm is not implemented for strictness Semi) quandojoin_algorithm = 'full_sorting_merge'era usado para um joinSEMI/ANTI, incluindo joins produzidos pela decorrelação de uma subconsulta correlacionadaEXISTS.full_sorting_mergeagora rejeita combinações de strictness/tipo que não consegue executar, para que o planejador recorra a outro algoritmo habilitado ou informe que o join não pode ser executado. #108658 (Groene AI). - Corrigido um heap buffer overflow ao construir um índice de texto com
positions = 1sobre muitos tokens curtos distintos. #108659 (Groene AI). - Uma consulta que lê de ou grava em S3 e é cancelada (por exemplo, por
KILL QUERY) enquanto uma solicitação ao S3 está em andamento agora é reportada como cancelada, em vez de retornar um erro de rede/S3 enganoso. Em particular, um backup ou restore para S3 cancelado agora reportaBACKUP_CANCELLED/RESTORE_CANCELLEDemsystem.backups. #108673 (Julia Kartseva). - Corrigida uma falha de inicialização em que um database
DataLakeCatalogcriado por uma versão mais antiga (25.12 ou anterior) com umauth_headermalformado não podia ser anexado após a atualização para 26.2 ou posterior, impedindo o servidor de iniciar. Oauth_headeragora é validado apenas emCREATE, e emATTACHo catálogo passa a ser construído de forma lazy no primeiro uso, em vez de durante a inicialização, de modo que um único database de catálogo mal configurado ou inacessível não bloqueie mais a inicialização do servidor. #108674 (Groene AI). - Corrigido um erro lógico (
Sort order of blocks violated) durante uma mesclagem, além de leituras incorretas, quando um elementoLowCardinalitynão anulável de uma colunaNullable(Tuple(...))é usado como subcoluna (por exemplo, como chave de ordenação). #108679 (Groene AI). - Corrigida uma possível falha (use-after-free) quando
SYSTEM FLUSH DISTRIBUTEDé executado concorrentemente comDROP TABLEda mesma tabelaDistributed. #108684 (Groene AI). - Corrigida uma falha na decodificação em Base64 da chave da conta do Azure, acessível via
azureBlobStorage(e funções de tabela e storages relacionadas do Azure) quando a chave não é um Base64 válido: um byte>= 0x80causava uma leitura fora dos limites, e qualquer byte inválido causava comportamento indefinido. Chaves inválidas agora são rejeitadas corretamente. #108716 (Groene AI). - Corrigido o erro
NUMBER_OF_COLUMNS_DOESNT_MATCHquando uma subconsulta sobre uma tabelaDistributedlê duas ou mais colunasALIASque se expandem para a mesma expressão (por exemplo,a1 String ALIAS toString(x), a2 String ALIAS toString(x)) e a subconsulta alimenta uma consulta externa, por exemploSELECT count() FROM (SELECT a1, a2 FROM dist GROUP BY a1, a2). #108725 (Groene AI). - Corrigido
CREATE OR REPLACE MATERIALIZED VIEW ... POPULATE, que fazia com que a nova visão materializada ficasse sem se inscrever na tabela de origem, descartando silenciosamente todas as linhas inseridas após a substituição. #108728 (Alexey Milovidov). - Corrigida uma exceção (
Cannot find sharding key column, e em compilações de debug e com sanitizer um abort do servidor) quando a chave de sharding de uma tabelaDistributedé uma expressão que o analyzer reduz a uma constante, por exemploif(1, toInt32(id), toInt32(id) + 1), comoptimize_skip_unused_shards = 1. #108737 (Groene AI). - Corrigido um erro lógico (
Bad cast from type DB::ColumnNullable to DB::ColumnString) e possíveis resultados incorretos ao usargroup_by_use_nullscom uma chave de agrupamento constanteLowCardinalityemGROUPING SETS/ROLLUP/CUBE. #108771 (Alexey Milovidov). - Corrigida a desativação silenciosa da poda de partição e de chave primária quando uma coluna-chave
LowCardinality(FixedString)(ouLowCardinality(Nullable(FixedString))) é encapsulada em uma função na chave, por exemploPARTITION BY sipHash64(k) % NcomWHERE k = 'literal'. Essas consultas examinavam todas as partições em vez de podá-las. #108777 (Groene AI). - Corrigido um logical error (aborto do servidor em compilações de debug e sanitizer) quando um
INSERT ... SELECTpor meio de uma tabelaAlias, ou em uma tabelaTimeSeries, é cancelado sem exceção, por exemplo comtimeout_overflow_mode = 'break'. #108783 (Groene AI). #108796 (Shaohua Wang). - Corrige um logical error
Bad cast from type DB::ColumnSparse to DB::ColumnString(aborto do servidor em compilações de debug e sanitizer) quandogroupConcaté aplicado a umaTuplecujo elementoStringé armazenado de forma esparsa. #108790 (Groene AI). - Corrige
TYPE_MISMATCHemmapFilter,mapSort,mapReverseSort,mapPartialSortemapConcatquando um valorMapcontém umMapaninhado comLowCardinality, por exemplomapFilter((k, v) -> 1, map('a'::LowCardinality(String), map('x'::LowCardinality(String), 'y'))). #108798 (Groene AI). - Corrigido o fato de
insert_quorum = 'auto'não rejeitar inserts de imediato quando menos da maioria das réplicas estava ativa. Esses inserts agora falham imediatamente comTOO_FEW_LIVE_REPLICASem vez de gravar uma partição local e depois expirar comUNKNOWN_STATUS_OF_INSERT. #108800 (Gagan Dhakrey). - Corrigido um bug em que a linha
WITH TOTALSde umJOINpodia conter valores padrão (como0) em vez dos valores constantes vindos de uma subconsulta constante em um dos lados do join. O resultado incorreto aparecia apenas em algumas ordenações de join ou com a configuraçãoquery_plan_join_swap_table. #108807 (Vladimir Cherkasov). - Corrigida uma falha de segmentação (desreferenciamento de ponteiro nulo) que podia ocorrer quando o desligamento do servidor acontecia concorrentemente com o desligamento de uma tabela
S3Queue/AzureQueue. #108810 (Miсhael Stetsyuk). - Corrigido um aborto na inicialização (
Cannot allocate ThreadStack,EINVAL) em compilações com glibc executadas em CPUs com pilha de sinal muito grande (por exemplo, Intel Sapphire Rapids / Granite Rapids com um kernel compatível com AMX), em que o tamanho da pilha alternativa de sinal não era arredondado para um múltiplo do tamanho da página. #108813 (Groene AI). - Corrige consultas distribuídas que ocasionalmente falhavam com
UNEXPECTED_PACKET_FROM_SERVER(expected TablesStatusResponse, got ProfileInfo) quando uma conexão deixada fora de sincronia por uma consulta cancelada anteriormente era reutilizada do pool. #108854 (Alexey Milovidov). - Corrigido um erro lógico (uma exceção em compilações de release e um abortamento do servidor em compilações de debug e com sanitizer) que podia ocorrer em uma chamada de função com mais de um argumento
LowCardinalityem uma tabela distribuída, por exemploconcatAssumeInjective((SELECT toLowCardinality('p')), s)usado como chave deGROUP BYcom a função de tabelaremote. As mensagens eramDefault functions implementation for LowCardinality is supported only with a single LowCardinality argumentouExpected the argument ... to have N rows, but it has M. #108871 (Groene AI). - Corrigido
reinterpret(x, 'Decimal128(scale)')(e destinosDecimal32/Decimal64/Decimal256/DateTime64), que produzia uma coluna de resultado cuja escala interna era a escala de origem, em vez da escala de destino solicitada, quando a origem e o destino tinham o mesmo tipo físico. Os valores estavam corretos, mas o objeto da coluna era estruturalmente inconsistente com seu tipo declarado. #108878 (Groene AI). - Corrigido um
LOGICAL_ERROR(New empty part is about to materialize but the directory already exist) que podia abortar o servidor em compilações de debug e com sanitizer quando umDROP/DETACH/MOVE/REPLACE PARTITIONem uma tabelaMergeTreeera executado após uma operação anterior desse tipo ter sido interrompida (por exemplo, por uma transação revertida ou uma falha) e ter deixado para trás um diretóriotmp_empty_<part>obsoleto. O diretório obsoleto agora é reaproveitado em vez de causar falha. #108879 (Groene AI). - Corrigido o ClickHouse Keeper retornando
dataLength = 0incorreto noStatde respostasCreate2, e o cliente ClickHouse ZooKeeper não desserializando oStatdas respostasCreate2. #108909 (unintended). - Corrigido o
clickhouse-local, que rejeitava um valor de opção vazio escrito junto de=(por exemplo--format_csv_null_representation=''); agora ele se comporta da mesma forma que--format_csv_null_representation ""eSET format_csv_null_representation = ''. #108910 (Vismay). - Corrigido um
LOGICAL_ERROR(Inconsistent AST formatting) que abortava o servidor em compilações de debug e com sanitizer ao formatar um tipo de dadoTupleque mistura elementos nomeados e não nomeados (por exemploTuple(a UInt8, UInt16)). #108915 (Groene AI). - Corrigida uma falha de segmentação ao mesclar aggregate states de
uniqExactcomGROUPING SETS,ROLLUPouCUBEemax_threads > 1. #108928 (Raúl Marín). - Corrigidos possíveis resultados incorretos ou leituras fora dos limites quando um
INSERTé revertido após um erro no meio do lote (por exemplo, em tabelasBuffer, inserções assíncronas ou nos enginesKafka/RabbitMQ/FileLog) enquanto a replicação lazy de colunas (enable_lazy_columns_replication) está em vigor. #108935 (Groene AI). join_any_take_last_rowagora é respeitado por todos os caminhos de join baseados em hash compatíveis, incluindo joins que usam spilling automático para disco. #108936 (János Benjamin Antal).- Corrigido um bug no analisador em que
FINALem uma tabela de umJOIN(por exemploFROM t1 FINAL JOIN t2) era aplicado incorretamente também às outras tabelas doJOIN, o que podia tornar essas consultas mais lentas. #108979 (Vladimir Cherkasov). - Corrige um
LOGICAL_ERROR(“Cannot find__grouping_setcolumn in header of MergingAggregatedTransform with grouping sets” ou “Chunk info was not set for chunk in MergingAggregatedTransform”) que podia ocorrer, com o analyzer desabilitado, em umUNION ALL/INTERSECT/EXCEPTno qual um ramo usaGROUP BY GROUPING SETScom réplicas em paralelo e outro usaFINAL. #109003 (Groene AI). - Corrigido um
LOGICAL_ERRORno planejador automático de réplicas em paralelo que podia ocorrer quandoautomatic_parallel_replicas_modeestá habilitado junto comparallel_replicas_min_number_of_rows_per_replicamaior que 0. #109011 (Groene AI). - Corrigida uma alocação excessiva de memória durante a inferência de esquema do formato
MsgPack: uma entrada corrompida cujo cabeçalho de array/mapa/string/binário declara uma quantidade enorme de elementos não provoca mais uma única alocação de vários gigabytes e passa a ser rejeitada como entrada malformada. Isso corrige uma condição de falta de memória em compilações de release (e um abortallocation-size-too-bigcom sanitizers). #109019 (Groene AI). - Corrigido o fato de
use_client_time_zoneser ignorado para literais de stringDateTime/DateTime64interpretados no servidor (INSERTassíncrono, literais emSELECT). O client agora propaga seu fuso horário local comosession_timezonequandouse_client_time_zoneestá habilitado, para que a análise no servidor corresponda ao caminho síncrono deINSERT. #109051 (Groene AI). - Corrige o erro
NOT_FOUND_COLUMN_IN_BLOCKquandoquery_plan_optimize_lazy_finalestá habilitado junto com um filtroWHEREparcialmente enviado paraPREWHERE(viaoptimize_move_to_prewhere_if_final). #109073 (Groene AI). - Corrigido um erro ao usar um asterisco qualificado como
b.*em uma consulta em quebé um alias de tabela (ou subconsulta/CTE) que compartilha o nome com uma coluna não composta de outra tabela. Essas consultas não falham mais e agora selecionam corretamente todas as colunas deb. #109078 (Vladimir Cherkasov). - Corrige um erro lógico
Block structure mismatch in JoinStep(um abort do servidor em compilações de debug e sanitizer) quando uma subconsulta correlacionada é descorrelacionada em um join e a relação de origem contém o mesmo nome de coluna mais de uma vez, por exemplo,WITH t AS (SELECT number, * FROM numbers(3)) SELECT *, (SELECT t.number WHERE t.number >= 0) FROM tcomcorrelated_subqueries_default_join_kind = 'right'. #109114 (Groene AI). - Corrigido um travamento em que uma consulta lendo por meio do filesystem cache podia continuar aguardando um download em andamento após ser cancelada com
KILL QUERY, e em que remover ou executarSYSTEM STOP VIEWem uma view materializada atualizável cuja atualização estivesse presa nessa espera causava bloqueio. #109116 (Murphy). - Corrigido o fato de a configuração
parallel_view_processingser ignorada ao inserir em uma tabela com visões materializadas — desde a 25.10, as views sempre eram executadas em paralelo, independentemente da configuração. #109170 (Antonio Andelic). - Corrigida uma inconsistência no parser em que uma lista de colunas de
INSERTaceitava um correspondedor de colunas qualificado escrito comot.* LIKE '<pattern>'/t.* ILIKE '<pattern>', mas rejeitava sua forma canônicat.COLUMNS('<regexp>'), quebrando o round-trip do formato da consulta (e abortando o servidor em compilações de debug e sanitizer). #109176 (Groene AI). - Corrigidos incrementos não monotônicos de
ProfileEvents: os contadoresNetworkReceiveByteseAIOWriteBytespodiam ser incrementados em uma quantidade negativa (fazendo wraparound para um valor enorme) em caso de timeout de socket ou falha de AIO, eMemoryOvercommitWaitTimeMicrosecondsera medido com um relógio não monotônico. #109180 (Azat Khuzhin). - Corrige a inferência de esquema nos formatos
Arrow,ArrowStream,Avroe nos leitores legados deORCeParquet, que retornavamNullable(Tuple)para colunas struct anuláveis, embora o tipoNullable(Tuple)não seja permitido (allow_experimental_nullable_tuple_typeestá desabilitado).DESCRIBEretornava um tipo queCREATE TABLErejeita, então a criação de tabelas ou a inserção de dados usando o esquema inferido falhava com o erroNullable Tuple type is not allowed. #109185 (Nihal Z. Miaji). - Corrigido um resultado incorreto de
EXISTScorrelacionado e de subconsultas escalares quando a correlação aparece apenas na projeção da subconsulta, junto com uma cláusulaWHEREnão correlacionada (a subconsulta podia ser avaliada como false /NULLpara todas as linhas). Corrige #105760. #109186 (Dmitry Novik). - Corrigido
CREATE USER ... HOST LIKE 'a', 'b'(e oALTER USERequivalente), que silenciosamente mantinha apenas o primeiro pattern. Todos os patternsHOST LIKEespecificados agora são armazenados na lista de hosts permitidos do usuário. #109187 (Groene AI). - Corrigido um text index definido em
mapValues(map)oumapKeys(map)que silenciosamente deixava de ser usado quando uma tabela era consultada por meio de uma tabela com engineDistributedusando o analyzer. O índice era usado para a tabela local e via as table functionscluster/remote, mas uma consulta por meio de uma tabela com engineDistributedo ignorava (e falhava comINDEX_NOT_USEDsobforce_data_skipping_indices). #109188 (Groene AI). - Corrigido um
LOGICAL_ERRORfalso (There was an error on <host>: Cannot obtain error message (probably it's a bug)) que podia abortar o servidor em builds de debug e sanitizer ao executar uma consulta DDL em um banco de dadosReplicated, quando o nó de statusfinishedpor host no Keeper já havia sido limpo. #109192 (Groene AI). - Corrige proporções de
SAMPLEcom um expoente cuja magnitude estouraInt32(por exemplo,SAMPLE 1e-3000000000) e que eram silenciosamente tratadas comoSAMPLE 1. #109197 (Raúl Marín). - Corrige a verificação de acesso para
SYSTEM PREWARM PRIMARY INDEX CACHE ... ON CLUSTER, que incorretamente exigia o privilégioSYSTEM PREWARM MARK CACHEem vez deSYSTEM PREWARM PRIMARY INDEX CACHE. #109198 (Raúl Marín). - Corrigidas falhas em consultas
ALTERpara tabelasMergeTreecriadas com uma configuraçãodiskpersonalizada (SETTINGS disk = disk(...)). Corrige #63019. #109199 (Mikhail Artemenko). - Corrigida uma falha do servidor quando estados de funções de agregação
cramersV,cramersVBiasCorrected,contingencyoutheilsUde um contexto de janela (OVER ()) e de uma agregação simples são combinados por meio de operações de conjunto encadeadas (EXCEPT,INTERSECT) ou deUNION ALLaninhado e depois lidos, por exemplo, pelo combinador-Merge. #109200 (Groene AI). - Corrige um resultado incorreto para
ANY JOINcom uma condiçãoONconstante (por exemplo,t1 ANY INNER JOIN t2 ON 1): a consulta retornava o produto cartesiano completo em vez do resultado deANY JOIN. #109207 (Vladimir Cherkasov). - Corrigida uma falha do servidor em insert assíncrono com desduplicação quando
optimize_on_insertfaz com que o bloco inserido fique vazio (por exemplo, linhas cuja soma é zero emSummingMergeTree). #109229 (Den Kalantaevskii). - Corrige
SYSTEM DROP REPLICAeSYSTEM DROP DATABASE REPLICA ... FROM ZKPATHpara rejeitar caminhos do ZooKeeper vazios ou apenas com a raiz no momento da análise comBAD_ARGUMENTS, direcionar caminhos auxiliares do Keeper para o Keeper nomeado e canonizar caminhos do Keeper para que as verificações locais de autoproteção não apontem para a réplica errada nem contornem a réplica pretendida. #109230 (Groene AI). - Corrige a prioridade das configurações de S3 para que um bloco de endpoint
<s3>com escopo de URL tenha precedência sobre os padrões<s3>de nível superior. #109251 (Bharat Nallan). - Corrigido um bug em que valores
DEFAULTde coluna não eram aplicados aINSERT INTO TABLE FUNCTION(por exemplo,remoteoufile) com dadosVALUESinline quando o servidor analisa os próprios dados inline (send_table_structure_on_insert_with_inline_data = 0). UmNULLexplícito inserido em uma coluna nãoNullablecomDEFAULTpassava a ser0em vez do valor padrão declarado. Agora, o comportamento é igual ao de umINSERTem tabela comum e ao do protocolo HTTP. #109258 (Groene AI). - Corrige a falha de
CREATE TABLE ... AS SELECTa partir des3Cluster(e de outras cluster table functions, comofileCluster/urlCluster) comNOT_FOUND_COLUMN_IN_BLOCKdentro de um databaseReplicated. #109266 (Groene AI). - Corrigido
SHOW TABLESeSELECT ... FROM system.tablesretornando resultados diferentes para databases do catálogo do lago de dados: tabelas que o ClickHouse não consegue ler agora são ocultadas de forma consistente em ambos. #109273 (Smita Kulkarni). - Corrigido um bug em que a mesclagem de uma table
MergeTreecom projeções, enquanto a configuraçãoenable_block_number_columnouenable_block_offset_columnestá habilitada, produzia projection parts contendo uma coluna_block_number/_block_offsetespúria. A projection part mesclada então deixava de corresponder à definição da projeção e às projection parts produzidas por insert, de modo queCHECK TABLEeOPTIMIZE ... DRY RUNa reportavam como corrompida (CORRUPTED_DATA). #109284 (Groene AI). - Permite ler um
arrayAvro de registros{key, value}com dois campos em uma colunaMapdo ClickHouse. Essa é a codificação que Iceberg e Spark produzem para umMAP<K, V>com uma key que não é string (maps nativos do Avro só oferecem suporte a keys string). Antes, esse arquivo podia ser lido comoArray(Tuple(key, value)), mas não comoMap(K, V), o que falhava comType Map(...) is not compatible with Avro array. #109289 (Groene AI). - Corrigida uma falha do servidor em
CREATE HYPOTHETICAL INDEX ... TYPE set(engrambf_v1/tokenbf_v1) quando o argumento de índice obrigatório é omitido. Essas instruções agora são rejeitadas com um erro claro. #109294 (Groene AI). - Corrigido um
LOGICAL_ERROR(Current component is empty) que podia ser gerado por operações de mutação, comoKILL MUTATION, em uma tabelaMergeTreeque armazena seus metadados no Keeper, quando a configuração de servidorenforce_keeper_component_trackingestá habilitada. #109297 (Groene AI). - Corrigida a leitura de timestamps
ORCalém de aproximadamente o ano 2262 em uma colunaDateTime64com escala menor que 9. O leitor nativo deORCcostumava converter cada timestamp por meio de um intermediário fixoDateTime64(9), o que causa overflow emInt64na escala de nanossegundos e rejeitava esses valores comVALUE_IS_OUT_OF_RANGE_OF_DATA_TYPE, mesmo quando a escalaDateTime64solicitada (por exemplo,DateTime64(6), como produzida pelo Iceberg) pode representar o valor. Os timestamps agora são lidos diretamente na escala solicitada, edate_time_overflow_behavioré respeitado mesmo quando nem a escala de destino consegue comportar o valor. #109302 (Groene AI). clickhouse-local, atuando como servidor (apósSYSTEM START LISTEN HTTP), agora atende conexões HTTP usando o formato de saída padrãoTabSeparated, em conformidade comclickhouse-server, em vez do padrão interativoPrettyCompact. Isso corrige a conexão aoclickhouse-localvia HTTP com drivers comoclickhouse-connect. A sessão interativa no terminal ainda renderiza os resultados comoPrettyCompact. #109362 (Alexey Milovidov).- Corrigida uma falha transitória
Code: 499 ... InvalidPart(S3_ERROR) em uploads multipart no S3. O MinIO pode, por um breve período, relatar uma parte recém-enviada como ausente emCompleteMultipartUpload; esse erro agora é repetido, assim como oNoSuchKeyjá tratado, limitado pors3_max_unexpected_write_error_retries. #109364 (Groene AI). - Corrigido o erro
UNKNOWN_IDENTIFIERemALTER TABLE ... DROP COLUMNquando outra coluna tem uma expressãoDEFAULTouMATERIALIZEDque define e referencia um alias inline. #109374 (Alexey Milovidov). - Corrigida uma condição de corrida (e a rara falha resultante) na mesclagem paralela de estados agregados de
uniqExactcom sets de dois níveis, o que podia ocorrer comGROUPING SETS,ROLLUPeCUBE. #109389 (Groene AI). - Corrigido um erro (
NOT_FOUND_COLUMN_IN_BLOCK, oustd::bad_function_callem versões mais antigas) ao executarCREATE TABLE ... ON CLUSTER ... AS SELECTlendo uma tabelaDistributedem um cluster com dois ou mais shards. #109407 (Alexey Milovidov). - Corrigidas as mesclagens para tabelas com
TTL ... GROUP BY(rollup): partes que já estavam totalmente agregadas podiam ser reagendadas para mesclagem repetidamente, indefinidamente, e tabelas com colunasMATERIALIZEDou colunas virtuais persistentes habilitadas eram tratadas incorretamente — essas colunas agora são agregadas comany. Fecha #105647. #109410 (Mikhail Artemenko). #109532 (Mikhail Artemenko). - Corrigido o caso em que
INcom uma coluna array simples no argumento da direita retornava silenciosamente um resultado incorreto (sempre falso) ou lançava uma exceção, de modo quex IN arrpasse a se comportar comohas(arr, x). #109416 (Alexey Milovidov). - Corrigidos erros
UNKNOWN_IDENTIFIERem operaçõesALTER TABLE(RENAME/ADD/MODIFY COLUMNeMATERIALIZE INDEXem uma tabela com partes recém-inseridas) para tabelasMergeTreecom um índice min-max implícito sobre as colunas virtuais persistentes_block_number/_block_offset(habilitado poradd_minmax_index_for_block_number_column/add_minmax_index_for_block_offset_column). #109428 (Groene AI). #110236 (Groene AI). - Corrigido um
LOGICAL_ERRORemarrayFoldsobre um argumentoArray(LowCardinality(T))não constante (por exemplo,arrayFold((acc, x) -> acc + x, materialize([1, 2, 3]::Array(LowCardinality(Int64))), toInt64(0))), que falhava comArguments of 'plus' have incorrect data types(fazendo o servidor abortar em builds de depuração e com sanitizer). #109462 (Groene AI). - Corrigido o caso em que
CHECK TABLEem uma tabelaReplicatedMergeTreerelatava uma parte íntegra como corrompida quando ocorria um erro transitório e passível de retry do ZooKeeper (por exemplo, perda de conexão) durante a verificação; esses erros agora são exibidos como um erro de consulta passível de retry. #109465 (Alexey Milovidov). - Corrigidos segfaults em
groupArrayLastMergee na função de agregaçãolargestTriangleThreeBuckets: a desserialização de estados de funções de agregação agora é validada, para que um estado corrompido não leve a um acesso de memória fora dos limites. #109485 (Miсhael Stetsyuk). #109492 (Miсhael Stetsyuk). - Corrigido o fato de o limite global
max_rows_in_join/max_bytes_in_joinnão estar sendo aplicado ao algoritmo de joinparallel_hash, situação em que uma consulta comjoin_overflow_mode = 'throw'podia ser concluída silenciosamente em vez de gerarSET_SIZE_LIMIT_EXCEEDED. #109488 (Hechem Selmi). - Corrigida a leitura de tabelas Paimon particionadas por uma coluna
BIGINTcujo valor não cabe emInt32. Esses valores de partição eram truncados (por exemplo,9223372036854775807se tornava-1), o que produzia um caminho de partição incorreto e falhava com um erro de sistema de arquivos. #109510 (Groene AI). - Corrigido um crash ao ler tabelas Iceberg com arquivos de exclusão por igualdade. Se uma coluna fosse anulável no arquivo de exclusão por igualdade, mas não anulável no esquema da tabela (ou vice-versa), os valores lidos do arquivo de exclusão eram inseridos em uma coluna de tipo diferente por meio de um cast sem verificação (uma confusão de tipos de coluna), corrompendo a coluna e derrubando o servidor. #109551 (Miсhael Stetsyuk).
- Corrigido o fato de
connect_timeoute os timeouts de leitura e gravação do MySQL não surtirem efeito: uma tentativa de conexão com um servidor MySQL sem resposta podia ficar travada por mais de dois minutos mesmo comconnect_timeout = 1, porque os sinais periódicos do sampling query profiler continuavam redefinindo o prazo interno de poll do cliente MySQL. #109592 (Shaohua Wang). - Corrigido um
LOGICAL_ERROR(creation_csn is not set while removal_csn is set to 1) que podia ocorrer quando umTRUNCATEnão transacional era executado concorrentemente com uma transação não confirmada que havia feito insert na mesma tabela. EsseTRUNCATEnão remove mais partes criadas por transações ainda não confirmadas. #109598 (Tuan Pham Anh). - Corrigidos erros
TYPE_MISMATCHao ler colunas struct deParquetcuja nulabilidade física difere do tipo ClickHouse solicitado: um grupoParquetnão anulável agora pode ser lido comoNullable(Tuple(...)), e o leitor nativo deParquetpode ler uma struct fisicamente anulável (um grupoOPTIONALdeParquet) comoNullable(Tuple(...)). #109615 (Groene AI). #109898 (Groene AI). - Corrigida perda silenciosa de dados quando um
INSERT ... VALUESem um stream com múltiplas consultas é seguido por um comentário SQL no final (por exemplo,VALUES (1) -- comment) no caminho de parsing de insert inline no lado do servidor (send_table_structure_on_insert_with_inline_data = 0). O comentário final era interpretado como dados de linha após o;de término, fazendo com que as consultas seguintes no stream fossem ignoradas silenciosamente. #109643 (Groene AI). - Corrigido um segfault quando uma consulta chega em uma breve janela durante o desligamento do servidor após um erro na inicialização. #109675 (Miсhael Stetsyuk).
- Corrigidos índices de skipping obsoletos (
text,bloom_filteretc.) e projeções após materializar atualizações leves comALTER TABLE ... APPLY PATCHES. Antes, os arquivos de índice e projeção que dependiam de uma coluna atualizada por patch permaneciam inalterados, de modo que consultas que os usavam podiam retornar resultados incorretos (por exemplo,hasTokendeixando de encontrar uma linha atualizada, ou uma projeção retornando agregações obsoletas depois que a patch part já consumida era removida). #109709 (Groene AI). - Corrigido o
system.tables, que ignorava silenciosamente bancos de dados para usuários com permissões por banco de dados quando a consulta lia apenas as colunasname/database. Introduzido na versão 26.2. #109723 (Samay Sharma). - Corrigido um
LOGICAL_ERRORao gravar uma colunaLowCardinality(Time)no formatoArrowcomoutput_format_arrow_low_cardinality_as_dictionary = 1. #109730 (Groene AI). - Corrigido
ObjectStorageQueue/AzureQueue(e a table functionazureBlobStorage) ignorando silenciosamente objetos quando o armazenamento de objetos retorna uma página de listagem vazia junto com um token de continuação. O Azure Blob Storage faz isso (por exemplo, quando uma listagem cruza um limite interno de partição), e o iterador assíncrono de listagem tratava a página vazia como o fim da listagem e descartava o token. Agora ele segue o token de continuação. #109761 (Gal Ben Moshe). - Corrigido o partition pruning, que não retornava nenhuma linha para Iceberg tables particionadas por uma coluna de timestamp (
DateTime64). #109764 (Den Kalantaevskii). - Corrigida uma exceção
ILLEGAL_COLUMNna funçãoconvpara argumentosFixedString; agora eles são corretamente convertidos paraString. Fecha #109670. #109771 (hp). - A função
getClientHTTPHeaderagora trata nomes de header como case-insensitive, de acordo com a RFC 9110; em particular, o headerauthorizationagora é filtrado independentemente de maiúsculas e minúsculas. Fecha #103957. #109791 (Mikhail f. Shiryaev). - Corrige um problema em
max_execution_time(comtimeout_overflow_mode = 'throw') que às vezes fazia uma consulta nunca ser cancelada: quando o monitor interno de timeout já estava aguardando uma consulta com um deadline posterior, uma consulta com um deadline anterior registrada depois podia passar completamente despercebida, permitindo que continuasse em execução muito além do limite de tempo. #109792 (Shaohua Wang). - Corrigido o nome do arquivo de metadados Iceberg comprimido com gzip. O ClickHouse o gravava como
v{N}.gzip.metadata.json(o token HTTPContent-Encoding), enquanto a especificação do Iceberg espera a extensãogz, isto é,v{N}.gz.metadata.json. Como resultado, o Spark e outros leitores de catálogo Hadoop não conseguiam encontrar os metadados gravados pelo ClickHouse. O ClickHouse agora gravav{N}.gz.metadata.jsone continua lendo o nome legadogzippara compatibilidade retroativa. #109812 (Groene AI). - Corrigido o erro
NOT_IMPLEMENTED(“Method getDataAt is not supported for Nullable(String)”) que podia ser gerado por um join comenable_join_runtime_filters = 1(ativado por padrão desde a versão 26.2) quando a chave de join do lado de build eraLowCardinality(Nullable(...))com valoresNULLe o runtime filter recorria ao seu filtro de Bloom. #109824 (Groene AI). - Os database engines externos (por exemplo,
PostgreSQL) não fazem mais pushdown de comparações de intervalo (>=,>,<=,<) em colunasUUID. O ClickHouse e os bancos de dados externos ordenam UUIDs de forma diferente, então esse pushdown removia linhas do resultado silenciosamente; esses predicates agora são avaliados pelo ClickHouse. #109833 (Vismay). - Corrigido um crash do servidor quando uma expressão lambda era passada onde uma higher-order function espera um valor concreto (por exemplo, o acumulador de
arrayFold, como emarrayFold(lambda, arr, another_lambda)). Essas consultas agora são rejeitadas comILLEGAL_TYPE_OF_ARGUMENTem vez de causar um crash quandoenable_analyzer = 0. #109840 (Groene AI). - Corrigidos a table function
icebergLocale o engineIcebergLocal, que declaravamazureem vez delocalcomo tipo de armazenamento de objetos, o que fazia com que falhassem na verificação do tipo de disco (Disk type doesn't match) quando usados com um disco local viaSETTINGS disk = '...'. #109872 (Pedro Ferreira). - Corrige a leitura de tabelas Iceberg particionadas pela mesma coluna de origem mais de uma vez (por exemplo,
PARTITIONED BY (hours(ts), ts)). Antes, essas tabelas falhavam comCannot add column ...: column with this name already exists (ILLEGAL_COLUMN). #109895 (Groene AI). - Corrige resultados de consulta incorretos causados pelo primary key index, que fazia a poda de grânulos incorretamente em tabelas com uma coluna-chave invertida (
DESC) quando as partes não têm marca final (granularidade não adaptativa,index_granularity_bytes = 0). #109901 (Nihal Z. Miaji). - Corrigido o
generateRandomStructure, que ocasionalmente produzia uma string de estrutura inválida com dois tipos de dados concatenados (por exemplo,Decimal32(7)IPv4) quando o aninhamento de tipos excedia o limite interno de profundidade, o que tornava o resultado impossível de interpretar. #109928 (Groene AI). - Corrigido o erro
NOT_IMPLEMENTED(Method getDataAt is not supported for Nullable(String) in case if value is NULL) quando um índicetexté criado emArray(LowCardinality(Nullable(String)))(incluindo camposNestedarmazenados dessa forma) e um array indexado contém um elementoNULL. ElementosNULLem arrays agora são ignorados durante a construção do índice, em conformidade comArray(Nullable(String)). #110055 (Groene AI). - Corrige resultados incorretos quando um índice de salto
minmaxé criado em uma colunaLowCardinality(Nullable(...)): predicadosWHERE/PREWHERE/HAVING ... IS NULLenviados ao armazenamento antes descartavam todo granule e retornavam 0 linhas, mesmo quando a coluna continha valoresNULL. #110061 (Groene AI). - Corrige
distinct_overflow_mode = 'break':DISTINCTagora retorna o resultado parcial acumulado até o limite e para de ler a origem, como documentado. Antes, o fragmento que ultrapassavamax_rows_in_distinct/max_bytes_in_distinctera descartado (resultados truncados ou vazios), e a consulta continuava lendo e inserindo no conjunto hash até o fim da entrada, o que podia terminar emMEMORY_LIMIT_EXCEEDED. #110075 (Sergey Kuznetsov). - Corrigido um erro lógico
ChunkInfoRowNumbers does not existemOPTIMIZE TABLEde uma tabela Iceberg contendo um arquivo de dados em um formato que não é Parquet (por exemplo,ORC) mais recente do que todos os arquivos de exclusão por posição. #110107 (Alexey Milovidov). - Corrige
max_bytes_in_distinctemax_bytes_in_set: chaves string são armazenadas em uma arena que não era contabilizada pelas verificações de limite, portantoDISTINCT/INsobre chaves string podiam usar memória acima do limite de bytes pelo payload completo da chave (sem limite para o comprimento da chave). Os limites agora contabilizam a arena, em conformidade com a documentação; consultas com chaves string próximas do limite de bytes agora podem atingi-lo mais cedo (corretamente). #110120 (Sergey Kuznetsov). - Corrige um
LOGICAL_ERROR(Bad cast from type ColumnLowCardinality to ColumnString) quandoidentity(ou o resultado de uma subconsulta escalar) encapsula um valor contendo umLowCardinalityaninhado e a consulta usaWITH TOTALS/WITH ROLLUP. #110138 (Groene AI). - Corrigida a leitura de arquivos
Npycom dimensões internas de tamanho zero: o número de linhas materializadas e os resultados otimizados e não otimizados decountagora coincidem. #110146 (Yanjun Qiu). - Corrigido um aumento para tempo quadrático (e falta de resposta a
max_execution_time) em agregação in order ao agrupar por múltiplas chaves cuja ordenação é apenas um prefixo da chave de agrupamento. #110159 (Alexey Milovidov). - Corrige um erro lógico (
Unexpected number of columns in result sample block) quando um filtro contendo uma subconsulta correlacionada (por exemplo,exists((SELECT ...))) é otimizado comconvert_query_to_cnfouoptimize_and_compare_chain. #110187 (Alexey Milovidov). - Corrigida uma exceção (
UNION mode UNION_DEFAULT must be normalized) quando uma mutaçãoDELETEouALTER UPDATEusava uma operação de conjunto (UNION/UNION ALL/UNION DISTINCT/EXCEPT/INTERSECT) dentro de uma subquery em sua condiçãoWHEREou em uma atribuição deUPDATE. #110196 (Alexey Milovidov). - Corrigido um logical error
ReadBuffer is canceled. Can't read from it.(abort do servidor em compilações de debug/sanitizer) que podia ocorrer ao ler um arquivo zip (por exemplo, duranteRESTOREde um backup zip) após uma leitura anterior do mesmo arquivo falhar no meio do fluxo. #110197 (Groene AI). - Corrigidos o desligamento lento do servidor e a falta de resposta do
KILL MUTATIONquando uma mutation comx IN (subquery)estava construindo o conjunto da subquery durante a análise da chave primária; a construção do conjunto agora é cancelada prontamente. #110198 (Alexey Milovidov). - O Keeper agora rejeita a definição das settings de coordination
max_requests_batch_sizeemax_requests_append_sizecomo0, em vez de ficar preso em um loop infinito de append-entries em uma configuração com vários nós. #110200 (Alexey Milovidov). - Corrigido um error
NOT_FOUND_COLUMN_IN_BLOCKao usarGROUP BY ALLem uma expressão de tupla junto comORDER BY. #110206 (Alexey Milovidov). - Corrigido um error
NOT_FOUND_COLUMN_IN_BLOCKemINSERTem uma table que tem uma restriçãoCHECKreferenciando uma subcolumn (comox.nullde uma colunaNullableouarr.size0de umArray). #110208 (Alexey Milovidov). - Corrigida a leitura de Iceberg tables cuja ordenação padrão referencia uma coluna que precisa de aspas (por exemplo,
@timestamp). Essas tables não podiam ser lidas porque oORDER BYde armazenamento sintetizado era construído a partir do nome bruto da coluna e falhava na análise comSYNTAX_ERROR. #110233 (Groene AI). - Corrigido o caso em que
system.tablesde um databaseDataLakeCatalog(Iceberg/Glue) abortava a consulta inteira ou removia tables silenciosamente quando os metadata de uma única table não podiam ser resolvidos. Essa table agora continua listada pelo nome, com valores padrão/NULL para as colunas que precisam do objeto de armazenamento aberto (engine,total_rows, etc.), independentemente dedatabase_datalake_require_metadata_access. O acesso direto à table com problema ainda reporta o error. #110242 (Groene AI). - Corrigida uma possível falha (heap-buffer-overflow) quando uma coluna de estado de função aggregate da família
quantileTDigestera usada como chave deGROUP BYe serializada de forma concurrente por vários threads. #110263 (Groene AI). - Corrigido o caso em que
INSERTem uma tableDataLakeCatalogdo Microsoft Fabric / OneLake falhava comIncorrectEndpointError(HTTP 400), direcionando gravações ADLS Gen2 (DFS) para o host do endpoint.dfsem vez do host.blob. Observação: comremote_url_allow_hosts, tanto os hosts Fabric.blob(leitura) quanto.dfs(gravação) devem estar na allow-list paraINSERT. #110290 (Mohammad Lareb Zafar). - Corrigido um abort do servidor ao analisar certas consultas PRQL (
SET dialect = 'prql'). Um panic dentro do compiladorprqlcfazia o processo ser abortado em vez de ser reportado como um erro de consulta. #110316 (Groene AI). - Corrige resultados de consulta silenciosamente incorretos quando uma projection part gravada antes de o conjunto de colunas da projeção mudar (por exemplo, após uma atualização entre versões que materializam de forma diferente a origem de uma coluna
ALIAS, ou apósALTER TABLE ... MODIFY COLUMNredirecionar uma colunaALIASusada por uma projeção) era lida por meio da projeção ou mesclada: a coluna ausente era preenchida com valores padrão em vez dos dados reais. Essas partes agora são lidas da tabela base, e as mesclagens recompõem a projeção a partir dos dados de base. #110328 (Shaohua Wang). - Corrigido o fato de
ORDER BY ... WITH FILLnão respeitarmax_execution_timee demorar para ser cancelado ao gerar um grande intervalo de preenchimento (especialmente comINTERPOLATE). #110332 (Alexey Milovidov). - Corrige um erro lógico (um abort do servidor em compilações de debug/sanitizer) quando um
ALTERcom vários comandos, comoUPDATE ..., DELETE ..., era executado em uma tabela Iceberg. Essas mutações agora são rejeitadas com um erroNOT_IMPLEMENTEDclaro. #110347 (Groene AI). - Corrigido um bug do parser em que
COMMENTera incorretamente interpretado como um alias implícito quando uma consultaSELECTterminava logo após um identificador de tabela simples (por exemplo,... FROM t COMMENT 'x'), causando um erro de sintaxe enganoso em vez de aplicar o comentário à view/tabela. #110372 (Aditya Kumar). - Corrigido um crash do servidor (stack overflow nativo) quando um literal
Array/Tuple/Map/Objectprofundamente aninhado é copiado ou destruído, por exemplo, em uma consulta com um literal muito profundamente aninhado emax_parser_depthelevado. #110393 (Raúl Marín). - Corrigidos dois casos em que a busca vetorial podia retornar menos linhas do que o esperado: valores de
vector_search_index_fetch_multiplierabaixo de 1.0 podiam truncar para zero a contagem de fetch calculada e produzir um resultado vazio (esses valores agora são rejeitados), e a otimização de busca vetorial agora é ignorada para consultasLIMIT ... WITH TIES, porque a otimização limita a busca a exatamente N candidatos e descartava linhas empatadas com a N-ésima linha. #110452 (Tamish Mhatre). #110453 (Tamish Mhatre). - Corrige o erro lógico
Expected CommonSubplanReferenceStep to reference CommonSubplanStep, o erroSubplan cannot be used to build pipelinee o erro lógicoTrying to extract chunk from ChunkBuffer before all inputs are finishedemIN (subquery)quando a subquery contém uma subquery correlacionada e o conjunto é criado durante a análise de índice. #110491 (Alexey Milovidov). - Corrige a substituição de parâmetros de consulta dentro das definições de uma cláusula
WINDOWnomeada. Antes, os parâmetros ali permaneciam silenciosamente sem substituição, e um parâmetroIdentifiernão definido podia levar à exceçãoLogical error: '!part.empty()'duranteEXPLAIN SYNTAX. #110506 (Alexey Milovidov). - Corrigida a falha na inicialização do servidor para tabelas
MergeTreeem object storage disks quando um arquivo residualtxn_version.txt.tmpdeixava corrompidos os metadados no nível do disco. #110519 (Alexey Milovidov). - Corrige um erro lógico no filesystem cache (
Expected file ... not to exist) que podia ocorrer quando um download de cache em segundo plano falhava com um erro que não era do filesystem (por exemplo, ao executarOPTIMIZEem uma Iceberg table), deixando para trás um arquivo de cache órfão vazio. #110549 (Groene AI). - Corrigida a leitura de um stream corrompido no formato
Nativecuja contagem do tipoDynamicou a contagem de caminhosJSON/Objectestá próxima deSIZE_MAX: essa entrada malformada agora é rejeitada com um erroINCORRECT_DATAclaro, em vez de umstd::length_errornão tratado. #110590 (Alexey Milovidov). - Corrigido um crash do servidor no database engine
MaterializedPostgreSQLque podia acontecer quando uma table era detached (ou tinha sua structure alterada) enquanto ainda estava na fila de sincronização. #110596 (Alexey Milovidov). - Corrigido o comportamento incorreto de
SET param_<name>no cliente (e das flags--param_<name>) quando o nome do parâmetro coincide com um setting name interno, comolimit,offset,max_threadsoulog_comment. Dependendo do setting em conflito, a consulta falhava comCANNOT_PARSE_QUOTED_STRING, o valor era normalizado silenciosamente (por exemplo,max_threads=0se tornavaauto(N)), ou o nome de um alias de setting era perdido. Esse parâmetro também quebrava todos osSET param_*subsequentes na mesma sessão. #110597 (Raúl Marín). - Corrige a leitura de subcolumns de uma coluna que tem uma expression
DEFAULTe não está materialized em uma part (por exemplo, apósALTER TABLE ADD COLUMNou duranteALTER TABLE MATERIALIZE COLUMN): a subcolumn era preenchida com os valores padrão do tipo em vez da expressionDEFAULTavaliada, e as Functions de distância vetorial transpostas (cosineDistanceTransposede outras) nessas colunasQBitfalhavam com o erroSIZES_OF_ARRAYS_DONT_MATCH. Isso fecha #110634. #110636 (Alexey Milovidov). - Corrigido um
LOGICAL_ERRORInvalid partition key size: 0que podia fazer falhar umINSERTem uma tableMergeTreeparticionada comnon_replicated_deduplication_windowhabilitado, quando um lote de async insert era desduplicado apenas parcialmente (alguns valores deinsert_deduplication_tokeneram duplicados e outros eram novos). #110651 (Groene AI). - Um flush assíncrono de insert em segundo plano agora é interrompido prontamente quando finalizado com
KILL QUERY; antes, o flush de uma carga útil grande em buffer continuava fazendo parsing até o fim e ignorava o cancelamento. #110652 (Shaohua Wang). - Corrigidos resultados incorretos de
GROUP BYcomoptimize_aggregation_in_ordere deDISTINCTcomoptimize_distinct_in_orderaplicados sobre um JOINpartial_merge. A otimização de leitura em ordem era propagada pelo join partial-merge, que reordena sua entrada à esquerda pela chave de join e, portanto, não preserva a ordem original do stream à esquerda, fazendo com que as linhas fossem agrupadas incorretamente. #110671 (Groene AI). - Corrigido um overflow de inteiro com sinal em
toStartOfIntervalcom uma contagem extrema de intervalosMONTH,WEEKouDAYem valoresDate/Date32/DateTime64. #110688 (Groene AI). - Corrige o erro
NOT_FOUND_COLUMN_IN_BLOCKem consultas com subconsulta emFROMquando réplicas paralelas são executadas no modocustom_key_sampling/custom_key_range. Antes, essas consultas (por exemplo,SELECT * FROM (SELECT id, k, v FROM t WHERE id < 20) ORDER BY k) falhavam comNot found column __table2.id in block .... #110690 (Groene AI). - Corrigido o
readWKT, que rejeitava strings WKT com espaço em branco no início (por exemplo,readWKT(' POINT(1 2)')), embora elas sejam aceitas pelos leitores tipadosreadWKTPoint/readWKTPolygon/… e pela gramática WKT. #110706 (Groene AI). - Corrige um logical error (
Column ... already added for reading, um aborto do servidor em compilações de debug/sanitizer) quando o mesmo predicado de índice de texto é usado tanto emPREWHEREquanto emWHEREde uma consulta sobre uma tabelaMergeconstruída sobre uma tabelaDistributed. #110710 (Groene AI). - Corrige o erro
NOT_FOUND_COLUMN_IN_BLOCKnas funções de distância transpostas sobre colunasQBit(comocosineDistanceTransposed) chamadas com uma subconsulta escalar ou um vetor de referência constante quando réplicas paralelas estão habilitadas. Isso fecha #110719. #110729 (Alexey Milovidov). - Corrige um
LOGICAL_ERRORraro (Unexpected number of parts to remove from parts_queue; um aborto do servidor em compilações de debug/sanitizer) emReplicatedMergeTreequando duas operações de partição (por exemplo, duas consultasMOVE PARTITION/REPLACE PARTITION, ou uma concorrendo com umDROP_RANGEem segundo plano) cancelavam ao mesmo tempo a verificação de parte em segundo plano em intervalos sobrepostos. #110738 (Groene AI). - Corrigido um logical error
Hash is not set for serializationque podia ocorrer quando uma coluna com codecQuantized(...)era encapsulada em outra serialização, por exemplo, em uma tabelaMergesobre fontes cuja coluna de mesmo nome tem tipos diferentes (mesclados em umVariant). #110776 (Groene AI). - Corrige um travamento do servidor ao multiplicar o estado de uma aggregate function
median/quantilepor uma constante inteira enorme (por exemplo,medianState(x) * 18446744073709551615). A consulta deixava de responder ao cancelamento e podia ficar em execução indefinidamente. #110779 (Groene AI). - Corrige uma falha do servidor (divisão inteira por zero) quando uma quota com um interval de duração zero (por exemplo,
CREATE QUOTA q FOR INTERVAL 0 SECOND MAX queries = 1000) era consumida. Agora, uma duração de interval de quota não positiva é rejeitada na criação da quota. #110846 (Pedro Ferreira). - Corrigido o
throwIf(notLike(col, pattern))(e outrosthrowIfaplicados sobre uma função), que lançava exceção incondicionalmente quandocoléLowCardinality. A implementação padrão deLowCardinalityexecutavathrowIfsobre o dicionário inteiro, que sempre contém o valor default reservado mesmo quando nenhuma linha o referencia; assim, um valor diferente de zero nessa posição não usada fazia othrowIflançar exceção para dados que não satisfazem a condição. #110864 (Groene AI). - Propaga as roles ativas de uma consulta (
SET ROLEou o parâmetrorole) para nós remotos em leituras com réplicas paralelas eDistributedem um cluster protegido com um segredo interserver; anteriormente, os nós remotos recorriam às roles padrão do usuário, avaliando as políticas de linha de forma inconsistente em relação ao nó iniciador. #110867 (Nikolay Degterinsky). - Corrigido um problema em que tabelas Iceberg produziam IDs de campo duplicados após
ALTER TABLE ... ADD COLUMNquando o schema inicial continha campos aninhados (Tuple/Array/Map).last-column-idagora registra o maior ID de campo atribuído, incluindo os filhos aninhados, para que uma coluna adicionada posteriormente não reutilize mais o ID de um campo aninhado e as leituras não falhem mais comICEBERG_SPECIFICATION_VIOLATION(Duplicate field id). #110884 (Groene AI). - Corrigida uma falha em compilações FIPS ao usar uma chave SSH Ed25519 (
CREATE USER ... IDENTIFIED WITH ssh_key ... TYPE 'ssh-ed25519', ou essa chave emusers.xml). Ed25519 não é aprovado para FIPS; essas chaves agora são rejeitadas com um erroLIBSSH_ERRORclaro. #110891 (Konstantin Bogdanov). - Corrige os resultados com precisão reduzida das funções de distância transpostas em colunas
QBit(cosineDistanceTransposed,L2DistanceTransposed,dotProductTransposed). Valores truncados paraprecisionplanos de bits eram reconstruídos com os bits descartados preenchidos com zero, o que enviesava cada valor reconstruído em direção a zero e se tornava degenerado em baixa precisão: paraQBit(BFloat16)com precisão 1, apenas o bit de sinal sobrevive, de modo que cada valor era reconstruído como±0.0e a distância era a mesma constante para toda linha, sem carregar informação de ordenação. Valores truncados agora são reconstruídos para um ponto médio limitado da célula de precisão restante (códigosInt8brutos para o centro de sua célula; zeros exatos e infinitos são preservados), de modo que umaprecisionmenor troque exatidão por velocidade sem resultados fortemente enviesados. Os resultados com precisão total permanecem inalterados. Isso fecha #110898. #110911 (Alexey Milovidov). - Corrige uma falha do servidor (use-after-free) durante o desligamento gracioso após tabelas Iceberg serem consultadas em sessões que também usavam tabelas temporárias. #110914 (Miсhael Stetsyuk).
- Corrigido um
LOGICAL_ERROR: Cannot sum Bools(uma interrupção do servidor em compilações de debug/sanitizer) ao mesclar estados de agregaçãosumMap/sumMapWithOverflow/sumMapFilteredcom valoresBoolque foram serializados no formato antigo de estado (versão 0). A mesma correção também corrige dois casos silenciosos de resultado incorreto com estadosBoolda versão 0: chaves de mapa do tipoBoolnão eram deduplicadas entre estados, e a compactação de valores zero descartava as entradas erradas. #110922 (Groene AI). - Corrigida uma falha quando uma função de agregação com o combinador
-Tupleera usada comRESPECT NULLSe produzia um estado intermediário (-State, agregação distribuída,WITH ROLLUP/WITH CUBE). A função combinada recebia o nome da variante de estado errada, de modo que seu tipoAggregateFunctionserializado era resolvido novamente, em um round-trip, para um layout em memória incompatível. #110930 (Groene AI). - Corrige
PREWHERE(e políticas em nível de linha) em uma coluna Iceberg que foi renomeada por schema evolution e retornava silenciosamente0linhas para arquivos de dados antigos. Essas consultas agora retornam as linhas corretas, em conformidade comWHERE. #110941 (Groene AI). - Corrige um
LOGICAL_ERROR(LazyMaterializingTransform: Number of rows in lazy chunk N does not match number of offsets M) que podia ocorrer em consultas de busca vetorial comvector_search_with_rescoring = 1combinadas com materialização lazy quando várias distâncias empatavam. #111003 (Groene AI). - Corrigida a leitura de dados
Arrow/ArrowStreamcom colunas aninhadasArray/Mapvazias produzidas pelo Apache Arrow Java < 19.0.0 (incluído no Apache Spark), que antes eram rejeitadas com um erroINCORRECT_DATAinformando que o buffer de offsets era pequeno demais. #111101 (Raúl Marín). - Corrige leituras desatualizadas em discos
plain_rewritablecom o page cache habilitado. #111105 (Mikhail Artemenko). - Corrige o erro
CANNOT_CONVERT_TYPEpara constantes do tipoVariant(incluindoGeometry) em consultas distribuídas e consultas com réplicas paralelas. #111136 (Nikita Fomichev). - Corrige um bug em que a leitura de arquivos grandes do HDFS podia falhar ou retornar dados incorretos quando uma única requisição de leitura excedia o limite de tamanho de 32 bits do
hdfsPread(INT_MAX). #98470 (Arup Chauhan). - Corrige o uso incorreto do índice de texto em comparações de igualdade com uma needle vazia. #108340 (Robert Schulze).
- Corrigido um travamento em
SYSTEM SYNC MERGEScom o merge selectorManualquando um merge agendado não podia ser alocado em um background pool cheio. #108770 (Alexey Milovidov). - Corrige
ATTACH TABLE ... AS REPLICATEDdescartando dados confirmados e ressuscitando linhas anteriores à mutation quando um arquivotxn_version.txt.tmpdesatualizado era deixado em uma data part. #108772 (Alexey Milovidov). - Corrige uma possível race condition em
ALTER TABLE ... MOVE PARTITION TO TABLEcom tabelasMergeTreenão replicadas que podia produzir data parts sobrepostas, porque o commit das partes movidas e a alocação do número de bloco não estavam sob o mesmo lock. #108922 (Mikhail Artemenko). - Corrige a leitura de tabelas
Iceberggravadas pelo Databricks UniForm, que grava um esquema placeholder degenerado (com uma lista de campos vazia) em arquivos de manifesto. #108945 (Konstantin Vedernikov). - Corrige um use-after-free ao ler uma tabela
Hivenão particionada com várias threads. #109164 (Alexey Milovidov). - Corrige o fato de o log level do console não ser revertido após a inicialização do servidor quando
logger.startup_console_log_levelestá definido: o nível era capturado da chave de configuração errada, então o console permanecia no Startup level elevado durante todo o ciclo de vida do servidor. Fecha #103472. #109858 (Garrett Thomas). - Corrige anomalias de isolamento de snapshot em transações de metadados do disco
plain_rewritable. Corrige #92055. #110948 (Mikhail Artemenko). - Corrige um abort (
front() called on an empty vector) emclickhouse-client --loginquando o host não era passado como um argumento--hostexplícito, por exemplo, quando vinha de--connection, do arquivo de configuração ou da variável de ambienteCLICKHOUSE_HOST. Fecha #103603. #110279 (Christoph Wurm). - Corrige um erro lógico (
!part.empty()) quando um argumento lambda é um identificador entre crases cujo nome contém um ponto (por exemplo,__table1.). Antes, essa consulta gerava uma exceção tratada em compilações de release e abortava o servidor em compilações de debug e com sanitizer durante a formatação de uma mensagem de erro. #108735 (Groene AI). - Corrige um
LOGICAL_ERROR(No set is registered for key) em mutaçõesALTER TABLE ... DROP COLUMN,ALTER TABLE ... DELETE/UPDATEe emDELETE FROMlightweight, em tabelas que têm uma colunaALIAScuja expressão usa o operadorIN(inclusive por meio de outra colunaALIAS). #111039 (Pedro Ferreira). - Corrige perda silenciosa de dados com async inserts e desduplicação (
async_insert=1,async_insert_deduplicate=1). Quando várias entradas de async-insert com valores distintos deinsert_deduplication_tokeneram agrupadas em um único flush que escrevia em partições disjuntas, cada token era registrado no log de desduplicação de todas as partições afetadas pelo flush, e não apenas na partição em que suas próprias linhas eram gravadas. Depois, um insert posterior que reutilizasse um desses tokens em uma partição na qual ele nunca havia escrito era silenciosamente desduplicado. Agora, os tokens são registrados apenas na partição em que suas linhas realmente foram gravadas. Fecha #111031. #111049 (Groene AI). - Corrige uma exceção
LOGICAL_ERROR(ScatterExchangeStep should have one source shard, got 8) e linhas duplicadas ao consultar uma tabelaMergesobre tabelas ou viewsDistributedcom a configuração experimentalmake_distributed_plan = 1. Fecha #107946. #108401 (Groene AI). - Serializa uma coluna
Nullable(Tuple(...))como um único campoCSV, em vez de achatá-la em colunas separadas. Antes, um valor não nulo era escrito como vários camposCSV, enquantoNULLera um único\N, produzindo uma contagem de colunas dependente da linha, o que quebrava os cabeçalhosCSVWithNames/CSVWithNamesAndTypese os round-trips. #108959 (Groene AI). - Corrige um erro lógico (
KeyCondition uses PREWHERE output) no leitorParquetv3 quando uma condição de chave no nível do formato referencia uma coluna que não é lida do arquivoParquet. #109267 (Groene AI). - Corrige resultados incorretos em leituras por table function com
FINALouSAMPLEsobserialize_query_plan = 1. Também corrige a chave de cache das estatísticas da tabela hash de agregação para table functions, para que diferentes table functions não compartilhem mais a mesma entrada de pré-alocação. #109847 (Azat Khuzhin). - Corrige a limpeza de um
BACKUP ... TO Memory(...)que falha antes da finalização: o backup com falha permanecia registrado, então seu nome não podia ser reutilizado. #109947 (Julia Kartseva). - Corrige a aritmética de intervalos extremos para
WITH FILL STEPe as funções de intervalo de data/horaadd*/subtract*: deltas fora do intervalo não dependem mais de overflow com sinal, eWITH FILLcom um passoYEARenorme não trava mais ao percorrer o calendário para trás. #110158 (Groene AI). - Corrige erros
411 Length Requiredde serviços do Azure: o transporte HTTP do Azure baseado em Poco agora defineContent-Lengtha partir do corpo da requisição para clientes SDK que não o definem por conta própria, como o Azure Key Vault. #110299 (Konstantin Bogdanov). - A otimização lazy de
FINAL(query_plan_optimize_lazy_final, desabilitada por padrão) não é mais aplicada quando a consulta lê na ordem da chave de ordenação, porque o plano de substituição não preserva essa ordem e pode retornar resultados em ordem incorreta. Ela também não é mais aplicada quando umLIMITmenor que o número de linhas a serem lidas se aplica diretamente à etapa de leitura, caso em que a passagem obrigatória de construção do conjunto impede a interrupção antecipada. #110576 (Nikolai Kochetov). - Corrige
readWKTereadWKTPoint, que retornavam coordenadas não inicializadas (escalares) ou reaproveitadas da linha anterior (vetorizadas) paraPOINT EMPTY.POINT EMPTYagora é rejeitado comCANNOT_PARSE_TEXT, já quePointno ClickHouse é umaTuple(Float64, Float64)fixa, sem representação vazia. #110692 (Groene AI). - Corrige o tratamento incorreto de timezone ao materializar colunas do lado direito em hash joins. Fecha #111033. #111074 (Yarik Briukhovetskyi).
- Corrige resultados incorretos de
count()e linhas descartadas quando uma chaveString(ouFixedStringmais curta) ou um skip index minmax é filtrado por uma comparação com uma constanteFixedStringmais longa, por exemplotoFixedString('abc', 257) = string_col. A chave primária e o pruning minmax construíam o intervalo a partir da constante preenchida com NUL e ignoravam incorretamente grânulos correspondentes. #111106 (Groene AI). - Corrige inserts assíncronos no formato
Native, para que uma entrada em buffer que se torne incompatível apósALTER ... MODIFY COLUMNnão faça mais o lote inteiro falhar. Fecha #111064. #111108 (Mikhail f. Shiryaev). - Corrige
CREATE OR REPLACEde um Dicionário com um objeto de outro tipo: a operação falhava comCANNOT_DETACH_DICTIONARY_AS_TABLEdepois que a substituição já havia sido confirmada, deixando uma tabela_tmp_replace_*órfã. #111142 (Nikolay Degterinsky). - Corrige
INCOMPATIBLE_TYPE_OF_JOINpara um joinANYem uma tabela do engineJoinquando um filtroWHEREem uma coluna do lado direito permitia que o planner da consulta reescrevesse o join paraSEMIouANTI. Uma tabela do engineJointem uma strictness declarada fixa que não pode ser alterada, portanto essa conversão agora é recusada para essas tabelas. #111362 (Groene AI). - Corrige a table function
format, que não retornava colunas quando os dados de entrada eram convertidos em zero linhas (por exemplo, um documento JSON vazio ou umaFeatureCollectionGeoJSON sem features). Agora ela retorna um resultado vazio com as colunas corretas em vez de lançarNOT_FOUND_COLUMN_IN_BLOCK. Fecha #111390. #111428 (Groene AI).
melhorias em build, testes e empacotamento
- As compilações com sanitizer agora capturam o relatório do sanitizer no buffer global
sanitizer_report, para que o analisador de core dump possa lê-lo a partir do próprio core dump. #109333 (Miсhael Stetsyuk). - Compile
musla partir do código-fonte em vez de usar binários vendorizados. #97452 (Konstantin Bogdanov). - Use implementações SIMD de
memcmp/memcpy/memmove/memset/bcmp/memmemda LLVM-libc. #107566 (Konstantin Bogdanov). Corrige corrupção silenciosa dememmoveem compilações de Debug com-O0(-DDEBUG_O_LEVEL=0) em máquinas com AVX-512. #110904 (Konstantin Bogdanov). - Remove usos da biblioteca
curlem toda a base de código e nas bibliotecas de terceiros incluídas. #108296 (Konstantin Bogdanov). mariadb-connector-cfoi atualizado para 3.4.9. #108328 (Konstantin Bogdanov).- Atualiza
libsshpara 0.12.0. #108329 (Konstantin Bogdanov). - Corrige um travamento no
COMMITde transações no macOS. #108375 (Raúl Marín). - Adicionada uma opção CMake
COMPRESS_DEBUG_SECTIONSque comprime as seções de debug DWARF em arquivos objeto (-gz), habilitada automaticamente onde o compilador oferece suporte, para reduzir os diretórios de compilação de Debug; os binários finais não são comprimidos, portanto a simbolização de stack trace em tempo de execução não é afetada. #109306 (Murphy). A toolchain LLVM incluída agora é compilada com zlib, de modo que seu clang passou a oferecer suporte a-gz=zlib, e o symlinkclang++-21ausente foi adicionado. #109596 (Murphy). - As compilações de Debug agora compilam os crates Rust vendorizados com informações de debug reduzidas (
debug = 1, nívellimiteddo cargo) e sem cache incremental (REDUCE_RUST_DEBUG_INFO, ativado por padrão), reduzindo os artefatos de compilação do Rust (~12 → ~7 GB do zero) e evitando o crescimento ilimitado do cache do cargo entre recompilações. Defina-DREDUCE_RUST_DEBUG_INFO=OFFpara restaurar o DWARF completo e a compilação incremental. #109471 (Murphy). - Oferece suporte ao exchange de consultas distribuídas em streaming e a leituras
STREAMno macOS. #109769 (Raúl Marín). - Atualiza
libarchivede 3.8.7 para 3.8.8. #109874 (Robert Schulze). - Atualiza
c-aresde 1.34.6 para 1.34.8. #109905 (Robert Schulze). - Atualiza
krb5para corrigir CVE-2026-40355 e CVE-2026-40356. #109910 (Robert Schulze). - Removida a dependência de terceiros
libpng.FORMAT PNGagora usa um pequeno codificador PNG integrado (baseado no zlib incluído) em vez disso. #110051 (Alexey Milovidov). - Agora, as alocações C diretas (que não passam por
operator new) são rastreadas no memory tracker no macOS ao encapsular a malloc zone do jemalloc, para que os limites de memória sejam aplicados a elas. #110370 (Raúl Marín). - As imagens Docker
-distrolessdeclickhouse-servereclickhouse-keeperagora são geradas a partir do estágio de produção sem shell; antes, eram geradas a partir do estágio de depuração e incluíam/busybox/sh. Corrige #105677. #105678 (ashishch432). - Atualizado
abseil-cpppara LTS20260526.0. #108991 (Konstantin Bogdanov).
Lançamento do ClickHouse 26.6, 2026-06-25. Apresentação, Vídeo
alteração incompatível com versões anteriores
- Esta alteração remove o recurso
allow_experimental_query_deduplication. Esse recurso era experimental havia muito tempo, não tem testes e não terá suporte (os testes iniciais eram instáveis e foram removidos em #49579). #99398 (Igor Nikonov). - O recurso
SYSTEM INSTRUMENT, baseado em XRay, agora usaargumentsem vez deparameters: a colunasystem.instrumentation.parametersfoi renomeada paraarguments, e a sintaxeSYSTEM INSTRUMENT ADD ... HANDLER PARAMETERS ...foi renomeada paraSYSTEM INSTRUMENT ADD ... HANDLER ARGUMENTS .... Consultas ou automações que usam a coluna ou a sintaxe antigas devem ser atualizadas para usar os novos nomes; os nomes antigos não são mais suportados. #103854 (Pablo Marcos). - A configuração
show_data_lake_catalogs_in_system_tablesfoi renomeada parashow_remote_databases_in_system_tablese teve seu escopo ampliado: quando seu valor é 0 (o padrão), os bancos de dadosMySQLePostgreSQLtambém ficam ocultos emsystem.tables,system.columnsesystem.completions, além dos catálogos do lago de dados. O nome antigo da configuração foi mantido como alias. #104416 (Pablo Marcos). - A compilação x86 padrão agora tem como destino x86-64-v3 (AVX2) em vez de x86-64-v2 (SSE4.2). Isso exige uma CPU com suporte a AVX2 (Intel Haswell ou posterior, AMD Excavator ou posterior). Se a sua CPU não oferecer suporte a AVX2, use a compilação
amd64compat, que tem como destino o x86-64 básico. #105019 (Raúl Marín). - Rejeita
Dynamic/Variantaninhados em agregaçõesmin/maxe indexesminmax. Antes, apenasDynamic/Variantde nível superior eram verificados. Fecha #104747. #105468 (Pavel Kruglov). icebergHasheicebergBucketagora rejeitam argumentosInt128,UInt128,Int256,UInt256eDecimal256com um erro explícito. Antes, eles truncavam silenciosamente valores mais amplos e produziam hashes com colisões. A spec do Iceberg define hashing apenas para inteiros de 32/64 bits e decimals com precisão de até 38; faça cast paraInt64ouDecimal128para manter o comportamento anterior nos valores que couberem. #105866 (Raúl Marín).- Foi adicionado controle granular sobre a exibição de consultas na CLI. A opção
--echoagora aceita um valor booleano opcional e funciona tanto no modo interativo quanto no modo batch. As novas opções--echo-formattede--echo-query-idcontrolam se as consultas exibidas são formatadas e se oquery_idé impresso, respectivamente. A opção--hilite/--highlightagora também controla o realce das consultas exibidas. Como efeito colateral,--echoagora é uma opção com valor booleano, então uma consulta posicional logo após um--echosem valor é tratada como seu valor; use--echo --query "..."ou--echo=falseem vez disso. #106191 (Alexey Milovidov). - Foram removidas as funções experimentais KQL (Kusto)
array_sort_ascearray_sort_desc, bem como seus backends SQLkql_array_sort_ascekql_array_sort_desc. Essas funções eram experimentais, tinham uma implementação de baixa qualidade e eram a origem de bugs de corretude e de parser. Consultas que usam esses nomes agora retornamUNKNOWN_FUNCTION. #108101 (Groene AI). ALTER TABLE ... REPLACE PARTITION ... FROM ...não remove mais silenciosamente os dados da partição de destino quando a tabela de origem não tem partes na partição solicitada. Antes, essa solicitação removia a partição de destino e não gravava nada no lugar — uma armadilha que podia causar perda de dados. Agora, ela é rejeitada comBAD_ARGUMENTSpor padrão. Para restaurar o comportamento anterior de limpeza silenciosa, defina a nova configuraçãoallow_replace_partition_from_empty_source = 1ou ajustecompatibilitypara26.5ou inferior; para remover explicitamente os dados de destino, useALTER TABLE ... DROP PARTITION. #104939 (Groene AI).- O valor padrão da configuração do servidor
insert_deduplication_versionmudou decompatible_double_hashesparanew_unified_hash. A desduplicação de insert agora funciona sobre o bloco inserido inteiro (por insert), em vez de por parte/partição: uma nova tentativa do mesmo insert continua sendo desduplicada, mas dois inserts diferentes que produzem uma parte idêntica não são mais desduplicados entre si, e inserts reordenados das mesmas linhas não são mais desduplicados. Definainsert_deduplication_version = compatible_double_hashespara restaurar o comportamento anterior. Instâncias que fizerem upgrade diretamente de um lançamento cujo padrão eraold_separate_hashesdevem primeiro executar comcompatible_double_hashesaté que a maior janela de desduplicação relevante tenha decorrido, antes de passar a confiar emnew_unified_hash. #107886 (Sema Checherinda).
Novo recurso
- Adicionado suporte a consultas contínuas em tabelas
MergeTree, implementado por meio de uma série de leituras de snapshot. Este é um primeiro passo rumo ao suporte geral a consultas em streaming. #105114 (Mikhail Artemenko). - Adicionados skip indexes hipotéticos (what-if). Use
CREATE HYPOTHETICAL INDEX ... ON t (expr) TYPE ...para definir um skip index virtual com escopo de sessão e, em seguida,EXPLAIN WHATIF SELECT ...para estimar sua taxa de descarte e custo sem materializá-lo. Os índices definidos ficam visíveis na nova tabelasystem.hypothetical_indexes. #104608 (Yarik Briukhovetskyi). - Adiciona uma interface web embutida em
/schemanoclickhouse-serverque visualiza o grafo de dependências entre tabelas, visões materializadas, views materializadas atualizáveis, dicionários, tabelas distribuídas e views. #105276 (Nikita Mikhaylov). - Adicionado suporte ao formato de saída
PNG, permitindo que os resultados de consultas sejam renderizados diretamente como imagens PNG. #74691 (Maksim Dergousov). - Adicionada a detecção do agente de IA para programação (Claude Code, Cursor, Codex, Gemini CLI, Goose etc.) que invocou
clickhouse-clientouclickhouse-local, com base em variáveis de ambiente. O agente detectado é informado na nova colunaclient_agentdesystem.query_log,system.query_thread_logesystem.processes. #106619 (Alexey Milovidov). - Adicionada uma nova tabela de sistema,
system.documentation, que reúne em uma única tabela a documentação de referência embutida dos componentes uniformes do sistema (funções, motores de tabela, tipos de dados, configurações, formatos e outros), com a documentação renderizada em Markdown. #107463 (Alexey Milovidov). - Adiciona o formato de entrada
GeoJSONpara leitura de documentosFeatureCollectiondo GeoJSON, produzindo uma linha por feature com colunasid(String),geometry(Geometry) eproperties(Nullable(JSON)). As geometriesPoint,LineString,MultiLineString,PolygoneMultiPolygonsão lidas no tipoGeometrynativo do ClickHouse.GeometryCollectioneMultiPoint, que o tipoGeometrynão consegue representar, geram uma exceção por padrão, ou podem ser armazenados comoNULLpor meio da configuraçãoinput_format_geojson_unsupported_geometry_handling. Contribui para #91533. #98124 (Mark Needham). - Adicionadas funções para servir Mapbox Vector Tiles diretamente via SQL:
MVTEncodeGeomprojeta uma geometria no espaço de pixels de um tile e a recorta,MVTEncodeagrega as geometries projetadas de um grupo nos bytes binários de um tile de camada única, eMVTBoundingBox/MVTBoundingBoxMercatorretornam a bounding box de um tile para restringir as linhas a ela. Há suporte para geometria de ponto, linha e polígono. Também disponível com os aliases PostGISST_AsMVTGeomeST_AsMVT. #106107 (Saarthak Gupta). clickhouse-localagora oferece suporte às consultasSYSTEM START LISTENeSYSTEM STOP LISTEN, permitindo que ele seja transformado em um servidor que aceita conexões TCP e HTTP. #101143 (Alexey Milovidov).- Adicionado um comando interativo
helpaoclickhouse-cliente aoclickhouse-local. Ao digitarhelp <name>(também/help,man,/man), é exibida a documentação de uma função, engine de tabela, tipo de dado, formato, configuração ou outro componente, renderizada a partir de Markdown no terminal com destaque de sintaxe para SQL. Quando a palavra é ambígua, todas as correspondências são mostradas; quando não é encontrada, nomes semelhantes são sugeridos. #108042 (Alexey Milovidov). - Suporte para gravação no Azure Data Lake Storage Gen2. #105406 (Konstantin Vedernikov).
- Adicionado o formato
RowBinaryWithNamesAndTypesAndDefaultspara oferecer melhor suporte à evolução de esquema. #105736 (Mark Zitnik). - Implementado
ADD ENUM VALUESem consultasALTER TABLEpara simplificar a adição de novos valores a um tipoEnumexistente, sem a necessidade de especificar novamente todos os valores atuais deEnum. #93830 (Ilya Golshtein). - A view materializada atualizável agora oferece suporte a
REFRESH DEPENDS ONpara disparar atualizações com base nas atualizações de outra RMV, em vez de um agendamento baseado em tempo. (REFRESH EVERY ... DEPENDS ONjá existia, mas não podia ser usado de forma confiável nesse caso de uso.) Consulte a documentação deCREATE MATERIALIZED VIEW. #104440 (Michael Kolupaev). - Adicionado suporte para selecionar colunas por padrão de nome com
* LIKE '<pattern>'e* ILIKE '<pattern>', incluindo formas qualificadas comotable.* LIKE '<pattern>'etable.* ILIKE '<pattern>'.LIKEfaz correspondência com nomes de coluna diferenciando maiúsculas de minúsculas;ILIKE, sem diferenciar maiúsculas de minúsculas. #104569 (Yue Ni). - Adicionada a sintaxe
ESCAPE, que define um caractere de escape personalizado em um padrãoLIKE, permitindo tratar%e_como caracteres literais em vez de curingas. #99774 (Ilya Yatsishin). - Adicionadas as configurações de tabela do
MergeTreematerialize_projections_on_insertematerialize_projections_on_merge. Quandomaterialize_projections_on_insert = 0, osINSERTs deixam de criar projection parts, o que melhora a vazão de insert em tabelas com muitas projeções. Quandomaterialize_projections_on_merge = 1, um merge recria uma projeção ausente em todas as partes de origem, permitindo que projeções sejam criadas durante merges em vez de no insert. Os merges ainda combinam apenas partes que compartilham o mesmo conjunto de projeções. #100993 (Christoph Wurm). - Adicionada uma nova configuração imutável do
MergeTree,allow_tuple_element_aggregation, desabilitada por padrão. Quando habilitada,SummingMergeTree,AggregatingMergeTreeeCoalescingMergeTreeachatam recursivamente colunasTuplee agregam cada elemento folha de forma independente durante os merges, exatamente como se fosse uma coluna de nível superior — oSummingMergeTreeo soma, oAggregatingMergeTreefaz o merge do estado da função de agregação e oCoalescingMergeTreemantém seu último valor nãoNULL. A configuração deve ser especificada no momento da criação da tabela e é ignorada silenciosamente por engines que não a suportam. #98039 (johnjing). - Novas funções
quantizeBFloat16ToInt8edequantizeInt8ToBFloat16: um codec escalar que comprime componentes de embedding em 8 bits usando um quantizador gaussiano Lloyd-Max de 256 níveis, do qual códigos Int4/Int2/binários podem ser extraídos por truncamento de bits. #108102 (Alexey Milovidov). - Adicionadas as funções
arrayTopKearrayBottomK: -arrayTopK(k, array)retorna os K maiores elementos em ordem decrescente -arrayBottomK(k, array)retorna os K menores elementos em ordem crescente. #104563 (Vitaly Baranov). - Adicionada uma nova tabela de sistema
system.iceberg_files, que expõe os metadados por arquivo de tabelasIceberg, com uma linha para cada arquivo de dados ou de exclusão no snapshot atual de cada tabela. Isso fecha #98777. #104415 (Asya Shneerson). - Adicionada a tabela
system.constraints, que fornece informações sobre todas as constraintsCHECKeASSUMEem todas as tabelas, incluindo o nome, o tipo e a expressão da constraint. #105337 (Pedro Ferreira). - Adicionada uma nova tabela
system.dictionary_layoutsque lista os layouts de dicionário disponíveis junto com a documentação embutida (description,syntax,examples,introduced_in,related). #106182 (Alexey Milovidov). - Adicionada uma nova tabela
system.dictionary_sourcesque lista as fontes de dicionário disponíveis junto com a documentação embutida (description,syntax,examples,introduced_in,related). #106184 (Alexey Milovidov). - Adicionada uma nova tabela
system.data_skipping_index_typesque lista os tipos de índice de data skipping disponíveis junto com a documentação embutida (description,syntax,examples,introduced_in,related). #106186 (Alexey Milovidov). - Adicionada uma nova tabela
system.disk_typesque lista os tipos de disco disponíveis junto com a documentação embutida (description,syntax,examples,introduced_in,related). #106187 (Alexey Milovidov). - Implementado
SYSTEM RESTART DISK <name>: agora ele recarrega os metadados em memória de um disco e faz uma nova varredura das partes de dados de tabelas com réplica readonly localizadas nele. Isso permite que uma réplica readonly de uma tabela em armazenamento compartilhadoplain_rewritableveja, sob demanda, os dados gravados por outro servidor, sem esperar porrefresh_parts_intervalnem reiniciar o servidor. #106645 (Jordi Villar). - O estilo PostgreSQL
expr OP SOME(array)/expr OP ALL(array)(com lado direito que não é uma subquery) agora é compatível e reescrito parahas/NOT haspara=/<>, ou para lambdasarrayExists/arrayAllpara outros operadores de comparação.ANYnão é aceito para a forma com array porqueanytambém é uma aggregate function; useSOMEem vez disso. A forma com subquery deANY/SOME/ALLcontinua sendo reduzida paraIN/NOT IN. #105129 (Alexey Milovidov). - Adicionadas duas novas estratégias de
load_balancing,hostname_longest_common_prefixehostname_longest_common_suffix, que preferem a réplica cujo hostname compartilha o prefixo comum mais longo (respectivamente, sufixo) com o hostname do initiator. Elas são úteis quando o data center é codificado como prefixo ou sufixo de hostnames cujos segmentos numéricos têm comprimento variável, situação em que as estratégias existentesnearest_hostnameehostname_levenshtein_distanceescolhem a réplica errada. #107360 (Denny [DBA at Innervate]). - Adicionadas informações do certificado TLS do cliente (subject, número de série, emissor e período de validade) à tabela
system.session_logpara melhorar a observabilidade da autenticação baseada em certificados. #107679 (Alexey Milovidov). - Adiciona uma credencial opcional
external_idpara acesso baseado em funções noS3. #106941 (Elian Gidoni). - Adicionada uma nova configuração do
S3Queue,after_processing_move_preserve_path. Quando habilitada junto comafter_processing='move'eafter_processing_move_prefix, os objetos processados são movidos preservando todo o caminho de origem sob o prefixo de destino, em vez de serem reduzidos apenas ao nome do arquivo. #105354 (Asya Shneerson). - Adiciona a configuração do servidor
message_queue_disable_insertionpara desabilitar a inserção de motores de fila de mensagens (Kafka,RabbitMQ,NATS) em visões materializadas anexadas. Útil para cenários de réplica somente leitura. #104911 (JIaQi Tang). - Adicionados
LOCALTIMEeLOCALTIMESTAMP(sintaxe padrão SQL / PostgreSQL).LOCALTIMESTAMPé um alias denow()(retornaDateTime);LOCALTIMEretorna a hora atual do dia como um valorTime. #106139 (Thomas Cabral). - Adicionado
date_part('unit', expr)como açúcar sintático paraEXTRACT(unit FROM expr). Todos os tipos de intervalos padrão e os extras do PostgreSQL (epoch,dow,doy,isodow,isoyear,century,decade,millennium) são suportados. #105127 (Alexey Milovidov). EXTRACT(TIMEZONE_HOUR FROM dt)eEXTRACT(TIMEZONE_MINUTE FROM dt)compatíveis com PostgreSQL para as partes de hora e minuto de um deslocamento de fuso horário, eEXTRACT(<unit> FROM INTERVAL n <unit>)/date_part('<unit>', INTERVAL n <unit>)para extrair o valor de um intervalo. #106227 (Vinayak Joshi).- Adicionados aliases de agregação
min_byemax_byparaargMineargMax. #105712 (Joey Yu). Esses aliases são estúpidos; engenheiros de verdade usam os nomes originais do ClickHouse. - Adicionado
REGEXP_SUBSTRcomo um alias que não diferencia maiúsculas de minúsculas deregexpExtractpara compatibilidade com Oracle/MySQL/Snowflake. #105122 (Alexey Milovidov). - Adicionado
SESSION_USERcomo um alias que não diferencia maiúsculas de minúsculas decurrentUser()para compatibilidade com PostgreSQL / padrão SQL. #106081 (Takumi Hara). - Suporte a um modificador
NULL/NOT NULLno final deALTER TABLE ... ADD/MODIFY COLUMN, espelhandoCREATE TABLE. #106150 (Takumi Hara). - Agora você pode usar a função
h3PolygonToCellsWithContainmentdo h3 para aproveitar o novo algoritmo, que oferece suporte aos modos de contenção baseado no centro, totalmente contido e sobreposto. #104455 (Youssef Kadry). - Adiciona as flags
IPV4_PREFIX_BITS and IPV6_PREFIX_BITSquando a chave é definida porIP_ADDRESSouFORWARDED_IP_ADDRESS. #89270 (Aditya Chopra). formatReadableTimeDeltaagora aceita como entrada uma expressãoINTERVALde tipo diferente deMontheYear. #64315 (Francisco J. Jurado Moreno).- O usuário agora pode especificar um argumento de precisão opcional para as funções
formatReadableSize,formatReadableDecimalSizeeformatReadableQuantity, controlando o número de dígitos após o separador decimal. O padrão é 2, preservando o comportamento anterior. #104648 (Antonio Filipovic). - Adiciona a configuração
output_format_float_precisionpara controlar o número de dígitos decimais na saída de texto de ponto flutuante. #99721 (phulv94). - Foi adicionada a configuração
output_format_always_write_decimal_point_in_float_and_decimalpara sempre imprimir um separador decimal para números de ponto flutuante eDecimalem formatos de texto, mesmo quando o valor for um número inteiro. Por exemplo, gerar1.em vez de1. Desabilitada por padrão. #62614 (Ilya Yatsishin). - Adiciona suporte a novos elementos de configuração de handlers HTTP
<url_prefix>e<full_url_prefix>(correspondem a todos os paths sob um path base, úteis, por exemplo, para handlers do Prometheus), bem como<url_regexp>,<full_url_regexp>e<headers_regexp>. A forma antiga<url>regex:...</url>agora está obsoleta. #107492 (Vitaly Baranov). - Oferece suporte a estatísticas
basic, uma estatística compacta por coluna que armazena min/max numérico, comprimento médio de string e contagens de NULL quando aplicável. #106048 (Han Fei). - Oferece suporte a nós TTL no ClickHouse Keeper, com ativação opcional pela feature flag
create_ttl. #100397 (Konstantin Vedernikov). - Introduz um recurso de reserva de memória para cargas de trabalho. Consulte a documentação de agendamento de cargas de trabalho. #82414 (Sergei Trifonov).
Funcionalidade experimental
- Execução de consultas distribuídas em vários estágios: o planejador divide o plano da consulta em estágios conectados por exchanges de scatter / broadcast / gather / shuffle e encaminha os fragmentos do plano para os nós worker. Os dados entre os estágios são transmitidos via TCP ou repassados por arquivos temporários em armazenamento de objetos compartilhado; esse fluxo oferece suporte a shuffle e broadcast hash joins distribuídos, agregação por shuffle e ordenação distribuída. O recurso é experimental e vem desabilitado por padrão. #106020 (Alexander Gololobov). O mecanismo experimental de distributed query plan (
make_distributed_plan) agora pode usar uma porta diferente para encaminhamento de tarefas e para streaming exchange por worker, configurada por réplica em<remote_servers>comstateless_worker_portestreaming_exchange_port. Quando não estiver definida, serão usadas as portas anteriores no nível do servidor (stateless_worker_client.portedistributed_query.streaming_exchange_port). Isso permite executar vários workers em um único host. #107885 (Alexander Gololobov). - Adicionado o algoritmo experimental de reordenação de join
dphyppara junções internas como opção para a configuraçãoquery_plan_optimize_join_order_algorithm, além da configuraçãoquery_plan_optimize_join_order_max_searched_plans, que limita a busca da ordem de join e recorre ao próximo algoritmo da cadeia quando esse limite é excedido; defina-a como0para manter o comportamento anterior de busca sem limites. #98798 (Alexander Gololobov). - Adicionada a função
aiEmbedpara usar APIs de LLM a fim de gerar embeddings de dentro do ClickHouse. #102922 (George Larionov). - Adicionado um canário experimental do Linux OOM: um processo filho sacrificial que o Linux OOM killer alveja antes do processo principal do servidor. Quando habilitado com
oom_canary_enable, ele reduz a pressão de memória limpando caches do alocador, cancelando consultas, cancelando merges e registrando um evento emsystem.crash_log. A resposta a OOM exige evidência de OOM-kill emmemory.eventsdo cgroup v2. #101942 (Peng). - A interface de terminal web em
/webterminalagora é um recurso de produção e vem habilitada por padrão. Ela é controlada pela nova configuração de servidorenable_webterminal; a configuração antigaallow_experimental_webterminalestá obsoleta, mas ainda é respeitada para compatibilidade retroativa. Para desabilitar o endpoint, definaenable_webterminalcomofalse. #106255 (Alexey Milovidov). - Os endpoints HTTP do PromQL agora oferecem suporte à especificação do banco de dados e da tabela por meio de parâmetros de consulta da URL (
database=,table=, outable=db.table). O fallback implícito anterior para a tabeladefault.prometheusfoi removido: se nem a config do handler nem a URL especificarem uma tabela, o handler agora retornaThe time series table name is not set. Para manter o comportamento anterior, configure<table>default.prometheus</table>ou passetable=...na URL. #107553 (Vitaly Baranov). - Adicionado suporte à função PromQL
histogram_quantilenas table functionsprometheusQueryeprometheusQueryRange. Isso permite calcular quantis sobre buckets de histogramas clássicos do Prometheus identificados pelo rótulole. #103477 (Joe Smith). - Adicionado o modo lazy de aplicação de posting list para o text index. Quando habilitado por
SET allow_experimental_text_index_lazy_apply = 1eSET text_index_posting_list_apply_mode = 'lazy', as posting lists são decodificadas sob demanda, na granularidade de blocos compactados, usando uma abordagem baseada em cursor, em vez de serem totalmente materializadas em Roaring Bitmaps, reduzindo o uso de memória e o tempo de CPU em consultas seletivas com text index. #100035 (Peng). - Adicionado suporte à ABI do AssemblyScript para UDFs em WebAssembly. Você pode testar a ABI do AssemblyScript sem instalar o toolchain localmente usando o playground no navegador, que compila código em AssemblyScript e carrega o módulo WebAssembly resultante no ClickHouse local. #104606 (Vladimir Cherkasov).
- Permite anexar handlers do Prometheus à porta HTTP principal com um prefixo opcional. #104975 (James Cunningham).
- Adicionada a configuração experimental do
MergeTreepacked_skip_index_max_bytes, que agrupa pequenos subfluxos de índices de salto em um único arquivoskp_idx.packedpor parte, reduzindo a pressão sobre inodes quando muitos índices de salto são definidos em uma tabela. A decisão é tomada por subfluxo no momento da gravação: subfluxos cujo tamanho serializado permanece abaixo do limite vão para o arquivo, enquanto os maiores mantêm o layout independenteskp_idx_<name>.idx2/.mrk2. Uma única parte pode misturar layouts. Índices de texto completo não são suportados e são sempre armazenados por arquivo. O padrão é 0 (empacotamento desabilitado). #105321 (Raúl Marín). - Adicionado suporte à serialização
Bufferspara UDFs em WebAssembly usandoABI BUFFERED_V1, além da adição dewebassembly_udf_enable_fuelcomo configuração persistida de função UDF em WASM. #105574 (Antonio Andelic). - Adicionada a configuração experimental
use_reader_executor(desativada por padrão), que encaminha as leituras por um novoReaderExecutorbaseado em pipeline em vez da cadeia legada de buffers de leitura. #106570 (Sema Checherinda). Adicionadas métricas de observabilidade para o caminho de leitura experimentaluse_reader_executor, incluindo um KPI modelado de custo de leitura (ReaderExecutorModeledCostMsPerRequestedMiB). #106968 (Sema Checherinda). Introduzido o bufferChainedBuffersno caminho de leitura experimentaluse_reader_executor, com a métricaReaderExecutorChainedBufferBytes. #107210 (Sema Checherinda). - A ordenação decrescente nas chaves de ordenação do
MergeTree(por exemplo,ORDER BY (time DESC, key)) agora é sempre suportada e não exige mais a configuração experimentalallow_experimental_reverse_key, que se tornou obsoleta. #106440 (Nikita Mikhaylov). Nullable(Tuple(...))agora está em Beta. Desabilitado por padrão; definaenable_nullable_tuple_type = 1para usá-lo. #107754 (Nihal Z. Miaji).
Melhorias de desempenho
- Várias mudanças no Keeper o deixaram cerca de 2x mais rápido no geral (melhor batching, pipeline de mensagens para o líder, pipeline de acréscimos ao log). #101757 (Michael Kolupaev).
- Reduz a sobrecarga por consulta em consultas
SELECTsimples (parsing, análise e planejamento). Por exemplo,SELECT count() FROM hitsem uma única conexão fica aproximadamente 50% mais rápido. #104513 (Raúl Marín). - Otimiza a análise do índice de chave primária para chaves primárias longas e de alta cardinalidade. Para uma chave primária longa, o tempo de execução da análise de índice agora depende principalmente da complexidade do filtro da consulta (as colunas-chave que ela realmente usa), e não do comprimento da chave primária — portanto, estender a chave de ordenação adiciona uma sobrecarga praticamente desprezível à análise de índice em consultas que filtram apenas algumas de suas colunas. Para uma chave primária de alta cardinalidade, em que o ClickHouse mantém em memória apenas um prefixo seletivo das colunas-chave e não carrega as colunas finais, a análise de índice agora funciona apenas com esse prefixo em memória, em vez da chave inteira. A otimização vem habilitada por padrão e pode ser desativada com a nova configuração
use_lightweight_primary_key_index_analysis. Fecha #65103. #91836 (Nihal Z. Miaji). - A compilação x86 padrão agora tem como alvo x86-64-v3 (AVX2) em vez de x86-64-v2 (SSE4.2). Isso requer uma CPU com suporte a AVX2 (Intel Haswell ou posterior, AMD Excavator ou posterior). Se sua CPU não oferecer suporte a AVX2, use a compilação
amd64compat, que tem como alvo x86-64 puro. #105019 (Raúl Marín). - Usa
ipnsortedriftsort(ordenação estável) — portas em C++ das implementações de ordenação da biblioteca padrão do Rust — para ordenações por comparação de uso geral. AceleraORDER BYem colunas não numéricas e ordenações estáveis, além de eliminar um pior caso em entradas ordenadas em ordem inversa. #106650 (Alexey Milovidov). - Nova otimização de
GROUP BYpara chaves de alta cardinalidade distribuídas uniformemente, que distribui as linhas entre threads com base no hash da chave de agrupamento, de modo que cada thread agregue um subconjunto distinto de chaves sem uma fase de mesclagem. Definaenable_sharding_aggregator = 1para habilitá-la. #104233 (Nihal Z. Miaji). - Habilita prefetching de tabela hash para consultas
GROUP BYcom chave do tipo string, melhorando em ~8% o desempenho da agregação de strings de alta cardinalidade. #101007 (Le Zhang). - Reduz o pico de uso de memória ao mesclar resultados parciais de agregação em dois níveis com estados de agregação grandes (por exemplo,
groupArray), liberando incrementalmente os estados de origem de cada bucket durante a mesclagem em vez de mantê-los todos ativos até sua conclusão. #102330 (Yuri Fedoseev). - A representação em memória de
EnumDataTypefoi otimizada. A pegada de memória de tabelas que contêm o tipoEnumpode melhorar em até 10x para o componenteEnum. O tempo para recuperar o nome a partir do valor (número) é semelhante ou menor. A busca por nome é um pouco mais lenta, mas essa forma de acesso é menos comum. #95668 (Ilya Yatsishin). - Adiciona cache de resolução de identificadores para evitar resolução duplicada de identificadores durante a análise da consulta. #88043 (Max Justus Spransy).
- Melhora o desempenho da análise de consultas em tabelas com muitas colunas: evita calcular hashes de nós de coluna (que incluem toda a expressão da tabela de origem) quando isso não é necessário. A análise de subconsultas
SELECT *aninhadas sobre uma tabela com ~1200 colunas agora está cerca de 50 vezes mais rápida. #106957 (Dmitry Novik). - Acelerou a análise de consultas com muitas chamadas de função ou com chamadas de função profundamente aninhadas ao remover um hash redundante da árvore de consultas do cache de resolução de funções. #107516 (Dmitry Novik).
- Corrige longas pausas no login e na inicialização de consultas com armazenamento de acesso replicado quando muitas entidades de acesso (políticas de linha, papéis, cotas, perfis de configurações) mudam ao mesmo tempo. Agora, cada cache por entidade é recalculado uma vez por lote de notificações, em vez de uma vez por entidade alterada, eliminando trabalho quadrático que podia manter o bloqueio de acesso por minutos. #107672 (Azat Khuzhin).
- Compartilha o
FixedHashMapdo hash join como runtime filter do join no lado de probe. Quando a tabela hash do lado de build é (ou pode ser convertida em) umFixedHashMap, ela é publicada como runtime filter e substitui oSet/BloomFilterqueBuildRuntimeFilterStepinstalaria de outra forma. Controlado pela nova configuraçãojoin_runtime_filter_from_fixed_hash_table(padrãotrue). #105640 (Xiaozhe Yu). - Aplicação lazy de índices de seletor e de replicação no caso de
JOINseguido por umLIMITseletivo,TopNou outroJOIN. Para controlar o número de colunas de payload necessário para habilitar a indexação lazy de seletor, use a configuraçãoquery_plan_min_columns_for_join_lazy_indexing(0 significa que a otimização está desabilitada). Para controlar oLIMITao qual a otimização é aplicada, use a configuraçãoquery_plan_max_limit_for_join_lazy_indexing. #106566 (Hechem Selmi). - A reordenação de JOIN por DP (programação dinâmica) agora é permitida com réplicas paralelas. #105889 (Nikita Taranov).
- Melhora o plano de consulta quando o JOIN usa runtime filters (
enable_join_runtime_filters, ativado por padrão): o modelo de custo de reordenação de joins agora enxerga através deWindowTransform(e de outras etapas do plano que preservam linhas) na subárvore da direita e usa a contagem de linhas subjacente e o NDV por coluna, em vez de ficar sem estatísticas. #107229 (UnamedRus). - Remove a virtualização da emissão de linhas não associadas em joins RIGHT e FULL, processando-as em lote. #105679 (Hechem Selmi).
- Adiciona suporte a métodos
keys32ekeys64packed emHashJoin. #107202 (Nikita Taranov). - Adiciona suporte a métodos
keys32ekeys64packed emSet. #107564 (Nikita Taranov). - Tratamento mais otimizado de colunas Nullable na agregação. #106015 (Nikita Taranov).
- Melhora o desempenho de consultas
LIMIT BY. #103349 (Nihal Z. Miaji). - Acelera consultas
ORDER BY ... LIMIT BYexecutandoLIMIT BYdentro de cada stream ordenado em paralelo duranteSort, quando as colunas deLIMIT BYsão um prefixo deORDER BY. Isso reduz o número de linhas que passam pela mesclagem final da ordenação e por quaisquer etapas posteriores do pipeline. Essa otimização é controlada pela nova configuraçãoquery_plan_push_limit_by_into_sort(habilitada por padrão). #104000 (Nihal Z. Miaji). - Acelera consultas
SELECT ... LIMIT N BY <cols>quando<cols>são um prefixo da chave de ordenação da tabela, ou passam a ser depois queWHERE col = constfixa as colunas iniciais. Com isso habilitado, oMergeTreelê os dados na ordem da chave primária, eLIMIT BYprimeiro filtra em modo streaming com memória O(1) por stream ordenado, descartando a maior parte dos dados; em seguida, executa oLIMIT BYnormal sobre o conjunto reduzido para obter o resultado final. Controlado pela nova configuraçãooptimize_limit_by_in_order(habilitada por padrão). #105135 (Nihal Z. Miaji). - Acelera consultas
LIMIT BYem tabelasMergeTreeparticionadas executandoLIMIT BYdentro do stream de cada partição em paralelo, em vez de mesclar todos os streams em um só antes de aplicar o limite. Isso se aplica quando a expressão de partição é uma função determinística das colunas deLIMIT BY, de modo que nenhum grupo deLIMIT BYpossa abranger duas partições. Controlado pela nova configuraçãoallow_limit_by_partitions_independently(habilitada por padrão). #105126 (Nihal Z. Miaji). - Acelera consultas
LIMIT BYremovendo expressões-chave redundantes: uma chave que é uma função determinística das outras chaves é descartada (por exemplo,LIMIT 5 BY x, f(x)se tornaLIMIT 5 BY x), e uma função injetiva de uma chave é substituída por seu argumento (por exemplo,LIMIT 5 BY toString(x)se tornaLIMIT 5 BY x). Isso avalia menos expressões, e mais baratas, por linha. Controlado pelas novas configuraçõesoptimize_limit_by_function_keyseoptimize_injective_functions_in_limit_by, ambas habilitadas por padrão. #106818 (Nihal Z. Miaji). - Acelera a agregação em shards, o bucketing de joins
grace_hashe o particionamento de janelas em paralelo, substituindo o hashing de colunas por fragmento por um kernel que usa CRC32C por hardware. #106538 (Harikrishnan Prabakaran). - Otimiza
L1Distance,L2Distance,L2SquaredDistance,LinfDistanceecosineDistancepara argumentos de array com autovetorização multi-target em x86-64-v4/v3. Para argumentos de array não constantes, todos eles, excetoLpDistance, que usastd::powcom um expoente em tempo de execução, agora podem usar kernels vetorizados pelo compilador. Os caminhos rápidos existentes para argumentos constantes com AVX-512 eBFloat16em Sapphire Rapids paraL2DistanceecosineDistancesão preservados. #101310 (Peng). - Melhor desempenho das funções
{Norm}DistanceedotProduct. #106007 (Nikita Taranov). - Melhor desempenho da função
arrayNorm. #106211 (Nikita Taranov). - O desempenho de
dotProductmelhorou em alguns casos. #106210 (Nikita Taranov). - Melhorado o desempenho dos caminhos const-left em AVX-512 para
L2DistanceecosineDistanceemArray(Float32),Array(Float64)eArray(BFloat16)quando o comprimento do array é exatamente divisível pela largura do processamento vetorizado. #104625 (Sergey Kuznetsov). - Habilitada a geração de código AVX-512 para AMD e aprimorada a geração de código para
arrayDistance. #106505 (Nikita Taranov). - Melhorado o desempenho das funções
L2DistanceTransposedecosineDistanceTransposedpara o tipo de dadoQBit. #106701 (Raufs Dunamalijevs). - Melhorado o desempenho das funções
encrypt,decrypt,tryDecrypt,aes_encrypt_mysqleaes_decrypt_mysqlem até uma ordem de magnitude, recuperando o desempenho perdido na migração do BoringSSL para o OpenSSL 3.x (24.4). #107339 (Konstantin Bogdanov). - Melhorado o desempenho das funções
encrypt,decryptehalfMD5ao evitar lookups implícitos por linha de providers do OpenSSL no OpenSSL 3.x. #99105 (Konstantin Bogdanov). - Adicionada uma implementação SIMD de
SHA1que calcula o hash de múltiplas entradas em paralelo usando AVX-512, melhorando a vazão. #105459 (Joanna Hulboj). - Adicionado um backend AArch64 ASIMD/NEON para a implementação multi-buffer de
MD5. #105563 (Venkata Vineel ). - Compactados os blocos de origem antes de calcular a projeção durante
MATERIALIZE PROJECTIONpara reduzir o número de partes temporárias da projeção e a sobrecarga de merge. ~3,4x mais rápido em uma tabela com 50 milhões de linhas. #100047 (Amos Bird). - Reduzida a latência de
INSERTem tabelasMergeTreecom índices de salto em colunasORDER BY, evitando permutações redundantes de colunas durante a escrita das partes (~17% em workloads com formato de traces). #101101 (Amos Bird). - Habilitados os caminhos de código SIMD do Arrow (NEON em ARM, SSE4.2/AVX2/AVX512 em x86) e usados para acelerar a decodificação de colunas Parquet
FLOAT/DOUBLEcodificadas comBYTE_STREAM_SPLIT. #106376 (Raúl Marín). - Melhorado o desempenho de inserção em colunas
LowCardinalitycom índicesbloom_filter. #106410 (Michael Jarrett). - Paralelizadas as cópias de blobs em
DiskObjectStorageTransaction::copyFileusando um pool de threads por disk. #105089 (Asya Shneerson). - Evitada a leitura do conteúdo dos arquivos ao usar o formato de entrada
Onecom table functions semelhantes a arquivos, comofilees3. #105157 (Yue Ni). - Acelerada a inicialização do
clickhouseno macOS em cerca de 3x ao não exportar símbolos dinâmicos, que, de outra forma, seriam processados pelo vinculador dinâmico a cada inicialização. #107768 (Raúl Marín). - Acelera o carregamento do cache do sistema de arquivos na inicialização ao evitar uma abertura redundante de diretório para cada chave de cache. #107414 (Alexey Milovidov).
- Acelera o carregamento do cache do sistema de arquivos na inicialização ao permitir que as threads de listagem de diretórios também ajudem a carregar os metadados do cache após o fim da listagem, em vez de deixar metade delas ociosas. #107416 (Alexey Milovidov).
- Reduz a sobrecarga de inicialização do processo
clickhouseao atualizar a biblioteca WasmEdge incluída, que não gera mais um segredo de hash aleatório em um inicializador global a cada inicialização. #107869 (Raúl Marín). - A chave primária do
MergeTreee os skip indexes agora podem podar grânulos para filtros em queifNulloucoalesceenvolvem uma condição, comoifNull(key = 0, 0)oucoalesce(key = 0, 0). Esses predicados — frequentemente emitidos por geradores de consultas para transformar uma comparação possivelmenteNULLem um booleano definido — antes eram opacos à análise de índices e não conseguiam ignorar grânulos. Isso amplia a configuraçãoallow_key_condition_coalesce_rewriteexistente (habilitada por padrão). Fecha #106264. #106272 (Andy Zhao). - A avaliação de skip index em tipos
DateTime64deve consumir menos CPU na versão 26.6. #107707 (Shankar Iyer). - Melhora o desempenho da análise de índice de texto em buscas com vários tokens ao otimizar o tratamento de tokens raros. #98226 (Anton Popov).
- Usa um cache para os segmentos comprimidos da lista de postings do índice de texto. #106299 (Anton Popov).
- Melhora o desempenho da busca genérica por exclusão para consultas que selecionam grandes intervalos consecutivos da tabela. #93813 (Michael Jarrett).
- Clientes
S3com o mesmo endpoint e bucket compartilham um cache, evitando descoberta duplicada de região. Fecha #92482. #96802 (Andrey Zvonov). - Se uma consulta contiver
has(<constant array>, <expr>), o analisador transformará o nó para usar uma implementaçãoinmais rápida, se isso for viável. #97341 (Shankar Iyer). - Quando um novo job é agendado em
ThreadPool, desperta a worker thread que ficou ociosa mais recentemente (LIFO), em vez de uma thread arbitrária. Isso reduz a fragmentação de memória causada pelos caches do allocator por thread. A ordem em que os jobs são processados não é alterada. #100177 (Alexey Milovidov). - Melhora o desempenho de runtime filters aproximados e de índices de filtro de Bloom. #100201 (Christoph Viebig).
- Permite que
ASOF JOINuse o algoritmo de joinparallel_hash, paralelizando a construção entre valores distintos da chave de igualdade. Antes,ASOFera excluído incondicionalmente deparallel_hash. #105375 (Greg Maher). - Evita a leitura de entradas sem limite para consultas
INTERSECTeEXCEPTquando uma entrada vazia já determina que o resultado será vazio. #105393 (Yue Ni). - Adiciona
constinitpara vários bloqueadores doMemoryTracker. #105490 (Azat Khuzhin). - Melhora o desempenho de
bitmapContainspara estadosgroupBitmapdiferentes deUInt64, evitando chamadas repetidas derb_maxdurante as verificações de intervalo. #105960 (Yue Ni). - Consultas não contíguas mais rápidas para colunas
LowCardinalitybaseadas em um único dicionário. #103662 (Ivan Babrou). - Adiciona um caminho rápido para a sondagem de
HashJoinquando o bloco tem uma única linha. #106008 (Nikita Taranov). - Predicados de consultas como
SELECT ... FROM view(SELECT ... FROM remote(...)) WHERE ...agora são inseridos na consulta enviada ao shard remoto. Faltava à otimizaçãoallow_push_predicate_ast_for_distributed_subqueriesum caso para table functions. #105986 (Nikolai Kochetov). - Ativa
enable_join_transitive_predicatespor padrão. #103724 (Alexander Gololobov). - Adiciona suporte às funções
multiSearchAny,multiSearchAnyUTF8emultiMatchAnyem índices de texto. Também melhora a análise de índices de texto para a funçãomatch: agora, padrões com grupos alternativos podem ignorar mais grânulos. #106279 (Anton Popov). - Permite que filtros introduzidos após a seleção inicial de PREWHERE (predicate pushdown, runtime filters ou PREWHERE explícito mais um WHERE definido pelo planejador) sejam mesclados ao PREWHERE existente em uma segunda passagem do otimizador, em vez de permanecerem como uma etapa
Filterseparada acima da leitura deMergeTree. #105445 (Yarik Briukhovetskyi). - O
QueryConditionCacheagora registra individualmente os grânulos filtrados, mesmo dentro de lotes de leitura que passam parcialmente pelo PREWHERE, reduzindo o número de marks relidos por consultas subsequentes com a mesma condição. #105335 (Han Fei). - Adiciona a configuração do Keeper
nuraft_use_bg_thread_for_snapshot_io, habilitada por padrão, para fazer com que oNuRaftleia objetos de snapshot em uma thread em segundo plano, em vez de usar worker threads do Raft. #106285 (Antonio Andelic). - Reduz o pico de uso de memória ao aplicar snapshots recebidos no ClickHouse Keeper com
KeeperMemoryStorage. #105851 (Antonio Andelic). - Direciona alocações de LLVM/JIT para uma Arena dedicada do jemalloc. Reduz a fragmentação de RSS causada pela intercalação entre o bookkeeping de longa duração do JIT e as alocações de consultas de curta duração. Adiciona novas métricas assíncronas
jemalloc.jit_arena.active_bytes,jemalloc.jit_arena.dirty_bytes,CompiledExpressionCacheBytesMaxeCompiledExpressionCacheCountMaxpara observabilidade.SYSTEM DROP COMPILED EXPRESSION CACHEagora também remove as instâncias subjacentes do CHJIT e limpa a Arena do JIT. #104113 (Raúl Marín). - Corrige a reserva excessiva de memória ao ler colunas esparsas
Nullable(String)codificadas por dicionário deParquetcom o leitor V3 nativo. #102805 (Francisco). - Corrigido o problema em
CREATE TABLE ... CLONE AS (and REPLACE / ATTACH PARTITION ... FROM)em discos criptografados, que copiava os dados em vez de criar hard links. #106731 (Nikita Mikhaylov). - Melhorada a estimativa de cardinalidade no otimizador do plano de consulta: uma coluna produzida por uma função determinística de um único argumento (por exemplo,
toYear(date)) agora herda, como limite superior, o número de valores distintos do argumento, em vez de ficar sem estatísticas, o que leva a uma reordenação de joins mais precisa. #107757 (Alexander Gololobov). - Reduzida a sobrecarga de CPU do logging assíncrono sob altas taxas de logs, notificando o consumidor de log apenas na transição da fila de vazia para não vazia, em vez de a cada mensagem. #107352 (Nikita Mikhaylov).
- Removidos cálculos duplicados durante a execução da consulta em um número maior de cenários. #106113 (Yarik Briukhovetskyi).
- Paralelizado o processamento do resultado de uma CTE recursiva: um
GROUP BYou outra operação sobre um grande resultado deWITH RECURSIVEnão fica mais limitado a uma única thread. #107694 (Alexey Milovidov). - Melhorado o desempenho da busca por substring sem diferenciar maiúsculas de minúsculas (
positionCaseInsensitiveUTF8,ILIKE,multiSearchAnyCaseInsensitiveUTF8e funções relacionadas) com a adição de um caminho SIMD NEON em ARM e de um kernel AVX2 mais amplo em x86. #107882 (Raúl Marín). - Corrigida uma regressão de ~16% na vazão do codec de ponto flutuante
FPCem ARM, introduzida quando suas tabelas preditoras passaram a usarVectorWithMemoryTracking. #108182 (Groene AI).
Melhoria
- O
MemoryWorkerem segundo plano agora atualiza periodicamente o limite rígido de memória do servidor com base no uso de memória atual e na quantidade de memória que o kernel informa como disponível, para que o ClickHouse deixe espaço para outros processos em execução no mesmo host. A fórmula é(resident memory + system MemAvailable) * max_server_memory_usage_to_ram_ratio. A mesma configuração do servidormax_server_memory_usage_to_ram_ratiocontrola tanto o limite na inicialização quanto o ajuste dinâmico; defina-a como0para desabilitar ambos. Para manter apenas o limite estático de inicialização/recarga (o comportamento das versões anteriores), defina a nova configuração do servidormemory_worker_dynamic_hard_limitcomo0. #104964 (Alexey Milovidov). - Suporte a cliente PostgreSQL para C# no protocolo
PostgreSQL. Isso fecha #18611. #80785 (Konstantin Vedernikov). - As mutações agora usam o analyzer. #98884 (Nikolai Kochetov).
- Adicionado controle granular sobre a exibição de consultas na CLI. A opção
--echoagora aceita um valor booleano opcional e funciona tanto no modo interativo quanto no modo batch. As novas opções--echo-formattede--echo-query-idcontrolam se as consultas exibidas são formatadas e se oquery_idé impresso, respectivamente. A opção--hilite/--highlightagora também controla o realce das consultas exibidas. Como efeito colateral,--echoagora é uma opção com valor booleano, então uma consulta posicional logo após um--echosem valor é tratada como esse valor; use--echo --query "..."ou--echo=falseem vez disso. #106191 (Alexey Milovidov). - Suporte a evolução de esquema junto com verificações de consistência concorrentes para catálogos de lago de dados. #106102 (Konstantin Vedernikov).
- Permite disco de cache para motores de tabela de data lake. #102017 (RinChanNOW).
- Corrige bancos de dados
DataLakeCatalogcomcatalog_type = 'onelake'para ler dados de tabela usando o endpoint Blob do OneLake (.blob.fabric.microsoft.com) por padrão. Definaonelake_use_blob_endpoint = falsepara manter o comportamento anterior do endpoint DFS (.dfs.fabric.microsoft.com). #106843 (Konstantin Vedernikov). - Atualiza o valor padrão da configuração
persistent_processing_node_ttl_secondsdeS3(Azure)Queuede1 hourpara6 hours(o que representa o tempo de limpeza devido a reinicializações não limpas do serviço etc.). O valor padrão anterior era adequado para o TTL dos nós de processamento, mas também é usado para o TTL do bloqueio de bucket, que pode ser mantido por mais tempo; portanto, 1 hora não era suficiente. #106838 (Kseniia Sumarokova). - Reduzido o tamanho padrão do cache de metadados de
Icebergde 1 GB para 128 MB. #106492 (Konstantin Vedernikov). - Propaga o
query_idda tarefa de streamingS3Queuepara inserções em tabelas dependentes. #106494 (Christoph Wurm). - Preenche
used_storagesemsystem.query_logcom o nome do motor de armazenamento ao consultar tabelas viaDataLakeCatalog. #100706 (Melvyn Peignon). - Você pode verificar quais
operationesummaryos snapshots do Iceberg têm. Útil para testes e depuração. #106246 (Den Kalantaevskii). - Conclui a solicitação final de multipart upload do
S3de forma assíncrona por meio do rastreador de tarefas, para que ela possa se sobrepor ao upload da última parte, em vez de ser executada em série na finalização. #105487 (Asya Shneerson). - Adicionadas quatro novas configurações de tabela do
MergeTreepara controlar os parâmetros padrão de índices de texto:text_index_dictionary_block_size,text_index_dictionary_block_frontcoding_compression,text_index_posting_list_block_sizeetext_index_posting_list_codec. Essas configurações permitem ajustar o comportamento do índice de texto no nível da tabela sem especificar parâmetros em cada definição de índice. Argumentos explícitos por índice ainda têm precedência. #100626 (Anton Popov). - Permite que projeções substituam configurações adicionais do
MergeTree(compressão, formato de part, serialização), além de apenasindex_granularity, com uma lista de permissões de configurações permitidas e validação. #101170 (Amos Bird). - Adiciona as colunas
current_projection,current_projection_progress,projections_completedeprojections_remainingasystem.mergespara expor o progresso da merge de projeções. #102611 (Amos Bird). - Corrigido
PREWHEREcom subconsultaINem colunas de chave primária que não usava o índice da chave primária para Granule pruning, causando full table scans em vez de ler apenas os granules relevantes. #102570 (Nikita Mikhaylov). - A função
h3PolygonToCellsagora aplica o tamanho máximo de array a todos os polígonos de umMultiPolygon, valida os códigos de retorno da biblioteca H3 subjacente e rejeita argumentosMultiLineStringem vez de retornar silenciosamente um resultado vazio. #106399 (Raúl Marín). - Adiciona uma nova tabela somente do Keeper,
system.keeper_snapshots, com informações sobre snapshots locais do ClickHouse Keeper. #105571 (Miсhael Stetsyuk). - Adiciona uma nova tabela somente do Keeper,
system.keeper_changelogs, com informações sobre arquivos locais de changelog (log do Raft) do ClickHouse Keeper. #105617 (Miсhael Stetsyuk). - Adiciona uma tabela somente do Keeper,
system.keeper_cluster. Contém uma linha por membro do cluster Raft, conforme visto pelo Keeper atual. #105646 (Miсhael Stetsyuk). - Adiciona mais eventos de perfil do Keeper (server-side + client-side) para watches. Fecha #97703. #105336 (Konstantin Vedernikov).
- Adicionadas
coordination_settingsdo Keeper para limitar a admissão de entradas de log não confirmadas doNuRafte fazer throttling de backward-probe de append-entries. #106108 (Antonio Andelic). - Adiciona a configuração
enable_compressionpara a table functionmysql, o table engineMySQL, o database engineMySQL, o DicionárioSOURCE(MYSQL)e named collections. Quando habilitada, o ClickHouse negocia compressão no nível do protocolo MySQL para todos os dados transferidos pela conexão. #103229 (Bernard Lim). - Reduzida a latência de cancelamento para consultas executadas pelo PostgreSQL wire protocol:
KILL QUERYagora interrompe a serialização da saída dentro de um único fragmento, em vez de esperar que o fragmento inteiro seja enviado ao cliente. #106535 (Roman Vasin). - Reduzida a latência de cancelamento para consultas executadas pelo MySQL wire protocol:
KILL QUERYagora interrompe a serialização da saída dentro de um único fragmento, em vez de esperar que o fragmento inteiro seja enviado ao cliente. #107228 (Roman Vasin). - Corrigida a leitura do comprimento de
auth_responseno handshake do MySQL, em que um byte de comprimento>= 128era interpretado como um valor de vários gigabytes porque era lido como umcharcom sinal. #107384 (uwezkhan). MaterializedPostgreSQLagora mapeia colunas PostgreSQLnumeric(p, 0)com precisão maior que 76 (por exemplo,numeric(78, 0)usado para inteiros de 256 bits) para ClickHouseInt256, em vez de falhar com “Precision too big”. Valores que não cabem emInt256são rejeitados com uma mensagem de erro clara. #107431 (Alexey Milovidov).- Envia uma exceção ao cliente quando a inicialização da conexão TCP falha. #107317 (Nikolai Kochetov).
- Agora os usuários podem inserir campos
FixeddoAvropara variantes de inteiros de 8/16/32/64 bits. #98139 (Patrick Pichler). - O format
AvroConfluentagora faz novas tentativas no Confluent Schema Registry HTTP client em falhas transitórias (timeouts de transporte, conexão recusada, erros de DNS, HTTP5xx/408/429) com backoff exponencial, em vez de abortar o INSERT na primeira instabilidade de rede. As novas Settingsformat_avro_schema_registry_max_retries(padrão5) eformat_avro_schema_registry_retry_initial_backoff_ms(padrão100) controlam essa política. Erros de validação de schema (HTTP409, Avro JSON malformado) continuam sendo fatais. #106661 (Groene AI). - Registra privilégios em
system.query_log.used_privilegespara todas as verificações de acesso concedidas, incluindo as que passam pelo caminho sem exceçãoisGranted(checkAccessWithFilter). Antes, apenas os privilégios verificados por pontos de entrada que lançam exceção (checkAccess/checkGrantOption) eram registrados, o que deixavaREAD ON FILE/READ ON S3/READ ON AZURE/READ ON URLinvisíveis no log de auditoria deDESCRIBE,CREATE TABLE ASe consultas semelhantes que usam table functionsfile/s3/azure/url. A aplicação do controle de acesso permanece inalterada. #104693 (Alexey Bakharew). - Adicionadas as métricas assíncronas
TotalUncompressedBytesOfMergeTreeTableseTotalUncompressedBytesOfMergeTreeTablesSystem, que informam o tamanho total não comprimido dos dados armazenados em tabelas da família MergeTree. #106364 (Alexey Milovidov). - Adicionado o evento de perfil
GlobalMemoryLimitExceededpara que operadores possam monitorar quando o limite global de memória do servidor é atingido. #106466 (Sacheendra Talluri). - Popula os contadores
ExecutableUserDefinedFunction*deProfileEventspara UDFsexecutable_pool. A contagem de invocações por chamada, o tempo total e o tempo de espera no pool, a CPU e a memória de pico dos processos filhos, além dos bytes de stdin/stdout, agora estão visíveis emsystem.query_log.ProfileEvents. #105010 (Xu Jia) #105618 (Ilya Andreev). - Adicionadas as métricas assíncronas
ExecutableUserDefinedFunctionMemoryResidentByteseExecutableUserDefinedFunctionProcesses, que informam a memória residente (VmRSS) e o número de processos em execução de Funções Definidas pelo Usuárioexecutableeexecutable_pool, incluindo processos descendentes e workers ociosos do pool. #107300 (Hanzi Jiang). - Adicionadas três métricas async exclusivas do Linux —
MemoryThreadStacksCount,MemoryThreadStacksVirtualeMemoryThreadStacksResident— que informam a memória de stack de pthread separadamente do restante da memória anônima. Habilitadas viaasynchronous_metrics_enable_heavy_metrics. Requer Linux 5.17+ (prctl(PR_SET_VMA_ANON_NAME)) e/proc/self/smapslegível; caso contrário, as métricas ficam ausentes e a limitação é informada emsystem.warnings. #106230 (Raúl Marín). - Expõe as métricas assíncronas
MemoryThreadStacks*(tamanho residente/virtual e contagem de stacks de threads) no macOS. #107752 (Raúl Marín). - Os motores de tabela agora incluem documentação embutida, inspecionável por meio das novas colunas
description,syntax,examples,introduced_inerelatedda tabelasystem.table_engines. #106177 (Alexey Milovidov). - Os motores de banco de dados agora incluem documentação embutida, inspecionável por meio das novas colunas
description,syntax,examples,introduced_inerelatedda tabelasystem.database_engines. #106178 (Alexey Milovidov). - Os tipos de dados agora incluem documentação embutida, inspecionável por meio das novas colunas
description,syntax,examples,introduced_inerelatedda tabelasystem.data_type_families. #106180 (Alexey Milovidov). - Os formatos de entrada/saída agora incluem documentação embutida, inspecionável por meio das novas colunas
description,examples,introduced_inerelatedda tabelasystem.formats. #106181 (Alexey Milovidov). - Os combinadores de função de agregação agora incluem documentação embutida, inspecionável por meio das novas colunas
description,syntax,examples,introduced_inerelatedda tabelasystem.aggregate_function_combinators. #106185 (Alexey Milovidov). - Adicionada a opção de linha de comando
--chimeaoclickhouse-client,clickhouse-locale ao client embutido. Quando uma consulta termina (com sucesso ou com erro) após ser executada por pelo menos N segundos, o client grava o caractere de controle ASCIIBEL(\x07) em stderr. Os terminais decidem se devem emitir um som ou um alerta visual com base nas preferências do usuário. Habilitado por padrão com um limite de 5 segundos; passe--chime Npara um limite personalizado ou--chime 0para desabilitar. Fecha #92718. #104545 (Groene AI). - No
clickhouse-client, quando o terminal não oferece suporte a colagem entre colchetes, as quebras de linha embutidas em uma consulta multilinha colada agora são agrupadas no mesmo buffer de edição, em vez de alternar para o prompt de continuação a cada linha. A consulta colada permanece em um único prompt, e as teclas de seta permitem navegar entre suas linhas. Esta é uma melhoria de melhor esforço, que depende do comportamento típico de colagem com buffer de TTY. #104299 (Alexey Milovidov). Agora também funciona com o syntax highlighting desabilitado (--highlight 0). #106665 (Alexey Milovidov). - Adiciona controle de pager em runtime no estilo do MySQL para
clickhouse-client/clickhouse-local. #105706 (Azat Khuzhin). - O
clickhouse-clientagora respeita terminais não UTF-8: quando a codificação de caracteres do terminal não é UTF-8 (por exemplo, comLANG=C), os formatosPrettypassam a usar bordas de grade ASCII em vez de imprimir caracteres Unicode de desenho de caixa que corromperiam o terminal. #106213 (Alexey Milovidov). - Sanitiza as strings de exibição fornecidas pelo servidor no tratamento do pacote
Hellodoclickhouse-client(nome do servidor, time zone, nome de exibição, patterns e mensagens de regras de senha), para que um servidor malicioso não possa injetar bytes que o client renderize literalmente, e limita seu tamanho para evitar allocation sem limites. #105243 (Raúl Marín). - A interface web agora exibe o resultado como uma imagem quando uma consulta usa um output format de imagem, como
FORMAT PNG, em vez de mostrar os raw bytes como tabela. #107638 (Alexey Milovidov). - Adiciona a configuração
output_format_pretty_use_nbsp_for_paddingpara renderizar o padding do layout de tabela nos formatosPrettyem estilo de tabela comoU+00A0NO-BREAK SPACE quandooutput_format_pretty_grid_charsetforUTF-8. Isso ajuda a saídaPrettycopiada a manter o alinhamento da tabela em ferramentas que colapsam espaços comuns. A configuração vem desabilitada por padrão, e a saída com charsetASCIImantém espaços comuns. #103559 (Ashrith Bandla). - O script de instalação universal agora também instala
clickhousectlem~/.local/binno Linux e macOS, com um link simbólicochctl. DefinaCLICKHOUSE_ONLY=1para pular isso. #105399 (Alasdair Brown). - Corrigido um
Syntax error: Unterminated quoted stringespúrio que podia ocorrer intermitentemente ao instalar o ClickHouse viacurl https://clickhouse.com/ | shquando já existia um binaryclickhouseno current directory. #106417 (Alexey Milovidov). - Corrige a altura do painel esquerdo na página
play.htmlquando o web terminal está aberto, para que o botão de toggle do terminal na parte inferior permaneça visível. #105087 (Alexey Milovidov). - Evita selecionar a única consulta na interface web depois de executá-la. #105711 (Joey Yu).
- A interface web SQL agora expande o editor de consultas quando uma consulta tem altura no máximo 30% maior que a altura atual do editor. #105713 (Joey Yu).
- Na interface web, disponha os ícones do menu inferior (Terminal web e GitHub) horizontalmente quando o painel esquerdo estiver expandido, dando à lista de bancos de dados e tabelas mais espaço vertical. #106427 (Alexey Milovidov).
- Na interface web (
play.html), pressionarEscapeagora desativa a célula atualmente selecionada na tabela de resultados. #107777 (Alexey Milovidov). - Melhorias no painel de bancos de dados da interface web SQL (Play): uma dica de ferramenta no ícone do banco de dados, um botão para ocultar o painel, nomes de bancos de dados/tabelas clicáveis em toda a largura e uma correção para a mudança na largura do painel quando a barra de rolagem aparece. #108013 (Alexey Milovidov).
- Adiciona uma configuração do servidor (
min_allocation_size_to_throw_on_memory_limit) para permitir que qualquer alocação lanceMEMORY_LIMIT_EXCEEDED; isso deve ajudar a evitar OOMs. #105265 (Azat Khuzhin). - Permite autenticação
NONEpara SSH (evita pedir senha para usuáriosno_password). #105476 (Azat Khuzhin). - Redefine a lista de grupos suplementares em
clickhouse suantes de descartar privilégios, alinhando-se ao comportamento de/bin/suesudo. Antes, o processo com privilégios descartados herdava os grupos suplementares de quem o invocava. #105247 (Raúl Marín). - Adiciona suporte a
BFloat16para funções de predicado numérico (isFinite,isNaN). #105391 (Mohamed Hussain S). - Reduz o uso de memória dos dicionários de polígonos (
polygon_index_cell,polygon_index_each) e faz com quesystem.dictionaries.bytes_allocatedreflita corretamente o índice de busca que eles constroem. #105431 (Raúl Marín). - Corrige consumers do Kafka table engine que continuavam usando um intervalo de poll curto após a atribuição de partição, para que voltem ao
kafka_poll_timeout_msconfigurado e evitem polls vazios em excesso, partes inseridas menores e sobrecarga extra de merge após rebalances. #100431 (sugaf1204). - Identifica colunas por posição (em vez de por nome) ao remover colunas não utilizadas no plano de consulta. Isso permite remover colunas não utilizadas quando há nomes de coluna duplicados. #100586 (János Benjamin Antal).
- O ClickHouse lança uma exceção apropriada para tentativas de usar
table_readonlyem engines replicados, com melhor tratamento de exceções para consultas DDL (eDatabaseReplicated) relacionadas a essa configuração. #100950 (alesapin).OPTIMIZE TABLE ... ON CLUSTERe outros DDL não ficam mais travados quando a tabela de destino temtable_readonly = 1. A configuração agora lança um novo código de erro dedicado,TABLE_IS_PERMANENTLY_READ_ONLY, queDDLWorkertrata como não passível de nova tentativa (distinto do transitórioTABLE_IS_READ_ONLY, que surge durante desconexões temporárias do ZooKeeper emReplicatedMergeTree). A configuraçãotable_readonlyagora também é explicitamente rejeitada paraReplicatedMergeTree, tanto na criação quanto viaALTER MODIFY SETTING. Continuação de #97652. #105109 (Alexey Milovidov). - Corrigidas atualizações de views materializadas atualizáveis que podiam falhar com
UNKNOWN_TABLEapós a tabela de destino ter sido substituída (por exemplo, viaEXCHANGE TABLESou ao excluir e recriar): agora a atualização resolve a tabela de destino pelo nome, em vez de depender de um UUID obsoleto. #102724 (Seva Potapov). - Adicionada a configuração
wait_for_part_commit_in_dependent_materialized_views(padrãofalse). Quando oSELECTde uma visão materializada relê sua própria tabela de origem (por exemplo, via umINNER JOINcom a origem), a cascata podia não ver a linha que estava sendo inserida naquele momento, porque a part inserida só recebe commit depois que as views dependentes são executadas. Ao ativar essa configuração, a part recebe commit antes de as views dependentes serem acionadas, para que elas vejam a linha em trânsito, com o custo de menor paralelismo de insert. #105943 (Elmi Ahmadov). - Não suprimir erros fatais (por exemplo,
MEMORY_LIMIT_EXCEEDED) emtryDeserialize. #106808 (Azat Khuzhin). - Verificação sob demanda da permissão
CREATE TEMPORARY TABLEemInverseDictionaryLookupPass. #107098 (Azat Khuzhin). - Corrigido um erro
ILLEGAL_TYPE_OF_ARGUMENTpara consultas distribuídas comserialize_query_plan = 1que contêm uma lambda com um argumento constante (por exemplo,arrayMap(t -> t.2, ...)). As colunas constantes dos nósINPUTdeActionsDAGagora são preservadas durante a serialização do plano de consulta. #107124 (Alexey Milovidov). - A desserialização dos estados das funções agregadas
contingency,cramersV,cramersVBiasCorrectedetheilsUagora valida que as contagens armazenadas formam uma tabela de contingência consistente e lança uma exceçãoCORRUPTED_DATAcaso contrário. Fecha #106899. #107185 (Nihal Z. Miaji). - Preservados os códigos de erro originais para exceções encapsuladas em
arrow::Status. #107267 (Azat Khuzhin). - Adicionado suporte a
keyed_by_normalized_query_hashpara quotas definidas na configuração estática do servidor (users.xml), em conformidade com a sintaxe DDL existenteCREATE QUOTA ... KEYED BY normalized_query_hash. #107654 (Alexey Milovidov). - A configuração de compatibilidade não aplica mais configurações obsoletas, portanto não as marca como alteradas nem gera avisos de configuração obsoleta. #107737 (Maxim Orlovsky).
- Os inserts assíncronos não registram mais a lista completa de
query_ids no níveltrace/debug, o que, desde a versão 26.2, podia inflartext_logem serviços com tráfego intenso de inserts assíncronos. As entradas detalhadas agora ficam no níveltest. #107852 (Sema Checherinda). - Melhoria no cache do sistema de arquivos: impedir que entradas de prioridade invalidadas mantenham
KeyMetadatafixado. Continuação de #106387. #107903 (Kseniia Sumarokova). - Melhoria nas métricas de
FileCache. #106116 (Kseniia Sumarokova). - Não imprimir o preâmbulo “Stack trace (when copying this message, always include the lines below):” em mensagens de exceção quando o stack trace estiver de fato vazio. #106524 (Alexey Milovidov).
- Corrige um possível overflow em
roundUpToMultipleao calcular o alinhamento da fronteira do filesystem cache para offsets muito grandes. #92579 (Bharat Nallan). EXPLAIN SYNTAXagora formata operadores como chamadas de função de maneira consistente na saída do explain (por exemplo,plus(1, 2)em vez de1 + 2). #94681 (Mohamed Abdelhalim ).- Melhoradas as sugestões de nomes de tabelas nas mensagens de erro: não sugere mais exatamente o mesmo nome e inclui o nome do banco de dados na sugestão (por exemplo, “Maybe you meant
other_db.my_table?”). #95116 (Mathuranath Metivier). - Melhorada a mensagem de erro para identificadores não resolvidos em consultas sem uma cláusula
FROM, sugerindo adicionar uma. #101769 (Yash ). - Adiciona a opção
EXPLAIN PIPELINEpara compactar cadeias repetidas de processadores. #104662 (Yue Ni). - Corrige uma leitura com heap-buffer-overflow na construção de mensagens de erro de sintaxe (
UTF8::computeWidthImplviaparseQuery.cpp) que ocorria quando o parser retrocedia além do primeiro token de ponto e vírgula / fim de fluxo; nas compilações de lançamento, bytes da memória heap vizinha eram inseridos no erro exibido, enquanto compilações com ASan abortavam. #105086 (Groene AI). - Torna a estratégia de partição hive o padrão na configuração de compatibilidade
file_like_engine_default_partition_strategy. #86746 (Kseniia Sumarokova). - Usa uma stack de thread maior (8 MiB) no macOS para corresponder ao padrão do Linux, corrigindo falhas raras do servidor por stack overflow durante a compilação JIT. #107033 (Raúl Marín).
- O limite de tamanho do armazenamento temporário do
clickhouse-localnão é mais fixado em 1 GiB. O padrão foi aumentado para 1 TiB e pode ser configurado com a configuração do servidormax_temporary_data_on_disk_size. #106689 (Alexey Milovidov). - Adiciona o comando
read-checksumsaoclickhouse-disks. Ele lê o arquivochecksums.txtde umaMergeTreeDataParte o imprime como uma tabela legível por humanos, separada por tabulação. #106901 (Asya Shneerson). - Adiciona o comando
read-bitmapaoclickhouse-disks. #107834 (murphy-4o). - Chdig: habilita TLS para conexões seguras (antes, isso levava a “unknown setting
skip_verify” ou “connection reset by peer”). #105864 (Azat Khuzhin). chdigv26.5.1. #105918 (Azat Khuzhin).chdigv26.6.1 -{asynchronous_,}metric_log, padrões de consulta, mapas de calor, logs/traces armazenados em disco (antes podia consumir >40GiB para 1 hora de traces). #107678 (Azat Khuzhin).- A configuração do servidor (
programs/server/config.xml) agora definekeep_alive_timeoutcomo 30 (antes, 10), alinhando-o ao valor padrão real documentado e implementado. #107779 (Dan Checkoway). - O valor padrão da configuração do servidor
disk_connections_rcvbufmudou de0(autotuning de TCP do kernel) para204800(200 KB), limitando o buffer de recepção TCP por socket para conexões de disco com armazenamento de objetos (S3/Azure/GCS). #107859 (Sema Checherinda). - O otimizador
PREWHEREagora agrupa conjunções que fazem referência ao mesmo conjunto de colunas antes de estimar a seletividade, para que condições comoa > 2500 AND a < 2502sejam avaliadas em conjunto como um intervalo combinado, em vez de dois predicados independentes, produzindo uma estimativa de seletividade mais precisa. #106337 (Han Fei). - Adicionadas implementações de socket seguras e sem criptografia com suporte a silk fiber. #107680 (Miсhael Stetsyuk).
- Corrigida uma mensagem de erro corrompida (argumentos invertidos) e um erro de digitação na função
nested. #108031 (Alexey Milovidov). - Adicionado um comando
sedaoclickhouse-disksque aplica uma expressão sed a um caminho especificado, no próprio local. #107131 (Asya Shneerson). - Adicionada a configuração em tempo de criação
materialized_postgresql_use_extended_date_and_time_typespara o database engineMaterializedPostgreSQL. Por padrão (habilitada), as colunasdate/timestampdo PostgreSQL são inferidas comoDate32/DateTime64; ao defini-la como0no momento deCREATE DATABASE, são inferidos os tipos mais restritosDate/DateTime. #107428 (Alexey Milovidov).
Correção de bug (comportamento incorreto perceptível ao usuário em uma versão estável oficial)
- Passa a ser possível remover detached parts com o sufixo
tryN. #58957 (János Benjamin Antal). - Corrige uma exceção
MULTIPLE_EXPRESSIONS_FOR_ALIASem consultas com aliases de projeção duplicados (por exemplo,SELECT *, day + 365 AS day) dentro de subconsultas aninhadas ao executar com réplicas paralelas. #80310 (Alexey Milovidov). - Corrige um bug em
splitMultipartQueryque gerava o erro “Empty query” em consultas que terminam com comentário após o ponto e vírgula. #85491 (Yarik Briukhovetskyi). - Corrige uma exceção com
ARRAY JOINs:Function writeSlice expects same column types for GenericArraySlice and GenericArraySink, que ocorre quando são usados tipos numéricosLowCardinality(issue #57243). #91784 (Jimmy Aguilar Mena). - Corrige a exceção
NOT_FOUND_COLUMN_IN_BLOCKao usarLIMIT BYcom colunas constantes junto comDISTINCTeORDER BYno novo analyzer. #93195 (Ashrith Bandla). - Corrige colunas
NOT NULLsendo criadas silenciosamente comoNullablequandodata_type_default_nullable = 1e a tabela é criada em um banco de dadosReplicatedou viaON CLUSTER. #97572 (xiaohuanlin). - Corrigida a estabilidade da conexão do HiveCatalog com a adição de um mecanismo de retry automático e lógica de reconexão para lidar com erros TTransportException na comunicação com o Hive Metastore. #98471 (Dmitriy Borisenko).
- Corrigida a função
nested(usada internamente porARRAY JOIN) que removiaLowCardinalitydos tipos de coluna, fazendo com queArray(LowCardinality(String))se tornasseArray(String)na saída. Fecha #95582. #98974 (Yash ). - Corrige a exceção “Distributed task iterator is not initialized” ao usar
url,s3ou funções de tabela semelhantes em consultas com réplicas paralelas habilitadas. #100146 (Alexey Milovidov). - Corrige uma exceção de erro lógico ao ler tabelas Iceberg cuja versão de formato foi atualizada por uma ferramenta externa (por exemplo, Spark). #100407 (Alexey Milovidov).
- As funções
like,ilike,notLike,notILikeematchagora oferecem suporte a haystack constante com needle não constante (por exemplo,'foo' LIKE pattern_column), o que antes geravaILLEGAL_COLUMN. #100479 (Yash ). - Corrigida a contagem incorreta de linhas retornada por uma consulta de
MaterializedViewcomquery_plan_enable_optimizations = 0quando a view mapeia uma coluna inteira para uma colunaBool. #100692 (Maksim Moisiuk). - Corrige uma exceção (
LOGICAL_ERROR: 'PREWHERE passed to format that doesn't support it') ao ler tabelas Iceberg que contêm arquivos de dados ORC com a otimização PREWHERE habilitada. #101206 (Groene AI). - Corrige uma condição de corrida no RestCatalog. #101216 (Smita Kulkarni).
- Corrige o erro
NOT_FOUND_COLUMN_IN_BLOCKao selecionar dados de uma VIEW sobre uma tabela com uma projeção normal. #101218 (Amos Bird). - Corrige metadados desatualizados no FileLog quando um arquivo é excluído e recriado. #101408 (Azat Khuzhin).
- Corrige a reordenação de join, que descartava silenciosamente linhas sem correspondência de um
RIGHT/LEFT JOINquando ele era combinado por vírgula (cross) com outra tabela, por exemplo,t1 RIGHT JOIN t2 ON t1.c = t2.c, t3. Antes, a consulta retornava o resultado de um inner join em vez de um outer join. #101684 (Groene AI). - Corrige o caso em que a cláusula
FORMATera consumida porINSERTem vez de ser aplicada à saída deEXPLAINemEXPLAIN INSERT INTO ... SELECT ... FORMAT .... #101772 (Yash ). - Corrige a seleção incorreta do compression codec para partes
MergeTreequando a configuraçãodefault_compression_codecno nível da tabela era definida explicitamente. As partes gravadas on insert, durante merges e para projeções usavam o codec padrão do servidor em vez da configuração no nível da tabela (a parte vazia produzida por uma mutação que exclui tudo agora também está coberta). #101784 (Yash ). - Rejeita valores negativos de
Float64(por exemplo,-100.5) em configurações de workload comomax_bytes_per_second,max_cpusetc. Antes, apenas inteiros negativos eram validados, permitindo que floats negativos criassem silenciosamente nós de scheduler inválidos. Fecha #101825. #101842 (Groene AI). - Corrige um
LOGICAL_ERROR(“Port is not connected”, código 49) que podia ocorrer ao executar consultas envolvendo uma VIEW com agregação dentro de um JOIN. #102574 (Jimmy Aguilar Mena). - Corrige metadados inconsistentes de partes após mutações de colunas com serializações não padrão. #102817 (Eduard Karacharov).
- Corrige a atualização dos metadados antes da execução da mutação, resolvendo #96806. #102882 (Smita Kulkarni).
- Corrige consultas SELECT significativamente mais lentas quando
INSERTs concorrentes estão em execução. Antes, um pipeline deINSERTreservava slots de CPU atémax_threadsno início da consulta, mesmo quando a maioria desses slots nunca era usada, prejudicando instrução SELECT concorrentes. A alocação de slots de CPU agora passa a ser orientada pela demanda: o pipeline só solicita slots à medida que realmente envia trabalho paralelizável. Isso se aplica tanto ao controle de concorrência quanto ao scheduler preemptivo de CPU para workloads. A nova configuração de servidorconcurrent_threads_lazy_allocation(padrãotrue) funciona como uma alavanca de rollback. #102928 (Seva Potapov). - Corrige a propagação de
NULLao ler subcolunas extraídas de colunasNullable(Tuple(...)). Por exemplo, paratup Nullable(Tuple(s Nullable(String))),SELECT tup.sagora retorna corretamenteNULLnas linhas em que a tupla externa éNULL, em vez de valores lixo. Isso abrange todos os tipos de elemento que podem representarNULL:Nullable,Dynamic,VarianteLowCardinality(Nullable(...)). Fecha #105356. #102942 (Nihal Z. Miaji). - Gera
INCORRECT_DATAem vez deLOGICAL_ERRORquando os dados fornecidos pelo cliente no formato Native estão truncados ou malformados. #102975 (János Benjamin Antal). - Adiciona verificação de cancelamento à operação de leitura de ObjectStorage. Fecha #98165. #103016 (Smita Kulkarni).
- Passa a respeitar
input_format_binary_max_type_complexityna decodificação de parâmetros de função de agregação. Fecha #102903. #103026 (Pavel Kruglov). - Corrige a inferência de nulabilidade para colunas geoespaciais no leitor de Parquet baseado em Arrow. Fecha #101845. #103032 (Pavel Kruglov).
- Corrige o
recursiveRemoveLowCardinality, que removia nomes personalizados de tipos de geometria (por exemplo,LineStringvsRing,MultiLineStringvsPolygon), causando interpretação incorreta do tipo de geometria. Fecha #103207. #103041 (Joanna Hulboj). - Corrige o problema em que
input_format_max_block_size_bytesera ignorado silenciosamente durante o parsing deINSERTquandomax_insert_block_size_bytesé0(o padrão). A configuração agora limita corretamente o tamanho dos blocos produzidos por formatos de entrada orientados a linhas. #103068 (Kirill Kopnev). - Corrige o problema em que o ClickHouse ocasionalmente produzia tokens GSSAPI inválidos devido à remoção incorreta de bytes nulos finais. #103114 (Michael Jarrett).
- Corrige o constant folding em tempo de analyzer para funções de curto-circuito (
if,multiIf,and,or, etc.), para que ramificações estaticamente inalcançáveis não gerem mais exceções no momento da análise. Por exemplo,WITH 0 AS n SELECT multiIf(n = 0, 0, intDiv(100, n))agora retorna corretamente0em vez de falhar com um erro de divisão por zero. #103157 (Peng). EXPLAIN SYNTAXexpande views parametrizadas. #103263 (Jordi Villar).- Corrige a corrupção de dados ao gravar Parquet (e outros formatos com trailer, como ORC e Arrow) no HDFS via
INSERT INTO FUNCTION hdfs(...). Desde a versão 26.1,WriteBufferFromHDFSnão fazia flush do buffer de trabalho emfinalize(), então os últimos atéDBMS_DEFAULT_BUFFER_SIZEbytes de cada arquivo eram perdidos silenciosamente, incluindo o rodapéPAR1do Parquet. A leitura desses arquivos retornavaNot a Parquet file (wrong magic bytes at the end of file). #103268 (Groene AI). - Corrige resultados incorretos e um possível erro lógico em subconsultas correlacionadas quando um limite de tamanho de
join(max_rows_in_join/max_bytes_in_join) é definido junto comjoin_overflow_mode = 'break'. Ojoincriado internamente para avaliar uma subconsulta correlacionada agora ignora esses limites do usuário, portanto não pode mais parar antes do tempo e descartar linhas. #103322 (Groene AI). - Corrige um bug em que
ALTER TABLE ... MODIFY SETTINGem uma tabelaEmbeddedRocksDBpodia persistir um valor de configuração inválido no arquivo de metadados da tabela, mesmo quando o servidor rejeitava a consulta. Na reinicialização seguinte do servidor, a tabela deixava de poder ser anexada comCANNOT_PARSE_BOOL(ou um erro de parsing semelhante) e, em bancos de dados em que falhas de carregamento são fatais, o servidor se recusava a iniciar. Valores de configuração inválidos agora são rejeitados antes que qualquer metadado seja gravado. #103417 (Groene AI). - Corrige um abort do servidor ao criar uma tabela com um motor de armazenamento de objetos (
AzureBlobStorage,DeltaLakeAzure,S3,HDFS) usando um número de argumentos sem suporte. O servidor agora retorna um erroNUMBER_OF_ARGUMENTS_DOESNT_MATCHclaro, em vez de abortar em builds de debug/sanitizer. #103544 (Groene AI). - Corrige uma falha do servidor no parsing de parâmetros dos tipos de dados
JSONeDynamicquando a árvore de sintaxe abstrata (AST) estava estruturalmente malformada (por exemplo, produzida pelo AST fuzzer): a expressão de parâmetroequals(name, value)podia ficar com menos de dois filhos, queDataTypeObjecteDataTypeDynamicentão desreferenciavam sem verificação de limites. #103545 (Groene AI). - Corrige erros lógicos no analyzer com colisão de nomes de coluna em lambda usada em
PREWHERE. Fecha #103584. #103627 (Pavel Kruglov). - Corrige o erro esporádico
Logical error: 'Database <name> not found'deDataLakeConfiguration::getCatalogquando uma tabela com engineIcebergé carregada dentro de um banco de dados comum durante o carregamento assíncrono de metadados. #103775 (Groene AI). - Corrige erros
MULTIPLE_EXPRESSIONS_FOR_ALIASlançados por réplicas remotas ao executar consultas que referenciam aliases de projeção dentro dePREWHERE/WHERE/HAVING/QUALIFY(por exemplo,SELECT x AS a, y AS b, (a AND b) AS c FROM t PREWHERE c) ouSELECT *em autorjunções com nomes de coluna sobrepostos, com réplicas paralelas eparallel_replicas_local_plan = 0. Fecha #74324. #103806 (Groene AI). - Corrige um abort do servidor quando uma consulta usa comparações aninhadas de
coalesce/ifNull(por exemplo,WHERE coalesce(a, b, coalesce(c, d), e) = const) em uma tabelaMergeTreecom vários skip indexesminmaxeuse_skip_indexes_for_disjunctions = 1. A reescrita de skip index de<op>(coalesce(...), const)agora é aplicada recursivamente aos argumentos internos decoalesce, para que a RPN deKeyConditionpor índice corresponda à RPN do template, como o código de rastreamento de disjunção já pressupõe. #103929 (Groene AI). - Corrige
max_rows_to_transferemax_bytes_to_transfer, que eram ignorados silenciosamente em consultasGLOBAL INeGLOBAL JOINno novo analyzer. As configurações agora geramSET_SIZE_LIMIT_EXCEEDED(ou interrompem a execução, dependendo detransfer_overflow_mode) quando a tabela external materializada excede o limite configurado, alinhando-se ao comportamento do analyzer antigo. Fecha #103333. #104119 (Groene AI). - Corrige leituras excessivas de metadata de catálogo/S3 quando um
INSERTou uma instrução DDL faz referência a uma tabela inexistente em um database de catálogo DataLake comshow_data_lake_catalogs_in_system_tableshabilitado. O caminho de sugestão para correção de erros de digitação carregava todos os metadata Iceberg por tabela de todo o catálogo, o que podia esgotar a memória em catálogos grandes. #104124 (DQ). - Corrige uma falha (
LOGICAL_ERROR“Columns are assumed to be of identical types, but they are different in Nullable” em compilações de depuração, um SIGSEGV por ponteiro nulo emColumnString::compareAtem compilações de lançamento) e um resultado incorreto que podiam ocorrer em consultas usandodirectjoin_algorithmcom uma tabelaMergeTreeno lado direito quando o query plan reordenava colunas durante a otimização. As colunas do lado direito podiam acabar em slots com nomes incorretos, fazendo com que um filter ou uma comparação na chave de junção visse uma coluna do tipo errado. Detectado pelo AST fuzzer como STID 2139-5111 e reportado em #107272. #104174 (Groene AI). - Rejeita partition ID inteiro fora do intervalo para
Date, em vez de causar overflow silencioso ouLOGICAL_ERRORemALTER. #104250 (Azat Khuzhin). - Desabilita
additional_table_filterscom réplicas paralelas e o analyzer sem serialização do query plan. Antes, isso podia levar a resultados incorretos. #104296 (Azat Khuzhin). - Corrige
dictGetOrNull, que sobrescrevia silenciosamente outras colunas na projeçãoSELECTcomNULLquando chamada com uma coluna-chaveNullablecujos valores estão ausentes no Dicionário. A função estava modificando in place um mapa de nulos com alias da entrada; agora, ela faz uma cópia profunda da coluna de resultado antes da mutação. Fecha #73633. #104327 (Groene AI). - Corrige uma patch part corrompida após
ALTER TABLE ... DROP PARTITION ID 'patch-...'seguido deDETACH/ATTACH TABLE. Antes, a parte de cobertura vazia era gravada sempartition.datesource_parts.dat, o que levava a uma entradabroken-on-start_patch-...emsystem.detached_partsapós o próximo attach ou a reinicialização do servidor. Fecha #93132. Fecha #102103. #104353 (Groene AI). - Corrige
INSERTem streaming cominput_format_max_block_wait_mspara a interfaceHTTPe paraINSERT SELECT FROM input, para que blocos de entrada parciais sejam gravados em disco antes do fim da request. #104534 (Alexey Milovidov). - Corrige um bug em que consultas que combinavam
arrayJoincomORDER BY ... LIMITapós umJOINpodiam retornar zero linhas silenciosamente. A otimização do plano de consulta que move a avaliação de função para antes doSortingStepnão se aplica mais quando a expressão movida contémarrayJoin, já quearrayJoinpode alterar o número de linhas. Fecha #82279. #104558 (Groene AI). - Corrige um raro aborto do servidor durante a destruição de uma tabela da família
MergeTree. O aborto podia ocorrer quandoshutdownlançava uma exceção antes que o scheduler de tarefas em segundo plano fosse totalmente interrompido: uma tarefa em segundo plano disparada nessa pequena janela faria o encaminhamento de uma chamada virtual por meio de um objeto de armazenamento parcialmente destruído e atingiria__cxa_pure_virtual. #104561 (Groene AI). - Corrige resultado inconsistente em subcoluna combinada
JSONcom uma dica de tipo contendo valor nulo. #104584 (Pavel Kruglov). - Corrige resultados incorretos ou projeção ignorada quando uma projeção agregada contém vários agregados
sumIfcom diferentes condiçõesIN (...). #104765 (Jimmy Aguilar Mena). - Corrige contagem incorreta de linhas de
arrayJoin()usado dentro deJOIN ON: o resultado era multiplicado pelo comprimento do array uma vez a mais. #104785 (Shaohua Wang). - Corrige
deltaSumTimestampretornando resultados incorretos para tipos inteiros com sinal que cruzam zero. Resolve #104750. #104830 (Konstantin Bogdanov). - Corrige incompatibilidade na estrutura de blocos em UnionStep após push-down de filtro com constantes NULL. Fecha #104821. #104853 (Pavel Kruglov).
- Corrige
Logical error: 'Metadata is not initialized'gerado porDELETE FROMem uma tabelaIceberg,DeltaLakeouHudirecém-attached cujo arquivo de metadados está corrompido ou não pode ser carregado. Em vez disso, é reportada uma exceção normal voltada ao usuário, e o servidor continua em execução. Fecha #104891. #104917 (Groene AI). - Corrige o fato de
max_memory_usage_soft_limitnão ser atualizado on-the-fly quando a configuração mudava. O soft memory limit era calculado uma vez na inicialização e armazenado em cache, portanto recarregamentos posteriores da configuração não tinham efeito. Após essa correção, o limite é recalculado e aplicado imediatamente a cada recarregamento da configuração, sem necessidade de reiniciar o Keeper. #104940 (Kai Zhu). - Corrige a resolução de símbolos JIT no macOS para que a compilação JIT de ordenação, expressão e agregação não falhe mais com
CANNOT_COMPILE_CODE: Could not find symbol _<name>. #104946 (Alexei Fedotov). - Corrige uma exceção (
Received signal 6 (abort)no hardening de vetor, observável comoTuple::back()em um vetor vazio) ao executar uma consulta no formatoSELECT ... FROM <Distributed table> WHERE/HAVING/GROUP BY ... (sharding_key_column IN tuple())comoptimize_skip_unused_shards_rewrite_inhabilitado sob o novo analisador. #104966 (Alexey Milovidov). - Corrige uma interrupção do servidor com
Logical error: 'Inconsistent AST formatting'(STID 1941-1bfa) em consultas comoCREATE TABLE t (c0 Int CODEC(not((not(materialize(1), materialize(2)))), ZSTD)) ENGINE = Memoryem compilações de debug / sanitiser. O formatador não emite mais parênteses externos redundantes em torno de uma chamada da funçãotuple(...)com vários argumentos dentro de listas de argumentos deCODEC/STATISTICS/BACKUP_NAME(onde a forma de operador(a, b)fica desabilitada), mantendo estável o round-trip de formatar-analisar-formatar. #104991 (Groene AI). - Corrige
NOT_FOUND_COLUMN_IN_BLOCKlançado porALTER TABLE ... MATERIALIZE INDEXem partes criadas na 25.8 que contêm um skip index sobre uma coluna adicionada com umALTER TABLE ... ADD COLUMNseparado. A mutation agora lê corretamente cada coluna exigida por cada skip index e projeção preexistente na partição durante o recálculo forçado. Fecha #104872. #105039 (Groene AI). - Corrige dois casos de
LOGICAL_ERROR: Reading from materialized CTE 'X' before it has been materializedlançados por consultas comenable_materialized_cte: (1) uma materialized CTE reutilizada e filtrada porIN (subquery)sobre outra materialized CTE; e (2) uma materialized CTE referenciada tanto diretamente quanto dentro de um filtroWHERE ... IN (...)que atinge uma chave primária do MergeTree por meio de uma subconsultaINaninhada. OEXPLAINdessas mesmas consultas também era afetado, porque os bugs eram disparados durante a otimização do plano. Fecha #101940, fecha #102320. #105041 (Dmitry Novik). - Corrige a estimativa de seletividade de
PREWHEREnas estatísticascountminpara colunasFloat32. Dois bugs faziam com que as estatísticascountminproduzissem silenciosamente estimativas incorretas para colunasFloat32:ConditionSelectivityEstimatorignorava completamente as estatísticas quando o tipo da coluna (Float32) era mais estreito que o tipo do literal (Float64), recorrendo à seletividade padrão e ignorando o sketch; eStatisticsCountMinSketch::estimateEqualcalculava o hash dos primeiros N bytes de um objetoField, masFieldarmazenaFloat32comoFloat64(NearestFieldType<Float32>=Float64), então o padrão de bytes usado no momento da consulta diferia dos bytes reais deFloat32armazenados durante a compilação. #105047 (Han Fei). - Consultas
ATTACH TABLE name <clauses>;que fornecem cláusulas de armazenamento (ORDER BY,PARTITION BY,PRIMARY KEY,SAMPLE BY,TTL,UNIQUE KEYouSETTINGSdo engine) sem umENGINEagora lançamBAD_ARGUMENTS, em vez de simplesmente reanexar a tabela com sua definição armazenada e descartar as cláusulas fornecidas pelo usuário.SETTINGSde sessão no nível da consulta (comolog_comment) continuam sendo aplicados. UseATTACH TABLE t;para reanexar usando os metadata armazenados, ouALTER TABLE t MODIFY SETTING ...apósATTACHpara alterar as configurações. #105068 (Groene AI). - Corrige um use-after-free em
runningAccumulatequando chamado em uma coluna cuja função aggregate retorna seu próprio state (por exemplo,uniqStateOrDefaultState,sumStateOrDefaultState,uniqStateForEachState). #105085 (János Benjamin Antal). - Corrige um bug na UI Web (
play.html): executar uma consulta enquanto o cursor estava após o único;final retornava “consulta vazia” em vez de executar a consulta. #105107 (Alexey Milovidov). - Corrige
LOGICAL_ERROR: 'No user in current context, it's a bug'quando umCREATE TABLE ... AS SELECTdentro de um banco de dadosReplicatedlê desystem.current_rolesousystem.enabled_roles. A consulta agora é executada com sucesso e retorna um conjunto de resultados vazio nesse contexto interno do worker de DDL. #105150 (Groene AI). - Corrigido
ILLEGAL_TYPE_OF_ARGUMENTao mesclar estados agregados dequantileExactWeightedInterpolated,quantileDDouquantilePrometheusHistogramcom suas contrapartes no pluralquantilesXxxMerge(e vice-versa). As variantes no singular e no plural dessas três famílias de quantile compartilham o mesmo estado agregado interno, mas não estavam listadas na tabela interna de mapeamento de nomes, por isso a mesclagem de estados entre funções — e a otimização de fusão de funções para essas famílias — era rejeitada. #105189 (Groene AI). - Corrige resultados incorretos de
toStartOfWeek,toLastDayOfWeek,toMonday,toStartOfMonth,toLastDayOfMonth,toStartOfQuarteretoStartOfYearpara argumentosDate32eDateTime64cujo resultado fica fora do intervalo deDate: em vez de estourar para datas arbitrárias, os resultados anteriores a1970-01-01agora são limitados a1970-01-01, e os resultados posteriores a2149-06-06são limitados a2149-06-06. Isso também corrige resultados de consulta incorretos (partes e grânulos podados incorretamente) quando essas funções eram usadas emWHEREsobre uma chaveDate32ouDateTime64contendo valores fora do intervalo. #105244 (Yarik Briukhovetskyi). - Corrige um logical error em
arrayRemovequando o primeiro argumento é um array deVariantcujas alternativas são todas incompatíveis com o tipo do segundo argumento evariant_throw_on_type_mismatchestá desabilitado. A função agora trata a comparação como “nunca igual” e retorna o array inalterado, em vez de acionar uma falha deassertTypeEqualityno servidor. #105248 (Groene AI). - A consulta pode ser executada com sucesso mesmo que
FileCachenão consiga criar algum diretório no disco para caching. #105250 (Den Kalantaevskii). - Corrige a interrupção do servidor com
Assertion 'px != 0' failedemExtremesTransformquando uma consulta comextremes = 1encontra uma Exception (por exemplo,MEMORY_LIMIT_EXCEEDED) enquanto a transformação está montando suas colunas de extremos a partir do primeiro chunk. O cliente agora recebe a Exception original em vez de provocar a falha do servidor. #105264 (Groene AI). LEFT ANTI JOINagora retorna corretamente a coluna da chave de junção do lado direito com valores padrão para linhas sem correspondência, em vez de duplicar o valor da chave da esquerda. Antes,SELECT a.x AS l, b.x AS r FROM a LEFT ANTI JOIN b ON a.x = b.xpodia retornarr = a.xpara as linhas sem correspondência, quando deveria retornar o valor padrão (0paraInt32,''paraString,NULLparaNullable). Apenas a coluna da chave de junção era afetada; as colunas não chave do lado direito já recebiam corretamente os valores padrão. O mesmo bug aparecia emRIGHT ANTI JOINsempre que o otimizador invertia os lados. Fecha #99959. #105278 (Groene AI).- Corrige a perda de dados no
clickhouse-localquando ele é iniciado repetidamente com um--default_databasediferente dedefault(por exemplo,clickhouse-local --path X -- --default_database=mydb): a busca pelo UUID do banco de dados persistido estava fixada emmetadata/default, então cada reinicialização gerava um novo UUID e as tabelas da execução anterior ficavam invisíveis. Fecha #101831. #105284 (Groene AI). - Corrige um erro lógico
Mutation ofMemorytable produced incomplete outputgerado ao executarALTER TABLE <memory_table> APPLY PATCHESouALTER TABLE <memory_table> APPLY DELETED MASK. TabelasMemorynão possuem patch parts nem deletion masks, então ambos os comandos agora são corretamente tratados como no-ops. #105286 (Groene AI). - Corrige consultas de longa duração com Unity Catalog ao passar um parâmetro
table_idna solicitação da consulta. #105303 (Konstantin Vedernikov). - Corrige
CANNOT_CONVERT_TYPEparaMergesobreMergesobreDistributedcomdistributed_group_by_no_merge=1. #105330 (Azat Khuzhin). - Corrige o caso em que
clickhouse localeclickhouse clientignoravam silenciosamente--query/-qquando um argumento posicional de arquivo também era fornecido. Ambas as formas agora produzemBAD_ARGUMENTSde forma consistente. #105334 (Raúl Marín). - Corrige
REPLACE TEMPORARY TABLE, que criava silenciosamente uma nova tabela quando o destino não existia. Agora ele geraUNKNOWN_TABLE, em conformidade com a semântica deREPLACE TABLE. UseCREATE OR REPLACE TEMPORARY TABLEpara manter o comportamento de criar ou substituir. #105373 (Groene AI). - Corrige falhas em leituras de longa duração (por exemplo,
INSERT ... SELECT) de um banco de dadosDataLakeCatalogcomcatalog_type = 'glue', que passavam a falhar com um erroExpiredTokenquando as credentials de sessão do STS capturadas no momento do carregamento dos metadados da tabela expiravam. As credentials do AWS STS agora são atualizadas no meio da consulta, para que essas leituras continuem após a expiração do token. #105381 (Pratima Patel). - Corrige erro lógico em
LIMIT BYnegativo em alguns casos quando usado comARRAY JOIN. #105403 (Nihal Z. Miaji). - Corrige
read_bytesinflado (e os bytes/s derivados mostrados emsystem.query_log, na barra de progresso etc.) ao ler arquivos Parquet. A implementação anterior informava o compressed size total do row group em cada chunk, então ler K de N colunas gerava uma supercontagem deN / K. Agora ele é somado apenas entre as colunas selecionadas. Também corrige o rastreamento de progresso no nível do arquivo para Iceberg tables, que antes nunca informava o tamanho do arquivo de dados. #105413 (Groene AI). - Corrige um possível segfault do servidor em cluster table functions (
s3Cluster,urlCluster,fileCluster, …) quando o planner produz umSELECTcom a flagrecursive_withdefinida, mas sem expressãoWITH. Fecha #105370. #105433 (Groene AI). - Corrige resultado incorreto de
countDistinct/uniqExactem colunasNullablequandocount_distinct_optimization = 1(o grupoNULLera contado incorretamente). #105439 (Raúl Marín). - Corrigido um heap-buffer-overflow ao ler arquivos Arrow ou ArrowStream com offsets intermediários corrompidos em uma coluna binária ou de string, e uma desreferenciação de ponteiro nulo ao ler colunas Arrow com geotags. #105449 (Raúl Marín).
- Valida tipos
Dynamic/VariantemPARTITION BYde janela; isso não era verificado antes quandoallow_suspicious_types_in_group_byestá desabilitado. Fecha #105028. #105450 (Pavel Kruglov). - Corrige
input_format_json_empty_as_default, que não funcionava nos formatos JSONStrings*. Fecha #104913. #105453 (Pavel Kruglov). - Corrige a inserção de
NULLem colunaVariantvia formatoVALUESdurante a análise de expressões. Fecha #104909. #105455 (Pavel Kruglov). - Corrige
dictGetOrDefaultlançandoCANNOT_INSERT_NULL_IN_ORDINARY_COLUMNquando o argumento padrão é uma expressãoNullableeshort_circuit_function_evaluationestá habilitado, com uma mistura de chaves de dicionário encontradas e não encontradas. #105461 (Raúl Marín). - Corrige o truncamento silencioso de valor em colunas
Dynamicquando o leitor de textoQuoted(Values) recorre aStringpara tipos inferidos incompletos, comoMap(Array(Nothing), ...). Antes, o fallback encapsulava o campo bruto com concatenação ingênua de'...', então uma aspa simples interna (sempre presente nesses fallbacks) encerrava prematuramente a string entre aspas, e o restante do valor era perdido. #105463 (Groene AI). - Corrige SIGSEGV ao ler subcolunas
Dynamicde tabelaMemorycomprimida apósALTER. Fecha #104901. #105464 (Pavel Kruglov). - Corrige
toFloat64/toUInt32/toString/etc. emDynamic, que ignoravacast_keep_nullable. Fecha #104789. #105467 (Pavel Kruglov). - Inclui
skip_first_linesna chave de cache de esquema para formatosWithNames. Fecha #104527. #105469 (Pavel Kruglov). - Corrige um segfault no servidor em
uniqStateOrNull/uniqStateOrDefault/uniqOrNullState(e cadeias de combinadores semelhantes sobreuniq) quando usados comGROUP BY ... WITH ROLLUP,WITH CUBEouWITH TOTALSe um argumentoNullable. #105470 (Groene AI). - Corrige a exceção
NOT_FOUND_COLUMN_IN_BLOCKao combinarORDER BY ... WITH FILL INTERPOLATEeLIMIT N BYcom o analyzer habilitado. Fecha #103474. #105481 (Yakov Olkhovskiy). - Corrige
toStartOfMillisecondetoStartOfMicrosecond, que retornavam um resultado com erro de quase um segundo para valores negativos (anteriores à epoch) deDateTime64, e corrige o overflow de inteiro com sinal detectado peloUndefinedBehaviorSanitizeremtoStartOfSecond,toStartOfMillisecondetoStartOfMicrosecondpara entradasDateTime64próximas deINT64_MIN. #105482 (Groene AI). - Adiciona uma nova configuração de compatibilidade
analyzer_compatibility_prefer_alias_over_subcolumn(desabilitada por padrão). Quando habilitada, o novo analisador passa a priorizar a interpretação de prefixo de alias em vez da correspondência com subcolunas deTuple/ colunas com ponto em identificadores de várias partes, restaurando o comportamento do interpretador anterior. Isso evita errosAMBIGUOUS_IDENTIFIER(e relacionados) quando uma consulta faz join com uma tabela cujo nome coincide com o de uma tabela interna de uma CTE/subconsulta que usaSELECT *sobre um join, situação em que colunas renomeadas pelo asterisco (por exemplo,b.id) poderiam, de outra forma, fazer com que identificadores da tabela interna vazassem para o escopo externo. #105491 (Vladimir Cherkasov). - Uma consulta de busca vetorial executada com a optimization index only agora retorna o valor correto de
L2Distance()se ela estiver na listaSELECT. A função estava retornando incorretamente o valor da distância L2-squared. Observe que a consulta de busca vetorial retornava os resultados na ordem correta; apenas aplicações que recuperavam e interpretavam explicitamente o valor deL2Distance()veriam o valor ao quadrado. #105495 (Shankar Iyer). - Corrige um problema raro no novo mecanismo de tabela Kafka, em que mensagens podiam ser tratadas incorretamente durante a reatribuição de partições do tópico, potencialmente levando ao pulo de mensagens após rollback de offset. #105500 (János Benjamin Antal).
- Corrige uma exceção (
Trying to execute PLACEHOLDER actionlogical error) quando uma CTEMATERIALIZEDcujo corpo é uma subconsulta correlacionada é usada no lado direito deIN. Essa CTE agora é rejeitada na fase de análise, de forma consistente com o fato de que o mesmo padrão já é rejeitado quando a CTE é referenciada diretamente emFROM. #105518 (Groene AI). - Corrige a não aplicação da compressão em stdout/stdin quando o formato é especificado explicitamente. Fecha #104441. #105528 (Pavel Kruglov).
- Corrige segfault na desserialização de
singleValueOrNullpara o tipoJSON. Fecha #103630. #105535 (Pavel Kruglov). - Corrige
clickhouse-format --backslashremovendo silenciosamente dados deINSERTVALUES. Fecha #103533. #105536 (Pavel Kruglov). - Corrige
variant_throw_on_type_mismatch/dynamic_throw_on_type_mismatch=falsenão capturando exceções durante a execução da função. Fecha #103484. #105543 (Pavel Kruglov). - Corrige o fato de
input_format_try_infer_datetimesser ignorado durante a inserção em shared data emJSON. Fecha #103221. #105544 (Pavel Kruglov). - Correção de
histogram, que produzia resultados incorretos para entradas pequenas não ordenadas. Fecha #103109. #105548 (Pavel Kruglov). - Correção de
DateTime, que dava a volta para valores fora do intervalo emJSONExtracte em desserializações de texto. Fecha #103094. #105551 (Pavel Kruglov). - Correção do uso da insertion table em table functions quando
optimize_trivial_insert_selectestá habilitado. Fecha #103083. #105555 (Pavel Kruglov). - Correção de
CASEque retornava o branchELSEem vez doTHENcorrespondente quando tanto a expression quanto um valorWHENeramNULL. #105556 (Raúl Marín). - Corrigido um crash em
replxxcausado pelo limiteFD_SETSIZEdeselect(agora substituído porpoll). Antes, com SSH ou o terminal web habilitados, isso podia derrubar o servidor. #105559 (Azat Khuzhin). - Materializa subcolumns em
executePartitionByExpressionantes de executar a expression. Fecha #103057. #105573 (Pavel Kruglov). - Correção da exceção
NOT_FOUND_COLUMN_IN_BLOCKquando a expressionTTLfaz referência a uma subcolumn. #105578 (Pavel Kruglov). - Correção de um crash do servidor (SIGSEGV) acessível a qualquer usuário com permissões de
CREATE TABLEao enviarCREATE TABLE ... TO INNER UUID '...'sem uma cláusulaENGINEpor HTTP ou pelo native protocol. O mesmo bug também derrubava o client. O parser agora retorna um erroBAD_ARGUMENTSapropriado em vez de desreferenciar um ponteiro nulo. #105579 (Groene AI). - Correção da window function
estimateCompressionRatio, que perdia dados acumulados entre linhas. Fecha #101738. #105581 (Pavel Kruglov). - Correção de crash ao inserir tuples de tamanhos diferentes na mesma cláusula VALUES em uma coluna
String. Fecha #101727. #105582 (Pavel Kruglov). - A extração do valor de partição do Hive agora respeita a configuração
cast_string_to_date_time_modee aceita timestamps ISO 8601 com sufixos de timezone (por exemplo,+0000,+00:00,Z) em partition keys por padrão. #105584 (Alexey Milovidov). - Corrige o erro
NOT_IMPLEMENTEDemtoStringdeDateTimecom Timezone contendo valorNULL. Fecha #103712. #105587 (Yarik Briukhovetskyi). - Correção de leitura fora dos limites na desserialização
Nativeda colunaDynamicachatada. #105666 (Pavel Kruglov). - Corrige um
LOGICAL_ERROR(Unexpected return type from if) gerado durante o planejamento da consulta para expressõesifcujo tipo de resultado éVariante cujo segundo ou terceiro ramo é umifcom condição constante sobre um literalUInt64que cabe emInt64. Fecha #105649. #105680 (Groene AI). - Corrige resultados incorretos ao ler uma tabela Iceberg com
iceberg_use_version_hint = 1depois que outro processo de gravação (como a função de tabelaicebergLocal/icebergS3) sem essa configuração avança a tabela. Agora,version-hint.texté mantido sincronizado por todos os processos de gravação assim que o arquivo existe, de modo que leitores subsequentes que usam a indicação vejam o snapshot mais recente. #105682 (Groene AI). - Corrigida uma subcontagem silenciosa em consultas
SELECTquandouse_query_condition_cache = 1(padrão). Uma consulta no formatoPREWHERE pk_prefix = X WHERE non_pk IN (...)em uma coluna com um skip index de filtro Bloom corrompia oQueryConditionCachepara o predicadopk_prefix = X, fazendo com que umSELECT count() ... WHERE pk_prefix = Xsubsequente e benigno retornasse um resultado incorreto, com contagem abaixo do real. Afetava todos os lançamentos 26.x. #104781. #105686 (Groene AI). - Corrige
singleValueOrNullMerge, que retornava um valor concreto em vez deNULLao fazer merge de um estado que já havia observado vários valores distintos. #105734 (Minh Vu). - Corrige a recuperação de erro do formato de entrada
Templateapós linhas malformadas. #105735 (Yue Ni). - Corrige uma falha na função de tabela
mongodb, no armazenamento MongoDB e na fonte de dicionário do MongoDB quando o nome da collection está vazio ou contém bytes NUL. #105776 (Raúl Marín). - Corrige a limpeza de snapshots do
Keeperapós falhas de gravação, para que snapshots parciais sejam removidos com segurança e gravações com falha possam ser tentadas novamente sem avançarlatest_snapshot_meta. #105779 (Antonio Andelic). - Corrige a rejeição de
ALTER TABLE ... CLEAR COLUMNpara colunascolumns_to_sumexplícitas deSummingMergeTreeeCoalescingMergeTree. #105785 (Antonio Andelic). - Corrige uma asserção em
DatabaseCatalog::tryGetDatabase(e o consequente erroUNKNOWN_DATABASEem builds de release) ao criar uma view parametrizada cujo nome do banco de dados é fornecido por meio de um parâmetro de consulta, por exemploCREATE VIEW {db:Identifier}.v AS SELECT {p:UInt64}. Os parâmetros nas partes DDL da instruçãoCREATEagora são substituídos no momento da criação, enquanto os parâmetros no corpo doSELECTpermanecem disponíveis para substituição no momento da chamada da view. #105799 (Groene AI). - Corrige
Bad get: has Decimal32, requested Decimal128emsumMapesumMapWithOverflowsobre uma colunaNested(... Nullable(Decimal(P, S)))quando o estado agregado é serializado (por exemplo, parallel replicas,sumMapStatevia um formatador de estado binário, external aggregation). #105816 (Groene AI). - Corrige os erros
Expected ColumnLowCardinality, got String/Bad cast from type DB::ColumnString to DB::ColumnLowCardinalityquandoapply_mutations_on_fly = 1é usado em uma tabela com mutaçõesUPDATE/DELETEon-fly pendentes enfileiradas antes de uma mutaçãoALTER MODIFY COLUMN ... LowCardinality(...). #105847 (Raúl Marín). - Gravações no Iceberg agora preservam valores NULL em colunas de partição
Nullable(T). Antes, um NULL gravado pelo ClickHouse aparecia como o valor padrão do tipo interno (0paraint) quando era lido de volta pelo Spark ou por outros leitores Iceberg. Fecha #105852. #105862 (Groene AI). - Corrige o pushdown de filtro de
ParqueteORCpara predicadosIN (subquery), permitindo que o pruning de row-group/page/bloom-filter funcione em leituras defile,url,s3e armazenamento de objetos. #105863 (Arsen Muk). - Corrige a leitura em ordem para tabelas
Merge(com um novo analisador). #105867 (Nikolai Kochetov). - Corrige deletes posicionais merge-on-read do Iceberg v2 que retornavam linhas incorretas quando um único arquivo de delete referencia vários arquivos de dados e vários desses arquivos de delete se aplicam ao mesmo arquivo de dados. O leitor de streaming (
use_roaring_bitmap_iceberg_positional_deletes = 0) agora filtra as linhas do arquivo de delete porfile_pathem C++, em vez de depender do pruning de row-group do Parquet, restaurando a invariante de posições crescentes. #105888 (Groene AI). - Corrige o erro
Cannot find columnem consultas distribuídas com filtroIN Array(...)no novo analisador. #105894 (Nikolai Kochetov). - Corrige um SIGSEGV em
ALTER TABLE ... MODIFY COLUMN ... Nullable(...)em tabelasMergeTreequando uma coluna comSTATISTICSé removida de forma concorrente por outroALTER. Fecha #105912. #105917 (Groene AI). - Corrige uma falha do servidor que podia ocorrer quando uma consulta que lia do PostgreSQL — por meio da função de tabela postgresql, do table engine PostgreSQL ou de um dicionário com origem PostgreSQL — era cancelada (por exemplo, com KILL QUERY) e o cancelamento da consulta remota no PostgreSQL falhava. #105949 (Rory Shanks).
- Corrige a formatação de
SYSTEM INSTRUMENT ADDpara que os argumentos do handler sejam separados por um único espaço e rejeita listas inválidas de argumentos de instrumentaçãoSLEEPcom mais de dois valores ou um intervalo em que o mínimo é maior que o máximo. #105984 (Pablo Marcos). - Corrige resultados possivelmente incorretos para consultas que combinam uma outer join com uma inner join subsequente que referencia o lado da outer join que fornece NULLs. A reordenação de joins podia escolher um plano que movia condições da inner join para a cláusula ON da outer join. #105992 (Vladimir Cherkasov).
- Corrige uma possível falha causada por um literal de string grande demais enviado na consulta. #105996 (Nikita Taranov).
- Corrige a exceção
INVALID_WITH_FILL_EXPRESSIONao usarINTERPOLATE ()(vazio) com um prefixo de ordenação emORDER BYeuse_with_fill_by_sorting_prefixhabilitado. As colunas do prefixo de ordenação agora são corretamente excluídas do conjunto de interpolação implícita, em conformidade com o comportamento deINTERPOLATE (col)nomeado explicitamente. #106001 (Yakov Olkhovskiy). - Corrige operações de partição de
ALTER TABLEque falhavam silenciosamente para chaves de partiçãoBool. Fecha #101722. #106004 (Pavel Kruglov). - Corrige
JSONExtractRaweJSONHaspara caminhosJSONtipados com valores padrão. Fecha #101721. #106005 (Pavel Kruglov). - Corrige a adição incorreta do prefixo ’/’ em caminhos base vazios em configurações de lago de dados. Fecha #105989. #106013 (thewisenerd).
- Corrige o mecanismo de tabela
IcebergLocal, que passava a ficar em modo somente leitura após um ciclo deDETACH+ATTACHou uma reinicialização do servidor, fazendo com que todoINSERTsubsequente falhasse comLocal object storage Local is readonly. (READONLY). #106016 (Groene AI). - Corrige falhas do
Keeperdurante a sincronização de catch-up de seguidor quando a nova fila de respostas do dispatcher de requisições podia encher antes de a thread de resposta ser iniciada. #106049 (Antonio Andelic). - Melhor compatibilidade com o analyzer antigo. Se a tabela tiver colunas como
x.a Array, x.b Array, x String, agora dá preferência a arrays emARRAY JOIN x. #106069 (Nikolai Kochetov). - Corrige a desativação silenciosa do cache do sistema de arquivos para o Azure Blob Storage (por exemplo, tabelas Delta Lake no Azure), porque os metadados do objeto não incluíam o ETag do blob. #106091 (thewisenerd).
- Corrige
system.dictionariesretornando 0 linhas com revogação parcial deSHOW DICTIONARIES. #106105 (Pavel Kruglov). - Corrige uma falha do servidor ao consultar tabelas DeltaLake com
allow_experimental_delta_kernel_rshabilitado e uma credencial ou opção contendo bytes inválidos (o Rust FFI entrou em pânico ao atravessar a fronteiraextern "C"). #106109 (Raúl Marín). - Corrige resultados incorretos para queries em tabelas cujo
ORDER BYcontém uma função monotonicamente decrescente, como(c0 / -42)ouintDiv(c0, -42). Predicados na coluna subjacente (por exemplo,c0 < 0) podiam eliminar grânulos incorretamente que continham linhas correspondentes, resultando em resultados ausentes. Fecha #106084. Fecha #106124. Fecha #106080. #106136 (Nihal Z. Miaji). - Corrige o suporte ao uso de UDFs SQL
WASMem definições deMATERIALIZED VIEW. #106161 (Yue Ni). - O Iceberg partition pruning agora lida corretamente com filtros
WHERE partition_col = (SELECT ... FROM ...)em que o analyzer envolve o resultado da scalar subquery em um_CAST(Const, 'TargetType')interno com tipos de origem e de destino correspondentes. Antes, esses filtros desativavam o partition pruning e disparavam um full table scan. #106204 (Groene AI). - Corrige o parâmetro
--query_iddo clickhouse local para permitir especificar um Query id personalizado. #106205 (Yue Ni). - Corrigido o problema em que a classe de armazenamento S3 (
s3_storage_class/s3_storage_class_name) era ignorada para objetos gravados via multipart upload em disksS3e armazenamento de objetos, o que fazia com que objetos grandes fossem criados com a classe padrãoSTANDARD. O nome da opção agora é aceito tanto comos3_storage_classquanto comos3_storage_class_namepara disks, armazenamento de objetos e backups. #106214 (Alexey Milovidov). - Corrigido um problema em que o Keeper às vezes travava na inicialização quando a configuração
nuraft_max_log_gap_in_streamera definida com um valor diferente do padrão (o padrão é 0, ou seja, desabilita o pipelining de requisiçõesappend_entries). #106220 (Michael Kolupaev). - Valida o state corrompido da função agregada
DDSketch(chaves de bin) na inserção, em vez de aceitar dados malformados. #106236 (Yarik Briukhovetskyi). - Corrigida a incompatibilidade de modo do coordinator quando subqueries substituem configurações in-order. #106243 (Nikita Taranov).
- Corrige o problema em que
optimize_skip_unused_shardsnão era aplicado (eforce_optimize_skip_unused_shardsfalhava incorretamente) quando uma tabelaDistributedera consultada por meio de uma tabelaMergeou da table functionmerge, com o predicate aplicado acima dela. #106250 (Nikolai Kochetov). - Corrige
INTERPOLATE ()lançandoINVALID_WITH_FILL_EXPRESSIONquando colunasORDER BYrecebem alias na listaSELECTcom o analyzer antigo. Fecha #106248. #106252 (Yakov Olkhovskiy). - Corrigido um abort ao desserializar um state malformado de
AggregateFunction(uniqTheta, ...)a partir de entradaRowBinaryou de um query parameter. A entrada inválida agora é rejeitada comCORRUPTED_DATAem vez de escapar comostd::exceptione abortar o processo viaabortOnFailedAssertion. #106260 (Groene AI). - Rejeita bytes
IntervalKindfora do intervalo durante a decodificação de tipo deRowBinaryWithNamesAndTypes(input_format_binary_decode_types_in_binary_format = 1) com um erroINCORRECT_DATAclaro, em vez de construir umDataTypeIntervalcom um kind inválido que poderia posteriormente disparar comportamento undefined em caminhos de hash. #106261 (Groene AI). - Corrige o problema de rollback em caso de falha no downgrade de
SLRUem26.1+. Corrige a prioridade da divisão de cacheSystem/Datacom o recursokeep_free_space_ratio. #106286 (Kseniia Sumarokova). - Ler a subcoluna
nullcomo um caminhoJSONemNullable(JSON)em vez do mapa de nulos. Fecha #106085. #106295 (Pavel Kruglov). - Corrige
RestCatalog::empty, que retornava um resultado incorreto quando um REST catalog do Iceberg continha tabelas. #106301 (Lefteris). - Corrigida uma exceção em consultas
INNER JOINcom uma tableMergeTreeà esquerda vazia quandoenable_parallel_replicas,query_plan_use_new_logical_join_stepequery_plan_optimize_join_order_algorithm = 'greedy'estão habilitados. #106338 (Nikolai Kochetov). - Corrigida uma conversão incorreta de valores subnormais de
Float16paraFloat32(por exemplo, ao lê-los de arquivos.npydo Numpy), causada por um deslocamento da mantissa em uma posição. #106343 (Joanna Hulboj). - Corrige uma falha e um possível erro
NOT_FOUND_COLUMN_IN_BLOCKquando a otimização baseada em constraints (optimize_using_constraints) é usada com subconsultas correlacionadas. #106349 (Raúl Marín). - Corrigidas leituras fora dos limites em
sipHash64Keyed,sipHash128KeyedesipHash128ReferenceKeyedao calcular o hash de uma coluna cujos arrays estão todos vazios e cuja chave não é constante. #106355 (Raúl Marín). - Corrigido o descarte, por
SYSTEM RELOAD CONFIG, das configurações por endpoint do Azure Blob Storage (comouse_native_copy), o que fazia com que as configurações definidas para um disco fossem ignoradas emBACKUP/RESTOREaté que o servidor fosse reiniciado. #106357 (Julia Kartseva). - Corrige
regexpExtract(haystack, pattern)para que padrões sem grupo de captura retornem a correspondência completa em vez de gerarINDEX_OF_POSITIONAL_ARGUMENT_IS_OUT_OF_RANGE. #106374 (Groene AI). - Corrige a exceção
LOGICAL_ERRORdurante o predownload do cache quando um objeto remoto no S3 é sobrescrito com conteúdo menor entre a listagem e a leitura. #106375 (Nikita Fomichev). - Corrige o aumento do uso de memória no filesystem cache. #106387 (Kseniia Sumarokova).
- Corrige múltiplas leituras fora dos limites da heap no leitor do formato Arrow IPC (
ArrowColumnToCHColumn). Um arquivo Arrow malformado podia declarar mais linhas do que seus buffers contêm, declarar comprimentos de filhos list/struct/map inconsistentes com o pai, fornecer offsets de lista não monotônicos ou truncar um bitmap de validade filho, causando leituras além do fim das alocações na heap. Isso pode ser explorado por qualquer usuário com privilégioSELECTviafile(),format(), table functions ou entradas ArrowFlight. Agora, todos os buffers de dados, offsets, view-struct e bitmap de validade são validados antes de qualquer acesso bruto por ponteiro, e as formas e os offsets de list/struct/map são verificados quanto à consistência. #106395 (Raúl Marín). - Corrigida a falha de backups com
FILE_DOESNT_EXISTquando o destino REPLACE de uma view materializada atualizável é coletado em um banco de dados Replicated ou Shared cuja visão materializada ainda não foi instanciada na réplica que iniciou o backup. #106411 (Julia Kartseva). - Corrige um erro lógico
Column identifier ... is already registeredquando um predicado de mutation (DELETE/UPDATE) contém uma subconsultaIN/EXISTSque lê de uma expressão de tabela padrão aninhada em outra subconsulta. #106414 (Alexey Milovidov). - Corrige um erro lógico (
Left and right columns have same names) no otimizador de ordem de join que podia ocorrer em joins executados com réplicas paralelas quando duas relações no grafo de joins compartilham nomes de coluna. #106418 (Alexey Milovidov). - Corrige um erro lógico ao criar um dicionário de polígonos a partir de dados de origem que contêm coordenadas de ponto
NaNou infinitas. Agora, essas coordenadas são rejeitadas com uma mensagem de erro clara. #106423 (Alexey Milovidov). - Corrige um bug em que as colunas
used_privilegesemissing_privilegesdesystem.query_logpodiam conter strings de privilégios vazadas de consultas anteriores não relacionadas, de outro usuário, banco de dados ou sessão. #106425 (Alexey Milovidov). - As funções
base58Encode,base58DecodeetryBase58Decodeagora respeitammax_execution_timee o cancelamento de consulta em entradas grandes, e rejeitam entradas maiores que 10 KB em vez de ficarem executando por muito tempo. O limite é configurável pela nova configuraçãofunction_base58_max_input_size(0a desativa). #106428 (Alexey Milovidov). - Corrige resultados incorretos esporádicos em consultas
ORDER BY ... DESCao ler wide parts em ordem reversa comread_in_order_use_virtual_row_per_block = 1emax_block_sizepequeno. #106429 (Vladimir Cherkasov). - Corrige uma exceção
NOT_FOUND_COLUMN_IN_BLOCKao consultar uma tabela Iceberg ou S3 com umWHEREcomposto contendoIS NOT NULLem uma coluna que não está na listaSELECT, usando o Native reader do Parquet V3. #106443 (Shaohua Wang). - Permite ao usuário especificar cabeçalhos para
HTTPDictionaryusando coleções nomeadas. #106459 (Jan Rada). - Corrige um caso em que uma worker thread podia permanecer associada a um grupo de threads obsoleto depois que
CurrentThread::attachToGroupfalhava no meio do processo, fazendo com que tarefas posteriores na mesma thread falhassem comThread is already attached to a group. #106462 (Mikhail f. Shiryaev). - Corrige uma exceção quando uma consulta de busca vetorial usa um vector index e outro skip index, como
minmax, comuse_skip_indexes_on_data_read = 1. #106473 (Shankar Iyer). - Valores de enum
Avromalformados agora são validados e rejeitados com um erro, em vez de causar uma leitura fora dos limites e interromper a execução ao desserializar dadosAvrocorrompidos. #106476 (Miсhael Stetsyuk). - Corrige relatórios de progresso inflados ao ler tabelas Iceberg com filtros
_fileou_path. Antes, o progressototal_bytes_to_readincluía todos os arquivos do manifest independentemente da filtragem. #106491 (Pedro Ferreira). - Corrigida uma
Bad cast exceptionem dicionários Redis que usamSTORAGE_TYPE 'simple'com layoutcache/directe uma única chave string (complexa); esses dicionários agora funcionam, e chaves compostas com armazenamentosimplepassam a retornar um erro claro. #106501 (Vladimir Cherkasov). - Corrigido um bug de resultados incorretos em que
WHERE c0 = constnão retornava linhas para tabelas comORDER BY f(c0)quandof(const)era avaliado como NaN, por exemplo,ORDER BY sqrt(c0)com uma constante negativa. A análise da chave primária descartava incorretamente todo grânulo e contaminava o query condition cache para consultas subsequentes. #106507 (Groene AI). - Corrige
LIMIT WITH TIESeLIMIT WITH TIESfracionário, que não respeitavam a collation deORDER BY ... COLLATEao determinar empates. Linhas consideradas iguais de acordo com a collation (por exemplo,'1'e'01'sob collation numérica) eram comparadas byte a byte, então algumas linhas empatadas eram removidas incorretamente do resultado. #106539 (Nihal Z. Miaji). - Corrige as otimizações
DISTINCTin order eLIMIT BYin order (incluindoLIMIT BYnegativo), que retornavam resultados incorretos quando a entrada era ordenada com uma collation (ORDER BY ... COLLATE). Linhas consideradas iguais de acordo com a collation (por exemplo,'a'e'A'sob uma collation sem diferenciar maiúsculas de minúsculas) são ordenadas pela chave de collation e não ficam adjacentes por valor; por isso, a otimização in order agora é ignorada quando um collator é usado. #106564 (Nihal Z. Miaji). - Corrigidos resultados incorretos para
SELECT c, count() FROM t WHERE c GROUP BY cem tabelas com a_minmax_count_projectionimplícita, uma projeção agregada explícita ou uma projeção normal: antes, cada grupo colapsava em uma única linha com uma chave constante e a contagem total de linhas. #106590 (Groene AI). - Corrige um bug em que os usuários não conseguiam usar subconsultas escalares no primeiro argumento de
INquando o segundo argumento era uma tupla não constante. #106610 (Yarik Briukhovetskyi). - Corrigida a exceção
Mutation ofMemorytable produced incomplete output, gerada ao executar comandosALTER TABLE <memory_table>que não têm efeito nos dados por linha em um engineMemory, especificamenteAPPLY PATCHES,APPLY DELETED MASK,MATERIALIZE STATISTICS,MATERIALIZE INDEX,MATERIALIZE PROJECTIONeREWRITE PARTS. TabelasMemorynão possuem essas estruturas, então esses comandos agora são tratados como no-ops. #106621 (Groene AI). - Corrige o problema de
session_timezoneser ignorado ao serializar colunasLowCardinality(DateTime)para formatos de texto (CSV, TSV, JSONEachRow etc.). Antes, após a primeira gravação de uma colunaLowCardinality(DateTime)em um servidor, toda consulta subsequente que gravava esse tipo de coluna passava a formatar a string de horário local usando o primeiro fuso horário visto, independentemente desession_timezone. #106634 (Groene AI). - Corrigido um
LOGICAL_ERROR“Trying to get name of not a column:ExpressionList” gerado por consultas que passam um asterisco dentro demultiIfpara um argumento de table function, por exemplo,numbers(multiIf(*, ...), 2). A consulta agora rejeita o matcher não resolvível comUNSUPPORTED_METHOD. #106647 (Groene AI). - Corrige a falha na inicialização do servidor com
Too many marks in file ...skp_idx_idx.cmrk4, marks expected 0 (bytes size 0)quando uma tabelaMergeTreetem uma parte de índice de salto com zero grânulos e um arquivo de marcas não vazio no disco. #106675 (Groene AI). - Rejeita glob patterns patológicos de
fileque causariam recursão ilimitada na listagem de diretórios. Agora, é aplicado um limite máximo de profundidade de recursão de 1000; consultas que o excederem gerarãoTOO_DEEP_RECURSIONem vez de derrubar o servidor com stack overflow. #106676 (Groene AI). - Corrige o abort do servidor
Bad cast from type DB::ColumnNothing to DB::ColumnVector<char8_t>emFunctionIf::executeForConstAndNullableConditionquando a condiçãoif/multiIfé reduzida a uma constanteConst(Nullable(Nothing))(por exemplo, um subscrito fora do intervalo em um array vazio, comoarraySort(x -> x, [])[toNullable(1)]). #106678 (Groene AI). - Corrige a exceção
'Trying to read from input() twice.'gerada quando a table functioninputé encapsulada em uma CTE não MATERIALIZED referenciada em mais de um ponto da consulta. Agora, a consulta é rejeitada com um erro claroINVALID_USAGE_OF_INPUTno momento do planejamento.inputé um stream de client de uso único e só pode ser consumido por uma única source no plano da consulta. #106682 (Groene AI). - Faz com que
FORMATtambém seja aplicado à saída deEXPLAINemEXPLAIN ... INSERT ... SELECT ... FORMAT ...quandoSETTINGSprecedeFORMATou quando o output format éValues. Continuação de #101772. #106686 (Alexey Milovidov). - Corrige um raro erro espúrio
RESOURCE_ACCESS_DENIED(“Scheduler queue with resource request is about to be destructed”) para uma consulta à qual o acesso a um resource de workload havia, na verdade, sido concedido, causado por um objeto de request local à thread reutilizado que preservava a falha de uma request anterior. #106690 (Alexey Milovidov). - Corrige uma race entre a destruição de objetos
INATSConsumere chamadas aINATSConsumer::onMsgnesses objetos por meio de callbacks na biblioteca NATS. #106692 (Miсhael Stetsyuk). - Corrige
match,extract,extractAllecountMatches, que retornavam resultados incorretos para regular expressions contendo escapes hexadecimais ou octais. #106709 (ofeliacode). - O TLS interno de Raft do Keeper agora respeita a configuração
openSSL.client.verificationMode. Antes, a verificação de certificados de peer ficava sempre habilitada para a comunicação Raft entre instâncias do Keeper, independentemente dessa configuração, de modo quenoneera ignorado silenciosamente. Agora,nonedesabilita explicitamente a verificação de certificados de peer do Raft, enquanto a ausência da configuração mantém o comportamento anterior, seguro por padrão. Configurações que definem explicitamentenonedeixarão de verificar certificados de peer do Raft após o upgrade, em conformidade com a intenção configurada. #106726 (Antonio Andelic). - Corrige logical error em startup scripts em
SYSTEM RELOAD CONFIG. Além disso, carrega startup scripts emSYSTEM RELOAD CONFIG(funcionalidade atualmente disponível apenas de forma privada). #106727 (Miсhael Stetsyuk). - Reverte uma alteração que fazia
sumMap/ o combinador-Maprejeitar tipos numéricos de valor com nomes personalizados (comoSimpleAggregateFunction(sum, T)eBool) comILLEGAL_TYPE_OF_ARGUMENT: Values for -Map cannot be summed, quebrando agregações que antes funcionavam. #106729 (Nikita Fomichev). - Corrigidos vários problemas de segurança de memória e esgotamento de recursos em leitores de formato acessíveis por entrada não confiável: uma leitura fora dos limites do heap no tratamento do comprimento dos níveis de definição/repetição de
DataPageV2no leitor nativo de Parquet, um estouro de pilha em arquivos Parquet com esquemas profundamente aninhados e alocações que ignoravammax_memory_usageao fazer parsing de geometria WKB/WKT do GeoParquet e de strings/bytes do Avro. #106739 (Raúl Marín). - Corrigido um heap buffer overflow (falha do servidor) em
decodeHTMLComponentao decodificar strings contendo as entidades HTML expansivas≫⃒ou≪⃒, explorável por qualquer usuário com um únicoSELECT. #106741 (Raúl Marín). - Rejeita
CREATE TABLE,ALTER TABLE ADD INDEXeCREATE INDEXcomGRANULARITY 0para skipping indexes com um erroBAD_ARGUMENTSclaro. Antes, isso acionava uma exceçãoInconsistent AST formattingem builds de debug. #106783 (Groene AI). - Corrigido o problema em que Azure BACKUP/RESTORE ignorava as configurações de endpoint para discos
azure_blob_storageno formato legado. #106784 (Julia Kartseva). - Corrigida uma exceção
Bad castao podar partes com base em estatísticasMinMaxquando uma coluna-chave éLowCardinalitye a constante do predicado éLowCardinality(Nullable(...)). #106793 (Groene AI). - Corrige colunas inconsistentes (o que depois leva a
LOGICAL_ERROR) em caso de exceção (isto é,MEMORY_LIMIT_EXCEEDED) durante o parsing. #106802 (Azat Khuzhin). - Corrige um problema em que, após configurar
keeper_server.http_control.secure_port, o servidor retornava uma resposta HTTP ao receber solicitações de clientes HTTPS. #106822 (linjiayu1025-collab). - Corrige erro lógico em
parseDateTimecom bytes de entrada não ASCII. #106856 (Pavel Kruglov). - Corrige
SHOW CREATE ROW POLICYemitindorestrictive/permissiveem minúsculas em vez de maiúsculas, de forma inconsistente com outras palavras-chave. #106865 (Valery Petrov). - Corrige o caso em que réplicas paralelas não eram aplicadas a uma view com
UNIONdevido a uma tabela vazia noUNION. #106900 (Igor Nikonov). - Corrige falha do servidor (SIGSEGV) ao ler dados
Protobuftruncados cominput_format_allow_errors_num > 0. #106905 (Andrey Tsarevskiy | Андрей Царевский ). - Corrige a exceção
THERE_IS_NO_COLUMNem consultas distribuídas que envolvem a otimizaçãooptimize_rewrite_aggregate_function_with_ifquando o argumento da função de agregação exige um cast para o tipoNullable. #106908 (Yakov Olkhovskiy). - Corrige uma exceção (
LOGICAL_ERROR) no JOIN runtime filter quando a chave do join contém um tipoVariantouDynamicaninhado em umTuple,ArrayouMap, e o lado direito do join tem um único valor distinto. #106931 (Groene AI). - Corrigido um overflow de inteiro com sinal (comportamento indefinido) em
arrayLevenshteinDistanceWeightedearraySimilarityquando os arrays de pesos contêm valores inteiros grandes. A distância ponderada agora é acumulada em um inteiro de maior largura para pesos integrais, de modo que pesos inteiros grandes não causam mais overflow e permanecem exatos. #106934 (Groene AI). - Corrige uma falha do servidor (desreferência de ponteiro nulo) ao executar
TRUNCATEouDROPem uma tabelaEmbeddedRocksDBcujo handle do RocksDB foi liberado, por exemplo, uma tabelaread_onlycujo diretório de dados foi esvaziado por umTRUNCATEanterior. #106940 (Groene AI). - Corrige uma exceção (
std::length_errorreportado comoLOGICAL_ERROR) ao ler de uma função de tabela*Cluster, comourlCluster, com uma configuraçãomax_streams_for_files_processing_in_cluster_functionsmuito alta. O número de streams agora é limitado a um valor razoável. #106946 (Groene AI). - Corrige uma falha do servidor (desreferência de ponteiro nulo de
DB::IConnections) emRemoteQueryExecutorquando uma consulta distribuída é cancelada logo antes de ser enviada para um shard. #106950 (Groene AI). - Corrigido o problema em que
elapsed_usera sempre zero, eread_rows/read_byteseram subestimados, emsystem.processors_profile_logesystem.query_logpara consultas de flush de insert assíncrono (AsyncInsertFlush). #106982 (Christoph Wurm). - Corrige uma falha (
Source column is not Map/SIGSEGV) ao mesclar blocos ordenados que contêm uma colunaVariantcom uma varianteMapcuja ordem de armazenamento local difere da ordem global. #107011 (Groene AI). - Corrige um erro lógico
conflicted_part_name.has_value()gerado durante um insert síncrono em uma tabelaReplicatedMergeTreequando o bloco inserido foi totalmente desduplicado e o nó de desduplicação da part conflitante já havia sido removido (por exemplo, por umDROP PARTITIONconcorrente). #107026 (Groene AI). - Corrigida uma exceção (erro lógico
this->visited_views == right->visited_views) emINSERTquando duas visões materializadas na mesma tabela de origem gravam na mesma tabela de destino, e uma visão dependente lê essa tabela de destino, commaterialized_views_squash_parallel_insertshabilitado. #107027 (Groene AI). - Corrigido um erro lógico
Block structure mismatch in UnionStep stream(aborto do servidor em builds de debug/sanitizer,Code: 49em builds de lançamento) que ocorria quando um ramo deUNION/INTERSECT/EXCEPTlia uma coluna serializada comoSparse, enquanto o ramo irmão lia a mesma coluna como completa (por exemplo, ao enviar para uma visão materializada). #107041 (Groene AI). - Corrigida uma exceção
LOGICAL_ERRORao inserir em uma tabela DeltaLake com colunas que não correspondem ao seu esquema de escrita (por exemplo, uma colunaNestedque é achatada em subcolunas, ou uma table function com um subconjunto explícito de colunas). Essas inserções agora falham com um erroINCOMPATIBLE_COLUMNSexibido ao usuário. Fecha #87402. #107058 (Groene AI). - Corrige o erro
TYPE_MISMATCH(“Cannot convert string … to type …”) em consultasORDER BY <numeric column> ... LIMIT nquando a lazy materialization colocava outra coluna antes da coluna de ordenação. O limiar top-K agora é lido da coluna de ordenação correta. #107060 (Groene AI). - Corrigido um erro de sintaxe quando uma cláusula
FORMAT,SETTINGSouINTO OUTFILEvem apósSHOW ROW POLICIESouSHOW MASKING POLICIES(por exemplo,SHOW ROW POLICIES FORMAT TabSeparated). #107061 (Groene AI). - Corrige um
ALTER TABLE ... RENAME COLUMN a TO b, RENAME COLUMN c TO acomposto que reutiliza um nome de coluna liberado (uma “troca”) entre colunas de tipos diferentes. A parte materializada registrava o tipo de coluna incorreto, então umSELECTposterior falhava comConversion between numeric types and IPv6 is not supported(ou abortava ao carregar a parte em builds de debug). #107064 (Groene AI). - Corrigidos resultados não determinísticos da função
roundDownquando o array de fronteiras contémNaN. O mesmo valor de entrada podia retornar uma fronteira finita ouNaN, dependendo das linhas ao redor em um lote. As fronteirasNaNagora são ignoradas, então o resultado depende apenas das fronteiras finitas. #107065 (Groene AI). - Corrigido o fato de
quantileTDigestequantileTDigestWeightedlançaremDECIMAL_OVERFLOWpara argumentosDateeDateTimequando o quantil interpolado é fracionário, mas está dentro do intervalo (por exemplo,quantileTDigestWeighted(date, weight)em valores que cabem no tipo). O resultado fracionário agora é truncado para o tipo de resultado, em conformidade comquantilesTDigestWeighted; valores realmente fora do intervalo ainda geram erro. Fecha: #106722. #107066 (Groene AI). - Corrige
trimLeft,trimRightetrimBoth(e os aliasesltrim,rtrim,trim) que lançavamTOO_LARGE_STRING_SIZEquando o conjunto de caracteres de trim personalizado tinha mais de 16 caracteres. Conjuntos de trim de qualquer tamanho agora voltam a ser compatíveis. #107071 (Nikita Fomichev). - Corrigido o truncamento silencioso de valores inteiros fora do intervalo em definições de tipo
Enum8/Enum16.Enum8('a' = 200)agora lançaARGUMENT_OUT_OF_BOUNDem vez de criar silenciosamenteEnum8('a' = -56). #107081 (Groene AI). - Corrige a ordem incorreta das linhas (e um
LOGICAL_ERROR“Rows are not sorted with permutation” em builds de debug) em consultasORDER BY ... LIMITcom várias colunas que ordenam por colunasNullablequando várias linhas empatam nas colunas iniciais. #107094 (Groene AI). - Corrige um
LOGICAL_ERROR(Expected the argument N to have X rows, but it has Y) ao executar uma função sobre uma colunaDynamicproduzida por um JOIN sobreDynamic(por exemplo, as linhas sem correspondência de umRIGHT/FULL JOIN, ou uma subconsultaEXISTScorrelacionada transformada em um join). #107095 (Groene AI). - Corrige a recriação espúria da sessão do ZooKeeper ao recarregar a configuração. #107096 (Azat Khuzhin).
- Não mantém o mutex durante leituras do ZooKeeper na atualização das entidades de acesso. #107097 (Azat Khuzhin).
- Corrige uma exceção
Logical error: Too large size passed to allocatoremINSERTem uma tabelaMergeTreequandoadaptive_write_buffer_initial_sizeé definido com um valor extremamente alto. O tamanho inicial adaptativo do buffer de escrita agora é limitado ao tamanho máximo do buffer. #107104 (Groene AI). - Corrige
LOGICAL ERROR(Bad cast from type DB::ColumnString to DB::ColumnLowCardinality) quando uma constanteVariantque contém um membroLowCardinalityé comparada a uma coluna-chave cuja expressão-chave é uma função determinística não monotônica (por exemplo, um skip indexminmaxsobresipHash64(col)). #107111 (Groene AI). - Corrige um erro lógico
Bad cast from type DB::IColumn const* to DB::ColumnNullable const*quando um asterisco qualificado (t.*) sobre uma chaveJOIN ... USINGé passado para uma função de agregação e o outro lado de um outer JOIN tem uma chaveNullable(comjoin_use_nulls = 0). #107129 (Groene AI). - Corrige lotes de
ALTER TABLE ... ON CLUSTERque misturamMODIFY SETTING/RESET SETTINGcom uma alteração de comentário (por exemplo,MODIFY COMMENT 'x', MODIFY SETTING old_parts_lifetime = 123) e eram aplicados apenas na réplica líder, deixando as outras réplicas divergentes. Também corrige casos em queMODIFY COLUMN ... COMMENT, posicional ou por coluna comSETTINGS, era classificado incorretamente como uma alteração local de metadados apenas de comentário, o que deixava a reordenação da coluna fora dos metadados replicados e podia causarINCOMPATIBLE_COLUMNSao reiniciar a réplica. #107142 (Groene AI). - Corrige um
LOGICAL_ERROR(“Table expression … data must be initialized”) gerado quando um seletor de asterisco qualificado (por exemplo,x.*) referenciava uma CTE recursive pelo nome dentro do próprio termo recursivo. Esses seletores agora expandem as colunas da tabela recursiva, da mesma forma que uma coluna qualificada (x.a) ou um seletor não qualificado (*) já faz nessa posição. #107144 (Groene AI). - Corrige resultados de consulta incorretos causados pelo cache de condições de consulta quando mutações on-fly (
apply_mutations_on_fly) ou patch parts filtravam linhas antes dePREWHERE. Uma consulta executada comapply_mutations_on_fly = 1podia contaminar o cache, fazendo com que uma consulta posterior comapply_mutations_on_fly = 0e o mesmo predicado pulasse marcas que deveria ter lido e retornasse linhas de menos. A mesma correção também cobre políticas de segurança em nível de linha, que são adicionadas como filtro antes dePREWHERE: uma consulta executada sob uma row policy restritiva podia contaminar o cache para uma consulta posterior que usa o mesmo predicado sem essa policy. #107145 (Groene AI). - Corrigido
BACKUPparaAzureBlobStorage: copiar um arquivo de dados dentro de um backup fazia com que o objeto de destino fosse gravado fora do diretório do backup. As verificações de existência de objetos de backup em destinosS3agora usam requisiçõesHeadObjectexatas em vez de listagem por prefixo, evitando correspondências falsas com chaves de prefixo semelhante. #107153 (Pablo Marcos). - Corrigido um overflow de inteiro com sinal em
quantileExactExclusive,quantilesExactExclusive,quantileExactInclusiveequantilesExactInclusiveque podia produzir resultados incorretos para entradasInt64cobrindo um intervalo amplo. #107154 (Groene AI). - Corrigido um
LOGICAL_ERROR(“Unexpected exception in refresh scheduling”) que podia colocar o servidor em um loop de falhas ao reiniciar quando uma view materializada atualizável tem uma dependênciaREFRESH ... DEPENDS ON <name>cujo nome não qualificado coincide com o nome de uma tabela temporária ou de uma CTE. #107156 (Groene AI). - Garantido que scripts de inicialização não sejam executados ao recarregar a config, pois isso é semanticamente incorreto, inesperado para os usuários e já se mostrou propenso a erros. #107187 (Miсhael Stetsyuk).
- Limitado o valor máximo de
queue_sizepara pré-reserva. #107205 (Elian Gidoni). - Corrigido o erro
Argument ... of GROUPING function is not a part of GROUP BY clausepara queries que usam a funçãogroupingcom a configuraçãogroup_by_use_nullshabilitada. #107206 (Nikolai Kochetov). - Corrigida a ordem incorreta dos resultados em
ORDER BYsobreUNION ALLcomoptimize_read_in_orderhabilitado quando o pipeline de union foi reduzido devido às configurações demax_streams_for_union_step; essa redução agora é ignorada quando o plano depende de stream de saída ordenados do UNION. Fecha #106880. #107208 (Vladimir Cherkasov). - Corrigida uma possível desreferenciação de ponteiro nulo ao resolver a configuração de proxy durante a fase final de desligamento do servidor. #107231 (Pedro Ferreira).
- Corrigidas queries
UPDATElightweight com parallel replicas legadas habilitadas para tabelasMergeTreenão replicadas. #107246 (Groene AI). - Corrigido um abort do servidor (erro lógico
std::out_of_range) ao inserir em uma tabelaIcebergcujos nomes de colunas do bloco de escrita não correspondem aos IDs de campo do schema mais recente (por exemplo, depois que um gravador concorrente renomeia uma coluna dentro da janelaiceberg_metadata_staleness_ms). A inserção agora falha com um erro de query claro em vez de derrubar o servidor. #107279 (Groene AI). - Corrigido o bug de desligamento travado no servidor e no modo local devido a pools de threads estáticos manterem threads ociosas indefinidamente se
max_*_thread_pool_free_size > 0. #107291 (Miсhael Stetsyuk). - Corrigida a
table functions3, que ignorava silenciosamente umpartition_strategyposicional em minúsculas (por exemplo,hive). #107297 (Julia Kartseva). - Corrigido o tratamento de
low_cardinality_allow_in_native_format=0no empacotamento de blocos em paralelo. #107319 (Azat Khuzhin). - Corrige resultados incorretos (muitas vezes vazios) de
ORDER BY <col> LIMIT nquando a otimizaçãouse_skip_indexes_for_top_kestá ativa e uma parte com um índice skipminmaxna coluna de ordenação teve linhas removidas por um lightweightDELETE. A otimização não classifica mais ominmaxdesatualizado de partes com lightweightDELETEà frente das partes que contêm as linhas de topo ainda ativas. #107320 (Groene AI). - Corrigido um bug no ClickHouse Keeper em que os metadados de snapshot reportados via
last_snapshot(ezk_latest_snapshot_sizeemmntr) podiam regredir após a instalação de um snapshot desatualizado ou duplicado, o que também podia permitir que um snapshot local com o mesmo índice sobrescrevesse um arquivo de snapshot registrado no local enquanto ele ainda estava sendo transmitido para um peer ou enviado ao S3. #107321 (Antonio Andelic). - Corrigido um possível stack overflow no servidor (crash) ao ler um schema ou valor profundamente aninhado nos formatos
MsgPack,BSON,ORC,Parquet,JSON,DeltaLake,IcebergePaimon. Esse input profundamente aninhado agora é rejeitado com uma exceção. #107341 (Raúl Marín). - Corrige um possível logical error em
SYSTEM SYNC DATABASE REPLICA ... STRICTe faz com que o modificadorSTRICTrealmente tenha efeito para réplicas de banco de dados. #107344 (Pedro Ferreira). - Corrige uma interrupção do servidor em compilações de debug/sanitizer ao ler uma tabela
DeltaLakecujo schema do ClickHouse nomeia uma coluna ausente do mapeamento de colunas do Delta, por exemplo, depois que uma coluna foi renomeada ou removida no log do Delta. Agora, a consulta falha com um erroINCORRECT_DATAcapturável. #107347 (Groene AI). - Corrige
ORDER BY ... WITH FILLgerando linhas extras quando uma coluna deORDER BYanterior à coluna de preenchimento usa uma collationCOLLATE. As linhas agora são agrupadas pelo prefixo de ordenação usando essa collation, em conformidade com a ordenação. #107365 (Groene AI). - Corrigido um crash (
LOGICAL_ERRORem compilações de debug) e um bug silencioso de resultados incorretos (em compilações de lançamento) ao ler uma tabela Iceberg cujos metadados reatribuem umschema-idexistente a um schema diferente entre versões de metadados. Esses metadados agora são rejeitados comICEBERG_SPECIFICATION_VIOLATION. #107370 (Groene AI). - Corrige um
LOGICAL_ERROR(Variant N (T) has size X, but expected Y) quando uma função comotoStringouconcaté aplicada a uma colunaVariantouDynamicque contém uma única variante não vazia junto com NULLs, e a função retorna a coluna de entrada sem alterações. #107374 (Groene AI). - Corrige
Logical error: 'Duplicate announcement received for replica number N', que podia ocorrer com réplicas paralelas quando uma scalar subquery continha subqueries aninhadas que liam a mesma tabela. #107381 (Groene AI). - Corrige
getServerSettingpara retornar o valor efetivo em uso de server settings alteráveis em runtime (comomax_server_memory_usage,mark_cache_size,max_concurrent_queries, tamanhos de thread pool etc.), em conformidade com o quesystem.server_settingsreporta. #107388 (Alexey Milovidov). - Corrige
arrayResizecom um argumento de tamanhoDecimal: o tamanho agora é interpretado pelo seu valor real (por exemplo,arrayResize([1, 2, 3], 1.5::Decimal(2, 1))retorna um elemento) em vez da representação bruta não escalada. #107389 (Alexey Milovidov). - Corrige um
LOGICAL_ERROR(block.rows() == getRows()) gerado em umINSERTassíncrono em uma tabelaAliasquandouse_strict_insert_block_limitsestava habilitado. #107400 (Groene AI). - Corrige um erro lógico (
Unexpected return type from equals. Expected Nullable(UInt8). Got UInt8) quando a otimização de push-down de disjunção (predicado parcial) aplica uma condição sobre uma chaveUSINGcujo tipo é ampliado pelo JOIN. Também corrige uma falha do servidor (segmentation fault) no analisador ao resolver identificadores em consultasJOIN ... USINGque contêm ramificaçõesif/multiIfpassíveis de constant folding que fazem referência a identificadores desconhecidos. #107407 (Groene AI). - Corrigido um heap buffer overflow (falha do servidor) em
windowFunnelao finalizar um estado de função de agregação manipulado com um tipo de evento fora do intervalo, explorável por qualquer usuário com um únicoSELECT. #107412 (uwezkhan). - Corrigido comportamento indefinido quando um valor de ponto flutuante não finito (como
nanouinf) é passado como argumento de timestamp/duração das table functionsprometheusQuery/prometheusQueryRange. Esse argumento agora geraBAD_ARGUMENTSem vez de produzir um timestamp inválido. #107417 (Groene AI). - Corrige um problema no
MaterializedPostgreSQLque fazia a replicação de alterações parar silenciosamente quando o nome do banco de dados ou da tabela no PostgreSQL continha letras maiúsculas (o consumidorpgoutputsolicitava um nome de publication sem aspas e em minúsculas que não correspondia à publication com preservação de maiúsculas e minúsculas). #107423 (Alexey Milovidov). - Corrige uma exceção (
Logical error: Not-ready Set is passed as the second argument for function 'in') quando uma expressão-chave (ORDER BY,PRIMARY KEY,PARTITION BYou umINDEXde skip) continha um operadorINcom uma tabela no lado direito, por exemploORDER BY (x IN some_table). Essas expressões-chave agora são rejeitadas no momento da criação da tabela. #107424 (Groene AI). - Corrige resultados incorretos da otimização
optimize_rewrite_aggregate_function_with_ifpara aggregate functions que preservam valores de payloadNULL(a família*_respect_nulls:anyRespectNulls,first_value_respect_nulls,anyLast_respect_nulls,last_value_respect_nulls). A otimização não reescreve maisf(if(cond, x, NULL))para a forma-Ifnessas funções. #107430 (Groene AI). - Corrige uma exceção espúria
filesystem error: in last_write_time: No such file or directoryao listar um diretório de armazenamento de objetos em disco local (por exemplo, uma Iceberg table em um disklocal) enquanto arquivos estão sendo substituídos de forma concorrente. Uma entrada removida concorrentemente agora é omitida da listagem em vez de interrompê-la. #107432 (Groene AI). - Corrige o erro
THERE_IS_NO_COLUMNquandooptimize_if_transform_strings_to_enum = 1e a expressão otimizadaif/transformsobre literais de string é uma chaveGROUP BYouORDER BYem uma tabela Distributed ou em parallel replicas. #107455 (Groene AI). - Corrigido um crash raro do servidor no processamento de
DISTINCTque podia ocorrer quando uma alocação falhava (por exemplo, ao atingir um limite de memória) enquanto o conjunto de chaves distintas estava sendo inicializado. #107467 (Groene AI). - Corrige
LOGICAL_ERROR: Unexpected return type from materialize(e erros semelhantes de incompatibilidade de tipo) quandoapply_mutations_on_fly = 1é usado em uma tabela com umUPDATEon-fly pendente cuja coluna de destino também é lida como entrada de função por umUPDATEon-fly anterior, antes de uma mutaçãoALTER MODIFY COLUMN ... LowCardinality(...). #107475 (Groene AI). - Corrigidas credenciais AWS STS obsoletas ao ler tabelas
DeltaLakeviaS3: o engine agora mantém o clienteS3com credenciais atualizadas ao renovar seu snapshot, para que leituras de longa duração não falhem mais depois que o TTL do token STS expirar. O provedor de credenciais assume-role do STS agora também respeita a atualização de credenciais para qualquer acesso aS3usando STS. #107480 (Elmi Ahmadov). - Corrigido
SELECT ... FINALeOPTIMIZE TABLE ... FINALretornando linhas duplicadas apósCREATE TABLE ... CLONE AS,ATTACH PARTITION ... FROMouMOVE PARTITION ... TO TABLEadotarem partes de umMergeTreesimples em umReplacingMergeTree,SummingMergeTreeouAggregatingMergeTree. O nível de merge da parte adotada agora é redefinido para 0 quando os engines de origem e destino diferem, para que o destino a deduplique no próximo merge. #107481 (Groene AI). - Corrige um underflow de inteiro no parser do PostgreSQL wire protocol, em que uma mensagem com um campo de comprimento menor que 4 causava wraparound em
size - 4e umresize/ignoreexcessivo. #107485 (uwezkhan). - O cancelamento de consultas agora é rastreado com mais precisão enquanto aguarda o quorum no ReplicatedMergeTree. #107513 (Nikita Taranov).
- Corrigido
Not-ready Set is passed as the second argument for function 'in'(LOGICAL_ERROR) ao consultar uma tabela com uma chavePARTITION BYe uma subconsultaIN/NOT INenvolvida em uma expressão maior, por exemploWHERE (c0 IN (SELECT ...)) != 0. #107515 (Groene AI). - Corrigido
currentUser(),user(),SESSION_USEReauthenticatedUser()sendo avaliados como uma string vazia no caminho de flush de insert assíncrono (comasync_insert = 1). Isso afetava expressões de colunaDEFAULT/MATERIALIZEDe visões materializadas que referenciam essas funções, que armazenavam silenciosamente uma string vazia em vez do usuário que estava inserindo. #107541 (Groene AI). - Com
enable_analyzer = 1(o padrão), consultar uma tabela pelo nome simples quando ela só existe em outro banco de dados agora sugere a tabela correta; por exemplo,SELECT * FROM functionsinformaMaybe you meant system.functions?. Antes, o novo analisador retornava o erroUnknown table expression identifiersem sugestão, enquanto o analisador antigo já produzia essa dica útil. #107550 (Groene AI). - A memória usada pela biblioteca rapidjson (em
prettyPrintJSON,JSONMergePatche no parser JSON do rapidjson) agora é contabilizada no memory tracker, para que entradas patológicas sejam rejeitadas comMEMORY_LIMIT_EXCEEDEDem vez de alocarem sem limite. #107555 (Raúl Marín). - Corrige um
LOGICAL_ERROR(updateFormatPrewhereInfo called more than once) gerado ao consultar uma fontefile(),url()ou de armazenamento de objetos com umPREWHEREexplícito e umWHEREenquantooptimize_prewhere_after_pushdownestava habilitado. #107568 (Groene AI). - Corrige uma falha (desreferenciamento de ponteiro nulo) que podia ocorrer quando um plano de consulta distribuída era executado localmente (
make_distributed_plan+distributed_plan_execute_locally) comlog_formatted_queries = 1. #107570 (Groene AI). - Corrige um abort do servidor (
std::terminate, sinal 6) durante o encerramento de uma consulta com plano distribuído (make_distributed_plan = 1) quando uma verificação de status do worker não conseguia reagendar a próxima verificação (por exemplo,CANNOT_SCHEDULE_TASKdurante o desligamento ouMEMORY_LIMIT_EXCEEDED). Agora, a consulta falha de forma limpa e o servidor continua em execução. #107575 (Groene AI). - Adiciona verificações de limites ausentes na análise de ELF e DWARF. #107579 (Michael Kolupaev).
- Adiciona verificações de limites ausentes no leitor ORC. #107580 (Michael Kolupaev).
- Corrige uma exceção (erro lógico
Digest does not match) que podia ocorrer emRENAME TABLE,RENAME DATABASEouCREATE OR REPLACE TABLEenvolvendo uma tabelaTimeSeriesdentro de um banco de dadosReplicated. Renomear uma tabelaTimeSeriesagora é suportado. #107583 (Groene AI). - Corrige uma negação de serviço não autenticada por exaustão de memória na porta do protocolo MySQL. #107599 (Shaohua Wang).
- Corrige o
DROP TABLEde uma tabelaTimeSeriesem um banco de dadosReplicated, que antes vazava as tabelas internas e fazia a tarefa de remoção em segundo plano tentar novamente indefinidamente (DROP TABLE ... SYNCficava travado). #107604 (Groene AI). - Corrige dois problemas de path traversal no protocolo de busca de partes replicadas que podiam permitir que uma réplica maliciosa gravasse arquivos fora do diretório da part. #107606 (Antonio Andelic).
- Corrige o erro ‘Account must be specified error’ ao ler uma tabela Delta Lake no Azure. #107620 (Smita Kulkarni).
- Corrige o
ALTER TABLE ... REPLACE PARTITIONem uma tabelaMergeTreesimples, que após uma reinicialização do servidor fazia ressurgir as partes substituídas, fazendo a tabela retornar tanto as linhas de substituição quanto as linhas antigas substituídas. #107623 (Groene AI). - Corrige uma falha do servidor ao ler uma visão materializada cujo destino é uma tabela
Distributedenquanto a consulta é executada comenable_analyzer = 0. #107653 (Groene AI). - Quando várias quotas são atribuídas ao mesmo usuário ou função, agora todas são aplicadas em conjunto (uma consulta é rejeitada se qualquer uma delas for excedida), em vez de apenas uma quota ser aplicada e escolhida de forma não determinística.
SHOW QUOTAesystem.quota_usageagora mostram todas as quotas aplicadas ao usuário atual. #107664 (Alexey Milovidov). - Corrigidas
s3e outras funções de tabela de armazenamento de objetos que lançavamLOGICAL_ERRORem vez deBAD_ARGUMENTSquando um argumento chave-valor era duplicado, por exemplos3('http://...', format = 'CSV', format = 'TSV'). #107670 (Groene AI). - Corrigida a interface MySQL, que ficava inutilizável com
MySQL Connector/J8.2.0 e versões mais recentes (incluindo 9.x). O campoinfodo pacoteOKagora é codificado com comprimento, em conformidade com o servidor MySQL, para que o JDBC driver possa se conectar. #107693 (Alexey Milovidov). - Corrigido um
LOGICAL_ERROR(“Input nodes size mismatch in dag”) quando uma consulta commake_distributed_plan = 1faziajoinusando uma chave encapsulada por função cujos dois lados não tinham um tipo em comum (por exemplo,ON intDiv(-1, t1.key) = t2.keycom uma chave à direitaUInt64). #107701 (Groene AI). - A leitura de dados Arrow/ArrowStream com colunas
String/Binaryvazias produzidas por Apache Arrow Java < 19.0.0 (incluindo Apache Spark) não lança maisINCORRECT_DATA. #107764 (Raúl Marín). - Corrigida uma exceção
BAD_GET(“Bad get: has String, requested UInt64”) na estimativa de estatísticas de colunacountminquando uma consulta compara uma coluna com um literal de tipo diferente que não é convertido previamente, comonumeric_col IN (SELECT '5')oustring_col IN (SELECT 5). #107793 (Groene AI). - Corrigidas as funções de tabela
odbcejdbc, que ficavam travadas por minutos e ignoravam o cancelamento da consulta (KILL QUERY,max_execution_time) quando a bridge deixava de responder durante a inferência da estrutura da tabela remota. #107809 (Alexey Milovidov). - Corrigida uma exceção (
Logical error: 'index >= result.start') ao formatar uma consulta malformada que mistura as formas posicional e nomeada de argumento secreto das funções de tabelas3/gcs, por exemplos3('url', 'a', 'b', secret_access_key = 'c'). #107818 (Groene AI). - Corrigida a falha em que o skip index
setnão fazia a poda de grânulos em colunasLowCardinality. #107868 (Konstantin Bogdanov). - Corrigida a desduplicação de inserções, que calculava hashes incorretos para colunas
StringeArraycom a configuração do servidorinsert_deduplication_version = new_unified_hash: inserções idênticas podiam não ser desduplicadas porque o hash de desduplicação dependia da posição da linha dentro do bloco inserido. #107915 (Sema Checherinda). - Corrigidos resultados incorretos de
ORDER BYem colunasNullablecom múltiplas chaves de ordenação no macOS (Apple Silicon), causados pela ausência de extensão de sinal no comparador de ordenação compilado com JIT. #107973 (Raúl Marín). - Corrigida a regressão de desempenho ao ler colunas
Dynamiccom múltiplas threads. Causada por #100730. Fecha #107942. #107997 (Pavel Kruglov). - A configuração obsoleta de lago de dados
storage_catalog_urlagora é corretamente rejeitada pela proteção do catalog (antes, apenasstorage_catalog_typeestorage_aws_access_key_ideram verificados), e a mensagem de erro lista todas as configurações obsoletas. #108040 (Alexey Milovidov). - Corrige um logical error
Bad cast from type DB::ColumnSparse to DB::ColumnVector<char8_t>quando uma consultaLIKElê de um índicetextpelo caminho de fallback de leitura direta em uma coluna armazenada de forma esparsa. #108068 (Groene AI). - Sempre executa os handlers de finalização de batch do cache de acesso, mesmo quando o batch está vazio. #108124 (Azat Khuzhin).
- Corrigido um
LOGICAL_ERROR(Column identifier is already registered) em algumas consultas comUNION ALL. #100770 (Shaohua Wang). - Corrigido um uso após liberação do mutex de armazenamento de workload durante o desligamento do servidor. #101447 (Tuan Pham Anh).
- Corrigido um deadlock em
ALTER DATABASE MODIFY COMMENTcom o catalogShared. #103683 (Nikolay Degterinsky). - Um identificador Unicode vazio entre aspas agora gera
SYNTAX_ERRORem vez deCANNOT_PARSE_QUOTED_STRING. #104173 (leonard9893). - Preserva os tipos de parâmetro originais das aggregate functions
timeSeries*para que os tiposAggregateFunctionfaçam round-trip corretamente entre a reanexação de tabelas e as réplicas paralelas. #104812 (Vitaly Baranov). - Corrigido um
LOGICAL_ERRORpara uma CTE materializada comserialize_query_plane réplicas paralelas. #104896 (Igor Nikonov). - Corrigido overflow de inteiro com sinal nas funções
timeSeries*ToGridquando o parâmetro de staleness (window) está próximo deINT64_MAX. #105319 (Groene AI). - Um valor da configuração
compatibilitynão faz maisapply_row_policy_after_finalvoltar parafalse, então as row policies agora são sempre aplicadas corretamente comFINAL. #105637 (Yarik Briukhovetskyi). - Corrigido o
clickhouse chdig clientao respeitarSETPGROUP/RESETIDS/SETSIGDEFno stubposix_spawn. #105858 (Azat Khuzhin). - Corrigida uma exceção durante as verificações de consistência da merge-tree em projeções quando o executor de merge/mutate não havia sido inicializado. #105919 (Mikhail Artemenko).
- Durante a análise de índice em projeções, o índice
minmaxagora é carregado da própria projeção, em vez da parte parent, produzindo resultados corretos. #105940 (Mikhail Artemenko). - Corrigida uma exceção em
addMonotonicChainparamaterialize(monotonic_chain(...)). #106050 (Nikolai Kochetov). - Corrigida a falha de
RESTOREem backups que incluem dependências deMASKING POLICY. #106086 (Julia Kartseva). - Corrigida uma possível corrupção de memória ao expandir Funções Definidas pelo Usuário em SQL com
prefer_column_name_to_aliashabilitado. #106121 (Nikolai Kochetov). - Um Dicionário que usa a conexão bridge agora é recarregado após a reinicialização do servidor, restabelecendo a conexão. Fecha #106151. #106152 (Pedro Ferreira).
- Corrigido o cache do sistema de arquivos de
LocalObjectStorage. #106239 (Kseniia Sumarokova). - Corrigida a source remota lazy para funções de tabela com
use_delayed_remote_source. #106470 (Nikolay Degterinsky). - Corrigido
timeSeriesLastToGridpara timestamps anteriores ao início da grade e timestamps fora da janela. #106504 (Vitaly Baranov). #106577 (Vitaly Baranov). - Corrigido um
LOGICAL_ERROR(Inconsistent AST formatting) em um nome de função que continha parâmetros de consulta. #106635 (Vitaly Baranov). - Corrigido um erro lógico quando uma tabela é removida antes da desserialização da tarefa do plano distribuído. #106944 (Alexander Gololobov).
- Usar comparação exata para chaves
NullabledeGROUP BY. #107050 (Nikolai Kochetov). - Corrigido um
LOGICAL_ERROR(Trying to get name of not a column) gerado quando um argumento de função de tabela não era uma expressão de coluna (por exemplo, um matcher*não resolvido demultiIf/CASE). #107411 (Alexey Milovidov). - Corrigido o crescimento descontrolado do cache de fuso horário (
DateLUT) quando muitos nomes inválidos e distintos de fuso horário são processados. #107464 (Alexey Milovidov). - Gravar a entrada
part_logantes de marcar como concluída uma mutação simples deMergeTree. #107741 (Azat Khuzhin). arrayFoldagora verifica a consistência do argumento de array para se proteger contra entradas malformadas. #107932 (Michael Kolupaev).- Corrigidos uma rara data race e um possível use-after-free no leitor em cache do arquivo de índices de salto de uma part de
MergeTree, o que poderia acontecer quando uma consulta lia índices de salto enquanto a part estava sendo movida ou renomeada. #107995 (Raúl Marín). - Corrigida a regressão de desempenho em subcolunas
MapcomPREWHERE. #107988 (Pavel Kruglov). - Corrige
parseDateTimeBestEffortcom fuso horário que geravaCANNOT_PARSE_DATETIMEem linhas NULL detoString(Nullable(DateTime64)). #108310 (Yarik Briukhovetskyi). - Corrigidos a table function e o engine
ArrowFlight, que rejeitavam uma named collection sem a chave opcionaldataset, com o erroNo such key 'dataset'. #108041 (Alexey Milovidov). - Corrigido um erro lógico
Inconsistent AST formattingem uma window function sem argumentos dentro de uma declaraçãoCODECou de engine (por exemplo,CODEC(cume_dist() OVER (...))); essa função agora mantém os parênteses para que a consulta sobreviva a um round-trip de formatação/parse. #107806 (Alexey Milovidov). - Corrige
hasTokencom uma needle contendo separador, que retornava resultados silenciosamente por meio de um text index em vez de gerarBAD_ARGUMENTS. #108189 (Jimmy Aguilar Mena). - A configuração
use_skip_indexes_on_data_readagora pode ser revertida para o valor default anterior à 26.1 (false) por meio da configuraçãocompatibility, oferecendo uma saída para uma regressão de desempenho em que o caminho on-data-read impede a poda de intervalos de marcas dos skip indexesminmax/set/bloom_filter. #108330 (egor romanov). - Corrigido um possível crash (desreferenciamento de ponteiro nulo) quando a substituição de
database/dbde uma named collection passada pararemote/remoteSecurenão é um nome do banco de dados constante, por exemploremote(nc, database = (SELECT 1)). A consulta agora falha com um erro claro em vez de causar crash. #108271 (Groene AI). - Corrigido o travamento de uma view materializada atualizável se a conexão com o ZooKeeper for perdida no momento errado. #108234 (Michael Kolupaev).
- Corrige
Bad cast from type DB::ColumnVector<...> to DB::ColumnTupleao ler uma colunaArray(Tuple(...))cujo valor é preenchido com valores default, por exemplo apósALTER TABLE ... ADD COLUMNou após uma mutaçãoALTER TABLE ... CLEAR COLUMNinacabada aplicada em tempo real. #107232 (Groene AI). - Corrige um erro lógico
Bad cast from type DB::ColumnDynamic to DB::ColumnNullablequando uma referência explícita a uma chaveJOIN ... USINGcujo common supertype éDynamicé passada para uma aggregate function, por exemplocount(t.key) IGNORE NULLS. #107289 (Groene AI). - Corrige perda silenciosa de dados em
MergeTreesimples (non-replicated) quandoREPLACE PARTITION,MOVE PARTITION,DETACH PARTITIONouDETACH PARTé executado em uma partição que ainda tem patches de lightweightUPDATEnão aplicados. Essas operações agora rejeitam o comando, comoReplicatedMergeTreejá faz. #107386 (Groene AI). - Corrige um crash (SIGSEGV em builds de release, asserção de incompatibilidade de tipo em builds de debug) em
hassobre umMapcom chaveDynamicquando o argumento de busca éLowCardinality, por exemplohas(map('a'::Dynamic, ...), toLowCardinality('b')). #107956 (Groene AI). - Corrigido um
LOGICAL_ERROR(“Block structure mismatch … betweenConvertingTransformandRemovingReplicatedColumnsTransform”) ao inserir em uma visão materializada cuja tabela de destino deTOdeclara uma coluna com umEnummais amplo do que o produzido peloSELECTda visão. O alargamento válido deEnumagora é aplicado. #107648 (Groene AI). - Corrigido o erro
NUMBER_OF_COLUMNS_DOESNT_MATCHao consultar uma tabelaDistributed(ou ao usar réplicas paralelas) que tem várias colunasALIASexpandidas para a mesma expressão e ao referenciá-las junto comORDER BY/GROUP BY/HAVING. #107913 (Yakov Olkhovskiy). - Corrigido um comportamento indefinido (ponteiro nulo passado para
memcpy) nas funçõesdetectCharsetedetectLanguageUnknownquando a string de entrada é maior que 32768 bytes e nenhum conjunto de caracteres pode ser detectado. #108250 (Groene AI). - Corrigido
signed integer overflow(comportamento indefinido) emdateDiffcom as unidadeshoureminuteem valores extremos deDateTime64próximos aos limites do intervalo deInt64. #108229 (Groene AI). - Corrigido
Too many marksem um text index em uma merged part vazia. #106867 (Azat Khuzhin). - Corrigido um
LOGICAL_ERROR(“Unexpected return type from if”) ao ler uma coluna comapply_mutations_on_fly = 1após umALTER UPDATE col = ... WHERE <cond>com uma condição não constante ou falsa, seguido deALTER MODIFY COLUMN col <new type>. #108128 (Groene AI). - Corrigido um aborto do servidor (
Logical erroremIColumn::insertFrom) ao converter umArray(Dynamic)ouArray(Variant)paraQBitcomaccurateCastOrNull, por exemploaccurateCastOrNull(CAST(range(114), 'Array(Dynamic)'), 'QBit(Float32, 114)'). #108288 (Groene AI). - Corrigido um erro de sintaxe quando um alias aparece após uma subconsulta em
DESCRIBE TABLE (...) AS .... #100205 (Yarik Briukhovetskyi). getClientHTTPHeaderagora é tratado corretamente como não determinístico, portanto seu resultado não é mais reutilizado incorretamente pelo cache de resultados de consulta. #108029 (Alexey Milovidov).
melhorias em build, testes e empacotamento
- Compile
delta-kernel-rscom a featuredefault-engine-native-tlspara que seu próprio HTTP client (reqwest) possa reutilizar o OpenSSL ao qual o ClickHouse já faz link. Esta é apenas uma habilitação parcial denative-tls:object_storeainda forçareqwest/rustls-tls-native-roots, então oreqwestacaba ficando com os backendsnative-tlserustls. Por enquanto,delta-kernel-rscontinua desabilitado com MSan porqueringainda é compilado viaobject_store(tanto transitivamente por meio derustlsquanto diretamente para a assinatura HMAC de requisições AWS), e seu assembly escrito manualmente não gera os símbolos exigidos pelo MSan (rastreado no upstream em arrow-rs-object-store#585). #96856 (Austin Bonander). - Adiciona otimização pós-link com PGO (Profile-Guided Optimization) e BOLT (Binary Optimization and Layout Tool) para o binário
clickhouse. Os perfis são coletados a partir de workloads de CI e aplicados, na medida do possível, durante compilações de lançamento — ambos os estágios recorrem à saída não otimizada se um perfil estiver desatualizado ou incompatível. Até o momento, não há ganhos com PGO. #100938 (Alexey Milovidov). - Adiciona o modo
--storageaoclickhouse keeper-bench, que executa benchmarks deKeeperStorageno próprio processo (sem rede, sem raft, sem máquina de estados), usando as mesmas seções de configuraçãosetup/generatordo modo de rede. #103081 (Michael Kolupaev). - Corrige a compilação com
ENABLE_AWS_S3=OFF. #105390 (Yue Ni). - Atualiza
mongo-cxx-driverpara r4.3.0. #105522 (Konstantin Bogdanov). - Corrige a compilação com RapidJSON. #105674 (Ilya Golshtein).
- Acelera a compilação removendo includes transitivos de headers
base/amplamente usados e eliminando código não utilizado doPoco/Logger.hvendorizado. #105702 (Raúl Marín). - Atualiza
libxml2de 2.15.1 para 2.15.3. #105985 (Konstantin Bogdanov). - Usa
expat2.8.1 dentro do Poco. #105988 (Konstantin Bogdanov). - Atualiza
thriftparav0.23.0. #105993 (Konstantin Bogdanov). - Usa a tag
REL_18_4dopostgres. #105994 (Konstantin Bogdanov). - Faz upgrade de
krb5para 1.22.2. #106076 (Konstantin Bogdanov). - Atualiza o
curlempacotado para 8.20.0. #106077 (Konstantin Bogdanov). mariadb-connector-catualizado para 3.1.29. Todos os patches relevantes para o ClickHouse foram preservados. #106287 (Nikita Mikhaylov).- Atualiza os digests da base image distroless para corrigir CVEs no libssl3t64. #106360 (Rahul Nair).
- Usa
wasmtimev45.0.1. #106836 (Konstantin Bogdanov). - Atualiza
opensslpara 3.5.7. #106844 (Konstantin Bogdanov). - A compilação Docker distroless agora também atualiza as tags flutuantes
:X.Y-distrolesse:X.Y.Z-distroless, e não apenas a tag da versão completa. #106932 (Rahul Nair). - Desabilita recursos não utilizados do
curl, como autenticação NTLM, cookies, alt-svc, HSTS, DNS-over-HTTPS, netrc, MIME e AWS SigV4. #107226 (Konstantin Bogdanov). NuRaftfoi atualizado com uma correção para um livelock na instalação de snapshot que ocorria quando a E/S do snapshot era executada em uma thread em segundo plano. A configuração do Keepernuraft_use_bg_thread_for_snapshot_iocontinua desabilitada por padrão; a CI agora a randomiza para cobrir ambos os modos. #107338 (Antonio Andelic).- Corrige a compilação de
abseilquando o caminho do checkout do ClickHouse contém uma substring que corresponde a uma extensão de header. #107349 (zhiqiang). - Determina o tamanho do cache L2 a partir de
CPUIDem x86_64, em vez dosysconf(_SC_LEVEL2_CACHE_SIZE)específico da glibc, que não está disponível no musl libc. #107469 (Konstantin Bogdanov). - Aumenta o tamanho da stack para compilações musl para 8 MiB, para dar suporte a consultas profundamente aninhadas. #107470 (Konstantin Bogdanov).
- Deriva o conjunto de símbolos da biblioteca C localizados em bibliotecas estáticas Rust a partir das bibliotecas de referência reais, em vez de uma allowlist mantida manualmente, para que todos os builtins do compiler-rt e as funções de libm da plataforma sejam cobertos. #107571 (Raúl Marín).
- Altera as images distroless do servidor e do Keeper para
gcr.io/distroless/base-nossl-debian13, para que incluam apenas as bibliotecas às quais o ClickHouse realmente se vincula e deixem de incluir aquelas às quais já nos vinculamos estaticamente. #107837 (Rahul Nair). - Reabilita 50 testes sem estado no MacOS (
arm_darwin) que estavam sendo ignorados por estarem desatualizados, e usafsyncem vez deF_FULLFSYNCpara sincronização de diretório no MacOS. #107887 (Raúl Marín).
Lançamento do ClickHouse 26.5, 2026-05-21. Apresentação, Vídeo
alteração incompatível com versões anteriores
- Os valores padrão de
date_time_input_formatecast_string_to_date_time_modeforam alterados debasicparabest_effort. Consultas que antes não conseguiam interpretar strings de data/hora fora do formato básico (por exemplo,2024 April 4,Apr 15, 2020 10:30:00) agora podem passar por padrão. Para manter o comportamento antigo de parsing estrito, defina essas configurações comobasic(ou usecompatibility). #89334 (Alexey Milovidov). - O nome
nullpara elemento de Tuple agora é proibido, porque entra em conflito com o nome de subcoluna usado nos mapas de nulos de Nullable, causando resolução ambígua de subcoluna. #98377 (Alexey Milovidov). - Foram adicionadas as configurações
dynamic_disk_allow_from_env,dynamic_disk_allow_from_zkedynamic_disk_allow_includepara impedir o uso defrom_env,from_zkeincludeem disks dinâmicos. Trata-se de uma mudança incompatível com versões anteriores, porque passa a proibir por padrão um comportamento que antes era permitido por padrão. #99138 (Kseniia Sumarokova). - Não é mais possível usar o leitor e gravador Parquet obsoleto baseado em Arrow. A implementação nativa será usada no lugar dele. #100949 (Alexey Milovidov).
SHOW CREATE TABLE tagora dá preferência à tabela temporária quando existem tanto uma tabela permanente quanto uma tabela temporária chamadaste nenhum database é especificado, alinhando-se ao comportamento existente deDESCRIBE TABLE. Além disso, a sintaxeDESCRIBE TEMPORARY TABLEagora é suportada. #100966 (Alexey Milovidov).- O valor padrão de
http_max_fieldsfoi reduzido de 1.000.000 para 1.000, e o dehttp_max_field_name_size, de 128 KB para 4 KB, para limitar o uso de memória antes da autenticação por conexões HTTP. Também foram adicionadas as configuraçõeshttp_max_request_header_sizeehttp_headers_read_timeout. Usuários que dependem dos limites mais altos anteriores podem restaurá-los por meio de configurações. #103285 (Sema Checherinda). - Foi adicionada uma coluna Nested
histogramsasystem.metric_log, que registra um snapshot de cada métrica de histograma registrada por linha, com uma nova configuraçãosystem_metric_log_show_zero_values_in_histogramspara controlar a emissão de valores zero. Isso torna a tabelasystem.histogram_metric_logobsoleta. #103770 (Miсhael Stetsyuk). CASTparaDateTimeouDateTime64sem um fuso horário explícito agora preserva o fuso horário do argumento de origem (quando a origem é umDateTime/DateTime64com fuso horário explícito), alinhando-se ao comportamento das funçõestoDateTime/toDateTime64. Fecha #55072. #104433 (Alexey Milovidov).- A função de tabela
kqlfoi removida. UseSET dialect = 'kusto'para executar consultas no dialeto KQL. #105101 (Alexey Milovidov). - As funções de janela
RANKeDENSE_RANKagora rejeitam argumentos e geramNUMBER_OF_ARGUMENTS_DOESNT_MATCH, em conformidade com o padrão SQL. Antes, consultas comoRANK(x) OVER (ORDER BY id)eram aceitas silenciosamente, com o argumento sendo ignorado. Para restaurar o comportamento leniente anterior, definaallow_rank_dense_rank_arguments = 1. Fecha #49526. #104324 (Groene AI).
Novo recurso
- Adiciona uma nova configuração
max_bytes_ratio_before_external_join, espelhandomax_bytes_ratio_before_external_group_byemax_bytes_ratio_before_external_sort. Ela define o limite para spill em disco em hash joins como uma fração da memória disponível; em conjunto com o limite absolutomax_bytes_before_external_join, aplica-se o menor dos dois valores resultantes. #103862 (Alexey Milovidov). A nova configuraçãomax_bytes_ratio_before_external_joinagora fica habilitada por padrão com o valor 0.5, espelhandomax_bytes_ratio_before_external_group_byemax_bytes_ratio_before_external_sort. As hash joins passam automaticamente para grace hash join assim que os dados do lado direito excedem metade da memória disponível do sistema (quando há limites de memória configurados). #104285 (Alexey Milovidov). - Adiciona a table function
filesystem. Ela permite representar a estrutura de diretórios como uma tabela, para consultar com SQL os metadados e o conteúdo dos arquivos. Originalmente #42039 por @perst20. Veja #42039. Veja #50208. #53610 (Alexey Milovidov). - Permite passar nomes de função simples para funções de ordem superior, como
arrayMap,arrayFilteretc. Por exemplo,arrayMap(negate, [1, 2, 3])agora é equivalente aarrayMap(x -> negate(x), [1, 2, 3]). #101033 (Alexey Milovidov). - Adiciona a configuração
send_table_structure_on_insert_with_inline_datae a opção--inline-insert-datado client para permitir que o servidor faça ele mesmo o parse de dados inline de INSERT pelo native protocol, evitando a ida e volta necessária para receber a estrutura da tabela e melhorando o desempenho de muitos inserts pequenos. #101034 (Alexey Milovidov). - Adiciona as funções
tokenizeQueryehighlightQuerypara tokenização de consultas SQL e realce de sintaxe.tokenizeQueryretorna tokens do lexer com offsets em bytes e tipos de token;highlightQueryretorna intervalos de realce de sintaxe baseados no parser, com categorias de realce (palavra-chave, identificador, função, número, string etc.). #101054 (Alexey Milovidov). - Adiciona a configuração
url_basepara resolver URLs relativas na table functionurle no table engineURL, seguindo a semântica da RFC 3986. #101113 (Alexey Milovidov). - Passa a oferecer suporte a valores negativos na cláusula
LIMIT BYpara selecionar linhas do fim de cada grupo, em vez do início. Por exemplo,LIMIT -2 BY idretorna as duas últimas linhas porid. Offsets negativos (LIMIT -1 OFFSET -1 BY id) e sinais mistos (LIMIT -2 OFFSET 1 BY id) também são compatíveis. #103222 (Nihal Z. Miaji). - Passa a oferecer suporte à função
json_valuepara saída comtupleearray, a fim de melhorar o desempenho de múltiplas consultas JSON. #78362 (kevinyhzou). Passa a oferecer suporte a argumento JSONPathTuple/Arraycom múltiplos caminhos emJSON_VALUE,JSON_EXISTSeJSON_QUERY, por @KevinyhZou. #101102 (Alexey Milovidov). - Um novo parâmetro
kafka_autodetect_client_rackfoi introduzido. Se definido, ele detecta a zona de disponibilidade por meio da infraestrutura da nuvem e a propaga como o parâmetroclient.rackdolibrdkafka, para evitar comunicações entre zonas. #81323 (Ilya Golshtein). - Adiciona o tipo de evento
Readasystem.blob_storage_logpara rastrear operações de leitura em armazenamento de objetos, controlado pela nova configuraçãoenable_blob_storage_log_for_read_operations. #96867 (Alexey Milovidov). - Os usuários agora podem ver os watches do ZooKeeper emitidos por
clickhouse-serverusando a nova tabelasystem.zookeeper_watches. #99277 (Den Kalantaevskii). - Adicionado o evento de perfil
Shards, que conta o número de shards envolvidos em consultas distribuídas, somado entre todas as tabelas. #99470 (Alexey Milovidov). - UDFs
WASMpodem ser declaradas comoDETERMINISTICe passam a ser elegíveis para constant folding. #100005 (Vasily Chekalkin). - Adiciona a configuração
parallel_replicas_prefer_local_replica: quando desabilitada, as réplicas paralelas são selecionadas puramente pelo algoritmo de balanceamento de carga, permitindo que até consultas commax_parallel_replicas = 1sejam direcionadas a outro host. #100139 (Alexey Milovidov). - Adiciona as configurações de servidor
{disk,storage,http}_connections_rcvbufe{disk,storage,http}_connections_sndbufpara controlar o tamanho dos buffers de socket TCP em conexões HTTP de saída, permitindo que operadores substituam o autotuning do kernel e limitem o uso de memória por conexão. #100478 (Sema Checherinda). - Suporte a
CREATE OR REPLACE MATERIALIZED VIEWcom a mesma semântica de troca atômica deCREATE OR REPLACE TABLE. Funciona com tabelas internas, tabelasTO,POPULATE,REFRESHeON CLUSTER. #100539 (DQ). - Adiciona as métricas de histograma
s3_read_request_duration_microsecondses3_read_request_bytespara observar a duração da conexão das requisições GET ao S3 e os bytes consumidos, visíveis emsystem.histogram_metricse no endpoint Prometheus. #102058 (Sema Checherinda). - Adiciona os motores de tabela
Paimon,PaimonS3,PaimonAzure,PaimonHDFSePaimonLocalcom suporte à leitura incremental, baseado no rastreamento do progresso de snapshots do Keeper. O modo incremental retorna apenas novas linhas desde o último snapshot confirmado. Leituras direcionadas de delta de snapshot estão disponíveis viapaimon_target_snapshot_id, e limites de snapshots por consulta viamax_consume_snapshots. A atualização de metadados em segundo plano é configurável compaimon_metadata_refresh_interval_sec. Controlado porallow_experimental_paimon_storage_engine. #102343 (XiaoBinMu). - Adicionada uma nova configuração de tabela Kafka
kafka_map_virtual_columns_on_write. Quando habilitada, colunas chamadas_key,_timestamp,_headers.namee_headers.valueno esquema da tabela Kafka são produzidas como a chave, o timestamp e os headers correspondentes da mensagem Kafka noINSERT, e são excluídas do payload da mensagem. #103243 (Alexey Milovidov). - Adicionadas as consultas
SYSTEM PAUSE VIEW [db.]nameeSYSTEM PAUSE VIEWSpara views materializadas atualizáveis. Diferentemente deSYSTEM STOP VIEW,SYSTEM PAUSE VIEWnão interrompe a atualização atualmente em execução — a atualização em andamento pode ser concluída, e apenas as atualizações subsequentes são impedidas. Isso é revertido porSYSTEM START VIEWouSYSTEM START VIEWS, que agora limpam de forma uniforme os estados de parada e pausa. #103252 (Nikita Mikhaylov). - Adicionada a função
regexpPosition(com aliases compatíveis com PostgreSQLregexpInstreregexp_instr) que retorna a posição em bytes da enésima correspondência de regex em uma string. Suporta deslocamento inicial, modo de retorno após a correspondência, flags de regex e seleção de grupo de captura. #104172 (Abhinav Agarwal). - Novas funções
isPrimeeisProbablePrimepara verificações de primalidade.isPrimeretorna um resultado exato para inteiros sem sinal de atéUInt64.isProbablePrimetambém oferece suporte aUInt128eUInt256; para esses tipos maiores,0significa definitivamente composto e1significa provavelmente primo. O segundo argumento opcional deisProbablePrime,rounds, controla a confiança (limitada a256); o padrão de25rounds mantém a taxa de falso positivo para um composto aleatório abaixo de10^-15, eisProbablePrimepode ser cancelada. #104234 (Nihal Z. Miaji). #104639 (Alexey Milovidov). #104806 (Nihal Z. Miaji). cleare/clearagora limpam o terminal nas ferramentas de linha de comando do ClickHouse em vez de serem executados como uma consulta por engano. #104318 (Tyler Hannan).- Permite que a função de tabela
fileaceite umArray(String)de caminhos em consultasSELECT. #104442 (Yue). - Adiciona as colunas
deterministicehigher_orderà tabelasystem.functions. #104479 (Pedro Ferreira). - Adiciona um parâmetro opcional de variante de codificação a
bech32Encode(bech32/bech32m) e um modo de decodificação bruta abech32Decodepara codificação de endereços não SegWit (por exemplo, Cosmos SDK, Injective, Osmosis). #98986 (Yash ). - Agora você pode gravar dados no formato
AvroConfluent, que antes era apenas de entrada. Isso permite produzir mensagens Avro enquadradas pelo Confluent Schema Registry diretamente do ClickHouse, por exemplo ao gravar no Kafka. O schema é registrado automaticamente no registry. Use a nova configuraçãooutput_format_avro_confluent_subjectpara especificar o nome do subject. #101935 (János Benjamin Antal). - Adicionada a função
prettyPrintJSONpara formatar uma string JSON de forma legível para humanos. Útil para dashboards ou relatórios, em que antes formatar a saída exigia uma etapa extra no lado do cliente. Closes #62523. #102594 (Dmitry Prokofyev). - Adicionado
STRING_AGGcomo um alias degroupConcatque não diferencia maiúsculas de minúsculas, para compatibilidade com PostgreSQL / padrão SQL. #105125 (Alexey Milovidov). - Os resultados de subconsultas individuais agora podem ser armazenados em cache de forma independente usando
SETTINGS use_query_cache = trueem subconsultas específicas, sem armazenar em cache toda a consulta externa. Uma nova configuração,query_cache_for_subqueries = true, permite propagaruse_query_cacheem massa para todas as subconsultas. Observação:use_query_cachena consulta externa não é mais propagado automaticamente para as subconsultas. #99804 (Vincent Voyer). - Adicionado realce de sintaxe baseado em lexer ao editor de consultas na interface web (
play.html), inspirado nas cores doclickhouse-client. #105105 (Alexey Milovidov).
Funcionalidade experimental
- Adicionada uma interface experimental de terminal web em
/webterminalque fornece uma sessão interativa doclickhouse-clientno navegador via WebSocket. Desabilitada por padrão; habilite-a com a configuração de servidorallow_experimental_webterminal. Veja aqui. #100277 (Alexey Milovidov). #105191 (Alexey Milovidov). #105059 (Alexey Milovidov). - O engine
Kafka2(experimental, com armazenamento de offset baseado em Keeper) agora oferece suporte a consultasSELECTdiretas e à configuraçãokafka_commit_on_select. #100276 (Alexey Milovidov). - As UDFs
WASMagora podem fazer coerção de mais tipos numéricos: de inteiros menores para inteiros mais amplos (por exemplo,Int8paraUInt64) e de qualquer inteiro para ponto flutuante (por exemplo,Int32paraFloat32). #100435 (Vasily Chekalkin). - Adicionado suporte à função
LIKEna consultaDELETE FROM system.webassembly_modules. #104397 (Vladimir Cherkasov). - Adicionado suporte a tipos geo para
Iceberg. #103113 (Konstantin Vedernikov). - Adicionada a funcionalidade de instruções preparadas ao servidor ArrowFlight SQL. #103047 (Yakov Olkhovskiy).
- Melhorada a robustez do parser KQL (para suporte à linguagem Kusto) ao preservar a profundidade do parser e os contadores de backtracking entre os estágios do parser KQL, para que os limites do parser sejam acompanhados de forma consistente em consultas KQL complexas. #103528 (Yakov Olkhovskiy).
Melhorias de desempenho
- Reutilize o cache de metadados do footer do Parquet ao ler arquivos Parquet locais pela table function
fileou pelo mecanismo de tabelaFile. Antes, o cache era consultado apenas para backends de armazenamento de objetos. #104260 (Alexey Milovidov). - Propague
ORDER BY ... LIMIT npor junçõesLEFT/RIGHTquando a chave de ordenação fizer referência apenas a colunas do lado preservado pela junção, limitando quantas linhas a entrada desse lado precisa produzir antes da junção. Controlado pela nova configuraçãoquery_plan_top_k_through_join(habilitada por padrão). #104268 (Alexey Milovidov). - Habilite por padrão as configurações
use_top_k_dynamic_filteringeuse_skip_indexes_for_top_kpara melhorar o desempenho de consultasORDER BY ... LIMIT N. #99537 (Alexey Milovidov). Restrinjause_top_k_dynamic_filteringpor padrão a colunas de ordenação de comprimento fixo, evitando regressões em consultasORDER BY <var-length-column> LIMIT Nnas quais o custo da comparação do limite por linha excede a economia de E/S. O comportamento anterior continua disponível por meio da nova configuraçãouse_top_k_dynamic_filtering_for_variable_length_types. #104216 (Alexey Milovidov). - Use o recurso de arena superdimensionada do
jemallocpara reduzir falhas de página. #103958 (Nikita Taranov). - Limite os streams ativos simultaneamente em
UNION ALLpara reduzir o pico de uso de memória. #100176 (Alexey Milovidov). - Otimize ligeiramente o cache de páginas em espaço do usuário. #100300 (Alexey Milovidov). Agora, o cache de páginas em espaço do usuário é sempre melhor que o cache de páginas do SO.
- Leituras frias de armazenamento de objetos por meio do cache de páginas em espaço do usuário (
use_page_cache_for_object_storage = 1) agora são significativamente mais rápidas, porque falhas de cache consecutivas são agrupadas em uma única requisição HTTP, em vez de uma requisição por blocopage_cache_block_size. #104230 (Alexey Milovidov). - Acelere a análise de índices que envolve conversão de tipos e aplicação de funções. Fecha #55653. #100366 (Alexey Milovidov).
- Acelere consultas muito grandes em tabelas
Mergesobre um grande número de tabelas subjacentes. Fecha #32465. #100369 (Alexey Milovidov). - Remova a vtable dos tipos de campo de configuração, reduzindo o tamanho da cópia de
Settingsem ~28x e melhorando a localidade de cache por meio de um layout de array tipado para todos os tipos de configuração. #102269 (Raúl Marín). - Adicione as configurações
max_threads_min_free_memory_per_threademax_insert_threads_min_free_memory_per_threadpara reduzir automaticamente o paralelismo das consultas quando o servidor estiver com pouca memória livre. #100383 (Alexey Milovidov). - Reduza o uso de memória em sistemas com pouca memória (< 4 GiB). #100389 (Alexey Milovidov).
- Adicionado
OptimizeTrivialGroupByLimitPass. Para consultas triviaisSELECT ... FROM t GROUP BY k LIMIT n(semHAVING,ORDER BYnem funções de janela), o analyzer agora definemax_rows_to_group_by = n + offsetcomgroup_by_overflow_mode = 'any', de modo que a agregação para assim quenchaves distintas forem produzidas, em vez de agrupar toda a entrada. Controlado pela nova configuraçãooptimize_trivial_group_by_limit_query(habilitada por padrão). #104473 (Amos Bird) (Alexey Milovidov). - Índice min-max implícito em nível de grânulo para as colunas virtuais
_part_offsete_block_number, inclusive para projeções. Permite a eliminação rápida de grânulos com base em predicados de colunas virtuais. #103952 (Mikhail Artemenko). #104746 (Mikhail Artemenko). #105137 (Mikhail Artemenko). - Para a família
prealloc_serializedde métodos de agregação, pré-calcula hashes por linha durante a etapa de serialização em lote e os usa para (a) evitar recalcular o hash ememplaceKey/findKeye (b) fazer software prefetch do bucket da próxima linha. Isso acelera a agregação serializada/de strings com múltiplas chaves ao ocultar a latência de cache miss da tabela hash. #104475 (Amos Bird) (Alexey Milovidov). - Cache de condições de consulta para tabelas
Iceberg. #102115 (Konstantin Vedernikov). - Otimiza
cramersV,cramersVBiasCorrected,theilsUecontingencyquando usados com funções de janela. Fecha #83521. #93384 (Nihal Z. Miaji). - Adicionada uma otimização de consulta que reescreve
tupleElement(dictGet('dict', ('a', 'b', 'c'), key), N)comodictGet('dict', 'a', key), evitando buscar atributos de dicionário desnecessários. Controlado pela configuraçãooptimize_dictget_tuple_element(habilitada por padrão). #100186 (Alexey Milovidov). - Habilita bufferização para etapas de ordenação no iniciador em consultas distribuídas com ordenação. #100661 (Nikita Taranov).
- Melhoria de desempenho para
partial_mergeJOIN. #100945 (Artem Zuikov). - Reduz ligeiramente a superalocação de memória em
partial_mergeJOIN. #100963 (Artem Zuikov). - Otimiza allocations/deallocations armazenando em cache as configurações de sampling, em vez de percorrer toda a hierarquia do memory-tracker. #101267 (Azat Khuzhin).
- Reduz a sobrecarga de alocação de memória durante uploads multipart no S3 por meio da pré-alocação de contêineres internos de rastreamento. #101799 (Gagan Dhakrey).
- Adiciona software prefetch na fase de probe do hash join para reduzir a latência de acesso à memória em tabelas hash grandes, controlado pela configuração
enable_software_prefetch_in_join. #102444 (Xiaozhe Yu). - Otimiza o layout de
MemoryTracker, melhorando seu desempenho em ~25%. #103464 (Azat Khuzhin). - Reescreve os predicados
coalesce(a, b, ...) <op> consteifNull(a, b) <op> constantes da análise de índices, para que a chave primária por coluna e os skip indexes de cada argumento possam eliminar grânulos. Controlado pela nova configuraçãoallow_key_condition_coalesce_rewrite(ativada por padrão). #103468 (Manuel). - Melhorou significativamente o desempenho de consultas ao ler catálogos Iceberg com arquivos JSON de metadados grandes, otimizando o processamento de barras invertidas escapadas. #103998 (Mohaidoss).
- Evita a sobrecarga do cache não comprimido de índice quando ele está desabilitado (configuração do servidor
index_uncompressed_cache_size = 0, que é o padrão). #104063 (Michael Kolupaev). - Corrige consultas
ORDER BY ... LIMITcom limite pequeno que liam grânulos em excesso quando combinadas com um filtroWHEREpouco seletivo. Antes, qualquer filtro acima de uma leitura em ordem desativava a divisão de tarefas por intervalo de marcas, então o pipeline não conseguia cancelar entre grânulos e lia a part inteira para cada stream. #104112 (Vladimir Cherkasov). - Corrige a falta de reutilização do cache de tamanhos da tabela hash após reordenar os lados do JOIN. #104131 (Nikita Taranov).
- Quando
fsync_after_insertestá ativado, o fsync dos arquivos de part agora é executado em paralelo usando o IO thread pool, acelerando a finalização de insert em wide tables. A carga completa dehitsdo ClickBench fica cerca de 22% mais rápida. #104137 (Alexey Milovidov). - Vetoriza
find_first_symbols,find_first_not_symbols,find_last_symbols_or_null,find_last_not_symbols_or_nullesplitIntoem AArch64 usando NEON. Antes, esses helpers tinham um caminho SIMD apenas em x86 (SSE2 / SSE4.2) e acabavam caindo em um loop escalar no ARM. Acelera o parsing de TSV em ~2x, as funções de URL esplitByCharem ~1,3x no datasethitsdo ClickBench; o parsing de JSON muito denso (cadência de campos abaixo de 16 bytes) sofre uma leve regressão, em linha com o trade-off já existente do SSE2. #104228 (Alexey Milovidov). - A leitura de dados por meio de uma coluna
ALIAStrivial (por exemplo,some_alias['key']ondesome_alias ALIAS m) agora segue o mesmo caminho de leitura por subcoluna que a referência direta à coluna subjacente, restaurando uma grande economia de E/S para colunas com alias dos tiposMap,Array,TupleeNullable. #104245 (Raúl Marín). - Reduz a contenção de locks no caminho de leitura assíncrona de sistema de arquivos remoto ao tornar o
AsyncReadCounterspor consulta lock-free. #104374 (Nikita Mikhaylov). - Plano de consulta ligeiramente melhor para varreduras em ordem de projeções. #103723 (Mikhail Artemenko).
- Estende
optimizeUseNormalProjectionspara também lidar com um caso específico em que nada foi filtrado, mas a chave de ordenação da projeção pode remover a etapa de ordenação do plano de consulta. #104680 (Mikhail Artemenko). - Permitir que o açúcar sintático
json.path[]e as dicas de tipo explícitas funcionem corretamente empathsJSONtipados. #99179 (Pavel Kruglov). - Otimizar
json.path[N].nested.path(que se expande paratupleElement(tupleElement(json.path[N], 'nested'), 'path')) parajson.path[].nested.path[N], que lê muito menos dados. #99802 (Pavel Kruglov). - Otimizar as verificações de acesso de
SHOW TABLESemsystem.parts, movendo as verificações de privilégio no nível do banco de dados para fora do loop por tabela. #100860 (Shaohua Wang). - Remover uma verificação redundante de acesso a
SHOW TABLESpor tabela no caminho rápido deSELECT name/SELECT database, nameemsystem.tables. #100881 (Shaohua Wang). - Habilitar compilação JIT no macOS. #100947 (Alexey Milovidov).
- Ignorar o adiamento da política de linha após
FINALquando ela depende apenas de colunas da chave de ordenação e é determinística, e ignorar o adiamento correspondente dePREWHEREque a política de linha estava forçando nesse caso. #102884 (Yarik Briukhovetskyi). - Adicionado suporte a
hasAnyehasAllcomo predicados de filtro em índices de texto. #103266 (Anton Popov). - Direcionar o estado de heap de longa duração do MergeTree (metadados por parte e por tabela) para uma arena dedicada do jemalloc, exposta por meio das métricas assíncronas
jemalloc.mergetree_arena.*. Isso reduz a fragmentação da arena padrão em estado estável e evita que sobreviventes por parte mantenham páginas presas que, de outra forma, poderiam decair. #104136 (Raúl Marín). - Melhorar o tratamento de timeout do cliente ZooKeeper sob alta carga quando muitas solicitações são colocadas em pipeline em uma única sessão. O cliente ZooKeeper agora usa um timeout baseado em progresso: enquanto qualquer dado for recebido do servidor dentro de
session_timeout_ms, a espera é estendida. Um limite rígido de3 * session_timeout_mspor solicitação ainda limita a latência do chamador. Fecha #100466. #104351 (Antonio Andelic). - Mover as flags de trace por evento para um array separado e alocá-las sob demanda, reduzindo a sobrecarga do tracing de
ProfileEvents. #105030 (Azat Khuzhin). - Adicionar
compareTrackAtparaColumnDecimal, melhorando o desempenho de comparação para colunasDecimal. #105110 (Artem Zuikov). - Adicionada uma implementação SIMD de
MD5(AVX2/AVX512) que calcula hashes de várias entradas em paralelo, melhorando o throughput. #105161 (Joanna Hulboj).
Melhoria
- Melhora a saída de ajuda de todos os aplicativos ClickHouse:
--helpagora retorna consistentemente o código de saída0, imprime emstdout, eclickhouse --help, no nível superior, lista todos os subcomandos. Adiciona a opção--no-sudoparaclickhouse start/restart(útil no Docker) e o subcomandoclickhouse help. Continuação de #58244 por @qoega. #98148 (Alexey Milovidov). - O valor padrão de
input_format_column_name_matching_modefoi alterado dematch_caseparaauto. Os formatos de entrada que fazem correspondência entre nomes de coluna de entrada e o schema da tabela (JSONEachRow,CSVWithNames,JSONColumns,BSONEachRow,RowBinaryWithNames, etc.) agora tentam primeiro uma correspondência case-sensitive e, se ela falhar, recorrem à correspondência case-insensitive. O comportamento estrito anterior é preservado emcompatibility. #104320 (Alexey Milovidov). - Adicionado
STDDEVcomo alias case-insensitive destddevSamppara compatibilidade com PostgreSQL/SQL padrão. #105120 (Alexey Milovidov). - Adicionado
array_to_stringcomo alias case-insensitive dearrayStringConcatpara compatibilidade com PostgreSQL. #105121 (Alexey Milovidov). - Adicionado
unnestcomo alias case-insensitive dearrayJoinpara compatibilidade com PostgreSQL (na forma de chamada de função). #105124 (Alexey Milovidov). - A barra de progresso no
clickhouse-clientagora mostra o uso de disco para dados temporários (por exemplo, em sort externo, aggregation ou JOIN) ao lado da RAM, incluindo um detalhamento por host para consultas distribuídas. #105190 (Alexey Milovidov). - Adicionado
system.predicate_statistics_log, um novo log amostrado da seletividade de filtros de predicate e do Granule pruning do índice MergeTree por consulta. Desabilitado por padrão; habilite-o por meio da server settingpredicate_statistics_sample_rate. Necessário para recomendações automáticas de índice e projection. #98727 (Yarik Briukhovetskyi). - Permite ignorar o shard local com tabela ausente quando
skip_unavailable_shardsestá habilitado. #100141 (Alexey Milovidov). - Adiciona avisos na inicialização (visíveis em
system.warnings) quando um array mdraid do Linux está sendo ressincronizado ou está em estado degradado, pois ambos podem afetar o desempenho de E/S de disco ou indicar falhas de disco. #100941 (Alexey Milovidov). - As UDFs WASM agora aparecem em
system.functionscomorigincorreto (WasmUserDefined) e as colunassyntax,argumentsereturned_valuepreenchidas com base nos metadados de tipo do ClickHouse. Antes, elas estavam ausentes ou apareciam listadas comoriginincorreto como duplicatas. #101053 (Vasily Chekalkin). - A table function
generate_seriesagora oferece suporte a valores negativos de passo para gerar sequências decrescentes, por exemploSELECT * FROM generate_series(99, 0, -1). #101056 (Alexey Milovidov). - Corrige exceções
Context has expiredgeradas por algumas funções (dotProduct,formatRow,structureToCapnProtoSchema/structureToProtobufSchema, funções definidas pelo usuário) quando usadas em caminhos de execução diferida, como expressõesDEFAULT/MATERIALIZEDe configurações de mecanismo de tabela, garantindo que essas funções mantenham um contexto forte quando necessário. #101109 (Alexey Milovidov). - Corrige erros lógicos espúrios
Cache limits violatedem prioridades criadas com limites iguais a zero (como a prioridade de filesystem cache por consulta usada quandoenable_filesystem_query_cache_limitestá ativado). #101428 (Alexey Milovidov). - Detecta automaticamente a região de endpoints
s3express. #101520 (Pradeep Chhetri). - Adiciona suporte a IDs de campo para data files em gravações no
Iceberg. Fecha #102322. #102362 (Konstantin Vedernikov). - O painel esquerdo na interface web (
play.html) agora rola de forma independente, permanece visível quando a página é rolada e, ao clicar em uma tabela, vai para a área da consulta. #102498 (Alexey Milovidov). - Permite abrir a interface do Play em uma nova aba via Ctrl/Cmd/Shift+clique ou clique do meio no logo do ClickHouse no painel esquerdo. #102501 (Alexey Milovidov).
- Novas métricas para rastrear a memória usada por chaves primárias de projeções e pela granularidade de índice de projeções em todas as tabelas. #102587 (Narasimha Pakeer).
- Aplica
max_network_bandwidth_for_useremax_network_bandwidth_for_all_usersa leituras/gravações em sistemas de arquivos remotos. #103080 (Azat Khuzhin). - Melhora a resiliência dos backups quando views materializadas atualizáveis são atualizadas constantemente, tomando decisões com base no estado das tabelas capturado no snapshot, em vez de um estado global. #103384 (Nikita Mikhaylov).
SELECT * FROM system.databasesagora sempre lista bancos de dados do catálogo do lago de dados, independentemente da configuraçãoshow_data_lake_catalogs_in_system_tables. Antes, eles ficavam ocultos por padrão, o que era inconsistente comSHOW DATABASES, que sempre os mostrava. #103444 (Alsu Giliazova).- Alinha no código o valor padrão da configuração de servidor
concurrent_threads_soft_limit_ratio_to_corescom o valor fornecido emconfig.xml(2), para que o scheduler padrãomax_min_fairde threads concorrentes limite, por padrão, as threads de processamento de consultas a 2x o número de núcleos, mesmo quando oconfig.xmlfornecido não é usado. #103446 (Alexey Milovidov). - Aprimora a robustez do sanitizer em casos de borda no parser e em funções de string ao tratar entradas vazias em
getURLScheme, evitar aritmética com ponteiro nulo nas verificações demax_query_sizeemLexer::nextTokene interromper antecipadamente a avaliação de subsequências UTF-8 em haystacks vazios antes da decodificação. #103489 (Yakov Olkhovskiy). - Correção aprimorada da inferência de monotonicidade para
divide(0, x)eintDiv(0, x): anteriormente, as funções eram reportadas incondicionalmente como monotônicas, mas0 / xnão é monotônica em qualquer intervalo que inclua 0, porque0 / 0é indefinido (NaN/Infparadivide, exceção de divisão por zero paraintDiv). Essa suposição incorreta fazia com queKeyCondition::applyMonotonicFunctionsChainToRangeproduzisse intervalos comleft > right, o que disparava umLOGICAL_ERRORInvalid binary search result in MergeTreeSetIndexem compilações de depuração quando uma expressãoIN/NOT INna chave primária envolvia a chave emdivide(0, key)ouintDiv(0, key). As compilações de lançamento não foram afetadas — a asserção é controlada por#ifndef NDEBUG. #103621 (Groene AI). - Substitui as métricas assíncronas
HTTPConnectionPool*TCP{Rcv,Snd}BufBytes_{p50,p75,p90,p95}por um histograma baseado em bucket,http_pool_tcp_buf_bytes(labelsgroup,direction), emsystem.histogram_metrics. As métricas assíncronas totais por grupo foram preservadas. #103704 (Sema Checherinda). - As server settings
{disk,storage,http}_connections_{rcvbuf,sndbuf}agora são reportadas como alteráveis sem reinicialização emsystem.server_settings. Seus valores podem ser atualizados viaSYSTEM RELOAD CONFIG; o caminho de aplicação em runtime já existia desde #100478. #103772 (Sema Checherinda). - Adiciona suporte a símbolos resolvidos (
Array(String)) emflameGraph. #103816 (Azat Khuzhin). - O client CLI agora pode especificar
<rainbow_parentheses>false</rainbow_parentheses>na sua config em ambientes em que as cores do terminal conflitam com os parênteses (da mesma forma,clickhouse formatagora tem--no_rainbow_parentheses). #103851 (Larry Snizek). - Corrige a busca UTF-8 case-insensitive de
MultiVolnitsky, revertendo inserts parciais deputNGramem caso de falha e mudando needles com falha para searchers de fallback, evitando estado inconsistente. #103864 (Yakov Olkhovskiy). - Implementa
sched_getcpuvia TLSrseqem musl compatível com glibc. #104016 (Azat Khuzhin). - A view materializada atualizável Replicated no modo APPEND não será mais atualizada duas vezes se a connection com o ZooKeeper for brevemente perdida durante a atualização. #104051 (Michael Kolupaev).
- Permite que tabelas Distributed sem uma lista explícita de colunas validem sharding keys com base na structure inferida da tabela remota. #104111 (Yue).
- Corrige o REST catalog com path
Azureabfss. #104120 (Konstantin Vedernikov). - Respeita as auth settings
role_arnerole_session_nameno client de snapshot S3 do Keeper, permitindo que uploads de snapshot usem authentication baseada em STSAssumeRole. #104140 (Alexey Milovidov). - Corrige um vazamento de memória ao executar consultas com CTEs
MATERIALIZED. #104153 (Alexey Milovidov). - Corrige a exceção de
lowerUTF8/upperUTF8ao processar grandes conjuntos de dados não ASCII (por exemplo, durante a compilação de índices de texto), quando o buffer de saída acumulado ultrapassaria 2 GiB; linhas individuais excessivamente longas agora são rejeitadas com um erro claro. #104229 (Shaohua Wang). - Torna o carregamento de estatísticas de coluna do MergeTree mais robusto contra falhas transitórias de E/S, para evitar a desativação permanente de otimizações baseadas em estatísticas nas partes afetadas. #104372 (zoomxi).
INSERT INTO ... SELECT FROM input(...)não exige mais o privilégioCREATE TEMPORARY TABLE. #104470 (Alexey Milovidov).- Adiciona uma nova configuração do MergeTree,
concurrent_part_removal_threshold_for_remote_disk(padrão16), usada no lugar deconcurrent_part_removal_thresholdquando pelo menos uma parte removida está armazenada em um disco remoto. O limite anterior de100podia fazer com queDROP TABLEe outras operações de remoção de partes em backends de armazenamento de objetos ficassem bloqueados por dezenas de segundos, porque as remoções eram realizadas em série, embora cada uma correspondesse a uma ida e volta de rede separada. A nova configuração faz com que o caminho de remoção paralela seja acionado muito mais cedo no armazenamento remoto, sem alterar o comportamento em disco local. #104676 (Groene AI). - A nova configuração
defer_partition_pruning_after_final(padrão1) torna desativável o comportamento introduzido na 26.3 de ignorar o partition pruning comFINAL. Defina-a como0para restaurar o partition pruning anterior à 26.3 — substancialmente mais rápido em workloads de logs de eventos em que linhas com a mesma PK não podem abranger partições.compatibility = '26.2'a altera para0automaticamente. #104705 (Nikita Fomichev). - Corrige
intExp2, que retornava resultados incorretos para entradas fora do intervalo (shifts>= 64com JIT e inteiros com magnitude maior queINT_MAXem ambos os caminhos de código). #105054 (Raúl Marín). - Coloca entre aspas argumentos de shell gerados a partir de opções de CLI e de entrada convertida em
clickhouse installeclickhouse git-import, para que paths, nomes de usuário/grupo e hashes de commit que contenham espaços em branco ou metacaracteres de shell sejam tratados corretamente. #105232 (Raúl Marín). - O table engine
Aliasagora deixou de ser experimental e está disponível sem a configuraçãoallow_experimental_alias_table_engine. #103488 (Alexey Milovidov). - Adiciona a opção
--queries-formataoclickhouse-benchmarkpara escolher entre o formato padrão de entrada, com uma consulta por linha e escapes de tabulação (tsv), e a análise da entrada padrão como um script com várias consultas separadas por;(script). #99972 (Aleksandr Musorin). - Os operadores de Tuple elemento por elemento
tuplePlus,tupleMinus,tupleMultiply,tupleDivide,tupleModulo,tupleIntDivetupleIntDivOrZeroagora são variádicos e aceitam duas ou mais tuples do mesmo tamanho, aplicadas elemento por elemento como uma redução à esquerda. Antes, aceitavam exatamente dois argumentos. #104659 (Aruj Bansal). - Adicionada uma nova interface web integrada em
/processors-profileque visualiza o pipeline de qualquer consultaSELECTanterior como um heatmap, com dados desystem.query_logesystem.processors_profile_log. Cada processor é colorido de acordo com seuelapsed_use mostra estatísticas por processor (linhas, bytes, tempos de espera) ao passar o cursor. #104614 (Nikita Mikhaylov). - A configuração
query_plan_use_logical_join_step(e seu aliasquery_plan_use_new_logical_join_step) agora está obsoleta e não tem efeito; a etapa lógica de join é sempre usada. #104017 (Vladimir Cherkasov). - O campo
useremplay.htmle nas outras páginas web integradas (dashboard.html,jemalloc.html,merges.html,binary.html,webterminal.html) não vem mais pré-preenchido com o texto literaldefault. Agora ele mostra uma dica de placeholderusere fica vazio por padrão. Quando deixado vazio, a página não envia um parâmetro de URLuser=(e o JSON de autenticação do WebTerminal omite o fielduser), então o servidor aplica seu fallback usual para o usuáriodefault— e credentials HTTP fornecidas por outros canais (X-ClickHouse-User, HTTP Basic, configuração<handler><user>por handler) não são mais sobrescritas. #105254 (Alexey Milovidov). - Leitor
ORC: desacopla a leitura baseada em offset (readBigAt) deuse_prefetch, para que dados codificados com EC emHDFSpossam ser lidos corretamente mesmo quandouse_prefetch = false(por exemplo, pelo Gluten). #103348 (zhanglistar). - Arquivos baixados de
play.htmlcom o formatCSVWithNamesagora usam a extensão.csv. #103737 (JackFielding). - Mais validação de entrada para o catálogo BigLake. #105117 (Konstantin Vedernikov).
Correção de bug (comportamento incorreto perceptível ao usuário em uma versão estável oficial)
- Corrige a formatação inconsistente ao preservar a informação sobre uma expressão estar ou não entre parênteses. #92340 (Alexey Milovidov).
- Corrige a comparação correta entre os tipos Decimal e Float. #94293 (zoomxi).
- Permite argumentos posicionais em consultas distribuídas. #94359 (simonmichal).
- Corrige a falha de asserção em
DatabaseCatalog::updateDependenciesao remover e recriar uma visão materializada com o mesmo nome; também corrige a perda silenciosa de dependências de views duranteRENAME TABLEouEXCHANGE TABLESquando as dependências referenciais estavam vazias. #98779 (Alexey Milovidov). - Corrige um abort do servidor (falha de asserção em
DatabaseCatalog::getTableImpl) que ocorria ao criar uma tabela viaON CLUSTERcom um UUID idêntico ao UUID de um banco de dados existente. #98861 (xiaohuanlin). - Corrige o uso de skip indexes na leitura de dados (com a configuração
use_skip_indexes_on_data_readhabilitada) e de patch parts existentes criadas por atualizações leves. #99543 (Alexey Milovidov). - Corrige a exceção “Not-ready Set” quando um filtro com
IN (subquery)é movido para PREWHERE pelo otimizador de consultas. #100375 (Alexey Milovidov). - Corrige o erro “Cannot find column” ao combinar
ADD COLUMNcomRENAME COLUMNem uma única instruçãoALTER TABLE. #100387 (Alexey Milovidov). - Corrige views com operadores
UNIONeINTERSECT/EXCEPTmisturados que retornavam resultados incorretos apósDETACH/ATTACHou a reinicialização do servidor. #100390 (Alexey Milovidov). - Corrige a exceção “Trying to execute PLACEHOLDER action” que podia ocorrer durante testes de estresse com o AST fuzzer quando uma subconsulta correlacionada aparecia em uma cláusula IN. #100398 (Alexey Milovidov).
- Corrige a exceção de erro lógico ao inserir em uma tabela Iceberg com uma coluna
Dateparticionada por transformaçõesyear,monthouday. #100404 (Alexey Milovidov). - Corrige o uso de skip index com dados incompatíveis após
ALTER TABLE MODIFY COLUMNalterar o tipo da coluna, o que podia causar falhas no servidor em builds com sanitizer ou resultados incorretos de consulta. #100526 (Alexey Milovidov). - Corrige o vazamento de credenciais em
query_logpara as table functionspaimonCluster,paimonS3Cluster,paimonAzureClusteredeltaLakeS3. #100529 (JIaQi Tang). - Corrige o
DROP TABLEem tabelas com motor Kafka, que podia ficar bloqueado indefinidamente devido a um deadlock emrd_kafka_consumer_close. #100604 (Alexey Milovidov). - Substitui a lista
source_table_enginescodificada estaticamente por lookup em runtime viaStorageFactoryeDatabaseFactory. Adicionasource_access_typeaDatabaseFactory::EngineFeatures, para queCREATE DATABASEcom motores de origem (PostgreSQL, MySQL, S3 etc.) exija os mesmos grants de origem queCREATE TABLE. Corrige a falha deGRANT TABLE ENGINE ON *comtable_engines_require_grant=false. Fecha #71544. #100746 (pufit). - Corrige um crash do servidor ao ler de uma tabela cuja coluna
ALIAScontinha uma subquery correlacionada aninhada dentro de uma chamada de função (por exemplo,ALIAS toString(intDivOrZero(x, (SELECT ...)))).CREATE TABLEeALTER TABLEagora rejeitam qualquer subquery, em qualquer nível de profundidade, em expressões de colunaDEFAULT/ALIAS/MATERIALIZED, comTHERE_IS_NO_DEFAULT_VALUE. Anteriormente, a validação superficial aceitava subqueries aninhadas, então o caso correlacionado causava crash em tempo de leitura, e o caso aninhado não correlacionado parecia funcionar, mas podia levar a comportamento inesperado; ambos agora são rejeitados no momento do DDL. #100753 (Groene AI). - Corrige um crash do servidor (
Logical error: Bad cast from type DB::FunctionNode to DB::ColumnNode) que podia ocorrer ao usar consultas com subqueries correlacionadas em tabelas com definiçõesCONSTRAINT ... ASSUME, quando as settingsoptimize_substitute_columnseconvert_query_to_cnfestão habilitadas. #100756 (Groene AI). - Corrige uma exceção que podia ocorrer ao inserir uma linha em uma coluna JSON em que a linha introduzia um novo campo dinâmico ao lado de um campo tipado com um valor incompatível, e a coluna era usada posteriormente como chave de GROUP BY. #100758 (Jimmy Aguilar Mena).
- Corrige o bypass silencioso do IO scheduling de workload para gravações em S3/armazenamento de objetos que passam pelo caminho
DiskObjectStorageTransaction(usado por diskss3_with_keepere explicitamente quandouse_fake_transaction=false). Anteriormente, gravações de INSERT em MergeTree tables nesses disks ignoravam o throttling deCREATE RESOURCE/CREATE WORKLOADporque o link do resource nunca era injetado emWriteSettingsno caminho de gravação transacional. #100777 (JIaQi Tang). - Corrige uma colisão de schema-cache compartilhado entre
ProtobufeProtobufList: ler uma mensagem primeiro comoFORMAT Protobufe depois comoFORMAT ProtobufListpodia falhar porqueProtobufListforçava o schema em cache para seu formato de envelope.ProtobufListagora recorre ao tipo de mensagem em cache quando nenhum schema de envelope está disponível. #100849 (Callum Cooper). - Corrige heap-buffer-overflow na ponte Rust CXX devido a incompatibilidade de ABI de
std::exception. #100931 (Azat Khuzhin). FunctionVariantAdaptoragora lançaILLEGAL_TYPE_OF_ARGUMENTquando todas as alternativas deVariantsão incompatíveis com uma função, em vez de retornar silenciosamenteNullable(Nothing). Anteriormente, um predicateWHERE function(variant_col)em que nenhum tipo alternativo era compatível retornava 0 linhas sem erro, enquanto o contextoSELECTequivalente já lançava corretamente. #100939 (Vasily Chekalkin).TRUNCATE ALL TABLESnão falha mais quando o database contém views. #100943 (Alexey Milovidov).- Corrige a otimização
optimize_rewrite_array_exists_to_haspara lidar corretamente com casos com tipos incompatíveis (por exemplo, Date vs String) e a reativa por padrão. #100944 (Alexey Milovidov). - Corrige a prioridade das configurações de S3 para que as configurações de disco em
storage_configurationsubstituam a seção global<s3>, e as configurações em nível de usuário/profile/consulta substituam ambas. #100975 (Alexey Milovidov). - Corrige a serialização esparsa que perdia o sinal de zero negativo (-0.0) em colunas BFloat16, Float32 e Float64. #100983 (Takumi Hara).
- Corrige dois bugs no parser de geometria WKT usado ao ler arquivos GeoParquet e Arrow codificados em WKT: geometrias
MULTILINESTRINGeram interpretadas incorretamente comoPolygon(causando uma exceção para colunas tipadas e corrupção silenciosa de dados para colunasGeometrymistas), e uma string WKT malformada sem palavra-chave de tipo acionava comportamento indefinido em vez de um erro claro. #100997 (Vasily Chekalkin). - Corrige consultas
grouping/GROUPING SETSem tabelas Distributed com um único shard que falhavam com “Method executeImpl is not supported for ‘grouping’ function”. #101030 (Alexey Milovidov). - Corrige
LOGICAL_ERROR“Column identifier is already registered” no planner, que podia ocorrer quando a mesma expressão de tabela era processada várias vezes. #101048 (Alexey Milovidov). - Corrige a exceção LOGICAL_ERROR “Column identifier is already registered” quando a configuração
additional_result_filteré usada com consultas UNION ou EXCEPT. #101051 (Alexey Milovidov). - Corrige travamento do servidor (Logical error: Bad cast from ColumnVector to ColumnNullable) ao usar
* APPLYcom funções de agregação egroup_by_use_nulls=1com GROUPING SETS, ROLLUP ou CUBE. #101062 (Groene AI). - Corrige loop infinito quando
input_format_csv_skip_first_linesouinput_format_tsv_skip_first_linesexcede o número de linhas no arquivo. #101111 (Alexey Milovidov). - Corrige acesso fora dos limites na otimização de materialização tardia que podia causar uma exceção em compilações de depuração. #101144 (Alexey Milovidov).
- Corrige a inferência de tipos em CTEs recursivas: os tipos de coluna agora são ampliados iterativamente via
getLeastSupertypeentre os lados não recursivo e recursivo doUNION ALLaté convergirem, evitando estouro de inteiro em expressões comox + 1. #101155 (Alexey Milovidov). - Limita as configurações de tamanho de bloco de compressão do MergeTree (max_compress_block_size, min_compress_block_size, marks_compress_block_size, primary_key_compress_block_size) a 256 MiB para evitar travamento do servidor quando valores extremos são definidos via CREATE TABLE SETTINGS. #101159 (Groene AI).
- Corrige uma falha de LOGICAL_ERROR em
QueryAnalyzer::resolve()quando uma ROW POLICY usa uma subconsulta escalar na cláusulaUSING(por exemplo,USING (SELECT 1)). Fecha #100695. #101263 (Groene AI). - Corrige comportamento indefinido em
MergeTreeDataPartWriterCompact::cancelquando a alocação de um stream falha. #101292 (Alexey Milovidov). - Corrige um caso em que o timezone não era incluído durante a atribuição na instrução ALTER. Fecha #101328. Relacionado a https://github.com/ClickHouse/ClickHouse/pull/100647. #101403 (Yarik Briukhovetskyi).
- Corrige uma falha do servidor (LOGICAL_ERROR) em consultas INSERT SELECT com ORDER BY ALL quando o pipeline de SELECT produz múltiplos streams. #101443 (Groene AI).
- Corrige resultados incorretos de consulta causados pela reordenação de join, que empurrava um filtro de INNER JOIN (referenciando apenas o lado preservado de um outer join) para a cláusula ON do outer join. #101504 (Vladimir Cherkasov).
- Evita aplicar lazy materialization a planos com arrayJoin, o que podia fazer com que o limite não fosse respeitado. Fecha #101608. #101644 (Vladimir Cherkasov).
- Corrige resultados incorretos em consultas JOIN quando a otimização
mergeFilterIntoJoinConditiondescartava silenciosamente uma condição de igualdade na cláusula WHERE com tipos incompatíveis. #101652 (Xiaozhe Yu). - Corrige o não funcionamento da dica de teste
errorpara erros de sintaxe/parsing — anteriormente,-- { error SYNTAX_ERROR }em uma consulta malformada falhava com “Expected server error” em vez de corresponder ao erro de parse no lado do cliente. #101675 (Groene AI). - Corrige
INTO OUTFILE ... TRUNCATE, que na prática não usava rename atômico — a gravação era feita diretamente no arquivo original em vez de em um arquivo temporário, então, em caso de falha da consulta, o conteúdo original era destruído. Agora, os dados são gravados em um arquivo temporário e renomeados apenas em caso de sucesso. #101884 (Pablo Marcos). - Corrige uma exceção
Unsupported DeltaLake type: varchar(n)ao ler tabelas Delta Lake cujo esquema contém tipos de coluna varchar(n) ou char(n). Esses tipos agora são mapeados para String, em conformidade com a forma como o protocolo Delta Lake os armazena como arrays simples de bytes em Parquet. #101973 (Flavio Malavazi). - Corrige perda silenciosa de dados ao ler arquivos tar do S3 com
schema_inference_mode=unione esquemas Parquet heterogêneos — o parquet metadata cache reutilizava incorretamente os metadados do primeiro arquivo para todos os arquivos subsequentes no arquivo tar. #101990 (Ahaan Limaye). - Corrige uma falha do servidor (LOGICAL_ERROR) ao executar ALTER TABLE UPDATE/DELETE em tabelas Iceberg quando nenhum SELECT ou INSERT anterior havia sido feito na tabela durante o mesmo ciclo de vida do servidor. #102113 (Alexey Milovidov).
- Corrige um possível crash quando uma consulta ALTER é executada em tabelas de um banco de dados em memória (por exemplo, temporary tables). #102360 (Den Kalantaevskii).
- Corrige o
formatQuery, que produzia grants duplicados comoGRANT FILE ON *.*, FILE ON *.* TO xem vez deGRANT FILE ON *.* TO x, ao formatar grants READ/WRITE retrocompatíveis na mesma source. #102411 (Groene AI). - Corrige perda de paralelismo na aggregation após consultas read-in-order quando
max_streams_to_max_threads_ratioé maior que 1. #102467 (Alexey Milovidov). - Corrige um crash (
LOGICAL_ERROR: Unknown virtual column) ao selecionar subcolumns (como.nullpara Nullable,.size0para Array, elementos de Tuple ou chaves/valores de map) de uma Buffer table engine. #102470 (Groene AI). - Corrige a Exception “Cannot fold actions for projection” na otimização de reordenação de join quando um LEFT/RIGHT JOIN com
join_use_nullsé combinado com outras junções envolvendo mais de duas tabelas. #102516 (Alexey Milovidov). - Corrige overflow silencioso em operações escalares pointwise em numericIndexedVector (por exemplo,
numericIndexedVectorPointwiseAdd) quando o escalar está fora do intervalo. Essas entradas agora geramINCORRECT_DATAem vez de retornar valores corrompidos. #102546 (FriendLey). - Corrige formatação inconsistente de AST para INSERT com SAMPLE e OFFSET no nível da consulta. Fecha #102523. #102547 (zoomxi).
- Corrige a Exception
LOGICAL_ERRORemgroupConcatao desserializar um estado malformado de aggregate function. #102558 (Christoph Wurm). - Agora, não aceitamos conteúdo inválido no final de valores CSV de Time64 com
input_format_csv_use_default_on_bad_values=0. Fecha #102490. #102596 (Yarik Briukhovetskyi). - Corrige a Exception UNKNOWN_ELEMENT_OF_ENUM ao inserir default value em JSON column com paths tipados como Enum. Fecha #102359. #102687 (Pavel Kruglov).
- Corrige corrupção de columns_substreams.txt durante a renomeação de coluna em alguns casos. Fecha #102259. #102689 (Pavel Kruglov).
- Corrige a inserção no Data type Time durante o parsing de JSON. Fecha #102016. #102690 (Pavel Kruglov).
- Corrige a codificação hexadecimal de content sample em nomes de arquivo de schema em cache. Fecha #101904. #102703 (Pavel Kruglov).
- Corrigida uma violação da ordem de classificação (falha em debug, corrupção silenciosa de dados em release) durante o merge de
SummingMergeTreequando a chaveORDER BYé uma expressão hash sobre uma colunaFloat32contendo valores NaN de sinalização. #102791 (Groene AI). - Tornados canceláveis via
KILL QUERYoDETACH DATABASE ... SYNCe outras operações que chamamwaitDetachedTableNotInUse, além de passarem a responder ao desligamento do servidor, evitando travamentos indefinidos quando uma consulta concorrente mantém uma referência à tabela. #102804 (Antonio Andelic). - Corrigido um possível resultado incorreto de
ANY RIGHT JOIN. #102893 (Nikita Taranov). - Corrigidas falhas em requisições S3 com
ios_base::clear: unspecified iostream_category errorem vez de serem repetidas, causadas pelo fato deBufferedStreamBuf::flushBufferdo Poco não tratar escritas curtas da camada de socket. #102894 (Sema Checherinda). - Corrigida a falha da table function
input('auto')pela interface HTTP em consultas INSERT SELECT. #102902 (Miсhael Stetsyuk). - Desabilitada a otimização trivial de LIMIT com row policies/additional_table_filters (para permitir análise paralela de índice). #102921 (Azat Khuzhin).
- Oculta a chave secreta na função SQL
HMAC. Corrige #102927. #102997 (Mikhail f. Shiryaev). - Corrigida a exceção
MULTIPLE_EXPRESSIONS_FOR_ALIASgerada em consultas distribuídas que referenciam a mesma chamadaquantilevárias vezes (por exemplo, emSELECT,HAVINGeORDER BY) comoptimize_syntax_fuse_functionshabilitado. #103014 (tanner-bruce). - Corrige um caso encontrado pela CI em que um set ainda não pronto era passado quando o filtro depende da coluna do lado esquerdo. Fecha #102966. #103029 (Yarik Briukhovetskyi).
- Corrige castOrNull para JSON em alguns casos. Fecha #101818. #103036 (Pavel Kruglov).
- Corrige
SELECT DISTINCTretornando silenciosamente resultados incompletos quando uma projeção agregada correspondia à consulta e algumas partes da tabela não tinham dados de projeção (por exemplo, a projeção foi adicionada a uma tabela que já continha dados, eMATERIALIZE PROJECTIONnão foi executado). Fecha #102951. #103052 (Nihal Z. Miaji). - Corrige a exceção
TOO_FEW_ARGUMENTS_FOR_FUNCTIONquando um predicadoWHERE, comoAND(OR(A, A), A), colapsa para um único argumento de nível superior durante a extração de expressões comuns no analyzer. #103072 (Peng). - Corrige um erro lógico
Function writeSlice expects same column types for GenericArraySlice and GenericArraySinkgerado ao avaliarif/ifNullsobre tuples, maps ou arrays contendo um elementoQBit.ColumnQBit::structureEqualscomparava incorretamente a tuple interna de uma colunaQBitcom o encapsulamento externo da outra, fazendo com que colunasQBitestruturalmente idênticas fossem consideradas diferentes. #103084 (Groene AI). - Faz com que
DETACH DATABASEcomdatabase_atomic_wait_for_drop_and_detach_synchronouslyrespeiteKILL QUERY, em vez de ficar travado indefinidamente quando houver uma referência de tabela em uso. #103095 (Alexey Milovidov). - Corrige segfault ao excluir um módulo WASM usando um predicado que não seja um identificador (por exemplo,
WHERE 1=1). #103101 (Joe Redfern). - Corrige uma regressão de compatibilidade com versões anteriores, em que clientes antigos falham com
UNEXPECTED_PACKET_FROM_SERVERao inserir em um servidor mais recente viaremote()ou tabelas distribuídas, causada porsendProgressincondicional no fim deprocessInsertQuery. #103148 (Sema Checherinda). - IN com segundo argumento tuple não constante não deve aplicar CAST aos elementos da tuple para o tipo do lado esquerdo, pois isso pode causar overflow. Fecha #103055. #103169 (Yarik Briukhovetskyi).
- Corrige o uso de valor não inicializado em uma função do protocolo. #103187 (Pavel Kruglov).
- Corrige
LOGICAL_ERROR(Bad cast … to ColumnLowCardinality) durante a análise de índice do MergeTree quando uma cláusulaWHEREcompara uma coluna-chaveLowCardinalitycom uma constante convertida para um tipo que contémLowCardinalityaninhado (por exemplo,Variant(LowCardinality(Date), String)). #103211 (Groene AI). - Corrige
Logical error: 'index < bucket_count'na família de funções de agregaçãotimeSeries*ToGrid(por exemplo,timeSeriesResampleToGridWithStaleness,timeSeriesChangesToGrid,timeSeriesResetsToGrid,timeSeriesRateToGrid) quando chamada com parâmetros de timestamp extremos que causariam overflow na aritmética com sinal de 64 bits no cálculo da contagem de buckets. Também limita o número total de buckets da grade a 16 milhões para evitar alocação acidental de muita memória por entradas maliciosas. #103223 (Groene AI). - Corrige a exceção
Logical error: 'Port is already connected'durante a expansão do pipeline no caminho lazy deFINALparaReplacingMergeTree. O bug afetava consultas comquery_plan_optimize_lazy_final = 1quandoReadFromMergeTree::initializePipelineinseria transformações internas (por exemplo, umResize) que interligavam os processors do sub-pipeline, fazendo com queLazyUnorderedReadFromMergeTreeSource::expandPipelinetentasse conectar portas de saída que já estavam conectadas. #103230 (Groene AI). - Corrige resultados incorretos de
LIMIT BYeDISTINCTquando a entrada é umUNION ALLde subconsultas ordenadas. O otimizador do plano de consulta tratava incorretamente essa união como globalmente ordenada, fazendo com que linhas extras fossem retornadas. #103231 (Nihal Z. Miaji). - Corrige possível falha durante o cálculo de estatísticas no tipo Map com replicação lazy. Fecha #102390. #103273 (Pavel Kruglov).
- Corrige uma condição de corrida em fontes de Dicionário ClickHouse, MySQL, PostgreSQL e XDBC, em que
clone() constlê eisModified() constgrava na mesma stringinvalidate_query_response. #103277 (Miсhael Stetsyuk). - Corrige a detecção incorreta de monotonicidade para
Date32. Fecha #101265. #103283 (Yarik Briukhovetskyi). - Limita as strings do pacote TCP Hello de pré-autenticação a 64 KB e adiciona a configuração do servidor
handshake_timeout_millisecondspara limitar o tempo total de handshake, evitando que clientes não autenticados consumam memória em excesso ou mantenham threads ocupadas indefinidamente. #103284 (Sema Checherinda). - Corrige
min_value > max_valuenas estatísticas de Parquet ColumnIndex para colunas String. #103334 (Saurabh Kumar Ojha). - Corrige o tratamento incorreto de linhas NULL para entradas
Nullable(Tuple(...))emflattenTupleetupleToNameValuePairs.flattenTupleagora preserva o mapa de null externo para que linhas NULL continuem NULL.tupleToNameValuePairsagora altera o tipo de valor do resultado paraNullable(T)quando possível, se a entrada forNullable(Tuple(...)), para que linhas NULL produzam[('a', NULL), ('b', NULL)]em vez de[('a', 0), ('b', 0)]. Quando o element type não pode ser encapsulado emNullable(por exemplo,Array), são usados valores padrão em vez de NULL. Fecha #103312. #103383 (Nihal Z. Miaji). - Verifica dados Dynamic flattened malformados no Native format. #103392 (Pavel Kruglov).
- Corrige RPC obsoleto que causava paralisação da replicação após a sincronização do snapshot. #103406 (Seva Potapov).
- Corrige um
LOGICAL_ERROR“Cannot pop N rows from X” que abortava o servidor (em compilações de debug / sanitizer) ao ler um documento BSON malformado contendo um valor cujo tipo BSON é incompatível com o tipo da coluna de destino dentro de uma colunaNullable(T)ouArray(Nullable(T)). A linha malformada agora produz uma exceçãoILLEGAL_COLUMNlimpa, como pretendido. #103418 (Groene AI). - Corrige um encerramento abrupto do servidor em
arrayFillearrayReverseFillquando aplicados a uma colunaArray(String)cuja primeira linha está vazia, junto com uma lambda sempre falsa. O loop de agregação / subarray causava underflow de um índicesize_tparaSIZE_MAX, o que então causava uma leitura fora dos limites dentro deColumnString::doInsertManyFrom. É a mesma família de bugs de #12263. #103424 (Groene AI). - Corrige ACCESS_DENIED / UNKNOWN_TABLE em APPEND RMVs downstream com SQL SECURITY DEFINER quando o EXCHANGE de um REPLACE RMV upstream alterna a identidade do armazenamento de destino no meio da resolução. #103427 (Alexander Gololobov).
- Preenche a coluna
_timea partir da table functionurl. #103437 (Nikita Taranov). - Corrige uma possível leitura fora dos limites no caminho de descompressão do codec
ALPao processar uma entrada malformada com largura de bits inválida. #103457 (Raufs Dunamalijevs). - Corrige um bug em que
SYSTEM SYNC FILESYSTEM CACHE '<name>' ON CLUSTER ...podia perder o nome do cache ao formatar a consulta, fazendo com que nós remotos sincronizassem todos os caches do sistema de arquivos em vez de apenas o cache solicitado. #103469 (Asish Kumar). - Corrige o processamento de caminho codificado em URL em
deltaLakeAzure. Fecha #103509. #103525 (Smita Kulkarni). - Corrige um heap-use-after-free ao multiplicar um estado
AggregateFunctionpor um inteiro (por exemplo,quantilesExactState(...) * N). O loop de exponenciação por quadratura mesclava o estado com ele mesmo, o que é indefinido quando omergeda função de agregação realoca seu armazenamento interno. Fecha STID 0988-40af. #103536 (Groene AI). - Corrige um raro
LOGICAL_ERROR“Part X intersects previous part Y” gerado durante a inicialização de uma tabelaReplicatedMergeTree, quando duas partes vazias inesperadas em disco tinham intervalos de blocos sobrepostos, mas sem inclusão entre si. A exceção interrompia a thread de anexação da tabela e impedia que ela fosse iniciada. #103537 (Groene AI). - Corrige
Logical error: Incorrect mark rows for part ...(asserção apenas de depuração) que era acionado por mutações em tabelasMergeTreecom granularidade de índice não adaptativa (index_granularity_bytes = 0) cuja última marca de dados estava incompleta (reproduzido com mais confiabilidade viaDETACH/ATTACH, seguido de umDELETEleve). #103538 (Groene AI). - Corrige o
clickhouse-local, que retornava 0 linhas silenciosamente ao ler pseudoarquivos em/proce/syspor meio da função de tabelafile()(por exemplo,SELECT * FROM file('/proc/cpuinfo', 'RawBLOB')). #103548 (Ashrith Bandla). - Corrige o tratamento do argumento
max_string_lengthpara o engine de tabelaGenerateRandom. #103550 (Alex Kuleshov). - Corrige o mascaramento de credenciais aninhadas em logs. #103552 (Vitaly Baranov).
- Corrige a detecção de SVE que usava instruções SVE quando elas não estavam disponíveis. #103568 (Raúl Marín).
- Corrige a análise dos argumentos de armazenamento de
GenerateRandom. #103574 (Konstantin Bogdanov). - Corrige um loop infinito em
WITH FILLpara dados que começam com ±inf. #103580 (Konstantin Bogdanov). - Corrige o
JSONExtractem um tipoVariant, que truncava silenciosamente números JSON fracionários. Antes,JSONExtract('{"x": 3.14}', 'x', 'Variant(Int64, Float64)')retornavaInt64=3eJSONExtract('{"x": 3.14}', 'x', 'Variant(String, Int64)')retornavaInt64=3, descartando a parte fracionária. O valor fracionário agora é preservado sem perda: um membroFloat64/Decimalo assume quando presente; caso contrário, um membroStringcaptura o JSON original. TiposVariantcontendo apenas membros inteiros (por exemplo,Variant(Int64, Int32)) e a extração direta para inteiro (JSONExtract(json, 'Int64'),JSONExtractInt, etc.) permanecem inalterados. #103620 (Groene AI). - Corrige
SYSTEM INSTRUMENT REMOVEsem argumentos, que produziastd::bad_optional_access(código de erro 1001) em vez deSYNTAX_ERROR(código de erro 62). #103622 (Pablo Marcos). - Corrige erro lógico / comportamento indefinido em
windowIDe na window viewtumblequando chamados com uma string de timezone como 3º argumento. #103641 (Alexey Milovidov). - O logging do cliente S3 agora trata respostas HTTP 400 que incluem um header
x-amz-bucket-regionnão vazio (região de assinatura SigV4 incorreta) como um caso informativo de região incorreta, com uma linha de log mais clara, em vez do caminho genérico com estilo de erro. O provider de credentials de identidade web do STS é adicionado à cadeia de credentials do S3 apenas quando a identidade web está configurada, o que reduz avisos espúrios em implantações que não a utilizam. Fecha #99140. #103673 (MeltonSmith). - Corrige
SYSTEM SYNC REPLICA <db>.<tbl> IF EXISTSpara ter êxito silenciosamente quando o database não existe, em linha com o comportamento já existente para uma table ausente e com o precedente definido porDROP TABLE IF EXISTS. Antes, a consulta geravaUNKNOWN_DATABASEapesar deIF EXISTS. Fecha #103629. #103689 (Groene AI). - Corrige o logical error
Arguments of 'plus' have incorrect data typesgerado porFunctionBinaryArithmetic::executeImpl2quando uma tableMergeTreetinhaArray(LowCardinality(...))na chave de ordenação e uma cláusulaWHEREusavaplus/minusentre essa coluna e uma constanteArrayde outro tipo de elemento.KeyCondition::getMonotonicityForRangeagora removeLowCardinalityrecursivamente antes de invocar o dispatch numérico interno. #103701 (Groene AI). - Corrige uma condição de corrida no redimensionamento dinâmico de cache na 26.1+. #103702 (Kseniia Sumarokova).
- Corrigido um problema em que índices de omissão de texto e
bloom_filterem colunasALIAScuja expressão continha um lambda com constantes capturadas (por exemplo,arrayMap((k, v) -> concat(k, '=', v), mapKeys(m), mapValues(m)))) eram ignorados silenciosamente. #103708 (Anton Popov). - Corrige
positionepositionCaseInsensitivequandostart_posestá próximo deUINT64_MAX, o que fazia a execução travar ou causar falha de segmentação devido a overflow na aritmética de ponteiros. #103766 (Raúl Marín). - Corrige comportamento indefinido ao fazer parsing de
dateTimecom uma parte fracionária duplicada. #103773 (Yarik Briukhovetskyi). - Corrigida uma regressão de integridade de dados na versão 26.x em que
ifemultiIfcompilados com JIT, com tipo de resultadoDecimale um literal nãoDecimal(inteiro ou de ponto flutuante) em um dos ramos, retornavam silenciosamente um valor10^scalemenor do que o correto. O caminho lento (sem JIT) não era afetado. Solução alternativa nas versões afetadas:SET compile_expressions = 0. #103809 (Groene AI). - Corrige o encaminhamento do tokenizer do índice de texto para as funções compatíveis. #103826 (Elmi Ahmadov).
- Corrige resultados incorretos de
numbers,generate_seriese fontes semelhantes que respeitam intervalos quando a cláusulaWHEREusaINouNOT INsobre uma tupla cujos elementos são deduplicados em uma única coluna-chave (por exemplo,WHERE tuple(number, number) NOT IN (tuple(1, 2))). Fecha #103660. #103835 (Groene AI). - Mantém o pico real de uso de memória do hash join com spilling automático abaixo de
max_bytes_before_external_join. Antes, a pré-alocação orientada por estatísticas, a duplicação in-place da tabela hash e os buckets ilimitados em memória doGraceHashJoinpodiam, cada um, fazer a consulta ultrapassar o limite configurado e acionarMEMORY_LIMIT_EXCEEDED. #103838 (Alexey Milovidov). - Corrige um travamento no encerramento do
clickhouse-localquando logs do sistema (comotext_logoufilesystem_cache_log) estão configurados.SystemLogs::flushImplchamavaBaseDaemon::instance().flushTextLogs(), que lançastd::bad_castfora doclickhouse-servere deixava as threads de gravação em execução até quepthread_cond_destroybloqueasse a destruição das filas de log do sistema. #103874 (Alexey Milovidov). - Rejeita consultas CTE
MATERIALIZEDcujo corpo resulta em tipos de coluna inferidos diferentes em referências distintas, com um erroTYPE_MISMATCHclaro, em vez de provocar uma falha no servidor com umBad castLOGICAL_ERROR. Isso acontecia anteriormente quando o corpo da CTE referenciava identificadores de um escopo externo (por exemplo, um alias da projeção da subconsulta chamadora) que eram inlineados como constantes diferentes para cada referência. #103879 (Groene AI). - Corrige o uso de um valor não inicializado nos otimizadores de plano de consulta de conversão de JOIN (
tryConvertAnyOuterJoinToInnerJoin,tryConvertAnyJoinToSemiOrAntiJoin) quando o filtro acima de umANYOUTERJOINcontém uma função não determinística, comorand,nowourowNumberInAllBlocks. O otimizador não tenta mais fazer constant folding desses filtros e deixa o JOIN inalterado, o que também evita conversões incorretas paraINNER/SEMI/ANTI JOINque poderiam descartar linhas silenciosamente. #103880 (Groene AI). - Corrige um use-after-free em
StorageKafka2que poderia causar falha no servidor quando uma sessão do Keeper é substituída enquanto o consumer mantém bloqueios efêmeros de tópico-partição. #103890 (Groene AI). - Corrigido um
LOGICAL_ERROR“Primary key type mismatch” lançado ao fazer join de uma tabelaEmbeddedRocksDBviaJOIN ... USING (key)com uma subconsulta cuja coluna-chave tem um tipo diferente (por exemplo,Nullable(UInt64),Int64,Decimal) da chave primária do armazenamento. O planner agora recusaDirectKeyValueJoinem caso de incompatibilidade de tipos e recorre aHashJoin, que lida com a conversão de tipos. #103928 (Groene AI). SET max_threads = DEFAULT(e o mesmo paramax_final_threadsemax_parsing_threads) não perde mais o estado automático. Antes, após redefinir uma dessas configurações,system.settingsmostrava a contagem de núcleos resolvida (por exemplo,32) em vez de'auto(32)', e o servidor se comportava como se o valor tivesse sido definido explicitamente. #103991 (Groene AI).- Corrige
SIZES_OF_ARRAYS_DONT_MATCHao ler colunasAggregateFunction(topK(N), String)cujoalpha_sizepersistido havia sido aumentado por um ciclo de deserialize+serialize anterior à versão 25.12. #104002 (Raúl Marín). - Corrigida uma vulnerabilidade de injeção de SQL em fontes de dicionário PostgreSQL, Cassandra e XDBC: chaves de string contendo aspas simples eram escapadas com
\'(barra invertida), que esses backends tratam como uma barra invertida literal em vez de uma sequência de escape, permitindo a injeção de SQL arbitrário em consultas de lookup de dicionário.ExternalQueryBuilderagora gera o escape padrão SQL''para esses backends; fontes de dicionário ClickHouse e MySQL continuam usando escape com barra invertida. #104009 (Shaohua Wang). - Corrigida uma possível incompatibilidade de tipo na agregação quando o tipo de uma coluna era alterado para/de LowCardinality, e a projeção min-max não era reconstruída. #104013 (Nikita Taranov).
- Corrige um loop infinito de otimizações de consulta causado pela não propagação da prevenção de remoção de colunas não utilizadas ao mesclar expressões. #104083 (János Benjamin Antal).
- Corrige
LOGICAL_ERRORemStreamingStorageRegistry::renameTableao renomear em lote tabelas de streaming (S3Queue, Kafka, RabbitMQ) usando rastreamento de identidade baseado em UUID em vez de nome. #104101 (Nikita Taranov). - Corrigidos resultados incorretos quando uma CTE construída com
UNION ALLcontinha um ramoSELECT DISTINCTe a consulta externa projetava apenas um subconjunto das colunas da CTE. ORemoveUnusedProjectionColumnsPassdo novo analyzer estava removendo incorretamente a coluna não referenciada da projeção internaDISTINCT, fazendo com que linhas que deveriam permanecer distintas (mesmo valor na coluna projetada, mas valor diferente na coluna removida) colapsassem em uma só. #104114 (Groene AI). - Corrige vários problemas de corretude em casos extremos na configuração
optimize_inverse_dictionary_lookup, em que a otimização podia descartar linhas silenciosamente ou suprimir exceções. Fecha #103270. Fecha #103085. #104133 (Nihal Z. Miaji). - Corrige escrita fora dos limites ao desserializar o estado
quantileTiming. #104141 (Alexey Milovidov). - Corrige comportamento indefinido quando um valor
Float64fora do intervalo é convertido para um tipo inteiro amplo (UInt64,Int64,Int128,UInt128,Int256,UInt256). Antes, valores iguais aFloat64(numeric_limits<T>::max())(que são arredondados para cima, para um valor acima do máximo real) contornavam a verificação de limites e produziam UB no cast subsequente. Isso afetava o parsing de parâmetros de funções de agregação (topK,histogram,uniqUpTo,groupArrayInsertAt, etc.) e configurações tipadas como inteiros viaSET <setting> = <Float64>. Fecha #103817. #104154 (Groene AI). - Corrige a exceção
LOGICAL_ERROR“Unexpected return type from comparison. ExpectedUInt8. GotConst(Nullable(UInt8))” ao comparar umTuple(Tuple(Nullable(...)))aninhado (ou com aninhamento ainda mais profundo) com um literalString. O tipo de retorno da comparação agora é inferido corretamente comoNullable(UInt8), em conformidade com o comportamento em tempo de execução. #104171 (Groene AI). - Corrige um abort do servidor (
UndefinedBehaviorSanitizer: reference binding to null pointer, segfault em builds de lançamento) emSELECT ... FROM <ReplacingMergeTree(version, is_deleted)> FINAL PREWHERE is_deleted = <expr> AND <other column expr>quandoquery_plan_optimize_lazy_final = 1. A etapa de leitura lazy-FINAL sem interseção perdeu a colunais_deleteddo cabeçalho de saída porque o PREWHERE a consumiu como entrada sem reexpô-la na saída. A etapa subsequenteaddIsDeletedFilterentão desreferenciava um ponteiro nuloActionsDAG::Node. #104177 (Groene AI). - Ao chamar a tabela system.failpoints, era usado um failpoint, o que podia desativá-lo. #104237 (Pedro Ferreira).
- Corrige
MemorySanitizer: use-of-uninitialized-valuenas funçõesdetectLanguage*quando a entrada contém um caractere UTF-8 terminando exatamente no limite do buffer. #104257 (Raúl Marín). - Corrige um erro lógico (
Bad cast from type DB::CachedObjectStorage to DB::S3ObjectStorage) que abortava o parsing dos argumentos de table functions e motores de data lake (icebergS3,deltaLakeS3, etc.) quando chamados comSETTINGS disk = '...'em um disk cujo armazenamento de objetos subjacente é encapsulado por um decorador, como um cache de sistema de arquivos. Fecha #89300. #104258 (Groene AI). - Corrige o parsing de expressões de subscrito entre parênteses em colunas chamadas
values, por exemplo(values['a']), para que não sejam mais interpretadas como expressões de tabelaVALUESpadrão SQL. #104312 (Desel72). - Corrige um abort do servidor/
LOGICAL_ERRORna thread de eviction em background do cache de sistema de arquivos (SLRUFileCachePriority::collectEvictionInfo) que podia ser disparado quandokeep_free_space_size_ratiooukeep_free_space_elements_ratioera alto o bastante para acionar a eviction enquanto todas as entradas de cache já haviam sido promovidas para a protected queue do SLRU (fila probationária vazia). #104313 (Groene AI). - Corrige exceções (
NOT_FOUND_COLUMN_IN_BLOCK,LOGICAL_ERROR,AMBIGUOUS_COLUMN_NAME) ao usar projeções com viewsUNION ALL, window functions ou colisões de nome entre alias e coluna. Regressão de #88798. #104317 (Amos Bird). - Corrige um possível underflow no parsing de arrays do Postgres. #104322 (Grant Holly).
- Funções que retornam um tipo não
Nullable(comoArray,TupleouMap) agora aceitam argumentosNullable. As funções afetadas incluemextractAll,extractAllGroups,extractAllGroupsHorizontal,extractAllGroupsVertical,extractGroups,splitByChar,splitByString,splitByRegexp,splitByWhitespace,splitByNonAlphaealphaTokens. Linhas de entrada comNULLproduzem o valor padrão do tipo de resultado (por exemplo, um array vazio) em vez de gerar “Nested type is not allowed inside Nullable type”. #104326 (Alexey Milovidov). - Corrige estatísticas do Iceberg em tabela particionada. Isso fecha #104321. #104329 (Konstantin Vedernikov).
- Corrige um logical error fatal na inicialização do servidor no macOS (e em compilações semelhantes com jemalloc), em que
Jemalloc::verifySetuprelatava incorretamente uma incompatibilidade emjemalloc_enable_background_threadsporque os mallctls opcionaisbackground_thread/max_background_threadsnão existem; a verificação é ignorada quando esses mallctls não estão disponíveis, egetValuenão deixa mais a saída sem inicialização em caso de falha. Fecha #102183. #104330 (SAYON DEEP). - Corrige uma regressão de corretude em que consultas
SELECTcommax_rows_to_read_leaferead_overflow_mode_leaf = 'throw'podiam lançarTOO_MANY_ROWSincorretamente, mesmo quando um skip index reduziria a leitura para abaixo do limite do leaf. As configurações simétricas fora de leaf (max_rows_to_read/read_overflow_mode) já eram tratadas. #104331 (Groene AI). toUUID,toUUIDOrNull,toUUIDOrZero,toUUIDOrDefault,CASTparaUUIDeNullable(UUID),accurateCastOrNullparaUUID, e os formatos de entrada que fazem parse de UUID a partir de texto (Avro,MsgPack,JSONExtract, …) agora rejeitam strings com o comprimento correto, mas que contêm caracteres não hexadecimais. Antes, essas entradas eram silenciosamente convertidas em um UUID fabricado ao ultrapassar o fim da tabela de busca de dígitos hexadecimais; agoratoUUIDlançaCANNOT_PARSE_UUID, e as variantesOr*retornamNULL/ o UUID zero / o valor padrão fornecido. #104370 (Groene AI).- Corrige
Bad castLOGICAL_ERRORemcaseWithExpression(e em SQLCASE expr WHEN ... THEN ... ELSE ...) quando o supertype apenas dos THEN e o supertype de (THENs + ELSE) ficam em armazenamentosColumnDecimaldiferentes — por exemplo, valores THEN(UInt16, Int8)com um ELSE deDecimal(9, 2). Fecha #104335. #104378 (Groene AI). - Falhas internas reportadas via
logExceptionBeforeStart(flushes de asynchronous insert, refreshes de views materializadas, erros de parse gerados durante consultas internas) agora incrementam corretamente os ProfileEventsFailedInternalQuery,FailedInternalSelectQueryeFailedInternalInsertQuery, juntamente com os contadores visíveis ao usuárioFailedQuery,FailedSelectQueryeFailedInsertQuery. Antes, esses contadores internos permaneciam em zero para falhas ocorridas antes do início da execução da consulta, subcontabilizando uma classe importante de falhas internas. #104399 (Groene AI). - Corrige
Code: 36. BAD_ARGUMENTS Expected literal, got {name:Type}gerado quando um parâmetro de consulta é usado na configuraçãobase_backupde uma instruçãoBACKUPouRESTORE(por exemplo,BACKUP ... SETTINGS base_backup = S3({backup_name:String}, ...)). A regressão foi introduzida na versão26.1.5pelo PR #99205. Fecha #103324. #104413 (Groene AI). - Corrige uma interrupção do servidor em gravações no
IcebergLocal/IcebergS3quandoALTER TABLE ... DROP COLUMNé seguido por umINSERTcomiceberg_metadata_staleness_msmaior que zero.ALTERagora invalida o cache local dos arquivos de metadata do Iceberg para que leituras e gravações subsequentes usem o novo schema. #104419 (Groene AI). - Corrige
DROP ROLE,DROP USER,DROP SETTINGS PROFILE,DROP ROW POLICY,DROP QUOTAeDROP MASKING POLICYpara remover referências à entidade removida de qualquer outra entidade de acesso que a referenciava (por exemplo, a listaDEFAULT ROLEde um usuário, a listaTOde um profile de configurações, ou os destinatários de uma row policy) e persistir essa limpeza em disco. Antes, o estado em memória parecia correto porqueSHOW CREATEfiltra UUIDs desconhecidos, mas os arquivos.sqlem disco mantinham entradasID('<dropped-uuid>')órfãs, e essas referências reapareciam na próxima reinicialização do servidor, gerando errosACCESS_ENTITY_NOT_FOUNDdurante a execução distribuída de consultas. #104427 (Groene AI). - Corrige uma interrupção do servidor acionada por
azureBlobStorage, pelo engineAzureBlobStoragee por DeltaLake-on-Azure com uma connection string cuja URLBlobEndpointtem uma porta vazia, não numérica ou fora do intervalo (por exemplo,BlobEndpoint=http://host:abc/). O servidor agora retorna um erroBAD_ARGUMENTSclaro em vez de abortar em compilações de debug/sanitizer. #104460 (Groene AI). - Permite usar um identificador sem aspas como nome de usuário nas table functions
remoteeremoteSecure, espelhando o comportamento dos argumentos de database e table, que aceitam identificadores sem aspas. Antes, essa consulta falhava com um erro de authentication enganoso, referindo-se ao usuáriodefault. #104465 (Alexey Milovidov). - Corrige
Logical error: Incorrect ASTSelectWithUnionQuery (modes: M, selects: N)acionado quando o corpo de uma user-defined function SQL contém umUNION ALLinterno entre parênteses (por exemplo,CREATE FUNCTION f AS x -> (SELECT 1 UNION ALL (SELECT 1 UNION ALL SELECT 1))). #104477 (Groene AI). - Corrige
uniqThetaIntersect, que retornava a cardinalidade do primeiro argumento em vez de0quando o segundo argumento é um estadouniqThetavazio — por exemplo, o resultado deuniqThetaMergeStateIf(s, predicate)quando o predicado exclui todas as linhas. #104529 (Groene AI). - Corrige
SHOW TABLESesystem.tables, que truncavam silenciosamente a listagem de bancos de dadosDataLakeCatalogbaseados em catálogos REST do Iceberg (iceberg-rest,onelake,biglake). Quando o servidor de catálogo paginava a resposta de list-tables ou list-namespaces (por exemplo, no Microsoft Fabric / OneLake com mais de ~50 tabelas por espaço de nomes), as tabelas das páginas seguintes ficavam invisíveis paraSHOW TABLESesystem.tables, embora pudessem ser consultadas comSELECTdireto.RestCatalogagora segue o token de continuaçãonext-page-tokendefinido pela especificação OpenAPI do Iceberg REST, alinhando-se ao comportamento já existente dePaimonRestCatalogeUnityCatalog. #104531 (Groene AI). - A table function
inputagora infere sua estrutura a partir da cláusulaFORMATda consultaINSERTem que está inserida, quando esse format tem um schema fixo (LineAsString,RawBLOB,JSONAsStringetc.), de modo que os usuários não precisam mais repetir a estrutura como eminput('line String')para esses formatos. #104532. #104533 (Groene AI). - Atualizado o tipo de dado dos campos no histórico do Iceberg de
Int32paraInt64. Fecha #94176. #104579 (Smita Kulkarni). - Corrigido
Inconsistent AST formattingLOGICAL_ERRORao analisar uma chamada de função em que uma lambda vem após uma vírgula, por exemploSELECT substring(x, `x` -> `x`). Antes, o parser mesclava silenciosamente os argumentos anteriores ao lado esquerdo da lambda, produzindo uma chamada com um único argumento que não podia ser analisada novamente para reconstruir a mesma AST. Agora ele preserva a aridade original da função. #104626 (Groene AI). CHECK TABLE tagora dá preferência a uma tabelaTEMPORARYem vez de uma permanente com o mesmo nome quando nenhum qualificador de banco de dados é informado, alinhando-se à precedência já usada porSHOW CREATE TABLE,DESCRIBE TABLE,OPTIMIZE TABLEeALTER TABLE. Antes,CHECK TABLE tignorava completamente tabelas temporárias, por isso falhava comUNKNOWN_TABLEem uma tabela temporáriaLogouFile, embora esses motores suportemCHECK. Continuação de #100966. #104637 (Groene AI).- Corrige o loop de encerramento e reinicialização do Keeper quando
get /keeper/availability_zoneé enviado comquorum_reads=truepara um Keeper sem<placement>configurado. #104663 (myeongjun). - Corrige uma data race de TOCTOU em
FutureSetFromTuple::buildOrderedSetInplaceque resulta em um erro lógico. #104673 (Miсhael Stetsyuk). - Corrige várias funções que retornavam resultados diferentes para a mesma entrada, dependendo de os argumentos chegarem como colunas ou constantes:
bitRotateLeft/bitRotateRight(contagens de deslocamento nos limites),length(FixedString)/concatWithSeparatorcom entradasLowCardinality(Nullable),roundDownem NaN erightUTF8em UTF-8 inválido. #104710 (Raúl Marín). - Corrigido
anyHeavy, que retornava um valor não heavy quando o valor mais frequente era o valor padrão da coluna e os dados estavam distribuídos em várias partesMergeTree(caminho de leitura de coluna esparsa). #104712 (Raúl Marín). - Corrige vários defeitos no tratamento de restrições de configurações: restrições de
MergeTreeSettingsdeclaradas no nome canônico de uma configuração podiam ser contornadas ao gravar em um alias dessa configuração; a verificação da restriçãodisallowed_valueslançava uma exceção em caminhos de clamp (consultas secundárias, workersON CLUSTER, viewsSQL SECURITY DEFINER) em vez de descartar silenciosamente a alteração. #104737 (Raúl Marín). - Corrige uma exceção
LOGICAL_ERROR(Metadata is not initialized) gerada porOPTIMIZE TABLE,ALTER TABLE ... DELETE,ALTER TABLE ... ADD COLUMNe outras variantes de ALTER em uma tabelaIceberg/IcebergLocal/DeltaLake/Hudianexada sob demanda, cujos metadados ainda não haviam sido carregados (algo típico após uma reinicialização do servidor ou depois que uma gravação anterior de metadados falhou e deixou um arquivo de metadados corrompido no disco). Agora, a operação prossegue normalmente se os metadados forem carregados com sucesso, ou expõe a falha subjacente de carregamento como uma exceção comum visível ao usuário, em vez de abortar o servidor em builds de debug / sanitizer. #104738 (Groene AI). - Corrige um segfault devido a um bug de use-after-free em
AvroConfluentRowInputFormat. #104751 (Miсhael Stetsyuk). - Variantes escalares de
numericIndexedVectorPointwiseMultiply,numericIndexedVectorPointwiseDivide,numericIndexedVectorPointwiseEqualenumericIndexedVectorPointwiseNotEqualagora geramINCORRECT_DATAquando chamadas com um escalarUInt64acima deInt64::max. #104784 (FriendLey). - Corrige um bug em que substituir manualmente uma configuração por meio de seu nome de alias (por exemplo,
SET enable_analyzer = 1em vez deSET allow_experimental_analyzer = 1) após aplicar uma configuração decompatibilitypodia fazer com que essa substituição fosse revertida por uma alteração subsequente da configuraçãocompatibility. #104829 (Raúl Marín). - Corrige a desativação do logger da AWS após https://github.com/ClickHouse/ClickHouse/commit/0e8ad4355c9d. #104837 (Konstantin Bogdanov).
- Corrige mais três funções que retornavam resultados diferentes para a mesma entrada, dependendo de os argumentos serem passados como colunas ou constantes:
transform(ecaseWithExpressionpor meio dela) com um valor padrão constanteDate/Date32/Enum/FixedString, operadores de comparação entre umaStringe umaFixedStringconstante, eif/ifNull/nullIfcom um ramoFixedStringsob uma condição constante. #104858 (Raúl Marín). - Corrige o encerramento abrupto do servidor com
Bad cast from type DB::ColumnConst to DB::ColumnNullabledurante partition pruning para tabelasMergeTreequando a expressão de partição contém uma cadeia de funções que colapsa para um único valor constante (comofloor(NULL, toRelativeYearNum(...))). #104861 (Groene AI). - Corrige uma data race detectada pelo
ThreadSanitizerno construtor de cópia deContextData:table_function_resultsera copiado do objeto de origem sem adquirirtable_function_results_mutex, de modo que uma execução concorrente deContext::executeTableFunctionpodia competir com a leitura não sincronizada no construtor de cópia. #104879 (Groene AI). - Corrige verificações de consistência de data part para tipos com estrutura dinâmica e detecta
columns_substreams.txtcorrompido. Reenvio de https://github.com/ClickHouse/ClickHouse/pull/103858 com alterações adicionais. #104888 (Pavel Kruglov). - Corrige a condição de corrida entre DROP e UNDROP no DatabaseCatalog. #104915 (Azat Khuzhin).
- Corrige o redimensionamento dinâmico do cache do sistema de arquivos com segmentos parcialmente baixados, incluindo a restauração da contabilização após uma evicção malsucedida. #104921 (Antonio Andelic).
DETACH TABLEem uma tabela temporária (sem a palavra-chaveTEMPORARY) agora gera corretamenteSYNTAX_ERROR, em conformidade com o comportamento deDETACH TEMPORARY TABLE. Antes, ele apenas definia silenciosamente uma flag internais_detachede retornava sem erro. Para remover uma tabela temporária, useDROP TEMPORARY TABLEouDROP TABLE(este último resolve a tabela temporária viaContext::ResolveExternal). Fecha #103475. #104943 (Groene AI).- Faz com que a table function
filesystemrespeitemax_memory_usage/max_server_memory_usageao carregar o conteúdo do arquivo. Antes, leituras grandes ou numerosas de conteúdo em paralelo podiam ultrapassar o limite sem gerarMEMORY_LIMIT_EXCEEDEDe acabar sendo encerradas por OOM. #104956 (Alexey Milovidov). - Corrige um
LOGICAL_ERRORgerado ao filtrarsystem.detached_tablesporuuid(por exemplo,SELECT count() FROM system.detached_tables WHERE uuid = '...'). A consulta agora retorna o resultado esperado em vez de abortar o servidor. #104979 (Groene AI). flattenTuplenão gera mais umLOGICAL_ERRORquando chamado em uma tupla cuja estrutura aninhada contém apenas folhasTuple()vazias (por exemplo,Tuple(c0 Array(Tuple()))ouTuple(c0 Tuple())). Essas entradas agora produzem uma exceçãoILLEGAL_TYPE_OF_ARGUMENTvisível para o usuário, explicando que o resultado do flatten seria uma tupla vazia. #104989 (Groene AI).- Corrige um abort do servidor e um bug silencioso de resultado incorreto ao executar consultas em
loop(remote(...))(ou qualquerloop()que envolva um storage capaz de adiar a agregação) comGROUP BY. O planner externo costumava adicionarMergingAggregatedStepcom base no estágio de processamento informado pelo storage interno, masLoopSourcesempre materializa seu select interno comQueryProcessingStage::Completee emite fragmentos simples de colunas, entãoMergingAggregatedTransformdisparava umLOGICAL_ERROR(Chunk info was not set for chunk in MergingAggregatedTransform) comenable_parallel_replicas = 1e, caso contrário, descartava silenciosamente a agregação externa. #105001 (Groene AI). clickhouse-benchmark --reconnect(simples, sem valor) foi quebrado inadvertidamente na 25.4 por uma mudança que transformou--reconnectem uma opção inteira, exigindo um valor. A forma simples agora volta a funcionar e é equivalente a--reconnect=1(reconectar a cada consulta). #105006 (Groene AI).- Corrige a saída JSON malformada para nomes de coluna terminados em sequências UTF-8 incompletas. #105012 (Pablo Marcos).
- Corrige a perda silenciosa de dados após
EXCHANGE TABLESouCREATE OR REPLACE TABLEna tabela de origem de uma visão materializada. A aresta de dependência source-view daMVagora é mantida no nome original para que continue sendo acionada em inserts. Regressão introduzida por #98779; restaura o comportamento anterior à regressão. #105029 (Sema Checherinda). - Corrige
CANNOT_COMPILE_CODE Could not find symbol __fixunsdftiao compilar com JIT expressões que convertemFloatemUInt128, comotoUInt128(<Float64 expression>). Os built-ins sem sinal do compiler-rt para conversão de float em inteiro de 128 bits estavam ausentes no resolvedor de símbolos do JIT. Fecha #105031. #105048 (Raúl Marín). - Corrige o fato de o
clickhouse-localnão imprimir mensagens de log de uma consulta com falha quandosend_logs_levelestá configurado. #105067 (Alexey Milovidov). - Corrige resultados incorretos quando a mesma view parametrizada é referenciada mais de uma vez na mesma consulta com valores de argumento diferentes. Antes, o analisador colapsava as chamadas em uma só, descartando silenciosamente todos os filtros, exceto o primeiro. #105170 (Alexey Milovidov).
- Corrige a linha
TOTALSsendo renderizada duas vezes na parte inferior da tabela de resultados na interface webplay.html. #103803 (Alexey Milovidov). - Rejeita vetores não finitos (
NaN,±Inf) durante a busca vetorial (seja como vetores consultados ou como vetores de referência); antes, eles causavam comportamento indefinido nousearch. #104079 (Groene AI). - PromQL: corrige o operador de agregação para vetores vazios. #104425 (Vitaly Baranov).
- PromQL: corrige o tratamento de erros na API de consulta do Prometheus. #104741 (Vitaly Baranov).
- Corrige uma condição de corrida em
MergeTreeTransaction::afterCommitna qual, após uma perda de conexão entre a gravação doCSNde commit no ZooKeeper e a finalização da transação, a respostaCOMMITpodia chegar ao cliente antes que o novocreation_csn/removal_csnficasse visível emsystem.parts. #104708 (Tuan Pham Anh). - Corrige o crescimento exponencial do uso de memória no parser KQL ao converter indexação aninhada de array (
arr[arr[arr[...]]]). #105142 (Alexey Milovidov). - Corrige resultados incorretos para
RIGHT ANY JOINquando a tabela da direita tem várias linhas por chave e o bloco de saída é dividido devido a limites de tamanho. Fecha #99431. #102064 (Vladimir Cherkasov). - Verifica se há estouro de pilha no leitor
Avrodurante a desserialização de tipos aninhados. #102417 (Pavel Kruglov). - Corrige linhas duplicadas em
system.completionspara configurações deMergeTree— cada nome de configuração aparecia duas vezes porque tantogetMergeTreeSettingsquantogetReplicatedMergeTreeSettingseram listados, apesar de terem nomes de configuração idênticos. Fecha #102013. #102015 (Groene AI). - Corrige o
StorageObjectStorageQueue(S3Queue,AzureQueue), que bloqueava o encerramento até que arquivos parcialmente processados fossem lidos por completo do armazenamento de objetos. A source agora aborta a leitura imediatamente durante o encerramento; a desduplicação garante que as linhas já enviadas para a tabela de destino antes do encerramento não sejam duplicadas quando o arquivo for tentado novamente na próxima inicialização. #103126 (Tuan Pham Anh). - Corrige inserts de múltiplos blocos no table engine
Aliascominsert_deduplication_token, para que todos os blocks sejam preservados. #103246 (Enric Calabuig). - Corrige
JSONHaseJSONExtractBoolem colunasJSONnativas, que retornavam o valor extraído (convertido paraUInt8) em vez de0/1. #103313 (zxuhan7). - Protege o input format
CustomSeparatedcontra dados malformados ou maliciosos que omitemformat_custom_row_after_delimiter. A detecção de header, a inferência de esquema e linhas com número variável de colunas antes acumulavam fields sem limite e podiam alocar muitos gigabytes de memória antes de falhar. As leituras agora falham comINCORRECT_DATAassim que uma única linha contiver mais de 1.000.000 de fields. #103404 (Groene AI). - Corrige o
RESTOREde tabelasMergeTreereplicadas para que o anexo de parts restauradas usebackup_restore_keeper_max_retriesem vez do orçamento normal de tentativas do Keeper para insert. #104610 (Pablo Marcos). - Corrige resultados incorretos de
WHERE p AND <LowCardinality(Nullable(int)) constant>em tabelasMergeTree. Antes, essas queries retornavam zero linhas porque o part pruning derivava um valor padrãoNULLdo tipoLowCardinality(Nullable(...))e sintetizava uma proteçãonotEquals(x, NULL), eliminando toda partição. #104767 (Groene AI). - Corrige resultado incorreto de aggregation ao agrupar por uma função não injetiva de uma coluna que também é a partition key (por exemplo,
PARTITION BY acomGROUP BY intDiv(a, 2)oua % 2). Valores de partições diferentes que eram mapeados para o mesmo grupo não eram merged, produzindo linhas de grupo duplicadas comallow_aggregate_partitions_independently = 1. #104869 (Nihal Z. Miaji). - Corrige uma condição de corrida na transferência de snapshot do
Keeper, em que um snapshot podia ser removido ou movido enquanto era enviado para um seguidor em recuperação. #104941 (Antonio Andelic). - Corrige um bug silencioso de resultado incorreto em
hilbertEncodeemortonEncode, no qual um primeiro argumentoTuplenão constante (máscara de intervalo) usava os valores da linha 0 para orientar o deslocamento de bits de todas as linhas. As funções agora calculam os valores da máscara por linha, de modo que o resultado não depende mais de a entrada ser constante nem do tamanho do block. #104992 (Groene AI). - Corrige o
clickhouse-local, que ignorava silenciosamente a configuração no nível do usuário (profiles,users,quotas, configurações de controle de acesso) quando o configuration file era descoberto automaticamente em./clickhouse-local.xml,~/.clickhouse-local/config.xmlou/etc/clickhouse-local/config.xml. Antes, essas configurações eram aplicadas apenas quando--config-fileera informado ou./config.xmlexistia no diretório atual; agora, todos os caminhos de discovery se comportam de forma consistente. #105008 (Groene AI). - Corrige colunas
BFloat16que retornavam silenciosamente zero correspondências quando comparadas com um literal de string (por exemplo,WHERE bf16_col = '49.9'). #105042 (Raúl Marín). - Corrige o tratamento de
CLEAR COLUMNe TTL durante merges emSummingMergeTree,AggregatingMergeTreeeCoalescingMergeTreequando as colunas necessárias para o merge estão ausentes ou expiradas. Fecha #101953. #105203 (Antonio Andelic). - Corrige uma condição de corrida entre
DNSCacheUpdater::runeContext::reloadClusterConfigcom a adição de uma verificação explícita de nulo parashared->clusters_configantes de desreferenciá-lo. #105220 (Mikhail f. Shiryaev). - Corrige o parsing
best_effortde data e hora paratoDateTime64com precisãomsens. #105233 (Kaviraj Kanagaraj). - Corrige
OSIOWaitMicroseconds, que reportava a espera de E/S ao longo do ciclo de vida da thread em vez da espera de E/S por consulta. #105246 (Mikhail f. Shiryaev). - O mecanismo de tabela
Hudiagora geraINCORRECT_DATA(uma exceção normal no nível da consulta) em vez deLOGICAL_ERRORquando um arquivo Parquet no diretório da tabela não segue a convenção de nomenclatura do Hudi[FileId]_[FileWriteToken]_[Timestamp].[extension]. Antes, esses nomes de arquivo causavam uma exceção em compilações de depuração. #105266 (Groene AI). - Corrige um deadlock em
ParallelFormattingOutputFormatem caso de falha de agendamento: quandoscheduleFormatterThreadForUnitWithNumberlança uma exceção (por exemplo,CANNOT_SCHEDULE_TASK), a unidade permanecia emREADY_TO_FORMATsem nenhuma thread de formatação para processá-la, levando a um travamento. A chamada de agendamento agora é encapsulada emtry/catch, e qualquer falha é encaminhada paraonBackgroundException, para que o coletor seja encerrado corretamente. #105275 (Azat Khuzhin). - Corrige perda silenciosa de dados em async inserts de
Distributedao se recuperar de um desligamento anormal: se o último arquivo.binem um batch salvo estivesse intacto, mas um arquivo intermediário estivesse corrompido,DistributedAsyncInsertBatch::recoverBatchvalidaria apenas o header do último arquivo, e entãosendBatchmarcaria o batch inteiro — incluindo os arquivos intactos — como corrompido, perdendo suas linhas. Agora, o header de cada arquivo é validado individualmente, para que apenas o arquivo realmente corrompido seja movido parabroken/e as linhas restantes cheguem ao shard remoto. #105281 (Groene AI). - Corrige uma regressão em
clickhouse extract-from-config --try: quando a config usava atributosfrom_enve não tinha elementoinclude_from(ou tinha um apontando para um arquivo inexistente), todas as substitutionsfrom_enveram silenciosamente descartadas e retornavam strings vazias. Isso quebrou a descoberta de porta do entrypoint do Docker na versão 26.2.5. Fecha #101704. #105283 (Groene AI). - Corrige a falha de
INSERT INTOem uma tabelaSQLite, com erro de sintaxe do SQLite, quando o valor inserido é umEnum,JSONouAggregateFunctioncuja representação textual contém aspas simples. A configuraçãooutput_format_values_escape_quote_with_quoteagora é respeitada pelas serializações correspondentes (antes, apenasStringeFixedStringa respeitavam). #105285 (Groene AI). - Corrige
Code: 44. ILLEGAL_COLUMN: Cannot add column ...: column with this name already exists, gerado por consultas distribuídas comallow_push_predicate_ast_for_distributed_subqueries = 1(o padrão), quando uma tuplaGLOBAL INé comparada com uma subconsulta cuja projeção contém nomes de colunas duplicados, por exemplo(x, y) GLOBAL IN (SELECT number, number FROM numbers(5)). #105290 (Groene AI). - Corrige
reinterpretparaArray(LowCardinality(...)), que retornava um erroNOT_IMPLEMENTEDconfuso em tempo de execução; agora retornaILLEGAL_TYPE_OF_ARGUMENTdurante a verificação de tipos. #105301 (Raúl Marín). minMap/maxMap(forma de array) eminMappedArrays/maxMappedArraysagora tratamNaNde forma consistente comORDER BY:NaNé tratado por último (retornado apenas quando todos os valores sãoNaN). Antes, os resultados dependiam da posição deNaNnos dados devido à semântica de comparação não ordenada do IEEE 754 e divergiam da forma com argumentoMapdeminMap/maxMap, corrigida em #100448. #105331 (Raúl Marín).- Corrige um vazamento de memória no cache
ColumnsDescriptionpor tabela em tabelas da famíliaMergeTreecom colunasNested. As entradas nunca eram removidas do cache ao longo de ciclos deALTER ADD COLUMN/DROP COLUMNquandoshare_nested_offsets = 1(o padrão). #105376 (Groene AI). - Corrige a exceção
BAD_ARGUMENTS“It’s a bug! Only integer types are supported by__bitWrapperFunc”, gerada quando umSELECTcom um skip indexTYPE set(N)tem um átomo emWHEREcujo tipo de resultado éFloat,BFloat16ou qualquer outro tipo não inteiro (por exemploWHERE c0 + 0.1ouWHERE log(c0)). Nesse caso, o skip index agora recorre ao caminho normal de filtro. #105384 (Groene AI).
melhorias em build, testes e empacotamento
- Parar de usar as bibliotecas e os cabeçalhos de sistema
compiler-rt. Fecha #91475. #102857 (Konstantin Bogdanov). - Atualizar a imagem base distroless do Docker para corrigir CVEs do OpenSSL em
libssl3t64. #103583 (Rahul Nair). - Passar a receber a chave GPG de forma confiável durante os lançamentos, encadeando vários servidores de chaves do Ubuntu, em vez de expirar por tempo limite em
keyserver.ubuntu.com. #103834 (Mikhail f. Shiryaev). - Remover e proibir verificações do
CMakeem tempo de compilação (check_*,try_compile,try_run). O compilador e o toolchain são fixos, portanto a detecção de recursos no momento da configuração é desnecessária e agora está bloqueada em todo o projeto; qualquer comportamento específico de versão deve ser condicionado explicitamente aCMAKE_CXX_COMPILER_VERSION. #103980 (Alexey Milovidov). - Atualizar
libarchivede 3.8.6 para 3.8.7. #104047 (Robert Schulze). - Atualizar
mongo-c-driverpara 2.3.0. #104300 (Raúl Marín). - Atualizar as dependências do LLVM para 22.x. #104381 (Joshua Carp).
- Permitir a compilação das classes de descritor PTY e embedded-client no macOS e no FreeBSD usando as funções POSIX portáveis
posix_openpt/grantpt/unlockpte removendo guardas#ifexclusivos do Linux. #104436 (Alexey Milovidov). - Atualizar
librdkafkapara a versão 2.14.1. #105222 (János Benjamin Antal).
Lançamento do ClickHouse 26.4, 2026-04-30. Apresentação, Vídeo
Alteração incompatível com versões anteriores
- O operador
INagora usa semântica de valor exato para o tipoBool: apenas os valores0e1no conjunto correspondem a valoresBool. Antes, valores numéricos maiores que255no conjuntoINeram incorretamente convertidos para true quando comparados comBool, entãoSELECT CAST(1, 'Bool') IN (256)retornava 1. Agora, retorna corretamente0. Fecha #92980. #93115 (Ashrith Bandla). - A biblioteca H3 foi atualizada para a v4, o que melhora a precisão dos cálculos de comprimento, área e outras métricas. Essa alteração é incompatível com versões anteriores porque os novos resultados diferem dos anteriores. #100348 (Alexey Milovidov).
- Não permite mais o uso de
SELECTcomo identificador simples em um elemento da lista de expressõesWITH. #101059 (Aruj Bansal). - Este patch altera a forma como a tabela merge lida 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). - O operador
INagora também rejeita conversões com perda deDecimaldentro de tipos compostos (Tuple,Array,Map), tornando seu comportamento consistente com comparações escalares de nível superior. Antes, as verificações de precisão eram aplicadas apenas a valores escalares de 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 incorretamente1porque a conversão com perda acontecia dentro de umArray. Agora, ambos os casos retornam corretamente0. #101812 (Nihal Z. Miaji). - Os valores padrão de
http_max_fieldsforam reduzidos de 1,000,000 para 1,000 e os dehttp_max_field_name_size, de 128 KB para 4 KB, para limitar o uso de memória antes da autenticação por conexões HTTP. Foram adicionadas as configuraçõeshttp_max_request_header_sizeehttp_headers_read_timeout. Usuários que dependem dos limites mais altos anteriores podem restaurá-los por meio das configurações. #103285 (Sema Checherinda).
Novo recurso
- Adiciona spilling automático às junções hash e às junções hash paralelas, convertendo-as em grace hash join quando o limite de memória é atingido. Esse comportamento é controlado por
max_bytes_before_external_join. #97813 (János Benjamin Antal). - Adiciona suporte ao Arrow Flight SQL. #91170 (Yakov Olkhovskiy).
- Adiciona suporte a leituras incrementais em motores de tabela
Paimoncom rastreamento do progresso de snapshot baseado no Keeper, incluindo leituras direcionadas de delta de snapshot viapaimon_target_snapshot_id, e amplia a cobertura de testes para mapeamento de tipos, poda de partições e cenários de leitura incremental. #93655 (XiaoBinMu). - A função
stemdeixou de ser experimental (antes, era necessário habilitar a configuraçãoallow_experimental_nlp_functions). #102399 (Jimmy Aguilar Mena). Agora, você pode aplicar stemming facilmente a todas as palavras/tokens nas colunasString,FixedString,Array([Fixed]String),Nullable,LowCardinalityeConstcom a funçãostem. #99137 (Jimmy Aguilar Mena). - Implementado o novo comportamento de
max_insert_block_size_rows,max_insert_block_size_bytes,min_insert_block_size_rows,min_insert_block_size_bytesno processo de squashing, sob a configuração de compatibilidadeuse_strict_insert_block_limits. #94207 (Kirill Kopnev). - Adiciona a função
arrayAutocorrelation(arr [, max_lag]), que calcula a autocorrelação normalizada de um Array numérico para cada defasagem. Suporta Arrays de inteiros, ponto flutuante e decimais. #94776 (Wenyu Chen). - Função SQL
obfuscateQuery. Fecha #98010. #98305 (Xuewei Wang). - Adicionado suporte aos tipos Map e JSON/Object como atributos de dicionários. Agora, os dicionários podem armazenar e recuperar tipos complexos, incluindo Map(String, String), Map(String, Array(String)), JSON e Nullable(JSON), tanto nos layouts FLAT quanto HASHED. #98627 (yanglongwei).
- Foram adicionadas duas novas configurações do MergeTree —
replicated_fetches_min_part_levelereplicated_fetches_min_part_level_timeout_seconds— que permitem que as réplicas deixem de buscar partes recém-inseridas (ainda não mescladas) de outras réplicas, reduzindo a sobrecarga da replicação durante períodos de ingestão intensa. #98625 (tanner-bruce). - Adiciona suporte a skip index do MergeTree para colunas JSON usando JSONAllPaths com os tipos de índice bloom_filter, tokenbf_v1, ngrambf_v1 e text (invertido), permitindo ignorar grânulos com base no conjunto de caminhos JSON presentes em cada grânulo. #98886 (Pavel Kruglov).
- A função
printfagora oferece suporte a strings de formato não constantes, permitindo usar diferentes padrões de formato por linha com base nos valores das colunas. #98991 (Yash ). - Adiciona um novo índice de projeção,
commit_order, que reorganiza os dados de acordo com a ordem de inserção. #99004 (Mikhail Artemenko). - Adiciona a função
highlight, que envolve ocorrências de termos de pesquisa em uma string de texto com tags HTML (o 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). - Implemente cotas por hash normalizado da consulta para proteger serviços públicos do ClickHouse contra abuso. 1. Suporte a
NORMALIZED_QUERY_HASHcomo tipo de chave de cota - buckets de cota separados para cada consulta normalizada exclusiva, para queCREATE QUOTA q KEYED BY normalized_query_hashacompanhe cada consulta distinta de forma independente. 2. Suporte aQUERIES_PER_NORMALIZED_HASHcomo tipo de recurso de cota — limita o número máximo de execuções de qualquer consulta normalizada dentro de um intervalo, para queMAX queries_per_normalized_hash = 100impeça que um mesmo padrão de consulta seja executado mais de 100 vezes. #99586 (Alexey Milovidov). - Agora, os usuários podem escrever consultas de join usando a sintaxe
NATURAL JOIN, que faz a correspondência automática de todas as colunas com o mesmo nome e elimina a duplicação dessas colunas no resultado. #99840 (Peter Nguyen). - Suporte para
SET TIME ZONE 'tz'como alias deSET session_timezone. #99883 (phulv94). - Adicionado suporte a consultas parametrizadas na UI da Web (
play.html): parâmetros de consulta como{name:Type}são detectados, e campos de entrada são exibidos para preencher seus valores. #100041 (Alexey Milovidov). - Suporte à cláusula padrão SQL
VALUEScomo expressão de tabela emFROM, por exemplo,SELECT * FROM (VALUES (1, 'a'), (2, 'b')) AS t(id, val). #100143 (Desel72). - Adicionadas unidades compatíveis com PostgreSQL ao operador
EXTRACT:EPOCH,DOW,DOY,ISODOW,ISOYEAR,WEEK,CENTURY,DECADE,MILLENNIUM. Também foi corrigidoEXTRACT(WEEK FROM date), que anteriormente gerava um erro. #100274 (Alexey Milovidov). - Adicionado suporte a literais compostos de intervalo no padrão SQL com qualificadores de faixa
TO, por exemplo,INTERVAL '1:30' HOUR TO MINUTE. Internamente, eles são decompostos em somas de intervalos. #100453 (Desel72). - Adicionar métricas assíncronas para a memória de buffer TCP de recebimento e envio do kernel (
sk_rmem_alloc,sk_wmem_alloc) dos sockets do pool de conexões HTTP, reportadas como percentis p50/p75/p90/p95 e totais por grupo de conexões. #100575 (Sema Checherinda). - Adicionada uma UI web para profiling do jemalloc no ClickHouse Keeper, disponível em
/jemallocna porta de controle HTTP. #100606 (murphy-4o). - Implementado o comando
SYSTEM FLUSH OBJECT STORAGE QUEUE db.table PATH 'x'para os modos ordenado e não ordenado. #100709 (Bharat Nallan). - Adicionada a função
JSONAllValues, que retorna todos os valores de uma colunaJSONcomoArray(String), com os valores serializados em formato textual e ordenados pelos nomes de seus caminhos. 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). - Adiciona uma nova configuração
input_format_column_name_matching_modeque permite diferentes tratamentos de maiúsculas e minúsculas nos formatos de entrada. #99346 (manerone). - Adicionado o comando
watchaoclickhouse-keeper-client, com suporte a watch nos comandosget,existsels. #100834 (Den Kalantaevskii). - Foi adicionada a solicitação
getChildrenRecursive(ListRecursive) ao ClickHouse Keeper e o comandolsraoclickhouse-keeper-client. Isso fecha #99916. #100998 (Konstantin Vedernikov). - Adiciona a nova função
arrayTranspose, que recebe um array bidimensional (matriz) e o transpõe:SELECT arrayTranspose([[1, 2, 3], [4, 5, 6]]). #101214 (Vitaly Baranov). - A configuração
auto_statistics_types mergetreetem como valor padrão'minmax, uniq'— as estatísticas minmax e uniq são criadas automaticamente para todas as colunas compatíveis em novas tabelas -materialize_statistics_on_insertagora tem como padrão false — as estatísticas agora são geradas durante as mesclagens, em vez de no momento da inserção, reduzindo a sobrecarga de inserção. useSET materialize_statistics_on_insert = 1para restaurar o comportamento anterior. #101275 (Han Fei). - Adicionada a configuração de refresh
prefer_dependency_replicapara cadeias de dependência de visões materializadas, para reduzir a perda de dados causada pela latência de replicação entre réplicas. #101591 (Seva Potapov). - Adiciona uma função
hasPhrase(aliasmatchPhrase) para busca por frases (sequências contínuas de tokens). A busca é feita por força bruta, ou seja, o índice de texto ainda não oferece suporte a ela. #101997 (Elmi Ahmadov). - Adiciona as métricas de histograma
s3_read_request_duration_microsecondses3_read_request_bytespara observar a duração da conexão das solicitações GET ao S3 e os bytes consumidos, visíveis emsystem.histogram_metricse no endpoint do Prometheus. #102058 (Sema Checherinda). 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. Fecha #95914. #102421 (Nihal Z. Miaji).- O índice de texto agora está em GA e permanece habilitado independentemente da configuração
compatibility, evitando que seja desabilitado inesperadamente durante restaurações a partir de backup ou ao executar no modo de compatibilidade. #101518 (Nikita Fomichev).
funcionalidade experimental
- Adiciona
ALTER TABLE ... EXECUTE remove_orphan_filespara tabelas Iceberg, a fim de identificar e remover arquivos não referenciados do armazenamento de objetos. #99127 (murphy-4o). - Adiciona a configuração
query_plan_optimize_join_order_randomize, que randomiza as estatísticas usadas na reordenação de joins, útil para testes. #100643 (Vladimir Cherkasov). - Adiciona suporte a função 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). - Adiciona funções de IA:
aiClassify,aiExtracteaiTranslate, para usar APIs de LLM no ClickHouse. #100832 (George Larionov). - Adiciona
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 requisições do Keeper). Além disso, a colunavaluedesystem.histogram_metricspassa a serFloat64, por ser mais flexível e compatível com o modelo de dados do Prometheus. #103046 (Miсhael Stetsyuk). É provável que a estrutura da tabela seja alterada em versões futuras.
Melhorias de desempenho
- O ClickHouse agora consegue descartar partes de dados inteiras em consultas SELECT com base em estatísticas de mín./máx. #94140 (zoomxi).
- Reduz a contenção por bloqueios durante operações de somente leitura em tabelas ReplicatedMergeTree com mutações concluídas. #95771 (Eduard Karacharov).
- Passa a respeitar
optimize_read_in_orderao ler projeções. Fecha #89453. #95885 (Andrey Zvonov). - Pequenas melhorias no Hash Join e no Concurrent Hash Join. #96663 (Yarik Briukhovetskyi).
- Otimiza a transformação
DISTINCTdesabilitando a otimização para colunasLowCardinalityquando os dados de entrada são quase todos distintos. #97113 (Nihal Z. Miaji). - Otimização de desempenho para consultas com
LIKEde #97723. Agora, essas consultas podem usar índices de texto. #98149 (Elmi Ahmadov). - As funções matemáticas vetorizadas (
exp,log,sigmoid,tanh) agora são aceleradas em AArch64 (usando NEON/SVE) e em FreeBSD/Darwin, onde antes recorriam a um fallback escalar mais lento. #98230 (Raúl Marín). - Consultas que filtram colunas de chave primária do
MergeTreecom alternâncias em expressões regulares baseadas em strings literais, como^(abc-1|abc-2), agora podem usar a poda da chave primária quando as alternativas compartilham um prefixo comum. #98988 (Yash ). - Generaliza a filtragem dinâmica top-k de
ORDER BY ... LIMITpara dar suporte aNullable,StringeCOLLATE. #99033 (murphy-4o). - Acelera o hash join com chaves
Int32eInt64de pequeno intervalo usando uma tabela hash com índice direto. #99275 (Hechem Selmi). - Consultas descontínuas mais rápidas em colunas
LowCardinalitycom um único dicionário. #99285 (Ivan Babrou). - Acelera as funções
var*Stableestddev*Stablepara colunasFloat64com a desvirtualização do loop interno. Observação: isso permite otimizações do compilador (FMA/registradores) que alteram os resultados de ponto flutuante no nível de ULP. #99460 (Riyane El Qoqui). - Usa a codificação base58 otimizada do Firedancer para entradas de 32/64 bytes (automática para
base58Encode). Permite usar a decodificação base58 otimizada se o resultado da decodificação tiver 32/64 bytes (explicitamente combase58Decode('...', 32)ou equivalente). #99461 (Joanna Hulboj). - Habilite otimizações baseadas em seções no linker (
-ffunction-sections,-fdata-sections,--icf=all) para reduzir o tamanho do binário e melhorar o uso do cache de instruções. #99474 (Alexey Milovidov). - Corrige o escalonamento negativo em consultas curtas com agregação em máquinas com muitos núcleos. Quando uma consulta lê poucas marcas, o pipeline deixa de se expandir até
max_threadsapós a agregação, evitando a sobrecarga causada por fluxos quase vazios. #99493 (Alexey Milovidov). - Melhore o desempenho das consultas com réplicas paralelas ao selecionar corretamente o tamanho da tarefa de leitura. #99801 (Nikita Taranov).
- Permitir prefetch ao ler um arquivo remoto pelo cache de páginas em userspace. #99919 (Alexey Milovidov).
- Evita o cálculo desnecessário da subcoluna
.sizede String durante a enumeração de subcolunas. #99941 (Pavel Kruglov). - Torna a barra de progresso do clickhouse-client menos oscilante ao usá-lo de um hotel com clusters com um número muito grande de réplicas. #100145 (Alexey Milovidov).
- Inicie
MemoryWorkernoclickhouse-localquando o cache de páginas estiver habilitado, para que o cache de páginas em userspace possa realmente ser usado. #100306 (Alexey Milovidov). - Otimize as consultas levando a cláusula
LIMITpara dentro doUNION ALL. #100364 (Alexey Milovidov). - Adiciona suporte à compilação JIT para comparações de colunas
StringeFixedStringemORDER BY, melhorando o desempenho da ordenação na fase de mesclagem em 6–17% para chaves de ordenação com muitas strings. Em coautoria com @lgbo-ustc. #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 deMergeTree, permitindo que a operação de merge repriorize as fontes no meio do fluxo para partes cujos dados são totalmente filtrados porWHERE/PREWHERE/JOIN. Fecha #99945. #100603 (Vladimir Cherkasov). - Conversão mais rápida de Float para String para valores inteiros grandes, com a extensão do caminho rápido de
itoacom arredondamento compatível com dragonbox. #100649 (Raúl Marín). - Substitua
dragonboxporzmijpara uma conversão de Float em String 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 pelo desenrolamento do loop de conversão. #100671 (Raúl Marín). - Evitar a criação de threads redundantes na mesclagem paralela de
uniqExact. #100686 (Jiebin Sun). - Adiciona merge paralelo em lote para
uniqExact. #100687 (Jiebin Sun). - Melhoria na paralelização de consultas com views simples (com tabela
MergeTreesubjacente) executadas com réplicas paralelas. #100815 (Igor Nikonov). - Implementa suporte a réplicas paralelas em views simples (incluindo views
UNION ALLcompatíveis sobre tabelasMergeTree) quandoparallel_replicas_allow_view_over_mergetree=1. Isso permite paralelizar a consulta externa da view em vez da interna, aumentando a paralelização da consulta entre nós. #100958 (Igor Nikonov). - Otimiza a leitura seguindo a ordem da chave primária para
full_sorting_mergequando há filtros comINno plano de consulta. #101261 (Nikita Taranov). - Otimização de alocações/desalocações ao usar cache para as configurações de amostragem, em vez de percorrer toda a hierarquia do rastreador de memória. #101267 (Azat Khuzhin).
- Corrige uma regressão significativa no desempenho de INSERT quando
deduplicate_insert = 'enable'(padrão desde a versão 26.2), transferindo o cálculo do hash dos dados do squashing para o sink e usando hash de colunas em lote viaupdateHashWithValueRange, reduzindo a sobrecarga de ~2.5s para ~0.5s em 5M linhas com 22 colunas. #101494 (Sema Checherinda). - Reduza a sobrecarga do profiling de locks usando
try_lockpara evitar medir o tempo de aquisições sem contenção e removendo a medição do tempo de retenção. #101502 (Antonio Andelic). - Intrínsecos AVX-512 escritos manualmente em
arrayDotProductforam substituídos por loops auto-vetorizáveis independentes de plataforma, com adição de suporte a AVX2 e ARM NEON. #101571 (Peng). - Melhora o desempenho de
INSERT VALUESpara colunasMap,ArrayeTuplequando os valores são passados como strings escapadas (por exemplo,'{\'key\':1}'), evitando recorrer desnecessariamente ao analisador de expressões SQL. #102119 (Joanna Hulboj). - Corrigido o uso excessivo de CPU do engine de tabela
RabbitMQ. #102711 (Jaap Elst). - O otimizador da ordem das junções agora infere predicados transitivos de equijunção 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 junções diretas entre tabelas conectadas transitivamente. Isso pode melhorar a qualidade do plano em esquemas star e snowflake, nos quais as tabelas de dimensão se conectam por meio de uma tabela de fatos compartilhada. O recurso é controlado pela nova configuraçãoenable_join_transitive_predicates(desativada por padrão). #98479 (Alexander Gololobov). - Otimiza
TRUNCATE DATABASE TABLES LIKEcom o pré-cancelamento paralelo de merges. #98597 (Shaohua Wang). - Adicionado suporte à monotonicidade na multiplicação, permitindo a poda da chave primária em expressões
key * constant. #98983 (Amos Bird). - Os dicionários de cache não usam mais bloqueio exclusivo em
hasKeys; isso reduz a contenção de bloqueios ao usar um bloqueio compartilhado para leituras do cache. #100796 (liuguangliang). - Incorporação da subconsulta VIEW à árvore de consulta para permitir que mais otimizações sejam aplicadas à VIEW. #100830 (Dmitry Novik).
- Otimiza o carregamento do cache na inicialização do servidor. #101500 (Kseniia Sumarokova).
- Implementa a materialização tardia de colunas para ReplacingMergeTree com FINAL, caso o predicado seja seletivo o suficiente. #101647 (Nikolai Kochetov).
- Reative a otimização
optimize_rewrite_array_exists_to_has(desativada por padrão desde a versão 23.10). Ela reescrevearrayExists(x -> x = elem, arr)para ohas(arr, elem), que é muito mais rápido, e agora ignora corretamente a reescrita quando o tipo de elemento do array eelemnão são compatíveis comhas(por exemplo,DatevsString), de modo que as consultas que antes falhavam continuem funcionando. Fecha #71431. #100944 (Alexey Milovidov).
Melhoria
- Saída aprimorada do EXPLAIN PLAN pretty=1: imprime as colunas de saída da consulta no nível superior, mostra rótulos/símbolos das relações de join com o número estimado de linhas no resultado e a localidade, e inclui colunas de saída por passo para etapas de join/origem. As alterações cobrem a parte de Information Deficit de #98117. #99462 (Kirill Kopnev).
- Adiciona a configuração de tabela MergeTree
share_nested_offsets(padrãotrue). Quando definida comofalse, colunas Array com nomes contendo pontos (por exemplo,n.a,n.b) são tratadas como colunas independentes, em vez de compartilharem arquivos de offset e validarem tamanhos iguais de array como parte da semântica legada deNested. #98416 (Amos Bird). - Agora, os usuários podem especificar vários métodos de autenticação na configuração users.xml/yaml (em SQL, isso sempre foi possível). #91998 (Flip-Liquid).
- Recarregamento automático das conexões TLS entre nós do Raft. #93455 (Evgeny).
- Amplia
cast_keep_nullablepara funcionar com tipos Dynamic/JSON. Quando definido, a conversão de NULL de tipos que podem ser Nullable retorna NULL; caso contrário, NULL gera o erroCANNOT_INSERT_NULL_IN_ORDINARY_COLUMN. #96504 (Seva Potapov). - Reduziu o consumo de memória das estruturas internas de dados (objetos
ISerialization) com a introdução de um pool de objetos. #96563 (Nikita Mikhaylov). - Adicionado suporte aos campos
passwordeidentityna configuração XML do keeper-client. #96800 (Grigorii Sokolik). - Melhora as escritas do
Icebergpara o Unity Catalog. #98162 (Konstantin Vedernikov). - Adicionar a configuração
finalize_projection_parts_synchronouslypara permitir a finalização síncrona das partes de projeção durante o INSERT, reduzindo o pico de uso de memória em tabelas com muitas projeções e preservando, por padrão, o comportamento assíncrono existente. #98228 (Amos Bird). - Adicionar a coluna
projections_duration_msasystem.part_log, que registra, em milissegundos, a duração da mesclagem/reconstrução de cada projeção. #98292 (Amos Bird). - Melhoria no cancelamento de consultas usando ExpressionTransform e NumbersRangedSource com KILL QUERY e cancelamento de consulta (Ctrl+C) no clickhouse-client. #98908 (Roman Vasin).
- Substitua a lista
source_table_engines, definida de forma estática, por uma consulta em tempo de execução viaStorageFactory::getAllStorages(). Isso adiciona verificações de acesso para alguns motores de tabela que estavam faltando e fecha #71544. #98984 (pufit). - Adiciona uma configuração para controlar o comportamento em caso de incompatibilidade de tipo em Variant e Dynamic (throw ou retornar null). #99085 (Bharat Nallan).
- Melhorar a compatibilidade entre
Iceberge Spark: corrigir o tratamento inconsistente de caminhos causado pelo uso misto de caminhos de armazenamento e de metadados; garantir que as tabelasIceberggravem um local de tabela que seja uma URL ou um caminho absoluto; adicionar um fallback para a contagem do tamanho de arquivos noAzure, porque alguns leitores do ClickHouse não oferecem suporte à contagem de bytes após a travessia; tratarversion-hint.txtde forma compatível com o Spark; introduzir abstrações em nível de tipo que dificultam a confusão entre tipos de caminho no futuro; adicionar testes paraAzureeLocalque verificam a interoperabilidade entre engines sem upload/download intermediário; corrigir o uso de exclusões por posição, que antes dependia de heurísticas de inferência de caminho, abordagem inadequada nesse caso. #99163 (Daniil Ivanik). #100420 (Daniil Ivanik). - Corrige uma possível condição de corrida em
IPartitionStrategy::cached_resultintroduzida por https://github.com/ClickHouse/ClickHouse/pull/92844. #99400 (Arthur Passos). - Agora, os usuários podem escrever tipos de dados Interval do ClickHouse no formato Arrow. #99519 (Peter Nguyen).
- Adiciona suporte nativo à importação e exportação de tipos de dados
UUIDnos formatosArroweParquet. Agora, os usuários podem consultar e transferir dados UUID diretamente entre o ClickHouse e outras ferramentas de dados, sem precisar de conversões manuais para string nem de soluções alternativas. Inferência lógica automatizada para UUIDs de nível superior e suporte a dica de esquema explícita para UUIDs aninhados. #99521 (Ivan). - Suporte a arquivos
7zem armazenamento de objetos. Fecha #70968. #99600 (Alexey Milovidov). - Adiciona os ProfileEvents
ObjectStorageListedObjects,ObjectStorageGlobFilteredObjects,ObjectStoragePredicateFilteredObjectseObjectStorageReadObjectspara introspecção do pipeline de listagem e leitura de arquivos em armazenamento de objetos (S3,Azureetc.). #99778 (Sema Checherinda). - Corrige a falha da função de tabela
mergecom o erroUNKNOWN_IDENTIFIERao consultar colunas que não estão presentes em todas as tabelas distribuídas/remotas subjacentes. #99833 (Alexey Milovidov). - Agora incluímos o tempo de commit na métrica de tempo total de execução de mutação do ReplicatedMergeTree. Esse tempo havia sido perdido após #96376. #99936 (alesapin).
- Adiciona um log write-ahead para objetos blob com remoção pendente em
MetadataStorageFromDisk, melhorando a durabilidade e a consistência entre os metadados e o armazenamento remoto de objetos quando esses objetos são excluídos. #100019 (Maksim Kita). - Desativada a geração de SQL por IA (comando
??) no cliente embutido (protocolos SSH e WebSocket) para impedir o acesso às variáveis de ambiente do servidor. #100290 (Alexey Milovidov). - Altera a interface dos inserts do Iceberg com o catálogo. Descontinua as configurações:
storage_catalog_type,storage_aws_access_key_id, etc. #100334 (Konstantin Vedernikov). - Tratar tabulações como 4 espaços ao colar no clickhouse-client. Fecha #100405. #100416 (Raúl Marín).
- Evite varrer todo o catálogo remoto do lago de dados em busca de dicas de tabela “Talvez você tenha querido dizer …” quando
show_data_lake_catalogs_in_system_tablesestiver desabilitado. #100452 (Alsu Giliazova). - Aplicar
distributed_index_analysis_min_indexes_bytes_to_activateapós a poda de partições. #100477 (Azat Khuzhin). - Corrige erro de asserção no pushdown do filtro de Bloom em Parquet ao usar cláusulas IN/NOT IN vazias. #100543 (zoomxi).
- As estatísticas de coluna MinMax agora armazenam os valores mínimo e máximo como Field (tipado), em vez de Float64. 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 escritos por versões anteriores exigem re-materialização (ALTER TABLE … MATERIALIZE STATISTICS ALL). corrige #53140. #100605 (Han Fei).
- Atualiza
cppkafkapara incluir a correção do deadlock ao fechar o Consumer. #100612 (Azat Khuzhin). - As informações do objeto usadas para o parsing de arquivos de dados no 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).
- Adiciona o parâmetro de configuração
use_separate_cache_arenapara permitir controlar a separação da arena de memória do cache. #100664 (Seva Potapov). - Adiciona suporte nativo para importar os tipos de dados
StringVieweBinaryViewdo Apache Arrow para colunasStringdo ClickHouse, melhorando a compatibilidade com a ingestão baseada em Arrow. #100762 (Ivan). - Algumas configurações do servidor Keeper agora são recarregadas dinamicamente quando o arquivo de configuração é alterado em tempo de execução: max_requests_batch_size, max_requests_batch_bytes_size, max_request_size, quorum_reads. #100773 (Michael Kolupaev).
- Aumenta os eventos de perfil
MemoryAllocatedWithoutCheck/MemoryAllocatedWithoutCheckBytesem build de release. #100899 (Pavel Kruglov). - O rastreamento de memória do Cgroupv2 agora exclui
slab_reclaimableda memória do kernel, oferecendo uma medida mais precisa do consumo de memória não recuperável. #100901 (Antonio Andelic). use_partition_pruning = 0agora também desativa a poda do índiceMinMaxe a otimização de contagem nas colunas da chave de partição, além de desativar a poda com base nas chaves de partição. #100904 (Nihal Z. Miaji).pretty=1emEXPLAIN [PLAN]agora imprime expressões em um formato legível para humanos. #100927 (Kirill Kopnev).accurateCastOrNulleaccurateCastOrDefaultagora oferecem suporte a tipos de destinoTuple, incluindoTuplesaninhadas com elementosNullable. Anteriormente, essas funções rejeitavam tipos de destinoTupleporqueTuplenão podia estar dentro deNullable. Fecha #100820. #100942 (Nihal Z. Miaji).- Corrige a duplicação de gráficos na UI do Play ao alternar entre os temas claro e escuro. #101058 (Alexey Milovidov).
- Atualização do chdig para v26.3.1 (interface do Perfetto, sparklines no resumo de CPU/Memória/Merges/Consultas, system.warnings, busca por regexp nos logs). #101092 (Azat Khuzhin). Atualização do chdig para v26.4.3 (melhorias no Perfetto, correções no compartilhamento via pastila.nl, diffs de flamegraph, alteração de configurações em tempo real). #103145 (Azat Khuzhin).
- Agora você pode ter uma vírgula final na cláusula
WITHantes de uma consultaSELECT. #101093 (Aruj Bansal). - Adiciona a configuração MergeTree
compress_per_column_in_compact_partspara controlar como os blocos comprimidos são organizados nas 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 agrupadas no mesmo bloco comprimido, melhorando a taxa de compressão e o desempenho de leitura para cargas de trabalho que sempre leem todas as colunas. #101114 (Amos Bird). - Exibir o balão com informações da tabela na UI do Play apenas ao passar o cursor sobre o nome da tabela, e não sobre a linha inteira. #101118 (Alexey Milovidov).
- Adicionados ícones específicos por engine e melhorias na UX da lista de tabelas na barra lateral da UI do Play. #101134 (Alexey Milovidov).
- Suporte a
Nullable(Tuple)nos formatos legadosArrow,ArrowStream,ORCeParquet. #101272 (Nihal Z. Miaji). - Exibir a linha TOTALS no rodapé da tabela na interface web (play.html). #101286 (Alexey Milovidov).
- Suporte ao modo de múltiplas consultas na UI web (
play.html): execute várias consultas de uma só vez, com execução paralela de consultas do tipoSELECTe exibição dos resultados por consulta. #101290 (Alexey Milovidov). - Corrigido o redimensionamento de colunas na UI web do play.html após a refatoração da tabela de resultados em um componente web. #101295 (Alexey Milovidov).
- Adicionada a capacidade de limitar o número de flushes do perfil do jemalloc em MEMORY_LIMIT_EXCEEDED por intervalo de tempo. #101396 (Azat Khuzhin).
- Adicionadas as configurações do Keeper
nuraft_streaming_mode(o padrão éfalse),nuraft_max_log_gap_in_streamenuraft_max_bytes_in_flight_in_stream. Fecha #90743. #101427 (Kseniia Sumarokova). - Adicionada a métrica assíncrona
CGroupMemoryUsedWithoutPageCache, que informa o uso de memória do cgroup excluindo tanto o page cache do kernel do SO quanto o userspace page cache do ClickHouse, em linha comMemoryResidentWithoutPageCache. Também foi esclarecida a descrição da métricaCGroupMemoryUsed. #101513 (Francesco Ciocchetti). - Adicionar açúcar sintático no nível do parser para a sintaxe padrão SQL da função
OVERLAY. A funçãooverlayjá existe; isso acrescenta suporte à forma baseada em palavras-chave, usandoPLACING,FROMeFORcomo separadores. #101681 (Desel72). - Adicionado o alias de coluna
INDEX_LENGTHà tabela de sistemainformation_schema.tables, em linha com os aliases existentes em maiúsculas nessa tabela. #101705 (Robert Schulze). - Tabela de sistema
information_schema.tablesagora ignora partes inativas da tabela. Isso torna mais realistas os valores exibidos para o tamanho da tabela. #101706 (Robert Schulze). - A função
ngramsagora rejeita tamanhos de ngram inválidos. Exemplo:SELECT ngrams('abc', 0)agora retorna um erro. #101922 (Robert Schulze). - Um complemento a #91820 e #90837: remover algoritmos não compatíveis da mensagem de erro; executar testes específicos de FIPS em builds FIPS. #102067 (Mikhail f. Shiryaev).
- Limitar a altura das células a três linhas na Web UI (
play.html), com expansão ao clique. #102154 (Alexey Milovidov). - Adicionada uma nova opção que permite forçar o estilo (virtual/path) para endpoints do S3. Resolve #82019; #76007 Continuação de https://github.com/ClickHouse/ClickHouse/pull/83168. #102378 (Konstantin Vedernikov).
- A configuração
restore_replace_external_engines_to_nullagora também deixa de restaurar bancos de dados com motores externos (por exemplo,DataLakeCatalog,MySQL,PostgreSQL,S3), em vez de falhar ou iniciar conexões externas. #102400 (Nikita Fomichev). - Adicionado suporte à análise de índices de texto para a função
hasPhraseno modoHINT. #102438 (Elmi Ahmadov). - Trata STATISTICS como somente leitura em ColumnDependency para corrigir LOGICAL_ERROR durante MATERIALIZE STATISTICS ALL. #102627 (Konstantin Bogdanov).
- Criar e preencher
system.asynchronous_metric_logno modo keeper-as-server. #102664 (Miсhael Stetsyuk). - Adiciona a opção de configuração
default_system_log_flush_policy.skip_alias_columnspara permitir omitir colunas ALIAS das tabelas de log do sistema, corrigindo logs do sistema com backend em S3 que rejeitam colunas ALIAS. #102669 (Miсhael Stetsyuk). - N’ao habilite estatísticas automáticas para tabelas de sistema. Elas raramente conseguem se beneficiar delas. #102862 (Han Fei).
- Suporte ao tokenizador
arraypara a otimização de LIKE. #102880 (Elmi Ahmadov). - Enviar MemoryAllocatedWithoutCheck mesmo nas builds de release. #103064 (Azat Khuzhin).
- Exibe
untracked_memorypor thread emsystem.stack_trace. #103065 (Azat Khuzhin).
Correção de bug (comportamento incorreto perceptível ao usuário em uma versão estável oficial)
- Corrige o erro
Block structure mismatch in streamcausado por colunas desnecessárias retornadas pela materialização tardia. Corrige #95191. #96682 (Nikolai Kochetov). - Corrige um erro lógico em uma consulta com política de mascaramento de dados usando
ON CLUSTER. #97594 (Bharat Nallan). - Corrige um bug ao usar o Unity Catalog sobre o GCS. #98456 (Melvyn Peignon).
DataLakeCatalogagora respeita a configuraçãohttp_forbid_headersdo servidor ao validar a definiçãoauth_header. #98827 (Michael Anastasakis).- Corrige chamadas N+1 de
HeadObjectem globs do S3 com expansão por chaves. #99219 (Konstantin Bogdanov). - Validar alterações de configurações em consultas CREATE quando o próprio engine também oferece suporte a configurações. #99279 (János Benjamin Antal).
- Corrigido o problema em que
ALTER TABLE UPDATE/DELETEfalhava com o erroMissing columnsquando uma tabela tinha uma coluna MATERIALIZED cuja expressão dependia de uma coluna EPHEMERAL. #99281 (Yash ). - As credenciais em strings de conexão JDBC, ODBC e NATS agora são mascaradas nos logs de consulta e na saída de
SHOW CREATE, evitando a exposição acidental de informações sensíveis. Para strings de conexão no formato URI (por exemplo,{scheme}://{user}:{password}@{host}), apenas a parte da senha é mascarada, enquanto o restante permanece visível para facilitar a depuração. A configuraçãonats_tokenagora também é mascarada. #99344 (János Benjamin Antal). - Corrige o
parseDateTimeBestEffort, que analisava incorretamente palavras iniciadas por prefixos de mês no formato DD-month-YYYY. Fecha #99345. #99350 (Pavel Kruglov). - Correção da ignorância de TABLE_UUID_MISMATCH quando o analyzer não é usado. #99380 (Azat Khuzhin).
- Corrige um bug em que configurações explícitas enviadas junto com
compatibility, na mesma solicitação, podiam ser ignoradas silenciosamente quando seu valor correspondia ao padrão do servidor. #99402 (Raufs Dunamalijevs). - Corrige casos em que números com zeros à esquerda no caminho de particionamento do Hive causavam erros. Corrige #98801. #99458 (Yarik Briukhovetskyi).
- Corrige
heap-use-after-freequando uma tabela é removida enquanto uma consulta de leitura está em execução (19 ocorrências no CI nos últimos 90 dias). #99483 (Alexey Milovidov). - Corrigido um bug no Keeper em que uma solicitação de leitura podia travar (fazendo a sessão expirar) se outra sessão não relacionada no mesmo servidor fosse encerrada exatamente no momento errado. #99484 (Michael Kolupaev).
- Validar a estrutura da coluna antes de aplicar patches. #99531 (Seva Potapov).
- Corrige falha de asserção em
rows_sourcesna mesclagem vertical quandoSYSTEM STOP/START MERGESé alternado rapidamente durante a mesclagem de uma tabela com colunasDynamic. #99532 (Alexey Milovidov). - Corrige a poda incorreta de partições em
toWeek(), que fazia consultas comWHERE toWeek(date, mode) = Nretornarem resultados vazios para as semanas 49-52 em tabelas particionadas portoYYYYMM(date). #99542 (Takumi Hara). - Corrigida exceção em funções que operam sobre ColumnReplicated com linhas não referenciadas geradas por JOIN. #99564 (Hechem Selmi).
- Corrige o problema em que
CLEAR COLUMNnão reconstruía projeções nem reavaliava colunas materializadas que dependem da coluna limpa, o que poderia causar exceções ou corrupção de dados durante mesclagens subsequentes. #99565 (Desel72). - Foi corrigida uma exceção (
Bad get: has Tuple, actual type String) emConditionSelectivityEstimatorquando uma consulta usa IN com um único parâmetro de consulta escalar (por exemplo,WHERE col IN ({p:String})) em uma tabela que tem estatísticas de coluna e comuse_statisticshabilitado. #99614 (Ilya Yatsishin). - Parte com projeções desconhecidas não deve ser marcada como permanentemente perdida. #99623 (Sema Checherinda).
- Corrige uma rara exceção de erro lógico durante a mesclagem vertical quando
SYSTEM STOP MERGESeSYSTEM START MERGESsão executados simultaneamente. #99628 (Desel72). - Corrigida uma referência pendente em injectRequiredColumns que causava falha durante a mesclagem. #99679 (Tuan Pham Anh).
- Corrigido o comportamento indefinido no leitor do formato Avro ao ler valores numéricos que causam overflow no tipo da coluna de destino. Agora, as consultas falham em caso de overflow, em vez de produzir silenciosamente valores incorretos. #99697 (asyablue22).
- Corrige a interpretação de aspas no estilo shell nos argumentos da função de tabela
executable. #99794 (Nikita Semenov). - Corrige um falso positivo de abort em
NativeReaderao desserializar um fluxo em formato Native com divergência na contagem de linhas: alterado deLOGICAL_ERRORparaINCORRECT_DATApara que o erro seja tratado como erro de dados, em vez de acionarabort()em builds de sanitizer/depuração. #99822 (Rahul Nair). - Corrige o encerramento abrupto do processo na desserialização da coluna
Tuplequando o tipo de serialização no fluxo binário éDETACHED. #99823 (Rahul Nair). - Corrige uma exceção
LOGICAL_ERRORindevida durante o redimensionamento dinâmico do cache do filesystem, causada por uma condição de corrida na promoção da subfila SLRU. #99850 (Alexey Milovidov). - Corrige consultas de async insert que reportavam zero em
written_rows,read_rowseresult_rowsnoquery_loge na saída do cliente. #99879 (Sema Checherinda). - Corrige a exceção “Conversão inválida do tipo X para Y” em
KILL QUERYquando a consulta interna contra as tabelas de sistema retorna colunas encapsuladas emColumnConst. #99881 (Alexey Milovidov). - Corrige erro lógico em subconsulta correlacionada dentro do argumento untuple. #99917 (Vladimir Cherkasov).
- Corrige uma exceção ao chamar
right,rightUTF8ou outras funções de substring com um comprimento de INT64_MIN (-9223372036854775808), o que antes causava comportamento indefinido devido a overflow de inteiro. Agora, as funções reportam corretamente um erro ARGUMENT_OUT_OF_BOUND. #99934 (Jimmy Aguilar Mena). - Agora o ClickHouse deve lidar corretamente com tabelas no estilo Spark (em que temos o caminho absoluto completo de cada arquivo ou o caminho relativo em relação ao caminho comum da tabela). Corrige #92348. #99935 (alesapin).
- Corrige a exceção “Formatação inconsistente de AST” em
ALTER TABLE ... MODIFY QUERYcom subconsultas aninhadas que contêmSETTINGSquando o próprioALTERtambém temSETTINGS. #99938 (Nikita Mikhaylov). - Reversão de #97114 “Mover a estimativa de linhas no passo de join antes da verificação de 1 filho” devido à suspeita de regressão de desempenho. #99957 (Alexander Gololobov).
- Corrige um bug em que o ClickHouse podia ignorar arquivos quando o cabeçalho
Content-Lengthnão estava presente na resposta à requisição HEAD correspondente (por exemplo, devido à transcodificação descompressiva no GCS). #99971 (Yarik Briukhovetskyi). - Corrige falha de asserção (exceção em builds de depuração, resultados incorretos em builds de release) ao multiplicar estados de agregação de
NumericIndexedVectorpor uma constante inteira par, causada por XOR consigo mesmos em bitmaps Roaring com alias empointwiseAddInplace. #99976 (Desel72). - Evita a exceção
Unexpected return typeno pushdown de filtro legado emJOIN USINGencadeado quando os tipos das chaves mudam após as conversões de join. #99999 (Alexey Milovidov). - Corrige a exceção
LOGICAL_ERROR“Unexpected node type for table expression … Actual IDENTIFIER” quando uma subconsulta escalar é usada em um argumento não resolvido de função de tabela, por exemplo,SELECT * FROM remote('localhost', view(SELECT 2 AS x), concat(x, (SELECT 1))). #100014 (Alexey Milovidov). - Corrigida a falha no
INSERTcomVALUESquando os dados eram seguidos, na linha seguinte, por um comentário SQL no final (--ou/* */). O comentário agora é ignorado em vez de ser interpretado como outra linha. #100016 (Pratima Patel). - Corrigida exceção no
arrayRemoveao comparar tuplas com elementos NULL. #100017 (Alexey Milovidov). - Corrige vazamento de dados entre usuários em
system.asynchronous_inserts: qualquer usuário comSELECTna tabela podia ver entradas pendentes de insert assíncrono de outros usuários. As entradas agora são filtradas com base no usuário atual, a menos que o usuário tenha o privilégioSHOW_USERS. #100024 (Shaohua Wang). - Corrige o caso em que a conversão de Time64 para UInt64 podia limitar os valores a 24 horas. #100025 (Yarik Briukhovetskyi).
- Corrige travamento do servidor local quando CREATE DICTIONARY tem uma definição com um valor de lista contendo uma função inexistente. #100036 (Yakov Olkhovskiy).
- Corrige os formatos
CSVeMsgPack, que não conseguiam interpretarNullable(Tuple)corretamente. Fecha #99753. #100038 (Nihal Z. Miaji). - Corrige a falha de
CREATE VIEWcomUNKNOWN_IDENTIFIERao usar um alias de expressão de função emWITH(por exemplo,tuple(...)) como lado direito deIN. #100042 (Peng). - Corrige a falha de funções de agregação de séries temporais (por exemplo,
timeSeriesResampleToGridWithStaleness) comILLEGAL_TYPE_OF_ARGUMENTquando usadas cominitializeAggregationouAggregatingMergeTreesob réplicas paralelas. #100053 (Alexey Milovidov). - Corrige o processamento de valores negativos em NumericIndexedVectorDataBSI. #100086 (Daniil Ivanik).
- Correção das funções
accurateCastOrDefaulteto*OrDefault, que não preservavam o tipo de coluna Const em entradas constantes. #100132 (Alexey Milovidov). - Parâmetros de consulta omitidos do tipo
LowCardinality(Nullable(T))agora passam corretamente a ter NULL como valor padrão, assim comoNullable(T). #100144 (Denys Melnyk). - Corrige o uso de um valor não inicializado em StringSearcher.h. #100225 (Konstantin Bogdanov).
- Passa a permitir o cancelamento de subconsultas escalares e de outros pipelines durante a análise via Ctrl+C. Antes, pressionar Ctrl+C durante a execução de uma subconsulta escalar demorada não surtia efeito até que a subconsulta fosse concluída. Também corrige a barra de progresso e as estatísticas em JSON para informar corretamente as linhas lidas durante a execução de subconsultas escalares, tanto no
clickhouse-clientquanto noclickhouse-local. Em coautoria com @YjyJeff. #100230 (Raúl Marín). - Corrigida uma exceção
LOGICAL_ERRORem consultas que envolvem colunasDynamiccom junções cruzadas e filtros em tempo de execução, causada porColumnVariant::filtercompartilhar ponteiros para colunas Variant em vez de cloná-los no caminho de otimizaçãohasOnlyNulls. Fecha https://github.com/ClickHouse/ClickHouse/pull/100147. #100234 (Pavel Kruglov). - Corrigido um bug em Array de Variant que podia reinterpretar o tipo de dado ao chamar a função
arrayFirst/arrayLast. Por exemplo, antesArray(Variant(Date, Bool))era convertido emBoolquando, na verdade, o tipo Variant subjacente eraDate. #100255 (timothygk). - Algumas pequenas alterações nas funções: as funções h3 agora validam melhor os limites;
readWKBverifica os limites de tamanho (uma nova configuração,max_wkb_geometry_elements); as funções de geração aleatória limitam o número máximo de iterações em seus cálculos. Um desdobramento de #93543. #100270 (Alexey Milovidov). - Foi corrigido um problema em que
cutURLParameterpodia ignorar parâmetros indevidamente quando eles apareciam como substrings de outros parâmetros. #100280 (Nikita Semenov). - Corrigida exceção quando a configuração do caminho do arquivo de metadados do Iceberg contém um byte nulo. #100283 (Alexey Milovidov).
- Corrigido o crescimento quadrático no número de consultas executadas quando
distributed_index_analysisé usado com predicados que contêm subconsultasIN. #100287 (Anton Popov). - Corrigida a exceção “Block structure mismatch” ao usar
GROUP BY ... WITH TOTALS HAVINGem combinação comUNION DISTINCTe expressões Nullable. #100293 (Alexey Milovidov). - Correção da exceção LOGICAL_ERROR em
estimateCompressionRatioquando o parâmetroblock_size_bytesé extremamente grande. #100298 (Alexey Milovidov). - Corrige a exceção “Inconsistent AST formatting” em builds de depuração ao usar
GROUP BY CUBE(...) WITH ROLLUPou outras combinações semelhantes. #100376 (Alexey Milovidov). - Corrigida a exceção ao criar uma view com aliases de colunas e consultas com
SELECT *ouEXCEPT/INTERSECT. #100386 (Alexey Milovidov). - Corrige o travamento indefinido de
DROP TABLEem tabelas com engine Kafka quando os consumidores ficam presos em um rebalanceamento após um erro de heartbeat. #100388 (Alexey Milovidov). - Corrigida a exceção
ReadBuffer is canceled. Can't read from it.durante operações de backup/restauração com arquivos zip. #100400 (Alexey Milovidov). - Corrigida a exceção
TOO_MANY_ROWSem consultasSELECT count()commax_rows_to_read/force_primary_keyquando os dados estão distribuídos em várias partes com limites de grânulos não alinhados. #100408 (Alexey Milovidov). - Corrige
system.completionspara filtrar corretamente bancos de dados, tabelas e colunas por permissões de acesso em todas as combinações de grant: por tabela, por DB e revogação por coluna. #100432 (Shaohua Wang). - Corrige SEGFAULT no NuRaft causado por uma condição de corrida. #100444 (Pablo Marcos).
min/max/argMin/argMaxagora tratam NaN de forma consistente comORDER BY: NaN é sempre ignorado (só é retornado quando todos os valores são NaN). Antes, os resultados dependiam da posição de NaN nos dados devido à semântica de comparação não ordenada do IEEE 754. #100448 (Raúl Marín).- Corrigido um bug de copiar e colar em que
delta_lake_snapshot_end_version, quando definido semdelta_lake_snapshot_start_version, era ignorado silenciosamente em vez de gerar um erroBAD_ARGUMENTS. #100454 (Mohammad Lareb Zafar). StorageRabbitMQ::shutdownnão é idempotente (acessa incondicionalmente ponteiros fracos e depois destrói os ponteiros compartilhados correspondentes), mas agora ele é chamado duas vezes: primeiro emStreamingStorageRegistrye depois emDatabaseCatalog. Esta correção torna o método idempotente e adiciona verificações defensivas contra nulo. #100455 (Miсhael Stetsyuk).- Corrigida a exceção
LOGICAL_ERRORao usaraccurateCastOrNullcomQBitcomo tipo de destino. #100470 (Raufs Dunamalijevs). - Corrige a exceção LOGICAL_ERROR “Stream … not found” ao inserir dados em uma tabela com colunas
Array(JSON)aninhadas em partes wide comoptimize_on_insert=0. #100475 (Pavel Kruglov). - Validar os caminhos das entradas de arquivos nos metadados de backup para rejeitar travessia de diretórios, caminhos absolutos e nomes vazios durante
RESTORE. #100483 (Pablo Marcos). - Corrigida a sintaxe
LIMIT m OFFSET n WITH TIES, que não funcionava. Essa sintaxe é equivalente aLIMIT n, m WITH TIES, que já funcionava. #100491 (Nihal Z. Miaji). - 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). - Corrige
heap-buffer-overflowem usearchsorted_buffer_gt::insert(), que poderia causar travamento ou corromper a memória silenciosamente durante a busca por similaridade vetorial. #100537 (Dustin Healy). - Corrige o fato de
EXECUTE ASignorar as cláusulasFORMATeINTO OUTFILEespecificadas na consulta. #100538 (pufit). - Corrige a formatação inconsistente da AST para SAMPLE com OFFSET no nível da consulta. Fecha #100576. #100579 (Pavel Kruglov).
- Corrige o catálogo Polaris no Azure. Desde a versão 25.12, esse catálogo no Azure passou a adicionar o bucket no início do caminho. Por exemplo,
abfss://polaris-polaris@<some_url>.windows.net/polaris-polaris/<other-path>em vez deabfss://polaris-polaris@<some_url>.windows.net/<other-path>. Este PR remove o bucket do caminho. #100583 (Konstantin Vedernikov). - Corrigida exceção de incompatibilidade de tipos em transform quando a coluna padrão é
constem alguns blocos. Fecha #100574. #100616 (Pavel Kruglov). - Corrige casos de NOT_FOUND_COLUMN_IN_BLOCK em que a parte SELECT da projeção contém colunas que não existem na parte SELECT original da consulta. Fecha #100194. #100623 (Yarik Briukhovetskyi).
- Valida as dimensões do shape no formato Npy em relação ao tamanho do arquivo e aos limites de overflow para evitar negação de serviço causada por arquivos
.npymaliciosamente criados com dimensões excessivamente grandes. Também rejeita shapes vazios e limita a memória por linha a 2 GiB. #100625 (Raúl Marín). - Correção do problema em que
session_timezoneera ignorado ao analisar valoresDateTimedurante inserts assíncronos (TCP) e todos os inserts via HTTP. #100647 (Sema Checherinda). - Permite passar a chave de sharding para as funções de tabela
cluster()eclusterAllReplicas()ao usar uma função de tabela como fonte (por exemplo,cluster('name', view(...), sharding_key)). #100665 (Sergey Veletskiy). - Corrige uma falha 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). - Corrige uma exceção ao calcular o supertipo comum para tuplas vazias e não vazias com
use_variant_as_common_typeativado. #100699 (Antonio Andelic). - 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).
- Corrige o comportamento indefinido em
positiveModuloquando o divisor sem sinal não pode ser representado no tipo de resultado com sinal. #100705 (Raúl Marín). - Corrige falha no servidor (erro lógico “Unexpected return type from __topKFilter”) quando
use_top_k_dynamic_filteringestá habilitado e a colunaORDER BYtem tipoDynamicouVariant. #100742 (Groene AI). - Corrige travamento do servidor ao usar a função
has()com PREWHERE/WHERE em uma chave Tuple que contém elementos LowCardinality. #100760 (Groene AI). - Corrigida a falha na asserção
file_offset_of_buffer_end <= getFileSize()(exceção em builds de depuração) ao ler tabelasLogouStripeLogno armazenamento de objetos S3 com gravações concorrentes. #100763 (Alexey Milovidov). - Corrige uma exceção no estimador de seletividade das estatísticas quando uma cláusula WHERE contém uma expressão de função (por exemplo, toDecimal64(col, 3)) em uma tabela com estatísticas habilitadas. Agora, o estimador ignora esses predicados em vez de tentar uma conversão de tipo inválida. #100764 (Han Fei).
- Corrige um caso raro em que um
joincom reordenação pode gerar um resultado incorreto. #100790 (Yarik Briukhovetskyi). - Corrige tipos de argumento incorretos em
AggregateFunctionna otimização de contagem trivial, o que causava a exceçãoNUMBER_OF_ARGUMENTS_DOESNT_MATCHao consultar expressões comocount(v0 + v1)em tabelas distribuídas. #100794 (YjyJeff). - Alguns catálogos podem exibir informações sensíveis na seção
SETTINGSdo resultado da consultaselect * from system.databases. Este PR evita esse comportamento. #100800 (Konstantin Vedernikov). - Corrige comportamento indefinido (overflow de inteiro com sinal) em
toStartOfIntervalao usar intervalosWeek,QuarterouYearcom um argumentoorigine valores de intervalo extremos. #100817 (Raúl Marín). - Corrige os combinadores de funções de agregação
If,Distinct,DistinctIf,IfStatecom tipo de retornoTuplee um ou mais argumentosNullable, que não conseguiam ler estados serializados antigos após a introdução deNullable(Tuple). Fecha #98917. #100826 (Nihal Z. Miaji). - Corrige segfault em s3Cluster e consultas distribuídas devido a um use-after-free no pool de conexões. #100837 (Konstantin Bogdanov).
- Corrige falha de segmentação causada por desreferência de ponteiro nulo ao carregar dicionários durante o desligamento do servidor.
Context::getUserDefinedSQLObjectsStorage(desreferenciauser_defined_sql_objects_storage) é chamado por threads de dicionário em paralelo à thread principal, que chamaContext::shutdown(defineuser_defined_sql_objects_storagecomo nulo). Precisamos garantir que futuras atualizações no carregador de dicionários sejam desabilitadas, interromper as consultas de dicionário em execução e aguardar a finalização das threads de carregamento de dicionários — tudo isso antes de executarContext::shutdown. Semelhante ao que fazemos com consultas normais. #100839 (Miсhael Stetsyuk). - Corrigido estouro de buffer em
ULIDStringToDateTimequando a entrada contém bytes não ASCII. #100843 (Konstantin Bogdanov). - Corrige falha (
LOGICAL_ERROR) ao consultar uma tabelaMerge(ou a função de tabelamerge()) que engloba várias tabelas, incluindo uma tabelaDistributed, comdistributed_group_by_no_merge=1ativado. #100859 (Groene AI). - Cast_keep_nullable, quando ativado, não gerará exceção ao converter NULL dinâmico em variant. #100864 (Seva Potapov).
- Corrige os comandos
get,existselsdoclickhouse-keeper-client, que exibiam mensagens de erro duplicadas dewatch_idem stdout em vez de stderr. #100893 (Mohammad Lareb Zafar). - Corrige a exceção em
intDiv/intDivOrZeroem arrays de tuplas Nullable, por exemplo,SELECT intDiv([divide((1, 2), ... AND NULL)], 2). #100895 (Raúl Marín). - Avalia os argumentos da engine
StorageAliasantes de armazenar a definição, para que expressões comocurrentDatabase()sejam resolvidas como literais antes de serem salvas no banco de dados. #100902 (Nikolay Degterinsky). - Corrigido
processAndOptimizeTextIndexFunctionsquandoquery_plan_merge_expressions = 0, em queExpressionStepfica diretamente acima deReadFromMergeTree. Corrige #100879. #100909 (Jimmy Aguilar Mena). - Atualizado o replxx para incluir correção de acesso fora dos limites em do_complete_line. #100925 (Azat Khuzhin).
- Corrige resultados incorretos quando um JOIN com a otimização shard-by-PK usa o cache de condições da consulta e algumas partes são filtradas por condições armazenadas em cache. #100926 (Groene AI).
- Corrige o retorno de
ILLEGAL_DIVISIONpordivideeintDivquando usados em expressões de filtro durante a análise de índices, em alguns casos. #100928 (Nihal Z. Miaji). - 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 na inicialização. #100946 (Nikolay Degterinsky).
- Corrige comportamento indefinido (overflow de inteiro assinado) em
parseDateTimeBestEffortao analisar strings de data e hora com mais de 18 dígitos na parte fracionária dos segundos. #100948 (Vasily Chekalkin). - Corrigida uma falha ao usar um índice de pesquisa textual com uma cláusula
INcontendo uma subconsulta Tuple, por exemplo,WHERE (id, str) IN (SELECT (id, str) FROM ...), ou quando o número de colunas da subconsulta não corresponde ao da tupla no lado esquerdo deIN. #100959 (Anton Popov). - Corrigida uma falha ao criar um dicionário de polígonos a partir de uma tabela
MergeTreeque usa serialização esparsa de colunas. #100964 (Anton Popov). - Corrigido o erro lógico “Invalid action query tree node” ao usar
INTERSECT ALL/UNION ALLcom expressões simplificadas para constantes. #100977 (Alexey Milovidov). - Corrige 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). Fecha #100882. #101021 (Nihal Z. Miaji). - Corrige falha (
Logical error: isConst/isSparse/isReplicated assertTypeEquality) em algoritmos de merge quando a replicação preguiçosa de colunas (enable_lazy_columns_replication) produz colunasColumnReplicatedque entram em pipelines de merge-sort com entradas que chegam mais tarde. #101036 (Groene AI). - Corrige o erro incorreto
UNKNOWN_IDENTIFIERquando o mesmo alias é usado para várias expressões emSELECT; agora é reportado o erro corretoMULTIPLE_EXPRESSIONS_FOR_ALIAS. #101040 (Alexey Milovidov). - Corrige colunas ALIAS com tipos
DateTime/DateTime64que não aplicavam a conversão de fuso horário quando o fuso horário declarado é diferente do fuso horário da expressão. #101043 (Alexey Milovidov). - Corrige o problema de as políticas de linha não serem registradas em
query_logpara views, subconsultas eINSERT ... SELECT. Embora as políticas de linha fossem aplicadas durante o planejamento da consulta, elas não eram propagadas dos subplanejadores para o planejador pai para fins de registro. As políticas de linha (apenas para registro) agora são mantidas emQueryAccessInfo, para que tanto os planejadores quanto os subplanejadores possam preenchê-las. #101044 (Narasimha Pakeer). - Corrige a exceção em
DirectJoinMergeTreeEntityquando os blocos do pipeline contêm colunasColumnConstmescladas com colunas regulares. #101046 (Alexey Milovidov). - Corrige espaço indevido na formatação do alias de coluna na CTE (
WITH t (a, b)→WITH t(a, b)). #101049 (Alexey Milovidov). - Corrige a falha nas funções de tabela
remote/clustercom funções de tabela aninhadas, comomerge, quando o analisador está habilitado. #101055 (Alexey Milovidov). - Corrige a aplicação do
OFFSETem dobro em consultas distribuídas quandoprefer_localhost_replica=1, resultando em menos linhas do que o esperado. #101071 (Nihal Z. Miaji). - Corrige uma falha ao usar o formato
Regexpcom uma expressão regular inválida na configuraçãoformat_regexp. #101074 (Nihal Z. Miaji). - Corrige o erro “Illegal type Decimal64 of start parameter” em funções de agregação de séries temporais ao usar
serialize_query_plan=1com réplicas paralelas. #101083 (Groene AI). - Corrigida uma exceção em
optimizeLazyMaterializationquando uma projeção com PREWHERE é usada comORDER BY ... LIMIT. #101115 (Anton Popov). - Corrige falha do servidor (SIGABRT) ao usar funções de agregação com o combinador interno
Null(por exemplo,sumNull,avgNull) e com a configuraçãoaggregate_functions_null_for_empty = 1habilitada. #101147 (Groene AI). - Corrige um erro de uso após liberação no caminho de escrita do cache do sistema de arquivos que poderia causar leituras de memória já liberada ao registrar no log segmentos de arquivo concluídos (detectado pelo MemorySanitizer no BuzzHouse). #101161 (Groene AI).
- Corrige uma falha do servidor com “Trying to attach external table to a ready set without explicit elements” quando a análise distribuída de índices encontra um predicado
GLOBAL INcujo Set foi criado sem elementos explícitos. #101178 (Groene AI). - Corrige funções de agregação
MAX/MINem colunasDecimalque retornavam resultados incorretos quando a compilação JIT está ativada (após atingir o limite de compilação). #101203 (Raúl Marín). - Corrige a desativação permanente das otimizações de
minmax_count_projectione deCOUNT(*)trivial após uma exclusão leve, mesmo depois de todas as partes com marca de exclusão leve terem sido mescladas. #101212 (Anton Popov). - Corrige um caso que pode levar ao erro lógico
Having zero bytes, ...no cache, causado pela sobrescrita de um objeto remoto entrelisteread, o que antes resultava em metadados de objeto obsoletos. #101219 (Kseniia Sumarokova). - Corrige uma falha do servidor (LOGICAL_ERROR: Bad cast from ColumnVector to ColumnLowCardinality) ao executar uma consulta em uma tabela MergeTree com
ORDER BY CAST(lc_column, 'Type'), em quelc_columntem o tipo LowCardinality. #101220 (Groene AI). - Corrigida a limpeza de nós de processamento obsoletos no
S3Queue. #101230 (Kseniia Sumarokova). - Corrigido UB em mergeTreeAnalyzeIndexes() em caso de argumento optimizations inválido. #101253 (Azat Khuzhin).
- Corrige a exceção
Logical error: 'partitions_count > 0'ao executarALTER TABLE UPDATEem sequência em uma tabela Iceberg particionada. #101278 (Desel72). - Corrige resultados incorretos de consulta quando uma constante inteira grande (por exemplo, 256, 2147483648) é usada como predicado booleano em uma cláusula WHERE com AND em tabelas MergeTree. Por exemplo,
SELECT count() FROM t WHERE (2147483648 > b) AND 2147483648retornava incorretamente 0 em vez de corresponder a todas as linhas. #101287 (Groene AI). - Corrige insert-select em cluster Delta Lake com Replicated MergeTree. #101299 (Konstantin Vedernikov).
- Corrigido travamento com “Logical error: Reading from materialized CTE before materialization” quando uma subconsulta escalar faz referência a uma cadeia de CTEs materializadas interdependentes. #101305 (Groene AI).
- Corrige uma condição de corrida no
storage_idemIStorage::getDependentViewsByColumn. #101385 (Nikolay Degterinsky). - Corrige a formatação e a clonagem da AST de BACKUP FROM SNAPSHOT. #101405 (Pablo Marcos).
- Corrige o crash de LOGICAL_ERROR “O componente atual está vazio” ao consultar
system.part_moves_between_shardscomenforce_keeper_component_trackinghabilitado. #101462 (Groene AI). - Corrige uma falha de segmentação em DataTypeDynamic::create() quando o fuzzer gera uma AST malformada do tipo Dynamic. #101464 (Groene AI).
- Lançar um erro quando as configurações
delta_lake_snapshot_versionou de versão do CDF forem usadas sem o DeltaKernel habilitado, em vez de retornar dados incorretos silenciosamente. #101489 (Desel72). - Corrige a exceção
NOT_FOUND_COLUMN_IN_BLOCKao usar ARRAY JOIN com JOIN USING e com a configuraçãoanalyzer_compatibility_join_using_top_level_identifierhabilitada. Fecha #101240. #101507 (Vladimir Cherkasov). - Corrige a falha no loop de retry de INSERT do Iceberg quando a tabela foi criada com
iceberg_metadata_file_pathe a versão de metadados de destino já existia. #101548 (Groene AI). - Remover
Nullableda coluna de resultado emarrayIntersecte funções relacionadas para evitar incompatibilidade de serialização/desserialização. #101569 (George Larionov). - Corrige travamento do servidor (LOGICAL_ERROR) ao executar SELECT em uma visão materializada apoiada por uma tabela com mecanismo IcebergLocal. #101577 (Groene AI).
- Corrige a mensagem de erro incorreta ao chamar
intExp10com o argumento NaN — ela indicavaintExp2em vez deintExp10. #101582 (Krishna Chaitanya). - Correção de
allow_statistics=0, que não bloqueavaALTER TABLE ADD STATISTICSeALTER TABLE DROP STATISTICSapós a refatoração em #100288. #101585 (Krishna Chaitanya). - Corrige a falha do
CREATE TABLEnoKeeperMapcom “Cannot create metadata for table” quando nós remanescentes do ZooKeeper de um drop parcial anterior à versão 25.1 não têm o nódrop_lock_version. #101623 (Antonio Andelic). - Corrige um possível erro lógico ao ler subcolunas de Map. Fecha #100769. Fecha #101336. #101641 (Pavel Kruglov).
- Corrige a prioridade da correspondência exata de subcoluna em relação à correspondência por prefixo em
getSubcolumnDatapara evitar uma possível falha. Fecha #101271. #101645 (Pavel Kruglov). - Corrige o travamento (LOGICAL_ERROR: “ColumnUnique can’t contain null values”) ao comparar uma coluna
LowCardinalitycom uma constante NULLVariantquandouse_variant_default_implementation_for_comparisonsestá desabilitado. #101690 (Groene AI). - O que: Adicionada uma verificação de stream vazio ao Bzip2ReadBuffer para que ele retorne EOF em vez de lançar UNEXPECTED_END_OF_FILE quando o stream interno estiver vazio. #101691 (ClickGap AI Bot).
- O quê: 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). - Corrige o positiveModulo(tuple, number), que estava sendo direcionado incorretamente para divisão em vez de módulo. #101709 (ClickGap AI Bot).
- Corrige uma falha quando
thread_pool_sizeé configurado em um disco com cache. Antes,FileCacheSettings::loadFromConfig()rejeitavathread_pool_sizecomo uma configuração desconhecida, o que impedia a inicialização do servidor. A configuração é um parâmetro válido deIDiskque controla o número de threads usadas nas operações de cópia entre discos durante movimentações de partes em segundo plano. #101712 (Francisco). - Corrige a criação do dicionário
RANGE_HASHED, que aceitava silenciosamente um atributo de intervaloMAXinexistente e usava a configuração de tipo incorreta quando os atributos de intervalo mínimo e máximo tinham tipos diferentes. O bug era um erro de copiar e colar embuildRangeConfiguration, que buscavamin_attr_nameem vez demax_attr_namepara o atributo máximo. #101732 (Yakov Olkhovskiy). - Corrige uma falha de
use-after-freeno agendador de concessão de CPU quando o temporizador de espera sobrevive à thread de trabalho à qual seusProfileEvents::Countersse referem. #101761 (Antonio Andelic). - Corrige um bug nas funções arrayLevenshteinDistanceWeighted e arraySimilarity. Fecha #101725. #101767 (Mikhail f. Shiryaev).
- Corrigida a API de consulta do Prometheus que ignorava corpos de formulário em POST. #101794 (James Cunningham).
- Corrige a propagação de exceção no destrutor S3
Client::~Client, que causava o encerramento do servidor. #101798 (Gagan Dhakrey). - Corrige um erro de uso após o fim do escopo na desserialização paralela de caminhos dinâmicos do tipo
Object, que podia causar travamentos ao ler tabelas com muitos caminhos dinâmicos. #101823 (Antonio Andelic). - Corrigida a saída incorreta da função
formatDateTimecom o formatador%Wsob determinadas configurações de formatação (não padrão). #101847 (Robert Schulze). - Corrigido falso negativo em
shouldPatchFunctionemSYSTEM INSTRUMENT ADDquando a string de busca aparece pela primeira vez dentro de um argumento de template do nome de símbolo desmanglado. #101885 (Pablo Marcos). - Corrige a perda do registro de UDF quando a sessão do ZooKeeper expira durante a atualização periódica — todas as funções definidas pelo usuário podiam ficar indisponíveis até que uma atualização completa fosse concluída com êxito. #101891 (Nikita Fomichev).
- Corrigida a descrição de
system.codecsparaAES_256_GCM_SIVpara indicarAES-256em vez deAES-128. #101917 (Jimmy Aguilar Mena). - Corrige o uso de extremos incorretos em índice min-max criado em coluna JSON, o que levava a um resultado incorreto de consulta. Fecha #101700. #101918 (Pavel Kruglov).
- O tokenizador
splitByStringagora rejeita separadores de string vazios. #101928 (Robert Schulze). - Corrigido
materialize_skip_indexes_on_merge=false, que não estava suprimindo índices de texto (full-text) durante a mesclagem. Antes, apenas os skip indexes não textuais (minmax, set, bloom_filter) eram suprimidos; os índices de texto continuavam a ser criados, desperdiçando CPU e E/S. #101932 (Groene AI). - O tokenizer
sparseGramsgerou tokens mais longos do que o comprimento máximo informado (isso ocorreu devido a um+2fixo na implementação). #101934 (Elmi Ahmadov). - Corrigido o SIGSEGV em
MergeTreeDataPartWriterWide::cancelquando um construtor de stream lança uma exceção duranteaddStreams, deixando uma entrada nula emcolumn_streams. #101936 (Antonio Andelic). - Corrige uma exceção ao consultar tabelas Merge ou Distributed com um índice de texto completo e condições de filtro combinadas que misturam
has*Tokenscom LIKE, quandoquery_plan_direct_read_from_text_indexestá habilitado. #101939 (Jimmy Aguilar Mena). - Corrige comportamento indefinido ao analisar pacotes de consulta do protocolo nativo com valores inválidos de
QueryProcessingStage. #101972 (Raúl Marín). - Feche a conexão TCP quando ocorrer uma exceção durante a análise inicial da consulta, para evitar a leitura de dados corrompidos de um fluxo dessincronizado. #101989 (Raúl Marín).
- Corrige um bug de condição de corrida no SLRU do filesystem cache 26.1+, que pode levar a um erro lógico na reserva de espaço. Em uma compilação de depuração, também pode causar falha de
assert:'O estado anterior é Evicting, mas o estado esperado era Active ao definir a flag Evicting para 2c1e3484ecdc6b78a8978fa5b17c5097:0:339 (estado: Evicting)'.. #101991 (Kseniia Sumarokova). - Corrige a exceção ao converter uma string com dados residuais para o tipo vazio
Tuple(). #102011 (Alexey Milovidov). - Corrige a ordenação incorreta das linhas em consultas que usam ORDER BY com o algoritmo de join grace_hash. As consultas afetadas podiam retornar resultados na ordem errada, gerando uma saída incorreta sem qualquer aviso. #102036 (János Benjamin Antal).
- Corrige um LOGICAL ERROR (Unexpected size of index type) que podia ocorrer em consultas com RIGHT JOIN e FULL JOIN quando a configuração
max_bytes_in_joinestava definida. #102042 (Jimmy Aguilar Mena). - Corrige casos em que Time com valores negativos retornava um resultado incorreto ao ser comparado com DateTime. Fecha #101670. #102056 (Yarik Briukhovetskyi).
- Corrige uma falha na atualização de UDF causada por
ZooKeeperRetriesControlao repetir tentativas em uma sessão do ZooKeeper obsoleta (expirada) sem renová-la. #102059 (Nikita Fomichev). - Corrige a falta de espaços ao formatar unlock snapshot. fecha https://github.com/clickhouse/clickhouse/issues/101723. #102063 (Han Fei).
- Corrige crash (SIGSEGV) ao executar uma consulta em uma view com cláusula WHERE quando a consulta interna produz colunas com tipos diferentes dos metadados da view (por exemplo, Nullable de LEFT JOIN com
join_use_nulls). #102085 (Miсhael Stetsyuk). - Corrige entradas de
VectorSimilarityIndexCacheque nunca eram removidas do cache após a remoção da part devido a chaves de cache inconsistentes. #102152 (Seva Potapov). - Aplicar NACK a mensagens corrompidas ao usar o armazenamento RabbitMQ. #102157 (Seva Potapov).
- Corrige erro lógico ao analisar uma string inválida de tupla vazia. #102289 (Nihal Z. Miaji).
- Corrige resultados incorretos de agregação (linhas duplicadas) ao usar
optimize_aggregation_in_order=1com colunas do GROUP BY em ordem diferente da chave de ordenação da tabela. #102299 (Groene AI). - Corrige falha em
IcebergLocalALTER TABLE ... UPDATEao usar o formato Avro, causada por os tipos encapsuladoresLowCardinality/Nullablenão serem desembrulhados antes da serialização. #102337 (Desel72). - Corrigida uma falha de segmentação em mutações de colunas materializadas sem expressão. Fecha #102185. #102342 (zoomxi).
- Correção no CoalescingMergeTree para o tipo Array. Isso corrige #89509. #102384 (Konstantin Vedernikov).
- Corrige segfault (ou LOGICAL_ERROR em builds de depuração) ao ler arquivos Parquet com o pushdown de filtro de Bloom habilitado e condições de igualdade/desigualdade na cláusula WHERE. A falha ocorria devido a um acesso de memória fora dos limites durante a recuperação de dados do filtro de Bloom no prefetcher do Parquet e também podia causar resultados de consulta incorretos e não determinísticos. #102385 (Groene AI).
- Corrige a interrupção com
LOGICAL_ERRORdurante o redimensionamento dinâmico do cache de sistema de arquivos SLRU, causada por estatísticas de evicção compartilhadas entre subfilas e por um caminho de recuperação incorreto para candidatos malsucedidos. #102396 (Antonio Andelic). - Corrige a falha de inicialização, em uma réplica nova, de tabelas alias sem tabela de destino no banco de dados Replicated. Fecha #101320. #102397 (Nikolay Degterinsky).
- Corrige leitura fora dos limites em funções de busca em strings (
countSubstrings,positionetc.) ao procurar uma sequência composta inteiramente por bytes nulos. #102401 (Raúl Marín). - 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 desativadas quando a configuraçãocompatibilityaponta para uma versão anterior à 26.1. Antes, isso podia impedir oSharedDatabaseCatalogde criar tabelas com índices de texto. #102422 (Nikita Fomichev). - Corrige leitura fora dos limites no
printfcom%ao final. #102472 (Raúl Marín). - Corrige uma exceção de chassert
ReadBuffer is canceledem builds de depuração no AsynchronousMetrics, causada porque o rewind não redefine a flag de cancelamento do buffer. #102524 (Yuri Fedoseev). - Corrigido
hasToken/hasTokenOrNullpara padrões compostos apenas por separadores (por exemplo,'()','!!!') em colunas com índice de texto: anteriormente, o índice ignorava silenciosamente todos os grânulos em vez de gerarBAD_ARGUMENTS(parahasToken) ou retornarNULL(parahasTokenOrNull). #102544 (Jimmy Aguilar Mena). - Corrige OOMs em requisições multi enormes no Keeper. Para tracing com OpenTelemetry, alocamos incondicionalmente >1 KiB para spans do OpenTelemetry em objetos
ZooKeeperRequest— ou seja, para requisições multi realmente enormes, tentamos alocar >10 GiB de memória adicional. Para corrigir isso, agora mantemos dados compartilhados em memória estática e usamosstd::unique_ptrem vez destd::optionalemZooKeeperOpentelemetrySpans. #102586 (Miсhael Stetsyuk). - Corrige o aumento indevido de CurrentMetric de
NamedCollectioncausado porCREATE NAMED COLLECTION IF NOT EXISTSem coleções existentes, além da falta de inicialização para coleções carregadas da configuração ou do armazenamento SQL na inicialização. Fecha #102507. #102598 (Pablo Marcos). - Corrigida a exceção em
getStructureOfRemoteTablequando o shard local retorna colunas vazias devido a DDL concorrente. #102604 (Alexey Milovidov). - Corrige a exceção
LOGICAL_ERRORquando várias consultas concorrentesCREATE TABLE IF NOT EXISTSapontam para a mesma tabelaS3Queueem um banco de dados Shared. #102610 (Nikita Taranov). - Corrige o crash de LOGICAL_ERROR “Unexpected number of rows in column subchunk” no leitor nativo Parquet V3 ao ler colunas Nullable com um filtro WHERE. #102628 (Groene AI).
- Corrige a descrição do evento de profile
AzureWriteMicroseconds, que dizia “read” em vez de “write”. #102639 (Miсhael Stetsyuk). - Falha na política de linha que gera a exceção ‘Not found column in block’ em alguns casos especiais. #102648 (Yarik Briukhovetskyi).
- Corrigida uma exceção do servidor no ClusterDiscovery quando um cluster estático (definido na configuração) ficava temporariamente sem nós ativos. #102661 (Kseniia Sumarokova).
- Corrige a inferência incorreta do tipo de dado de data em caso de overflow após o ajuste do fuso horário. Fecha #102601. #102674 (Pavel Kruglov).
- Corrige um problema em que o
SYSTEM WAIT VIEWficava travado indefinidamente quando a view materializada atualizável era removida enquanto a espera estava em andamento. #102681 (Nikolay Degterinsky). - Corrigido o
CASEcom expressão Dynamic, que retornavaELSEpara todas as linhas. Fecha #102511. #102684 (Pavel Kruglov). - Corrige a serialização do tipo Dynamic achatado usando tipos de dados codificados em binário. Fecha #101911. #102692 (Pavel Kruglov).
- Corrige format_schema_source=‘query’ ignorando silenciosamente resultados com múltiplas linhas. Fecha #101905. #102698 (Pavel Kruglov).
- Informa o código de saída real pelo cliente SSH, em vez de mapear todos os erros para
1. Fecha #101741. #102700 (Konstantin Bogdanov). - Corrige a perda de cabeçalhos HTTP em manipuladores de consulta dinâmicos/predefinidos. Fecha #101846. #102706 (Konstantin Bogdanov).
- Aplicada a correção de amostragem de Poisson a heap profiles colapsados do jemalloc para corresponder à saída do jeprof. Anteriormente, o formato colapsado subestimava os tamanhos reais de alocação por não levar em conta a probabilidade de amostragem. #102759 (Antonio Andelic).
- Corrige o travamento na função
hasPhrasecom um argumentoNULL. #102802 (Nikita Taranov). - Corrige falha no servidor (SIGSEGV) ao ler arquivos Avro com esquemas recursivos que contêm referências cíclicas a tipos simbólicos. Agora, esses esquemas são detectados e rejeitados com uma mensagem de erro clara, em vez de provocar uma falha. #102853 (Groene AI).
- Corrige falha do servidor (asserção
LOGICAL_ERROR) quando uma função em uma colunaVariantatinge o limite de memória ou outra exceção que não seja de conversão de tipo durante o casting do resultado emFunctionVariantAdaptor. A exceção agora é propagada corretamente, em vez de ser classificada incorretamente como um erro interno. #102855 (Groene AI). - Corrige falha do servidor em builds de depuração/com sanitizers quando
std::length_erroré lançada durante a inferência de esquema (por exemplo, por valores extremos deinput_format_msgpack_number_of_columnsou dados de entrada malformados). #102859 (Groene AI). - Fazer com que a representação de NULL na serialização de colunas replicadas e esparsas respeite as configurações (por exemplo, format_tsv_null_representation). #102888 (Hechem Selmi).
- Retroportado em #103499: corrige um problema em que requisições ao S3 falhavam com
ios_base::clear: unspecified iostream_category errorem vez de serem repetidas, causado porBufferedStreamBuf::flushBufferdo Poco não tratar escritas curtas da camada de socket. #102894 (Sema Checherinda). - Corrige as otimizações de
minmax_count_projectione doCOUNT(*)trivial, que permaneciam desabilitadas permanentemente após uma exclusão leve, mesmo depois de todas as partes com uma máscara de exclusão leve terem sido mescladas. #102900 (Anton Popov). - Corrigidos travamentos aleatórios no jemalloc devido ao LTO. #102913 (Azat Khuzhin).
- Otimize cadeias com OR em políticas de linha para
INno novo analisador. #102915 (Azat Khuzhin). - Corrige a corrupção de metadados do jemalloc causada pela liberação do cache de páginas com alinhamento incorreto, o que pode causar falhas. #102918 (Azat Khuzhin).
- INSERTs simples sem visões materializadas não solicitam mais slots do ConcurrencyControl e threads em excesso (
max_threadsem vez demax_insert_threads), evitando o esgotamento de slots de CC e a explosão no número de threads em clusters com alta taxa de INSERTs. #102961 (Sema Checherinda). - Reintroduzido o ArrowMemoryPool para permitir lançar MEMORY_LIMIT_EXCEEDED e evitar OOM do kernel. #102999 (Azat Khuzhin).
- Corrige o problema em que
cast_string_to_date_time_modeera ignorado emCASTparaNullable(DateTime). Fecha #101840. #103035 (Pavel Kruglov). - Adicionado suporte a colunas
ALIASna otimização de leitura direta do índice de texto. #103037 (Anton Popov). - Backport em #103454: corrige o caso em que
SELECT DISTINCTretornava silenciosamente resultados incompletos quando uma projeção de agregação correspondia à consulta e algumas partes da tabela não tinham dados de projeção (por exemplo, a projeção foi adicionada a uma tabela que já continha dados, eMATERIALIZE PROJECTIONnão foi executado). Fecha #102951. #103052 (Nihal Z. Miaji). - Corrige resultados incorretos retornados por
WHERE x AND toNullable(N)em tabelasMergeTreequandoNé um inteiro com largura maior queUInt8(por exemplo,256,65535,2147483648ou qualquer inteiro negativo). O filtro descartava incorretamente todas as linhas porquesplitFilterNodeForAllowedInputsusava um zeroNULLao converter para booleano o restanteNullablede umANDreduzido, fazendo com que a comparação se tornasseNULLsob a lógica de três valores. #103077 (Groene AI). - Corrigido o tipo incorreto de argumento informado nas mensagens de erro das 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). - Corrige o bloqueio indefinido de waitForPause quando disableFailPoint é chamado sem nenhuma thread pausada no failpoint. #103119 (Shaohua Wang).
- Limita as strings do pacote TCP Hello de pré-autenticação a 64 KB e adiciona a configuração de servidor
handshake_timeout_millisecondspara limitar o tempo total do handshake, evitando que clientes não autenticados consumam memória em excesso ou ocupem threads indefinidamente. #103284 (Sema Checherinda). - Corrige estatísticas min_value > max_value no ColumnIndex do Parquet para colunas String. #103334 (Saurabh Kumar Ojha).
- Verificação de dados Dynamic achatados malformados no formato Native. #103392 (Pavel Kruglov).
- Preenchimento da coluna
_timea partir da função de tabelaurl. #103437 (Nikita Taranov). - Corrige a detecção de SVE, que usava instruções SVE quando elas não estavam disponíveis. #103568 (Raúl Marín).
melhorias em build, testes e empacotamento
- A dependência Libstemmer (Snowball) agora usa a nova versão v3.0.1. #99256 (Jimmy Aguilar Mena).
- Configurações aleatórias no clickhouse-test:
use_skip_indexes_for_top_k,use_top_k_dynamic_filtering,query_plan_max_limit_for_top_k_optimization. #91782 (Nikita Fomichev). - Implemente um teste de estresse para funções, verificando a consistência de suas diversas propriedades. #93543 (Michael Kolupaev).
- Fornece uma configuração própria do CMake para
llvm-project, em vez de importar a configuração upstream. #97453 (Konstantin Bogdanov). - Randomizar mais configurações
optimize_*na infraestrutura de testes para melhorar a cobertura das etapas de otimização de consultas. #97547 (Alexey Milovidov). - Use a toolchain Rust nightly-2026-03-22. #98602 (Konstantin Bogdanov).
- Usa
wasmtimev42.0.1. #98603 (Konstantin Bogdanov). - Usar
llvm-project22.1.1. #98882 (Konstantin Bogdanov). - Substitua
SANITIZE_COVERAGE(callbacks personalizados do sanitizer, granularidade no nível de símbolo) pela cobertura baseada no código-fonte do LLVM (WITH_COVERAGE,-fprofile-instr-generate -fcoverage-mapping) para o pipeline noturno de cobertura por teste. O servidor agora lê seu próprio mapeamento de cobertura a partir de seções ELF na inicialização e coleta tuplas(file, line_start, line_end)por teste por meio de um novo comandoSYSTEM SET COVERAGE TEST 'name'. A seleção de testes em verificações de CI direcionadas usa consultas por intervalo de linhas em uma nova tabelachecks_coverage_linesno CIDB e classifica os testes candidatos de acordo com quantas linhas alteradas no diff eles cobrem. #99513 (Nikita Fomichev). - Corrige o erro de linkagem do llvm-libc em builds com -O0. #100023 (Zheguang Zhao).
- Corrigidas duas mensagens de erro na inicialização do contêiner caso a configuração não incluísse as definições
logger.logelogger.errorlog(por exemplo, quando todas as mensagens de log devem ser enviadas para STDOUT/STDERR). #100239 (Simon). - Prefira
ld64.lldaoldda Apple (cctools-port ld64) para builds do macOS. Isso deve reduzir significativamente os tempos de link no Darwin, já que o ld64 do cctools-port é muito lento com-ffunction-sectionse-dead_strip. Usaldcomo fallback seld64.lldnão estiver disponível. #100275 (Alexey Milovidov). - Testes para garantir que os diretórios não contenham nenhum segredo (REST + Glue). #100307 (Konstantin Vedernikov).
- Reexecute os testes modificados recentemente com diferentes configurações aleatórias. #100385 (Alexey Milovidov).
- Rastreie as dependências de arquivos
#embedno CMake e habilite o modo de dependência do ccache para recompilações corretas. #100411 (Alexey Milovidov). - Adiciona testes de validação para consultas TPC-H. #100580 (Raufs Dunamalijevs).
- Passa a usar
aws-sdk-cpp1.11.771. #100582 (Konstantin Bogdanov). - Permitir que XMLs de teste de desempenho façam referência a arquivos externos de consulta SQL e a configurações por meio do atributo file. #100747 (Raufs Dunamalijevs).
- Corrige a compilação com
-march=x86-64-v4ao adicionar o include ausente deTargetSpecific.hemLowerUpperImpl.h. #100932 (Alexey Milovidov). - Corrige a compilação no Gentoo adicionando
--no-default-configacxxflags. #100973 (Isak Ellmer). - Adicionado
utils/auto-bisect/— um framework de bisseção baseado em shell que baixa binários de CI pré-compilados e executa um script de teste fornecido pelo usuário para encontrar o primeiro commit que introduziu uma regressão, sem exigir uma compilação local. #100989 (Nikita Fomichev). - Desabilite o ThinLTO por padrão no CMake para que os builds locais de desenvolvedor não o ativem mais implicitamente. Os builds de release da CI não são afetados, pois passam explicitamente
-DENABLE_THINLTO=1. #101041 (Alexey Milovidov). - Adicionar o benchmark TPC-DS SF1 aos testes de desempenho. #101209 (Raufs Dunamalijevs).
- Adicionados testes sem estado para exclusões leves no MergeTree, cobrindo: ciclo de vida da flag
has_lightweight_delete, correção deCOUNT(*)comoptimize_trivial_count_query, integridade das colunasMATERIALIZED/DEFAULT, recuperação da flag noReplicatedMergeTree,read_in_ordercom linhas excluídas, múltiplos ciclos de exclusão/merge, ocultação da coluna_row_exists, variedade de predicados e aplicação do RBAC emALTER DELETE. #101792 (Nikita Fomichev). - As imagens Docker distroless agora são publicadas nas variantes ubuntu e alpine para releases com tag. #101941 (Rahul Nair).
- Os stack traces agora mostram paths relativos limpos e diretos (por exemplo,
src/Common/Exception.cpp) em vez de paths poluídos com o diretório de build (por exemplo,./ci/tmp/fast_build/./src/Common/Exception.cpp). #102000 (Raúl Marín). - Adiciona uma verificação de estilo no CI que rejeita arquivos maiores que 5 MB commitados no repositório, com uma lista de permissões para dados de teste legítimos já existentes. Remove o
zookeeper_log.parquetnão utilizado de 14 MB. #102080 (Raúl Marín). - Remova cerca de 400 diretivas
#includenão utilizadas dos headers para reduzir o tempo de compilação. #102585 (Raúl Marín). - Passa a usar
wasmtimev43.0.1. #102603 (Konstantin Bogdanov). - Usa o
openssl3.5.6. #102606 (Konstantin Bogdanov). - Use
xz5.8.3. #102607 (Konstantin Bogdanov). - Atualiza a base da imagem Docker distroless do Debian 12 (glibc 2.36, OpenSSL 3.0) para o Debian 13 (glibc 2.41, OpenSSL 3.5), reduzindo a superfície de CVEs a zero vulnerabilidades exploráveis. #101678 (Rahul Nair).
Lançamento do ClickHouse 26.3 LTS, 2026-03-26. Apresentação, Vídeo
alteração incompatível com versões anteriores
- Fazer downgrade após um upgrade pode causar perda de dados. Propaga as versões de serialização dos tipos de dados para tipos de dados aninhados. Por exemplo, a versão de serialização de String
with_size_streamantes 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, comoArray/Map/Variant/JSON/etc. Esse comportamento é controlado pela configuração do MergeTreepropagate_types_serialization_versions_to_nested_types, que agora vem habilitada por padrão. Após essa mudança, 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 sem problemas. O upgrade é seguro, mas o downgrade não — se você precisar reverter após fazer upgrade para a 26.3, os dados gravados pela 26.3 em colunas com tipos aninhados ficarão ilegíveis! Veja #101429 para mais detalhes. #94859 (Pavel Kruglov). - Removido o tipo de skip index
hypothesis. Era um recurso obscuro e experimental, com utilidade prática limitada. Criar tabelas comINDEX ... TYPE hypothesisagora produzirá um erro. #96874 (Alexey Milovidov). - Removida a função experimental
detectProgrammingLanguage. #99567 (Alexey Milovidov). - Corrige a precedência do operador
NOTpara ficar de acordo com o padrão SQL: agoraNOTtem precedência menor queIS NULL,BETWEEN,LIKEe os 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). - Corrige os metadados de projeções comuns para que projeções com chaves de ordenação de múltiplas colunas sejam reconhecidas corretamente. Com base em #90429. #91352 (Amos Bird).
- Corrigidos os arquivos de índices de salto que não respeitavam a configuração replace_long_file_name_to_hash, causando erros “File name too long” e comprometendo as leituras de índice de índices com nomes longos. Os nomes de arquivo dos índices de salto agora são transformados em hash quando excedem max_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 uma atualização contínua) pode fazer com que índices com nomes longos sejam ignorados. #97128 (Raúl Marín).
- Ative o async insert por padrão. O ClickHouse agora agrupará em lote todos os inserts pequenos por padrão. Essa configuração é definida em compatibility. Se você definir
compatibility=<version less than 26.2>, o valor padrão será o anterior,false. Você pode desativar/ativar async inserts em vários níveis: na configuração dos perfis de usuários, na sessão, na consulta ou na tabela MergeTree. #97590 (Sema Checherinda). - Altera o valor padrão de
mysql_datatypes_support_levelde vazio paradecimal,datetime64,date2Date32, habilitando por padrão o mapeamento correto deDATEdo MySQL paraDate32, deDECIMAL/NUMERICparaDecimale deDATETIME/TIMESTAMPcom precisão paraDateTime64. Anteriormente, as colunasDATEdo MySQL eram mapeadas paraDate, que não consegue representar datas anteriores a 1970-01-01, causando corrupção de dados. #97716 (Alexey Milovidov). - Aceita array de nomes de partes em vez de regexp para
mergeTreeAnalyzeIndexes{,UUID}, já que regexp é lento (funcionalidade experimental). #98474 (Azat Khuzhin). - Altere o valor padrão de
stderr_reactiondethrowparalog_lastpara UDFs executáveis. UDFs que gravam avisos em stderr não falham mais quando o código de saída é 0. As exceções de código de saída agora incluem o conteúdo de stderr. #99232 (Xu Jia).
Novo recurso
- Adicionada serialização com buckets para colunas map no MergeTree (
map_serialization_version = 'with_buckets'). As chaves são divididas em buckets com base em hash, para que a leitura de uma única chave (m['key']) leia apenas um bucket em vez da coluna inteira, proporcionando aceleração de 2 a 49x nas lookups de chave única, dependendo do tamanho do map. O número de buckets e a estratégia de bucketização podem ser controlados pelas novas configurações do MergeTree:map_serialization_version,max_buckets_in_map,map_buckets_strategy,map_buckets_coefficientemap_buckets_min_avg_size. #99200 (Pavel Kruglov). - Adiciona suporte a CTEs materializadas. Permite avaliar CTEs apenas uma vez durante a execução da consulta e armazenar seus resultados em tabelas temporárias. Fecha #53449. #94849 (Dmitry Novik).
- Permite determinadas funções padrão do SQL sem parênteses, por compatibilidade, como
NOW. Fecha #52102. #95949 (Aly Kafoury). - Agora é possível usar a função de chave de ordenação natural como
naturalSortKey(s). #90322 (Nazarii Piontko). - Agora você pode usar entrada nativa de JSON/Object para as funções JSONExtract. Fecha #88370. #96711 (Fisnik Kastrati).
- Se um parâmetro de consulta tiver tipo
Nullablee não for especificado, vamos presumir que seu valor éNULL. #93869 (Vikash Kumar). - Suporte a um ZooKeeper auxiliar para o banco de dados
Replicated. #95590 (RinChanNOW). - Adicionado suporte à função
haspara o tipo JSON, para verificar a existência de um path, de forma semelhante ao Map. #96927 (DQ). - Adicionada a função de tabela
mergeTreeTextIndex(database, table, index), que permite ler dados diretamente de um índice de texto. Essa função pode ser usada para introspecção ou para realizar agregações sobre os dados do índice de texto. #97003 (Anton Popov). - Adicionada a configuração
table_readonlydo MergeTree para marcar tabelas como somente leitura, impedindo inserções e modificações. #97652 (Alexey Milovidov). - Adiciona a nova configuração
use_partition_pruninge o aliasuse_partition_key. Defina-a comofalsepara desativar a poda de partições com base na chave de particionamento. #97888 (Nihal Z. Miaji). - Implementa
ALTER TABLE ... EXECUTE expire_snapshots('<timestamp>')para tabelas do Iceberg. #97904 (murphy-4o). #99130 - Permite que cada entrada
type=httpem<protocols>especifique uma chave<handlers>personalizada apontando para uma seção de configuração<http_handlers_*>separada, permitindo regras diferentes de roteamento HTTP por porta. #98414 (Amos Bird). - Adicione a opção
pretty=1aoEXPLAINpara uma saída em árvore com recuo ecompact=1para colapsar etapasExpression, tornando os planos de consulta mais legíveis. #98500 (Kirill Kopnev). - Adiciona a configuração de servidor
restore_access_entities_with_current_grants. Quando habilitada, os usuários/roles restaurados de backups 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 funções
caseFoldUTF8eremoveDiacriticsUTF8para case folding em Unicode e remoção de diacríticos. #98973 (George Larionov). - Adiciona a função de string
normalizeUTF8NFKCCasefoldpara normalização Unicode NFKC_Casefold, que combina a normalização NFKC com o case folding. #99276 (George Larionov). - Adiciona o tokenizer
unicode_wordpara índices de texto completo e a funçãotokens. Ele divide o texto com base nas regras de fronteira de palavras do Unicode: palavras ASCII são formadas por caracteres conectores (sublinhado, dois-pontos, ponto e aspas simples), enquanto caracteres Unicode não ASCII se tornam tokens de um único caractere. Observação: a versão 26.3 aceita esse tokenizer apenas com o nomeunicode_word; ele foi renomeado paraasciiCJKna versão 26.4. #99357 (Amos Bird). - Adicionadas as configurações
max_skip_unavailable_shards_numemax_skip_unavailable_shards_ratiopara limitar quantos shards podem ser ignorados sem aviso quandoskip_unavailable_shardsestá habilitado. Se o número ou a proporção de shards indisponíveis exceder o limite configurado, uma exceção é lançada em vez de retornar silenciosamente resultados incompletos. #99369 (Alexey Milovidov). - Agora, os usuários podem usar a palavra-chave
SOMEem expressões de subconsulta. Ela se comporta exatamente comoANY. #99842 (Artem Kytkin). - Adicionada a configuração
output_format_trim_fixed_stringpara remover bytes nulos no final de valoresFixedStringem formatos de saída de texto. #97558 (NeedmeFordev). - Suporte a expressões de join entre tabelas entre parênteses na cláusula
FROM, por exemplo,SELECT * FROM (t1 CROSS JOIN t2). #97650 (Alexey Milovidov). - Implementada a função
toDaysInMonth: ela retorna o número de dias do mês da data especificada. #99227 (Vitaly Baranov).
Funcionalidade Experimental
- Adiciona suporte experimental a Funções Definidas pelo Usuário (UDFs) baseadas em WebAssembly, permitindo implementar lógica de função personalizada em WebAssembly e executá-la no ClickHouse. Agradecimentos especiais a Alexey Smirnov por contribuir com o suporte ao backend do Wasmtime. #88747 (Vladimir Cherkasov). Melhorias incrementais no suporte a UDFs WASM. #99373 (Vasily Chekalkin).
- Adiciona suporte a dialetos SQL externos usando a biblioteca
polyglot. #99496 (Alexey Milovidov). - Adiciona o codec de compressão de ponto flutuante
ALP(sem fallback ALP_rd para valores double não compressíveis). #91362 (Nazarii Piontko). - Adiciona suporte experimental a lazy type hints para colunas
JSON. Quando habilitado por meio deallow_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 somente de metadados, sem reescrever dados históricos. Os type hints são aplicados em tempo de consulta para partes antigas e materializados durante INSERTs e merges em segundo plano. #97412 (tanner-bruce). - Habilita leituras paralelas na table engine YTsaurus. #97343 (MikhailBurdukov).
Melhorias de desempenho
- Melhora o desempenho de lagos de dados. Nas versões anteriores, a leitura no armazenamento de objetos não ajustava o pipeline ao número de threads de processamento. Isso traz melhorias de várias ordens de magnitude (~40x) em máquinas com vários núcleos. #99548 (Alexey Milovidov).
- Agora, a relação entre
enable_parallel_replicaseautomatic_parallel_replicas_modeé a seguinte. Uma consulta só pode usar réplicas paralelas seenable_parallel_replicas > 0. Além disso, seautomatic_parallel_replicas_mode=1, a decisão de usar ou não réplicas paralelas é tomada durante o planejamento, com base nas estatísticas coletadas anteriormente. Seautomatic_parallel_replicas_mode=0, réplicas paralelas serão usadas em todas as consultas compatíveis, independentemente de quaisquer estatísticas. Uma exceção importante é o insert-select distribuído com réplicas paralelas: nesse caso, as consultas sempre serão executadas como seautomatic_parallel_replicas_mode=0. #97517 (Nikita Taranov). - Permite a poda de partições quando o predicado contém qualquer operador de comparação (
=,<,>,!=) e a chave de partição está envolvida em uma cadeia de funções determinísticas (por exemplo,PARTITION BY xe predicados comocityHash64(x) % 5 > 2,toYYYYMM(x) < 2026,toYYYYMM(x) = 2026outoYYYYMM(x) != 2026usarão a chave de partição para poda). Fecha #28800. #98432 (Nihal Z. Miaji). - Permite a otimização de leitura em ordem e a poda da chave primária 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 de leitura em ordem paraORDER BY x::Nullable(UInt64)e aplicar a poda da chave primária a predicados comoWHERE x::Nullable(UInt64) > 500000. #98482 (Nihal Z. Miaji). - Permite poda de índices e pushdown de filtros quando uma coluna de inteiros é comparada com um literal de ponto flutuante; por exemplo, predicados como
WHERE x < 10.5agora podem usar a chave primária para poda, e filtros comoprime < 1e9ounumber < 1e5agora sofrem pushdown nas funções de tabelaprimes()enumbers(), em vez de causar execução sem limites. Fecha #85167. #98516 (Nihal Z. Miaji). - Foi adicionado um novo cache SLRU para metadados do Parquet, melhorando o desempenho de leitura ao eliminar a necessidade de baixar os arquivos novamente apenas para ler os metadados. #98140 (Grant Holly).
- Suporte à inversão dos lados de junções ANTI, SEMI e FULL com base nas estatísticas do otimizador. #97498 (Hechem Selmi).
- Otimizar o descarte de grânulos para
pointInPolygonem polígonos grandes e corrigir a análise de índice depointInPolygon, que gerava exceção durante a poda da chave primária. #91633 (Nihal Z. Miaji). - Melhora no desempenho da função
levenshteinDistance. #94543 (Joanna Hulboj). - Otimize as conversões em lote do tipo decimal, evitando chamadas de função por elemento. #95923 (Konstantin Bogdanov).
- As tabelas Iceberg agora oferecem suporte à pré-busca assíncrona de metadados por meio da configuração de tabela
iceberg_metadata_async_prefetch_period_ms, que preenche periodicamente o cache de metadados de forma antecipada. Além disso, a configuração de consultaiceberg_metadata_staleness_mspermite que consultas SELECT usem metadados em cache se eles estiverem mais atualizados do que o nível de obsolescência especificado, eliminando chamadas ao catálogo Iceberg durante o processamento da solicitação. #96191 (Arsen Muk). - O modo ordenado do
S3Queueusa S3 ListObjectsV2 StartAfter para evitar relistar todo o histórico do prefixo, reduzindo as chamadas ao ListObjects. #96370 (Venkata Vineel ). - Menor consumo de memória na desduplicação de inserts. Em geral, o bloco original é necessário para a desduplicação, mas, no caso de sync insert, pudemos omiti-lo e economizar memória de vez. #96661 (Sema Checherinda).
- Use um valor específico da arquitetura para o tamanho da linha de cache, em vez de um valor fixo de 64. #97357 (Nikita Taranov).
- Leitura ligeiramente otimizada do dicionário do índice de texto, melhorando o desempenho geral da análise de índice de texto. #97519 (Anton Popov).
- Acelera a descompressão de blocos de 16 bytes com
LZ4em ARM. #97774 (Raúl Marín). - Refatorada a tokenização para uma nova interface de alto desempenho, substituindo a antiga API em estilo de iterador para dar suporte a SIMD e tokenizadores com estado. Parte de #90268. #97871 (Amos Bird).
- Desempenho aprimorado da análise de índice de texto para consultas 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 desativada incorretamente nesses casos. #98096 (Anton Popov).
- Melhora o desempenho de consultas 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 anteriormente impedia a poda de grânulos. #98410 (Amos Bird). - A configuração
optimize_syntax_fuse_functionsvem habilitada por padrão. #98424 (Alexey Milovidov). - Otimize a função de agregação
avgWeightedusando acumuladores locais em vez de armazenar e encaminhar cada linha por meio do estado de agregação, melhorando o desempenho em até 27% para entradas Nullable. #98793 (Antonio Andelic). - Melhora o desempenho e reduz o uso de memória de funções de janela paralelas em determinados cenários e de cargas de trabalho com
arrayFoldem arrays grandes. Isso também pode reduzir a pressão de falhas de página e melhorar a estabilidade sob limites rígidos de memória para as consultas afetadas. #98892 (filimonov). - Melhora o desempenho das mesclagens ordenadas. #99013 (Artem Zuikov).
- Otimize
INTERSECT ALLeEXCEPT ALL. #99097 (Raufs Dunamalijevs). - Suporte à otimização
read_in_order_use_virtual_rowpara leituras em ordem inversa. #99198 (Vladimir Cherkasov). - Reduza a contenção de cache em JOINs
RIGHTeFULLverificando se JoinUsedFlags está definido antes de gravar. #99274 (Hechem Selmi). - Otimize
PrefetchingHelper::calcPrefetchLookAheadsubstituindo os cálculos em ponto flutuante por aritmética inteiramente inteira, melhorando o layout do cache de instruções e reduzindo a sobrecarga de ciclos durante os loops de agregação. #99327 (Riyane El Qoqui). - Reduza o consumo de memória do Keeper substituindo
absl::flat_hash_setporCompactChildrenSetpara armazenar os filhos dos nós. O novo contêiner armazena de 0 a 1 filho inline, sem alocação no heap, o que cobre a maioria dos nós do Keeper. Isso reduz o tamanho deKeeperMemNodede 144 para 128 bytes. #99860 (Antonio Andelic). - As projeções de agregação agora são suportadas corretamente em views. Corrige #32753. #88798 (Amos Bird).
- Suporte à otimização da conversão de join OUTER para INNER com
join_use_nulls. Fecha #90978. #95968 (Vladimir Cherkasov). - Melhora a leitura de subcolunas com o cálculo correto dos tamanhos antes da leitura. Isso reduz o uso de memória e acelera a leitura das subcolunas. #96251 (Pavel Kruglov).
- Faz com que os caches de marks, de dados não compactados e de páginas usem uma arena separada do jemalloc para evitar a fragmentação de memória quando alocações de curta duração, isto é, para consultas e requisições, se misturam com alocações de maior duração dos caches. #96812 (Seva Potapov). #98812. #99021
- Tabelas com regras
DELETE TTLagora podem usar o algoritmo de mesclagem vertical. #97332 (murphy-4o). - Aplica data skipping indexes durante a análise distribuída de índices. #97767 (Azat Khuzhin).
- As marcas dos índices secundários agora são pré-carregadas quando a configuração
prewarm_mark_cacheestá habilitada (carregadas no cache de marcas do índice durante os fetches de data parts e na inicialização da tabela). #97772 (Anton Popov). - Redução de bloqueios no controle de acesso. #97894 (Nikita Taranov).
- Quando apply_row_policy_after_final ou apply_prewhere_after_final estiver habilitado, condições compostas com AND em políticas de linha e PREWHERE agora são decompostas para extrair átomos da chave de ordenação para a análise do índice da chave primária. Antes, se um filtro adiado contivesse uma mistura de predicados da chave de ordenação e de predicados que não pertenciam à chave de ordenação (por exemplo, x > 1 AND y != ‘foo’), a expressão inteira era excluída da análise de índice. Agora, átomos da chave de ordenação (como x > 1) são extraídos e usados para a poda de grânulos, mesmo em expressões AND aninhadas. #98513 (Yarik Briukhovetskyi).
- Reduz a contenção de bloqueios no MergeTreeBackgroundExecutor, fazendo com que os recursos da tarefa sejam liberados sem adquirir o bloqueio. Fecha #93620. #98604 (Dmitry Novik).
- Corrige o uso excessivo de memória (~514 MiB) durante a autodetecção de formato ao ler dados não Arrow (por exemplo, JSON de
urloufilesem formato explícito), causado pelo leitor ArrowStream interpretar incorretamente os primeiros bytes como um comprimento de metadados enorme. #98893 (Konstantin Bogdanov).
Melhoria
- Permite analisar arquivos GeoParquet que contêm diferentes tipos Geo na mesma coluna. #97851 (Mark Needham).
- Adiciona a função SQL
tokensForLikePattern, que tokeniza padrões LIKE respeitando a semântica dos curingas:%e_são tratados como curingas, curingas com escape (\%,\_) são tratados como literais, e tokens adjacentes a curingas sem escape são descartados. #97872 (Amos Bird). - Adiciona um placeholder
{_schema_hash}para o mecanismo de tabela S3, que insere um hash das definições das colunas da tabela no caminho no S3. #98265 (Miсhael Stetsyuk). SymbolIndex,addressToSymbol,system.symbolsebuildIdagora funcionam no macOS ao analisar as tabelas de símbolos do Mach-O. #99014 (Alexey Milovidov).- A tabela
system.stack_traceagora funciona no macOS, permitindo a introspecção das pilhas de chamadas de todas as threads do servidor. #98982 (Alexey Milovidov). - Adiciona a opção de configuração LDAP por servidor
<follow_referrals>(padrãofalse) para controlar se o cliente LDAP segue encaminhamentos. Desabilitar o seguimento de encaminhamentos evita timeouts e travamentos ao pesquisar a partir de um base DN na raiz do domínio do Active Directory. As mensagens de log relacionadas a encaminhamentos foram movidas dewarnparatrace. #96765 (paf91). - Agora rastreamos todos os índices de data skipping usados durante a execução da consulta na tabela
query_log, em uma nova coluna chamadaskip_indices. Corrige #78676. Autor original @pheepa. #87862 (Grant Holly). - As dicas de ACCESS_DENIED não revelam mais os nomes das colunas, a menos que o usuário possa exibir todas as colunas obrigatórias; os nomes do banco de dados e da tabela continuam visíveis na dica. #91067 (filimonov).
- Adiciona uma thread dedicada de limpeza para o MergeTree para evitar atrasos na limpeza em cenários de alta carga de merge. Isso resolve #86181. #91574 (Amos Bird).
- Recarrega a configuração do cluster se os IPs do
hostnamedo servidor local tiverem mudado, em vez dos IPs de qualquer host. Corrige #81215, #70156 e #65268. #93726 (Zhigao Hong). - Permite que
optimize_aggregators_of_group_by_keysotimize corretamente as funções de agregação em consultas com GROUPING SETS. #93935 (Xiaozhe Yu). - Keeper-bench: relatar erros nas métricas e gerar arquivo JSON de métricas para o modo —input-request-log. #95748 (Mohammad Lareb Zafar).
- Adiciona a nova cláusula ROLE ao CREATE USER. #97074 (Vitaly Baranov).
- Agora é possível definir as configurações de internal_replication para um cluster criado pelo banco de dados Replicated. #97228 (Pervakov Grigorii).
- A nova configuração
allow_nullable_tuple_in_extracted_subcolumnscontrola se as subcolunasTuple(...)extraídas deTuple,Variant,DynamiceJSONsão retornadas comoNullable(Tuple(...))(NULLpara linhas ausentes) ou comoTuple(...)(valores padrão deTuplepara linhas ausentes). Desativada por padrão, essa configuração só pode ser alterada reiniciando o servidor. #97299 (Nihal Z. Miaji). - Adiciona informações sobre filtros diferidos como um item separado na saída da consulta EXPLAIN (ao usar Row Policies/PREWHERE com FINAL). Relacionado: #91065. #97374 (Yarik Briukhovetskyi).
- Habilitado
type_json_allow_duplicated_key_with_literal_and_nested_objectpor padrão. Isso permite evitar erros de chaves duplicadas durante o parsing de JSONs como{"a" : 42, "a" : {"b" : 42}}, que podem ser formatados pelo ClickHouse a partir dos dados JSON originais{"a" : 42, "a.b" : 42}. #97423 (Pavel Kruglov). - Melhoria no Keeper:
find_super_nodesé um comando muito útil para depurar aumentos inesperados na contagem de nós no Keeper. Infelizmente, se houver vários super nós, é quase impossível encontrar mais de um, porque o comando fica travado indefinidamente ao percorrer os filhos do primeiro super nó encontrado. Este PR impede a travessia dos filhos de super nós. #97819 (pufit). - Suporte inicial para autocompletar no
clickhouse-keeper-client. #97828 (Konstantin Bogdanov). - Grava os buffers assíncronos de logging em caso de falha. #97836 (Azat Khuzhin).
- Habilite o recurso de impersonate por padrão (consulte EXECUTE AS target_user). #97870 (Vitaly Baranov).
- Melhora o cancelamento de consultas com o engine de tabela SQLite por meio de KILL QUERY e cancel query (Ctrl+C) no clickhouse-client. #97944 (Roman Vasin).
- Adicionada a configuração do servidor
jemalloc_profiler_sampling_ratepara controlar olg_prof_sampledo jemalloc e expô-la como a métrica assíncronajemalloc.prof.lg_sample. #97945 (Antonio Andelic). - Suporte a pesos na implementação de fila concorrente com limite. #97962 (Daniil Ivanik).
- Adiciona
sslmodeàs chaves permitidas para fontes de dicionário do PostgreSQL. Antes,sslmodenão estava na lista de permissõesdictionary_allowed_keysem PostgreSQLDictionarySource.cpp, o que tornava impossível configurar o modo SSL para conexões de dicionário do PostgreSQL. Isso impedia que os dicionários se conectassem a servidores PostgreSQL que exigem SSL (por exemplo, o AWS RDS, que impõe SSL por padrão), pois a conexão falhava na negociação de TLS e o servidor rejeitava o fallback não criptografado. #98014 (mcalfin). - Exibir um erro claro de “arquivo não encontrado” ao informar um caminho de arquivo inexistente para
clickhouseouclickhouse-local, em vez de uma mensagem genérica confusa. #98048 (Raúl Marín). - Agora é possível criar índices de texto em colunas
Nullable([Fixed]String)eArray(Nullable([Fixed]String)). #98118 (Jimmy Aguilar Mena). - Evite remover coleções nomeadas que são dependências de fontes de dicionários. #98127 (Pablo Marcos).
- Ativado o algoritmo de join
grace_hashpara consultas com totais. #98144 (János Benjamin Antal). - Cancela merges em segundo plano antecipadamente no DROP DATABASE para ordinary shared merge tree. #98161 (Shaohua Wang).
- Melhoria no cancelamento de consultas com MongoDB e MySQL usando KILL QUERY e cancel query (Ctrl+C) no clickhouse-client. #98187 (Roman Vasin).
- Remova o NetlinkMetricsProvider e use exclusivamente o procfs para coletar métricas de taskstats por thread. A coleta baseada em Netlink é problemática em ambientes conteinerizados e apresenta maior latência de cauda sob contenção. #98229 (Amos Bird).
- Refatoração do tratamento de arquivos de manifesto do Iceberg para corrigir problemas no cache de arquivos de manifesto. #98231 (Daniil Ivanik).
- Agora, também consideramos os casos em que a chave de ordenação da tabela pode ser uma expressão como
toDate(time), e podemos decidir não adiar expressões como essa quando elas fazem parte de filtros. #98237 (Yarik Briukhovetskyi). - Adicionada uma nova métrica
MaxAllocatedEphemeralLockSequentialNumberpara o maior número sequencial alocado para znodes de bloqueio efêmeros no ZooKeeper. #98243 (Miсhael Stetsyuk). - Atualiza o ClickStack para a versão 2.20.0. #98252 (Aaron Knudtson).
- Foi adicionado um novo evento de perfil
KeeperRequestTotalWithSubrequestsque contabiliza individualmente cada sub-requisição dentro de uma requisição múltipla, proporcionando melhor visibilidade da carga de trabalho real do Keeper. O evento existenteKeeperRequestTotalcontinua contabilizando cada requisição múltipla como uma única requisição. #98348 (Antonio Andelic). SYSTEM RELOAD DICTIONARIESagora recarrega os dicionários em ordem topológica, para que os dicionários que usam outros dicionários como origem vejam dados atualizados após a recarga. #98356 (Alexey Milovidov).- Reinicie o cache de estatísticas após alterar a configuração do MergeTree. #98520 (Han Fei).
- Somente as réplicas “ativas” (com as quais é possível se conectar) participam da análise distribuída de índices. #98521 (Azat Khuzhin).
- Adiciona uma configuração
access_control_improvements.disallow_config_defined_profiles_for_sql_defined_users(desabilitada/permitida por padrão) que proíbe o uso de perfis de configurações definidos no arquivo de configuração (exceto o perfildefault) para usuários definidos por SQL. #98662 (Alexander Tokmakov). - Limite o número de nós usados pela heurística automática de parallel replicas ao número real de nós no cluster (em vez de considerar apenas a configuração
max_parallel_replicas). #98668 (Nikita Taranov). - Implementar requisições com hedge e leitura assíncrona para análise distribuída de índices. #98724 (Azat Khuzhin).
- A desserialização de estados binários de
AggregateFunctionagora exige o consumo de toda a entrada. Se houver bytes redundantes extras no final, o ClickHouse lança uma exceção em vez de aceitar dados de estado malformados. #98786 (Nihal Z. Miaji). - TRUNCATE DATABASE passa a responder ao cancelamento de consulta. #98828 (Shaohua Wang).
- Aprimora o
keeper-benchcom pipelining de requisições, período de aquecimento, estatísticas por operação, seeds reproduzíveis e melhor tratamento de erros. #98906 (Antonio Andelic). - Suporte à cláusula SAMPLE na análise distribuída de índices. #98931 (Azat Khuzhin).
- Mostrar o título do gráfico no dashboard mesmo quando a consulta retornar um resultado vazio ou gerar um erro. #98975 (Yash ).
- As mensagens de erro do Analyzer não listam mais todas as colunas de uma tabela (o que podia gerar exceções de mais de 150 KB). As listas de colunas agora são limitadas a 10 itens. #99002 (Yash ).
- Retorna corretamente as estatísticas de coluna de subconsultas com junções, para que a consulta pai possa usá-las na reordenação de junções. #99096 (Alexander Gololobov).
- Marque a sessão do ZooKeeper como expirada assim que a finalização começar, em vez de esperar que a thread de envio seja encerrada. Isso permite que outras threads estabeleçam uma nova sessão sem demora. #99102 (Raúl Marín).
- Passa a usar mais funções matemáticas da LLVM-libc:
exp,exp2,expm1,fabs,fabsl,floor,fmodl,log,log2,logf,pow,scalbn,scalbnl,copysignl,nan,nanf,nanle as constantes compartilhadasexplogxf. #99118 (Konstantin Bogdanov). - Reduz o uso de memória e corrige uma possível saída duplicada no formato collapsed de
system.jemalloc_profile_text. #99121 (Antonio Andelic). - Adiciona a coluna
is_subrequestasystem.aggregated_zookeeper_logpara separar requisições autônomas de sub-requisições dentro de requisições Multi/MultiRead. Antes, as sub-requisições eram agregadas nos mesmos buckets que as requisições autônomas e, como cada suboperação era registrada com a duração total da multirrequisão, a latência média se tornava enganosa. As sub-requisições agora têm latência zero. #99169 (Miсhael Stetsyuk). - Permite usar o comando
ALTER TABLE MODIFY COLUMN x TTL ...sem especificar o tipo da coluna. #99208 (Nikolay Degterinsky). - Ignora solicitações obsoletas ao Keeper para sessões que já se desconectaram, evitando idas e voltas desnecessárias ao Raft. O número de sessões encerradas acompanhadas é limitado pela configuração de coordenação
max_finished_sessions_cache_size. #99246 (Antonio Andelic). - Suporte a índice de texto baseado em
mapValues(map)com o operadorIN. #99286 (Anton Popov). - Suporte a autocompletar semelhante ao de shell no clickhouse keeper-client (tratando o autocompletar de argumentos entre aspas, ou seja,
'foo ba', tratando argumentos com escape, ou seja,foo\ ba, fazendo com quelsimprima nós entre aspas, caso contenham espaços em branco). #99312 (Azat Khuzhin). - Evita que o comando
mntrdo Keeper fique bloqueado devido à contenção de locks. #99472 (Antonio Andelic). - Reduz a contenção de bloqueios no dispatcher do Keeper ao invocar callbacks e despachar solicitações de leitura fora do escopo do mutex, além de adicionar guardas de bloqueio com perfilamento para observabilidade. #99751 (Antonio Andelic).
- Tolera a ausência de padding no final do último bloco de arquivos Parquet. #99857 (Seva Potapov).
Correção de bug (comportamento incorreto perceptível ao usuário em uma versão estável oficial)
- Corrige como o destino de uma tabela alias é salvo como dependência de DDL quando não está totalmente qualificado: agora ele é salvo com o banco de dados da tabela alias, em vez do banco de dados da sessão. #95175 (Enric Calabuig).
- Corrige resultado incorreto ou exceção na leitura de subcolunas de colunas ALIAS. #95408 (Pavel Kruglov).
- Corrige a ausência de coluna ao usar um alias de identificador não padrão em JOIN com o analisador antigo. Corrige #25594, #47288 e #53263. #95679 (Zhigao Hong).
- Corrige um travamento nas funções do dialeto Kusto
bin(),bin_at(),extract()eindexof()ao receber argumentos vazios. #95736 (NeedmeFordev). - Proíbe montar local_object_storage (usado por data lakes sobre o sistema de arquivos local e talvez pelo LocalDisk) em qualquer local diferente de user_files_path no clickhouse-client. #96201 (Daniil Ivanik).
- No
DeltaLaketable engine, corrige uma condição de corrida lógica na mudança da versão do snapshot e remove recarregamentos pesados redundantes do snapshot. #96226 (Kseniia Sumarokova). - Corrigido erro lógico ao anexar uma parte no MergeTree quando havia várias renomeações encadeadas entre a desanexação e a anexação. #96351 (Alexey Milovidov).
- Corrige um bug em que configurações explícitas enviadas junto com
compatibilityna mesma solicitação podiam ser ignoradas silenciosamente quando o valor delas correspondia ao padrão do servidor. #97078 (Raufs Dunamalijevs). - Corrigido o problema em que o cliente relatava
NETWORK_ERRORem vez do erro de parsing real (com o número correto da linha) quando um INSERT com parsing paralelo encontrava dados inválidos. #97339 (Alexey Milovidov). - Corrige o problema que impedia a
sumCountaggregate function de ler estados serializados mais antigos após a introdução deNullable(Tuple). Fecha #97370. #97502 (Nihal Z. Miaji). - Corrigida a exceção na comparação de tuplas envolvendo elementos do tipo
Nothing(por exemplo, ao comparar elementos de tuplaNULL) quando essa comparação é usada comGROUPING SETSeORDER BY. #97509 (Alexey Milovidov). - Corrige o cálculo não determinístico de
uncompressed_hashem partes Compact do MergeTree quando vários codecs de compressão são usados, o que poderia levar a uma desduplicação incorreta. #97522 (Alexey Milovidov). - Corrige erro lógico de
streamausente duranteINSERT SELECTcom JSON e buckets em dados compartilhados. Fecha #97331. #97523 (Pavel Kruglov). - Corrige exceções
MEMORY_LIMIT_EXCEEDEDque estavam sendo reportadas incorretamente comoCORRUPTED_DATAdurante operações de merge de SummingMergeTree e CoalescingMergeTree. #97537 (János Benjamin Antal). - Corrigida a exceção “Context has expired” em subconsultas correlacionadas que contêm funções de tabela como
url(). #97544 (Alexey Milovidov). - Corrige exceções e comportamento incorreto em
optimize_syntax_fuse_functionscom projeções agregadas, tipos Date e preservação dos nomes das colunas. #97545 (Alexey Milovidov). - Remove a reescrita incorreta de consulta de
replaceRegexpOneparaextract, que produzia resultados incorretos quando a regexp não correspondia; também corrige a exceção quandoreplaceRegexpOneé usado comGROUP BY ... WITH CUBEegroup_by_use_nulls=1. #97546 (Alexey Milovidov). - Corrige o
DROP DATABASEcomdatabase_atomic_wait_for_drop_and_detach_synchronously, que ficava bloqueado indefinidamente quando a consulta era cancelada. #97586 (Alexey Milovidov). - Corrige
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). - A função de tabela
loopestava chamandoinner_storage->read()diretamente, contornando a camada do interpretador, onde políticas de linha, permissões 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), mesmo quando um SELECT direto retornava zero linhas. #97682 (pufit). - Corrige a poda incorreta de partições em casos que usam DateTime64 pré-epoch com a função
toDate(). #97746 (Yarik Briukhovetskyi). - Após este patch,
hasPartitionIdretornará false se houver outra partição com um ID de partição maior no conjunto de partes de dados. #97748 (Mikhail Artemenko). - Corrige possíveis travamentos durante a leitura de grânulos vazios em dados compartilhados avançados no JSON. Fecha #97563. #97778 (Pavel Kruglov).
- Corrige
LOGICAL_ERRORCannot schedule a fileao fazerINSERTemDistributeddevido a uma condição de corrida entreDROPeINSERT. #97822 (Azat Khuzhin). - Corrigido crash/assert do servidor ClickHouse em chamada para
mapContainsKey/mapContainsKeyLikecom índice de saltotokenbf_v1. #97826 (Shankar Iyer). - Corrige exceções LOGICAL_ERROR causadas por
LowCardinalitydentro de tipos compostos (Variant,Dynamic,Tuple) emconcatWithSeparator,format, subconsultasIN,GLOBAL INe junções com filtros em tempo de execução. #97831 (Raúl Marín). - Corrigida a exceção
LOGICAL_ERRORChunk info was not set for chunk in MergingAggregatedTransformao usarARRAY JOINcom a função de tabelamerge()em várias tabelas Distributed combinadas comGROUP BY. #97838 (Raúl Marín). - Correção de travamento 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 cenários de alta concorrência. A exceçãoHTTP_CONNECTION_LIMIT_REACHEDpodia escapar de~PooledConnectionao devolver uma conexão ao pool para reutilização, levando aSIGABRT. #97850 (Antonio Andelic). - Corrige resultado incorreto quando o algoritmo
grace_hashé usado com junções não equi e o bloco da esquerda não pode ser processado completamente devido às limitações de tamanho no resultado da junção. #97866 (János Benjamin Antal). - Corrigida a ineficiência de desempenho na varredura de metadados do DeltaLake introduzida em #96686. #97880 (Kseniia Sumarokova).
- Corrige condição de corrida no cliente ZooKeeper entre sendThread e receiveThread. #97887 (Pablo Marcos).
- Corrige um bug em que não era possível usar CTE com operações insert-select distribuídas. Continuação de https://github.com/ClickHouse/ClickHouse/pull/87789. Fecha #95837. #97889 (Yarik Briukhovetskyi).
- Corrige uma exceção em
CachedOnDiskReadBufferFromFile::readBigAt. Fecha #97325. #97890 (Kseniia Sumarokova). - Corrige a exceção
LOGICAL_ERRORna engineAliascom colunas materializadas, causada por incompatibilidade entre colunas. Fecha #97907. #97921 (Kai Zhu). - Corrige perda de dados do Keeper após reinicialização ao usar o Azure Blob Storage com metadados
s3_plainpara armazenamento de logs. #97987 (Antonio Andelic). - Corrige a miscompilação por JIT da função
signpara tipos inteiros maiores queInt8— valores fora do intervalo de -128 a 127 podiam produzir um sinal incorreto. #98012 (Alexey Milovidov). - Corrigidos a exceção
DUPLICATE_COLUMNe valores NULL silenciosos ao ler tabelas Delta Lake que usam o modo de mapeamento de colunas “name” com campos de struct cujos nomes contêm pontos (por exemplo,STRUCT<`a.foo`: STRING, `b.foo`: STRING>). #98013 (Caio Ishizaka Costa). - Corrige mutação após atualização leve e em índices secundários. #98044 (Raúl Marín).
- Corrige resultado incorreto de consultas FINAL ao misturar índices de salto da chave primária e de colunas que não fazem parte da chave primária. #98097 (Raúl Marín).
- Aplicar verificações de READ ON FILE a file() escalar e a DESCRIBE TABLE file(). #98115 (Nikolay Degterinsky).
- Corrige um travamento em que, ao consultar arquivos com um padrão glob (por exemplo,
file('dir/**', 'LineAsString')), era gerada uma exceção não tratada do sistema de arquivos (STD_EXCEPTION) se o diretório contivesse um link simbólico quebrado. Links simbólicos quebrados agora são ignorados silenciosamente, e a consulta retorna resultados de todos os arquivos válidos. #98143 (Mark Andreev). - Corrige falha de segmentação na otimização do plano de consulta durante a conversão de
outer joineminner joincomarrayJoinna expressão de filtro. #98147 (Alexey Milovidov). - Corrigido o problema em que o formato
ProtobufListnão funcionava com o engine Kafka porque o estado de leitura não era redefinido entre as mensagens. #98151 (Alexey Milovidov). - Corrige um erro lógico com analyzer_compatibility_join_using_top_level_identifier e ARRAY JOIN, fechando #98164. #98179 (Vladimir Cherkasov).
- O componente
Watchagora é definido para respostas de watch emaggregated_zookeeper_log, em vez de ficar vazio. #98202 (Antonio Andelic). - Se as colunas da chave de partição não estiverem incluídas na chave de ordenação, a poda de partições poderá ignorar incorretamente partições que contêm linhas que deveriam “prevalecer” durante a desduplicação FINAL. #98242 (Yarik Briukhovetskyi).
- Corrige o erro lógico “Bad cast from type DB::ColumnConst to DB::ColumnArray” em
kql_array_sort_asc/kql_array_sort_descquando são chamados com argumentos de array constantes. #98251 (Alexey Milovidov). - Corrige o acesso fora dos limites em
ColumnConst::getExtremes, que poderia causar um travamento comextremes = 1habilitado. #98263 (Alexey Milovidov). - Corrigido um possível deadlock quando duas operações
MOVE PARTITIONconcorrentes atuam sobre o mesmo par de tabelas em direções opostas. #98264 (Alexey Milovidov). - O servidor HTTP agora retorna uma mensagem de erro no corpo da resposta para respostas 400 Bad Request causadas por cabeçalhos malformados, em vez de retornar um corpo vazio. #98268 (Alexey Milovidov).
- Corrige resultados incorretos na análise de índice distribuída (funcionalidade experimental) e no cache de condições de consulta. #98269 (Azat Khuzhin).
- Corrigida a exceção LOGICAL_ERROR “Resultado inválido da busca binária em
MergeTreeSetIndex”, provocada pela conversãotoDateem colunas de chave com dados que cruzam o limite de 65535. #98276 (Alexey Milovidov). - Corrige a exceção
LOGICAL_ERRORquando um RIGHT JOIN envolvido em um CROSS JOIN é trocado pela otimizaçãoquery_plan_join_swap_tableno código legado da etapa de join. #98279 (Alexey Milovidov). - Valide dados corrompidos na desserialização de
DDSketchpara evitar segfaults, exceções, loops infinitos e OOM ao ler estados corrompidos da função de agregaçãoquantilesDD. #98284 (Alexey Milovidov). - Corrige o LOGICAL_ERROR “Trying to execute PLACEHOLDER action” quando colunas correlacionadas de consultas externas são referenciadas dentro de funções lambda, como
arrayMap. #98285 (Alexey Milovidov). - Corrige a exceção de erro lógico em
caseWithExpressionquando a expressãoCASEincluimaterialize(NULL)ou outros argumentosNullable(Nothing). #98290 (Alexey Milovidov). - Corrige exceção de cast inválido ao filtrar a coluna virtual
_tablena função de tabelamerge. #98291 (Alexey Milovidov). - Corrige 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/do ZooKeeper. #98293 (Alexey Milovidov). - Corrige a exceção ao usar
ORDER BY ... WITH FILLjunto comLIMIT BY. #98361 (Alexey Milovidov). - Corrige a corrupção silenciosa de dados ao inserir uma coluna
Datede Parquet/Arrow em uma colunaEnum— agora a conversão incompatível de tipos é corretamente rejeitada, em vez de armazenar valores de enum inválidos. #98364 (Alexey Milovidov). - Corrigida uma exceção ao ler um arquivo Arrow com uma coluna
Arrayem uma tabela com uma colunaNested. #98365 (Alexey Milovidov). - Corrige mutações
MATERIALIZE INDEXeMATERIALIZE PROJECTIONque ficavam bloqueadas quando o índice ou a projeção era excluído antes de a mutação terminar. #98369 (Alexey Milovidov). - Corrigida a exceção ao ler de
Nullable(Tuple(...))quando o nome de um elemento de Tuple entra em conflito com a subcolunanullde Nullable. #98372 (Alexey Milovidov). - Corrigida a exceção “Column … query tree node does not have valid source node” ao fazer join entre uma tabela
Merge(encapsulando uma tabelaDistributed) e outra tabela. #98376 (Alexey Milovidov). - Corrige a conversão incorreta de
Booldo Parquet paraFixedStringno leitor V3 native, que produzia bytes brutos em vez da representação em string. #98378 (Alexey Milovidov). - Corrige
tryGetColumnDescriptionpara filtrar as subcolunas pelo tipo da coluna pai, em linha com outros métodos de busca de colunas. #98391 (Alexey Milovidov). - 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). - Corrige resultados incorretos na poda de partições após a mesclagem de partes com colunas de chave de partição
Nullable, causados por limites incorretos no índice min-max. #98405 (Amos Bird). - Corrige uma exceção rara no executor do pipeline, que podia se manifestar como
Received signal 6(apenas em builds de depuração), durante uma condição de corrida entre a expansão do pipeline e o cancelamento da consulta. #98428 (Alexey Milovidov). - Corrigida a exceção “Column identifier is already registered” ao usar
count_distinct_optimizationcom a cláusulaQUALIFY. #98433 (Alexey Milovidov). - Corrige a 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 a exceção “Pipeline stuck” em junções
full_sorting_merge, causada por um deadlock noPingPongProcessorquando a otimizaçãoFilterBySetOnTheFlycriava uma dependência circular com oMergeJoinTransform. #98454 (Alexey Milovidov). - Corrige a exceção
LOGICAL_ERROR“Projection cannot increase the number of rows in a block” durante a mesclagem de partes com TTL que exclui todas as linhas e com uma projeção agregada com chaveGROUP BYconstante. #98458 (Alexey Milovidov). - Corrigida a exceção de erro lógico ao usar
CROSS JOINjunto comINNER JOIN USING. #98459 (Alexey Milovidov). - Corrige o desreferenciamento de ponteiro nulo em
dictGetOrDefaultquando o argumento de chave éNullable. #98460 (Alexey Milovidov). - Corrige uma exceção em consultas
DISTINCTao usar projeções agregadas quandomaterializecausa diferenças no tipoLowCardinalityentre a consulta e a projeção. #98462 (Alexey Milovidov). - Corrigida a exceção LOGICAL_ERROR ao usar
arrayJoinem uma expressão de filtro com OUTER JOIN ejoin_use_nullshabilitado. #98464 (Alexey Milovidov). - Corrigida a exceção de erro lógico “A réplica decidiu ler no modo WithOrder, e não em ReverseOrder” ao usar réplicas paralelas com
optimize_aggregation_in_order. #98467 (Alexey Milovidov). - Corrigido um problema em que o ClickHouse Keeper desconectava clientes Java do ZooKeeper após a solicitação
addWatch. O cliente Java espera um corpoErrorResponsede 4 bytes na resposta deaddWatch, mas o Keeper estava enviando um corpo vazio, causandoEOFExceptione desconexão da sessão. Isso quebrava oCuratorCachedo Apache Curator e qualquer aplicação Java que usasse watches persistentes. Corrige #98079. #98499 (Antonio Andelic). - Corrige as métricas do Keeper
zk_followersezk_synced_followers, que não diminuíam quando um follower ficava indisponível. Adiciona as novas métricaszk_learnersezk_synced_non_voting_followersao comando de quatro letrasmntr. Corrige #54173. #98504 (Antonio Andelic). - Corrige uma exceção
LOGICAL_ERRORemrenameAndCommitEmptyPartsque podia ocorrer quandoTRUNCATE TABLEera executado simultaneamente comOPTIMIZE TABLEcom transações MergeTree. #98508 (Alexey Milovidov). - Corrigida a porta segura de Raft do Keeper, que ignorava
cipherListedhParamsFileda configuraçãoopenSSL, usando sempre os valores padrão em vez dos especificados pelo usuário. Fecha #51188. #98509 (Antonio Andelic). - Corrigidas mensagens de log enganosas do Keeper, como “Receiving request for session X took 9963 ms”, em que o tempo informado na verdade era gasto ficando ocioso em
poll()entre heartbeats, e não na execução da operação em si. Corrige #79026. #98510 (Antonio Andelic). - Corrige um resultado inesperado com read_in_order_use_virtual_row e funções monotônicas, fecha #97837. #98514 (Vladimir Cherkasov).
- Corrige
LOGICAL_ERROR: Not-ready Set is passed as the second argument for function 'in'ao usarPREWHEREcom subconsultaINem tabelas MergeTree. #98522 (Alexey Milovidov). - Corrigidas conexões TCP do Keeper que impediam o desligamento adequado do servidor por não responderem ao sinal de encerramento. #98525 (Alexey Milovidov).
- Corrigida a exceção “A coluna de ordenação não foi encontrada nas saídas do ActionsDAG” quando
query_plan_convert_join_to_inestá habilitado comquery_plan_merge_expressions = 0. #98526 (Alexey Milovidov). - Corrige falha na fonte de dicionário do MongoDB ao usar coleções nomeadas. Fecha #97840. #98528 (Pablo Marcos).
- Corrigido LOGICAL_ERROR quando Identifier fica vazio após a substituição de parâmetros. #98530 (Pervakov Grigorii).
- Corrigido o deadlock do pipeline ao usar
sort_overflow_mode = 'break'em conjunto com funções de janela. #98543 (Alexey Milovidov). - Corrige o rollback de coluna no engine Buffer durante o tratamento de uma exceção ao acrescentar um novo bloco. A lógica anterior podia levar a um estado corrompido das colunas na memória. #98551 (Pavel Kruglov).
- Corrigida a exceção
Bad cast from type ColumnConst to ColumnDynamicna comparação null-safe (<=>/IS NOT DISTINCT FROM) com colunasDynamicouVariantconstantes eNULL. Também foi corrigido o problema em queIS DISTINCT FROMcomDynamic/VariantvsNULLsempre retornava 0 incorretamente. #98553 (Alexey Milovidov). - Corrigido o uso do índice de texto com outros skip indexes. Anteriormente, podiam ocorrer erros lógicos como “Trying to get non-existing mark” quando um filtro da consulta utilizava simultaneamente um índice de texto e outros skip indexes regulares. #98555 (Anton Popov).
- Corrige o erro lógico “TABLE_FUNCTION is not allowed in expression context” quando uma função de tabela com alias aparece várias vezes no mesmo escopo de consulta (por exemplo, nas cláusulas
PREWHEREeQUALIFY). #98557 (Alexey Milovidov). - Corrige a análise distribuída de índice com expressões (não apenas colunas) na PK (levava a nenhuma filtragem de grânulos redundantes em réplicas remotas). #98561 (Azat Khuzhin).
- Impedir a exclusão de uma coluna quando suas subcolunas forem usadas em expressões default/alias de outras colunas e usar o analisador para expressões default em ALTER DROP COLUMN. #98569 (Nikita Mikhaylov).
- Correção de novas tentativas incorretas de solicitações ao S3 em erros que não permitem retry (incluindo
HTTP_CONNECTION_LIMIT_REACHED) no cliente HTTP. #98598 (Sema Checherinda). - Corrige um overflow decimal na poda de partições com DateTime64. #98628 (Yarik Briukhovetskyi).
- Corrige dois bugs na compilação JIT de expressões: um erro de copia e cola na verificação de tipos de
nativeCastque tornava inacessíveis os caminhos de conversão de inteiro para inteiro e de float para float, e umnullptrincorreto deTargetMachinepassado ao LLVMPassBuilder, impedindo o registro de passes de otimização específicos do destino. #98660 (Alexey Milovidov). - Corrige uma falha no RBAC que permitia aos usuários executar
DESCRIBEem qualquer tabela por meio deremote(),remoteSecure(),cluster()ouclusterAllReplicas()apontadas para localhost, sem exigir o privilégioSHOW_COLUMNS. #98669 (pufit). - Corrige a exceção
BAD_GETe resultados incorretos em consultas quando uma expressão não booleana (por exemplo,sin(col)) é usada tanto em WHERE quanto em SELECT com um JOIN, devido à otimização de push-down de filtro corromper nós DAG compartilhados. #98681 (Alexey Milovidov). - Corrigido LOGICAL_ERROR “A réplica decidiu ler no modo Default em vez de WithOrder” ao usar
read_in_order_through_joincom réplicas paralelas. #98685 (Alexey Milovidov). - Corrigida a exceção “Bad cast from type
DB::TableFunctionNodetoDB::QueryNode” ao usar a função de tabelainputcomo argumento deremote. #98694 (Alexey Milovidov). - Corrige a ressurreição de partes de dados desatualizadas causada pela remoção incorreta de partes de cobertura vazias. #98698 (Shaohua Wang).
- Corrigida a exceção em
LogicalExpressionOptimizerPassquando uma função booleana em uma comparação comequalsretorna um tipoVariant. #98712 (Alexey Milovidov). - Corrige o
parseDateTimeBestEffort, que interpretava incorretamente palavras iniciadas com prefixos de meses/dias da semana. Fecha #97965. #98742 (Pavel Kruglov). - Corrige a exceção
UNKNOWN_IDENTIFIERao executar consulta com a table functionmerge()ou o engineMergeem tabelas com colunas JSON que têm parâmetros diferentes (por exemplo, camposSKIPdiferentes) e colunasALIASque referenciam subcaminhos JSON, com o novo analisador ativado. Fecha #97812. #98753 (Pavel Kruglov). - Corrigida a otimização
optimize_skip_unused_shardsno analisador quando o armazenamentoDistributedé usado em umaView. #98754 (Nikolai Kochetov). - Corrige o acesso por nome a subcolunas de tupla (por exemplo,
SELECT x.aparaTuple(a UUID, b Int32)) em tabelas externas passadas via--externalnoclickhouse-client. Fecha #96925. #98755 (Pavel Kruglov). - Corrige a exceção em
reverseUTF8com entrada UTF-8 inválida (truncada). #98770 (Alexey Milovidov). - Correção da detecção da utilidade do índice de salto Set com OR e predicado false (ou seja, or(x, 0)). #98776 (Azat Khuzhin).
- Corrige uma exceção
LOGICAL_ERROR(incompatibilidade na estrutura do bloco emremoveUnusedColumns) que podia ocorrer comFINAL+PREWHERE+ expressãoWHEREconstante + agregações que não dependem de coluna, comocount(). #98778 (Alexey Milovidov). - Garantir que as entradas de
system.trace_logpara os recarregamentos automáticos de Dictionaries do ClickHouse tenham IDs de consulta não vazios. #98784 (Miсhael Stetsyuk). - Corrige uma falha em que poderíamos desreferenciar um ponteiro nulo em tabelas do sistema criadas entre o momento em que tiramos um snapshot das tabelas na chamada
IDatabaseTablesIterator::table()e a alteração dessas tabelas em outra thread durante a iteração subsequente. #98792 (Grant Holly). - Corrigido o problema em que
SYSTEM START REPLICATED VIEWnão ativava a tarefa de atualização. #98797 (Pablo Marcos). - Corrige a exceção “Nomes de tabela inconsistentes” ao usar a função de tabela
view()que contém JOINs dentro de outro JOIN (apenas com o analyzer antigo). #98809 (Alexey Milovidov). - Correção no ajuste de RLIMIT_SIGPENDING (via pending_signals). #98829 (Azat Khuzhin).
- Correção de exceção ao combinar
loopcom funções de tabela de cluster. #98860 (Konstantin Bogdanov). - LEFT ANTI JOIN com múltiplas colunas de chave de junção retornou resultados incorretos quando
enable_join_runtime_filters=1(que é o padrão). #98871 (Alexander Gololobov). - Corrige
WITH FILL STALENESS, que produzia linhas preenchidas a mais quando os dados eram lidos em vários fragmentos (por exemplo, comindex_granularitypequeno). #98895 (Alexey Milovidov). - Corrigido o LOGICAL_ERROR “RPNBuilderFunctionTreeNode has A arguments, attempted to get argument at index B”. #98900 (Azat Khuzhin).
- Corrige o desvio no rastreamento de memória causado por alocações com falha que não eram desfeitas, comportamento indefinido de
nallocx(0)e erro de uma unidade no rastreamento global de pico. Estende o rastreamento para cobrir os buffers circulares doio_uring. #98915 (Antonio Andelic). - Proibir o attach a tabelas locais de lago de dados fora dos paths do usuário, e não apenas a criação delas. #98936 (Daniil Ivanik).
- Corrige uma condição de corrida que poderia causar uma exceção “ReadBuffer is canceled” em consultas que usam
urlClusterou funções de tabela de cluster similares. #98955 (Alexey Milovidov). - Corrigida a exceção
LOGICAL_ERRORem funções financeiras (financialNetPresentValue,financialInternalRateOfReturnetc.) quando são passados argumentos do tipoBFloat16. #98958 (Alexey Milovidov). - Corrige a não aplicação de índices de salto (e de condições da chave primária) a colunas ALIAS quando a mesclagem de expressões do plano de consulta está desabilitada (
query_plan_merge_expressions = 0ouquery_plan_enable_optimizations = 0). #98960 (Peng). - Incrementa o ProfileEvent
InsertQueryem inserções assíncronas. Fecha #98626. #98962 (Narasimha Pakeer). - Corrige a exceção “Comportamento inconsistente de KeyCondition” em builds 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 ordenação do ClickHouse. Fecha #98075. #98964 (Alexey Milovidov). - SummingMergeTree não soma mais colunas Bool (nem colunas de outros tipos de domínio). Os valores Bool são mantidos como estão, em vez de serem somados aritmeticamente. #98976 (Yash ).
- Corrige a exceção Scalar doesn’t exist que ocorria ao consultar um shard remoto com
optimize_const_name_sizedefinido eenable_scalar_subquery_optimization= 0. As constantes grandes substituídas por referências__getScalarna consulta remota não estavam sendo enviadas ao shard, o que fazia a consulta falhar. #98979 (andriibeee). - Corrige
NOT_FOUND_COLUMN_IN_BLOCKem algumas consultas comGROUP BYe expressões que incluem busca inversa em dicionário, comparações com conversão deDate/DateTimee comparações de tuplas. Fecha #98888. #98980 (Nihal Z. Miaji). - Corrigido comportamento indefinido (desreferenciamento de ponteiro nulo) ao alterar uma coluna version/sign/is_deleted para
EPHEMERALouALIASnos motores MergeTree. Essas alterações agora são corretamente rejeitadas. #98985 (Alexey Milovidov). - Corrigido um problema em que
system.grantsomitia, na colunaaccess_object, os parâmetros de expressão regular dos privilégiosURLeS3. #98987 (DQ). - Corrigidas as leituras do Iceberg BigLake: as credenciais ADC agora são repassadas ao cliente S3 do GCS (corrigindo erros 403), as credenciais OAuth2 são codificadas em URL antes do envio (corrigindo falhas de autenticação para tokens com caracteres especiais), e a travessia do namespace não é mais interrompida por respostas HTTP 400 do BigLake. #98998 (Nikita Fomichev).
- Corrigida a falha do
clickhouse-clientao mudar o fuso horário quando a variável de ambienteTZusa a sintaxe de caminho de arquivo do POSIX (por exemplo,TZ=:/etc/localtime). #99000 (Yash ). - Corrige a poda incorreta ou menos eficiente quando
startsWith,LIKEeNOT LIKEsão usados com a colunaFixedString. Além disso, a função de conversão deFixedStringparaStringagora pode podar grânulos quando aplicada à coluna de chave. Fecha #98940. #99001 (Nihal Z. Miaji). - Corrigido
windowFunnelcomstrict_deduplication, que retornava um nível incorreto quando um evento duplicado era encontrado. #99003 (Yash ). - Corrige um bug em que
EXISTSignorava as cláusulasLIMITeOFFSETem subconsultas, causando resultados incorretos quando a subconsulta não retornava nenhuma linha devido a um offset ou a um limite igual a zero. Fecha #88722. #99005 (andriibeee). - Corrigida a exceção “Incompatibilidade na estrutura do bloco” quando a otimização de push-down de filtro encontra uma expressão AND que é avaliada por curto-circuito como uma constante com
GROUPING SETS. #99010 (Alexey Milovidov). - Corrigida 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é a chave primária e do tipoString, agora usará corretamente o índice da chave primária para filtrar grânulos. #99027 (Shankar Iyer). - Correção da exceção
DEPENDENCIES_NOT_FOUNDno engine Kafka quando a visão materializada é desanexada enquanto a thread em segundo plano está transferindo dados. #99028 (Alexey Milovidov). - Corrigida a 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). - Corrige a mensagem enganosa “inflate failed: buffer error” ao ler arquivos compactados inexistentes por meio da função de tabela
url()com padrões glob. Agora retorna um resultado vazio, como esperado, quandohttp_skip_not_found_url_for_globsestá habilitado. #99034 (Alexey Milovidov). - Corrige um travamento do servidor (
std::terminate) ao executarALTER TABLE ... DROP PARTem uma patch part após uma alteração de esquema (por exemplo,ADD COLUMN). O travamento foi causado pela ausência de colunas de sistema (_part) nos metadados da parte de cobertura vazia, o que levou a uma exceção não capturada dentro de umNOEXCEPT_SCOPE. #99036 (Peng). - O processo do servidor ClickHouse poderia falhar se fosse lançada uma exceção por exceder o limite de memória durante uma leitura de disco em cache. Isso já foi corrigido. #99042 (Shankar Iyer).
- Corrige
LOGICAL_ERRORao consultar uma tabela que tem uma ROW POLICY e uma coluna ALIAS usandodictGet. O problema era causado pelo acesso prematuro à expressão da tabela durante a resolução da coluna ALIAS no novo analisador. #99065 (Peng). - Corrige erro de acesso fora dos limites quando o usuário tenta consultar apenas colunas virtuais de uma tabela Iceberg com dados em formato Avro. É um cenário super raro, então não o marcamos como crítico. Corrige #88238. #99080 (alesapin).
- Corrigido segfault em CTE recursiva com
remote()+view(). #99081 (Konstantin Bogdanov). - Ignora a análise extra desnecessária de índices quando a otimização de leitura em ordem é aplicada. #99084 (Vladimir Cherkasov).
- Corrigido um travamento causado por uma exceção de limite de memória gerada durante a aplicação de patch part. #99086 (Anton Popov).
- Corrige a asserção de depuração em
DDLWorker, causada porfirst_failed_task_namedesatualizado após a exclusão de uma entrada do ZooKeeper durante a recuperação após reinicialização. #99099 (Antonio Andelic). - Corrigida a reconstrução de índices de texto em mesclagens com TTL. #99107 (Anton Popov).
- Corrige falha na consulta
ALTER TABLE ... REMOVE SETTINGSao usar o mecanismo de tabela Iceberg. Corrige #86330. #99108 (alesapin). - Corrige um bug na otimização
query_plan_convert_any_join_to_semi_or_anti_join, que retornava um resultado incorreto para linhas sem correspondência. Relacionado: https://github.com/ClickHouse/ClickHouse/pull/95995. #99112 (Yarik Briukhovetskyi). - Corrigida a exceção LOGICAL_ERROR em
ASTColumnsExceptTransformer::transform. #99119 (Pablo Marcos). - Corrige um bypass de RBAC que permitia aos usuários obter a estrutura da tabela por meio de
DESCRIBE TABLEouCREATE TABLE ASem funções de tabela (mysql(),postgresql(),sqlite(),arrowFlight(),jdbc(),odbc(), etc.) sem os privilégios de acesso à origem exigidos. 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). - Corrige travamento do Keeper (segfault no NuRaft) durante a reconfiguração dinâmica e a transferência de liderança. #99133 (JIaQi Tang).
- Corrige falha ao usar tabela Buffer com SAMPLE quando o destino não é compatível com ele. #99141 (Kseniia Sumarokova).
- Corrige LOGICAL_ERROR causado por divergência na ordem das colunas nas partes de patch. #99164 (Pablo Marcos).
- Corrige um travamento muito raro quando a tabela Iceberg contém arquivos em formatos mistos (ORC e Parquet). Corrige #88126. #99168 (alesapin).
- Correção para
max_execution_timenão ser aplicado em backup/restauração. #99205 (Kseniia Sumarokova). - Correção de
insert_deduplication_token, que estava sendo ignorado silenciosamente em consultasINSERT SELECTsemORDER BY ALL. Anteriormente, a desduplicação era totalmente desativada paraINSERT SELECTsem ordenação, mesmo quando um token explícito fornecido pelo usuário era informado. Agora, fornecerinsert_deduplication_tokené suficiente para ativar a desduplicação independentemente deORDER BY ALL. #99206 (Desel72). - Corrige verificações excessivas de acesso durante a otimização
InverseDictionaryLookupPass, verificando o privilégioCREATE_TEMPORARY_TABLEuma única vez antes da etapa, em vez de em cada nó visitado. #99210 (Mikhail Artemenko). - Correção de
clickhouse format --obfuscate, que produzia SQL inválido ao ofuscar tipos de skip index, nomes de codecs de compressão, nomes de engines de banco de dados e definições de layout/source de dicionários. #99260 (Raúl Marín). - Corrigido um bug em que, em alguns casos, a comparação entre os tipos Time[64] e DateTime[64] ficava confusa; agora, em casos como esse, os valores de Time[64] são promovidos para DateTime[64] com a adição de
1970-01-01como parte da data. #99267 (Yarik Briukhovetskyi). - Limitar as restrições de configuração no worker de DDL para consultas de DDL distribuído. #99317 (Pablo Marcos).
- Corrige 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). - Corrige o erro lógico
unordered_map::at: key not foundno formato de saída Avro ao serializar colunasEnum8/Enum16com valores que não estão presentes na definição do enum. #99332 (Desel72). - Corrige o CHECK TABLE com serialização esparsa em Tuple com Dynamic. Fecha #96588. #99351 (Pavel Kruglov).
- Corrigida a validação rígida demais do pré-processador de índice de texto. #99359 (Anton Popov).
- Corrige problemas de 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).
- Removido o suporte a funções negadas (
notEquals,notLike,notIn) na análise de índice de texto. Essas funções nunca conseguiam pular nenhum grânulo, portanto sua análise no índice só adicionava sobrecarga, sem benefício algum. #99393 (Anton Popov). - Corrigido
optimize_skip_unused_shardscom um novo analisador para o caso em que uma tabelaDistributedera usada em uma subconsulta com IN. #99436 (Nikolai Kochetov). - Corrige heap-use-after-free em
INTERSECT/EXCEPTquando a consulta gera nomes de colunas duplicados. #99471 (Alexey Milovidov). - Corrige erro lógico em
ALTER TABLE ... DROP PARTquando um parâmetro de consulta tipado é usado como nome da parte. #99489 (Alexey Milovidov). - Corrigida a exceção
NOT_FOUND_COLUMN_IN_BLOCKquando um predicado de índice de texto (por exemplo,hasAllTokens) é referenciado tanto nas cláusulasSELECTquantoWHEREpor meio de um alias. #99504 (Anton Popov). - Corrige resultados incorretos ao usar
hasAllTokenscom OR em colunas que têm índices de texto separados. #99505 (Anton Popov). - Inicializa o cache de páginas no
clickhouse-localpara que a configuraçãopage_cache_max_sizetenha efeito. #99510 (Alexey Milovidov). - Corrigida uma ocorrência rara em que uma parte de dados era marcada incorretamente como corrompida e desanexada após a consulta
DETACH/ATTACH TABLE. #99529 (Anton Popov). - Corrige a exceção
std::length_errorao consultar tabelas de sistema vazias no formato Pretty pela interface HTTP. #99541 (Alexey Milovidov). - Corrige
LOGICAL_ERRORao usarALTER TABLE ADD COLUMNpara criar uma colunaEPHEMERALcom o mesmo nome de uma coluna virtual (por exemplo,_part_offset). #99549 (Alexey Milovidov). - Corrige um problema em que as entradas de
VectorSimilarityIndexCachenunca eram descartadas do cache após a remoção de uma parte, devido a chaves de cache incompatíveis. #99575 (Seva Potapov). - Proíbe a leitura de credenciais do Google a partir de um arquivo local. Essa configuração é insegura porque permite ler outras credenciais se o caminho do arquivo for conhecido. #99584 (Konstantin Vedernikov).
- Corrige a queda de desempenho no analisador. Remove colunas não utilizadas em ARRAY JOIN. #99587 (Dmitry Novik).
- Corrigida a leitura do índice de texto em uma tabela com exclusões leves e políticas de linha existentes. #99661 (Anton Popov).
- Corrige o desreferenciamento de
nullptrno leitor de Parquet quando o fluxofilter-in-decoderencontra páginas descartadas pelo filtro. Fecha #99676. #99677 (Alexey Milovidov). - Corrige o seek incorreto em AsynchronousReadBufferFromFileDescriptor com O_DIRECT. Fecha #99358. #99678 (Pavel Kruglov).
- Corrigido heap-buffer-overflow em
CompressionCodecT64e aborto do processo emCompressionCodecMultipleao descomprimir dados comprimidos malformados. Ambos os problemas foram encontrados por novos targets do libFuzzer. Os codecs agora lançam uma exceção em vez de provocar uma falha. #99680 (Rahul). - Adiar o processamento até que o servidor termine de carregar todas as tabelas. #99700 (Seva Potapov).
- Correção na fonte de dicionário MySQL que ignorava o
RemoteHostFilterpara parâmetros DDL inline. #99720 (Shaohua Wang). - Corrigido erro lógico ao iterar por tabelas de lago de dados em
system.tables. #99739 (Konstantin Vedernikov). - Corrigida a análise de predicados com a função
INem índice de texto com pré-processador. Corrigida a colisão de tokens buscados no índice de texto, o que poderia levar a resultados incorretos. #99755 (Anton Popov). - Corrigido loop infinito ao ler arquivos no formato
Npycom dimensões negativas em shape. #99812 (Desel72). - Corrigido o
global-buffer-overflowna funçãoCRC32com argumentosFixedStringquando avaliada com zero linhas durante o cálculo do cabeçalho do plano de consulta. #99835 (Alexey Milovidov). - Corrige falha (desreferenciamento de ponteiro nulo) ao executar
ALTER TABLE ... MODIFY COLUMN ... COMMENTem tabelas Iceberg. #99838 (Desel72). - Correção da configuração
aggregate_functions_null_for_emptypara funcionar com funções de agregação que retornam tipos não Nullable, comoArrayouMap(por exemplo,groupArray,sumMap). #99839 (Alexey Milovidov). - Corrigida a exceção LOGICAL_ERROR na função
midpointquando chamada com tipos inteiros mistos, com e sem sinal. #99867 (Alexey Milovidov). - Corrigir a exceção “Block structure mismatch” em consultas com cláusula HAVING nas quais a expressão de filtro contém tanto um agregado envolvido por uma função que produz NULL quanto
materialize(0). #99915 (Alexey Milovidov). - Corrige uma falha de asserção em
sipHash128Keyed(e em funções de hash com chave semelhantes) quando o argumento data é um map com chaves do tipo array ou outros tipos de array aninhados. #99921 (Alexey Milovidov). - Corrigida a exceção
LOGICAL_ERROR“Set não pronto” na funçãoINdurante a otimização do plano de consulta comconvertAnyJoinToSemiOrAntiJoin. #99939 (Alexey Milovidov).
melhoria em build, testes e empacotamento
- Reduz o tempo de compilação removendo inclusões pesadas de cabeçalhos e movendo instanciações de template custosas para fora dos cabeçalhos. #97893 (Raúl Marín).
- Reduz o tempo de compilação de funções aritméticas e dos cabeçalhos relacionados ao enxugar matrizes de despacho de template e remover inclusões pesadas. #98204 (Raúl Marín).
- Usa
mongo-c-driver2.2.2. #98304 (Konstantin Bogdanov). - Usa
postgresREL_18_3. #98306 (Konstantin Bogdanov). - Habilita o allocator jemalloc para builds UBSan, a fim de evitar o acúmulo de RSS causado pela recuperação ineficiente de memória do malloc da glibc. #98444 (Alexey Milovidov).
- Usa o symbol mangling v0 do Rust e remove símbolos internos da biblioteca PRQL para reduzir o inchaço nos nomes de símbolos causado por bibliotecas de combinadores de parser. #98446 (Alexey Milovidov).
- Adiciona o conjunto de benchmark TPC-H e o README do TPC-DS a
tests/benchmarks. #98495 (Raufs Dunamalijevs). - Adiciona testes de corretude para todas as 99 queries do TPC-DS. #99204 (Raufs Dunamalijevs).
- Adiciona um teste de integration que reproduz o bug de DDL CREATE TABLE + ALTER com réplica offline (#44070), marcado como falha esperada. #99259 (Raufs Dunamalijevs).
- Integra o jemalloc com o prefixo
je_e remove o uso de —wrap do linker. #99342 (Azat Khuzhin).
Lançamento do ClickHouse 26.2, 2026-02-26. Apresentação, Vídeo
alteração incompatível com versões anteriores
- A desduplicação fica ativada por padrão para todas as inserções. Antes, ela ficava desativada para
async insertse para MVs, mas ativada para inserções síncronas. O objetivo é ter os mesmos padrões para as duas formas de inserção. Se você tiver a desduplicação explicitamente desativada no seu cluster, precisará definir explicitamentededuplicate_insert='backward_compatible_choice'para manter o comportamento antigo. O mesmo vale paradeduplicate_blocks_in_dependent_materialized_views. #95970 (Sema Checherinda). - Formato de armazenamento das estatísticas aprimorado. Todas as estatísticas agora são armazenadas em um único arquivo. #93414 (Anton Popov). Se você não ativou explicitamente as estatísticas da tabela, pode ignorar este item.
- Limita os metadados em memória do S3(Azure)Queue. As tabelas do sistema foram renomeadas de
azure_queueparaazure_queue_metadata_cachee desystem.s3queueparas3queue_metadata_cache. #95809 (Kseniia Sumarokova). - Anteriormente, aplicar uma função a uma coluna
Variantretornava NULL silenciosamente quando um subtipo de variante era incompatível com a função; agora, isso gera uma exceção, o que pode quebrar consultas que dependiam desse comportamento silencioso com NULL. #95811 (Bharat Nallan). - As colunas
DATEdo PostgreSQL agora são inferidas comoDate32no ClickHouse (nas versões anteriores, eram inferidas comoDate, o que levava ao estouro de valores fora de uma faixa estreita). Permite inserir valoresDate32de volta no PostgreSQL. Fecha #73084. #95999 (Alexey Milovidov). - A semântica da configuração
do_not_merge_across_partitions_select_finalficou mais explícita. Antes, o recurso podia ser ativado automaticamente quando a configuração não era definida explicitamente nos arquivos de configuração. Isso causou confusão repetidas vezes e, infelizmente, levou a alguns problemas em produção. Agora, as regras são mais simples:do_not_merge_across_partitions_select_final=1ativa a funcionalidade incondicionalmente. Sedo_not_merge_across_partitions_select_final=0, o modo automático só é usado se a nova configuraçãoenable_automatic_decision_for_merging_across_partitions_for_final=1estiver ativada; caso contrário, não é usado. Para preservar o comportamento anterior tanto quanto possível, os valores padrão foram definidos comodo_not_merge_across_partitions_select_final=0eenable_automatic_decision_for_merging_across_partitions_for_final=1. #96110 (Nikita Taranov). - Ao criar uma tabela S3 com colunas explicitamente especificadas, o ClickHouse agora valida se esses nomes de coluna realmente existem no schema do arquivo remoto. Consultas que antes funcionavam com nomes de coluna incompatíveis agora falharão durante a criação da tabela. Isso corrige #96089. #96194 (Konstantin Vedernikov).
- Proibido o uso de subconsultas em ORDER BY e em outras expressões de chave de tabela. #96847 (Alexey Milovidov).
- Ative
apply_row_policy_after_finalpor padrão. Inicialmente, quandooptimize_move_to_prewhere_if_final=0, tanto ROW POLICY quanto PREWHERE respeitavam FINAL e eram aplicadas após FINAL. Isso foi afetado por #87303, que ignoravaoptimize_move_to_prewhere_if_finalpara o filtro de ROW POLICY. Para corrigir isso, este PR habilita a configuraçãoapply_row_policy_after_final, introduzida em #91065. Comapply_row_policy_after_finalhabilitada, ROW POLICY continua respeitando FINAL por padrão, como antes. Este PR introduz uma mudança incompatível, pois altera o comportamento deoptimize_move_to_prewhere_if_final=1. Agora, para que ROW POLICY seja aplicada antes de FINAL, deve-se usarapply_row_policy_after_finalem vez deoptimize_move_to_prewhere_if_final. #97279 (Nikolai Kochetov). - O tipo
Dateagora é serializado como o tipo nativodate32do Arrow nos formatos Arrow/ArrowStream, em vez deuint16. Ferramentas como o PyArrow agora reconhecerão corretamente a coluna como sendo do tipo data. O comportamento anterior pode ser restaurado com a configuraçãooutput_format_arrow_date_as_uint16. A leitura de arquivos Arrow antigos que usavamuint16para colunasDatecontinua sendo compatível. #96860 (Alexey Milovidov).
Novo recurso
- Agora, os usuários podem usar o ClickStack (uma UI de observabilidade) diretamente no ClickHouse, o que é útil para depuração e desenvolvimento local. #96597 (Aaron Knudtson).
- Suporte para senha de uso único baseada em tempo (TOTP) como método de autenticação. #71273 (Vladimir Cherkasov).
- Adicionada a configuração de banco de dados
lazy_load_tables. Quando habilitada, as tabelas não são carregadas durante a inicialização do banco de dados — em vez disso, é criado umStorageTableProxyleve, e o table engine real é materializado no primeiro acesso. #96283 (xiaohuanlin). - Foi adicionada a configuração
input_format_max_block_wait_mspara emitir blocos de dados ao atingir o timeout e permitir o processamento dos dados restantes quando uma conexão HTTP é encerrada inesperadamente. #94509 (Mostafa Mohamed Salah). - Integração com o catálogo do Google BigLake. Isso encerra #95339. #97104 (Konstantin Vedernikov).
- Foi adicionada a tabela de sistema
system.tokenizers, que mostra todos os tokenizadores disponíveis. #96753 (Robert Schulze). - Adiciona uma nova tabela de sistema
system.user_defined_functionspara monitorar o status de carregamento e a configuração de UDFs. #90340 (Xu Jia). - Adicionada a tabela
system.jemalloc_stats, que expõe estatísticas do alocador de memória jemalloc (viamalloc_stats_print) para diagnosticar o uso de memória em servidores compilados com jemalloc. Também foi adicionado o endpoint HTTP/jemalloc.htmlna interface HTTP do ClickHouse para visualização interativa dessas estatísticas. #97077 (Antonio Andelic). - Foi adicionada a tabela
system.jemalloc_profile_textpara ler e analisar perfis de heap do jemalloc. O formato de saída é controlado pela configuraçãojemalloc_profile_text_output_format(raw, symbolized ou collapsed; o padrão é collapsed). A resolução de frames inline é controlada porjemalloc_profile_text_symbolize_with_inline(quando ativado, frames inline são incluídos, ao custo de uma simbolização mais lenta; quando desativado, eles são ignorados para gerar saída mais rapidamente). Para o formato collapsed,jemalloc_profile_text_collapsed_use_countcontrola se as pilhas são ponderadas pela contagem de alocações ativas (true) ou pelos bytes ativos (false, padrão). Isso facilita o profiling de memória e a visualização de perfis de heap do jemalloc em flame graph. Corrige #93248. #97218 (Antonio Andelic). - Adiciona a configuração
default_dictionary_database, que permite ao ClickHouse resolver dicionários externos referenciados sem qualificador de banco de dados em um banco de dados padrão especificado. Isso simplifica a migração de dicionários globais definidos em XML para dicionários por banco de dados definidos em SQL, permitindo que consultas de dicionário existentes (por exemplo, dictGet(‘name’, …)) continuem funcionando sem alterações. #91412 (Dmitrii Plotnikov). - Adiciona suporte a ZooKeeper auxiliar para
DatabaseReplicated. #91683 (RinChanNOW). - Implementadas a nova função de tabela
primese a nova tabela de sistemasystem.primes, que contém números primos em ordem crescente. Fecha #90839. #92776 (Nihal Z. Miaji). - Async inserts oferecem suporte a quorum em paralelo. Os dados inseridos são replicados para o quorum. Se forem encontradas duplicatas, a consulta aguarda até que os dados inseridos anteriormente também sejam replicados. #93356 (Sema Checherinda).
- Adicionadas as funções
colorOKLABToSRGB,colorSRGBToOKLABpara converter valores de sRGB para OKLAB e vice-versa. #93361 (Pranav Tiwari). - Nova configuração
deduplicate_insert, que substituiinsert_deduplicateeasync_insert_deduplicate. #94413 (Sema Checherinda). - A configuração do servidor
insert_deduplication_versionpossibilita a migração para um hash de desduplicação unificado. #95409 (Sema Checherinda). - Adicionada a função de hash
xxh3_128. #96055 (Raúl Marín). - Adicionada a consulta
OPTIMIZE <table> DRY RUN PARTS <part names>para simular mesclagens sem gravar a parte resultante. Ela pode ser útil para fins de teste: verificar a correção da mesclagem na nova versão, reproduzir de forma determinística bugs relacionados a mesclagens e avaliar com confiabilidade o desempenho da mesclagem. #96122 (Anton Popov). - Adiciona uma nova verificação, ativada por padrão por meio da configuração
check_named_collection_dependencies, para evitar a remoção de named collections usadas por tabelas. #96181 (Pablo Marcos). - Adicionado
system.fail_pointspara inspecionar os failpoints existentes no servidor e verificar se estão habilitados ou não. Isso ajudará a automatizar os testes. #96762 (Pedro Ferreira). - Adiciona controle de acesso baseado em funções ao catálogo do Glue. Use as configurações
aws_role_arne, opcionalmente,aws_role_session_name. #90825 (Antonio Andelic). - Foi adicionada a configuração
add_minmax_index_for_temporal_columnsque, quando ativada, cria automaticamente índices minmax para todas as colunasDate,Date32,Time,Time64,DateTimeeDateTime64. #93355 (Michael Jarrett). - Suporte a aliases de tabela estendidos para junções (consultas como
SELECT * FROM (SELECT 1) AS t(a) JOIN (SELECT 1) AS u(b) ON a = b). Resolve #95131. #95331 (Yarik Briukhovetskyi). - Adicionado suporte a
ALTER TABLE RENAME COLUMNpara tabelas Iceberg. Anteriormente, apenasADD COLUMN, DROP COLUMN, and MODIFY COLUMNeram suportados. #97455 (murphy-4o).
Funcionalidade experimental
- O índice de texto agora está em disponibilidade geral. #96794 (Robert Schulze).
- O tipo de dado
QBit, para armazenamento vetorial quantizado com bits compactados (usado em busca aproximada de vizinhos mais próximos), agora está disponível de forma geral e não exige mais a ativação de uma configuração experimental. #95358 (Raufs Dunamalijevs). - A busca vetorial no ClickHouse agora pode usar réplicas no cluster para distribuir a carga e a pesquisa entre as partes do índice vetorial. Isso permite que o ClickHouse ofereça suporte a índices vetoriais grandes que excedem a capacidade de memória de uma única VM. #95876 (Shankar Iyer).
- Adicionado um AST fuzzer no lado do servidor, controlado pelas configurações
ast_fuzzer_runseast_fuzzer_any_query. Quando habilitado, o servidor executa mutações aleatórias de cada consulta após sua execução normal, descartando os resultados. #97568 (Alexey Milovidov). - Adicionada a função
iifao dialeto KQL experimental. #94790 (happyso). - A inferência de esquema agora respeita
allow_experimental_nullable_tuple_type. Quando habilitada, ela permite que tipos de tupla inferidos sejamNullable(Tuple(...)), para que objetos aninhados ausentes possam se tornarNULLem vez de uma tupla com elementosNULL. #95525 (Nihal Z. Miaji). - A configuração
use_statistics_cacheagora vem habilitada por padrão, de modo que as estatísticas de coluna sejam armazenadas em cache na memória para acelerar a otimização de consultas, sem a necessidade de recarregá-las de cada parte. #95950 (Han Fei).
Melhorias de desempenho
- Permite que qualquer expressão determinística na chave primária seja usada para skipping de dados (por exemplo,
ORDER BY cityHash64(user_id)/ORDER BY length(user_id)). Para expressões determinísticas, o ClickHouse pode aplicar a expressão às constantes da consulta e usar o resultado no índice da chave primária para predicados como=,INehas. Se a expressão também for injetiva (por exemplo,ORDER BY hex(p)ouORDER BY reverse(tuple(reverse(p), hex(p)))), podemos usar efetivamente o índice para as formas negadas:!=,NOT INeNOT has. Fecha #10685. Fecha #82161. #92952 (Nihal Z. Miaji). - Formato de armazenamento das estatísticas melhorado. Agora, todas as estatísticas são armazenadas em um único arquivo. #93414 (Anton Popov).
- Permite leitura paralela para motores de tabela/funções remotos no cache do sistema de arquivos. #71781 (Kseniia Sumarokova).
- Permite usar cache de páginas em espaço do usuário com arquivos locais e funções de tabela para armazenamento de objetos. #77874 (Michael Kolupaev).
- Evita memcpy desnecessário no cache de páginas em espaço de usuário. #77884 (Michael Kolupaev).
- O valor padrão de
concurrent_threads_scheduleragora émax_min_fairem vez defair_round_robin. Isso melhora a equidade sob alta carga ao priorizar consultas com menos slots alocados, para que consultas de curta duração não sejam prejudicadas por consultas de longa duração. #95300 (Sergei Trifonov). - Se uma consulta
FINALusava a condição da chave primária para filtrar, seguida por skip indexes para outras condições, a etapa de processamentoPrimaryKeyExpandagora verificará a interseção apenas dos intervalos inicialmente pré-selecionados da chave primária. #94903 (Shankar Iyer). - Ao usar réplicas paralelas com funções de tabela como
s3(...), as consultas com uma única subconsulta que encapsula a função de tabela agora são paralelizadas automaticamente entre as réplicas, enquanto antes apenas referências diretas à função de tabela eram paralelizadas. Fecha #92264. #96332 (phulv94). - Permite separar dados e arquivos do sistema em cache em segmentos distintos. #87834 (MikhailBurdukov).
- Aceleração de algumas operações de hash join com a implementação de dispatch dinâmico para
ColumnVector::replicate. #79573 (Raúl Marín). - Melhoria de desempenho do
hash joinparalelo em casos de predicados complexos. Antes, processávamos em uma única thread as linhas sem correspondência no join, o que não é ideal; a otimização consiste em paralelizar o processamento dessas linhas em várias threads. Pode ser controlado pela configuraçãoparallel_non_joined_rows_processing. Ativado por padrão. #92068 (Yarik Briukhovetskyi). - Pequena otimização no parsing do tipo JSON. #93614 (Pavel Kruglov).
- Melhora o consumo de memória da AST. A otimização faz sentido, pois os campos não são usados quando o realce não é utilizado e não há parsing de VALUES. #93974 (Ilya Yatsishin).
- Otimize o consumo de memória de objetos AST de Tuple nomeadas. Armazene os nomes das colunas como strings no objeto tuple, em vez de mantê-los em nós literais AST genéricos. #94704 (Ilya Yatsishin).
- A desvirtualização foi aprimorada com opções adicionais do linker. #94737 (Nikita Taranov).
- Melhora o desempenho da clonagem de réplicas de tabelas ReplicatedMergeTree com muitas partes ao agrupar solicitações ao ZooKeeper em lotes. #94847 (c-end).
- Quando a etapa de leitura já tinha filtros PREWHERE, não era possível adicionar outro filtro. Essa mudança adia a otimização de PREWHERE para depois da otimização de filtros de runtime de JOIN, para que os filtros de runtime também possam ser aplicados ao PREWHERE. #95838 (Alexander Gololobov).
- Acelera a compressão com o codec
T64usando despacho dinâmico em x86. #95881 (Raúl Marín). - Aceleração do
uniqpara tipos numéricos com inserções em lote, quando possível (sem NULL, sem -If, sem GROUP BY, sem IPv6 nem String). #95904 (Raúl Marín). - Otimizações de baixo nível para o Keeper: constatou-se que
ZooKeeper::observeOperationsé responsável por >20% do consumo de CPU da thread de recebimento do ZooKeeper. Esta alteração resolve isso da seguinte forma: 1. ParaAggregatedZooKeeperLog::stats, usaCityHash64em vez deSipHash, que é >10x mais rápido. 2. ParaCoordination::ErrorCounter, usastd::array<std::atomic<UInt32>, N>em vez destd::unordered_mapestd::mutex. #95962 (Miсhael Stetsyuk). - Removido o alinhamento de 64 bytes de ProfileEvents::Counter para economizar memória. #96097 (Azat Khuzhin).
- Otimização de memória: reduz o tamanho da estrutura
CachedOnDiskReadBufferFromFileem 50x. #96098 (Azat Khuzhin). - Não copie dados antigos no redimensionamento da tabela hash se ela estiver vazia. #96180 (Raúl Marín).
- Suporte a filtros de runtime de JOIN em junções
RIGHT OUTER. #96183 (Hechem Selmi). - A otimização
enable_join_runtime_filtersagora passa a ser o padrão. #89314 (Alexey Milovidov). - Anteriormente, a otimização de leitura direta do índice de texto era aplicada apenas quando todas as partes tinham um índice de texto materializado. Este PR adiciona suporte parcial: se algumas partes tiverem um índice de texto materializado, essas partes o usarão, enquanto as partes sem um índice de texto materializado voltarão a executar a expressão de filtro original. #96411 (Anton Popov).
- Adicionados índices secundários
minmaxpara colunas de tempo e índicesbloom_filterpara colunasquery_id/initial_query_idnas tabelas de log do sistema, para filtragem mais rápida. #96712 (Alexey Milovidov). - A otimização de materialização tardia agora é aplicada a todos os ramos de uma consulta
UNION ALL, não apenas ao primeiro. Consultas que combinam múltiplas leituras ordenadas e limitadas de diferentes tabelasMergeTreepor meio deUNION ALLagora se beneficiarão da leitura postergada de colunas em cada ramo, reduzindo a E/S. #96832 (Federico Ginosa). - Otimiza o cálculo do índice skip minmax durante o INSERT ao remover uma cópia desnecessária de dados e habilitar o cálculo vetorizado de mínimo/máximo para colunas numéricas. #97392 (Raúl Marín).
- O mecanismo de armazenamento
DeltaLakeagora usa o resultado decount()dos metadados do Delta Lake e exibe as estatísticas corretas da tabela em system.tables (total de bytes/linhas). #96190 (Kseniia Sumarokova). - As colunas não utilizadas também são removidas da etapa de leitura ao ler de uma MergeTree. Isso é especialmente útil quando um filtro é levado para
PREWHERE. #89982 (János Benjamin Antal). - Melhorado o processamento da consulta
SHOW TABLES, buscando apenas os nomes das tabelas, e aprimorado o getLightweightTablesIterator para retornar uma estrutura contendo apenas nomes de tabelas. Resolve #93835. #94467 (Smita Kulkarni). - Aprimora
assumeNotNull,coalesceeifNullpara permitir a poda pela chave primária e pelo skip index em predicados de intervalo quando as colunas-chave são encapsuladas nessas funções. Fecha #94689. #94754 (Nihal Z. Miaji). - Adiciona a extensão with_data & with_stat à solicitação getChildren do Keeper. Isso permite obter não apenas a lista de nós filhos, mas também seus
state/oudataem uma única operação. #94826 (Nikolay Degterinsky). - A análise de índice é realizada apenas uma vez (na maioria dos casos), independentemente de o plano executado ser local ou com réplicas paralelas. #94854 (Nikita Taranov).
- Permite habilitar a análise distribuída de índices com base na quantidade de partes (
distributed_index_analysis_min_parts_to_activate) e no tamanho dos índices (distributed_index_analysis_min_indexes_size_to_activate). #95216 (Azat Khuzhin). - Habilitada a otimização PREWHERE para tabelas Iceberg. #95476 (Konstantin Vedernikov).
- Reduz a pegada de memória de algumas classes de AST. #95514 (Raúl Marín).
- Limita o número de streams do pipeline gerados com
split_intersecting_parts_ranges_into_layershabilitado. Ajuda a evitar o consumo excessivo de memória. #96478 (Nikita Taranov). - Implementa a otimização de conjuntos equivalentes para múltiplas junções. Consultas com várias operações consecutivas de
INNER JOINagora se beneficiam de uma otimização aprimorada de pushdown de filtros. Quando tabelas são unidas por colunas equivalentes (por exemplo,t1 JOIN t2 ON t1.id = t2.id JOIN t3 ON t2.id = t3.id WHERE t1.id > 10), os filtros aplicados a qualquer tabela da cadeia são automaticamente propagados para todas as tabelas. Fecha #96550. #96596 (Vladimir Cherkasov). - Otimiza a varredura dos metadados do delta lake. Usa alterações do PR https://github.com/delta-io/delta-kernel-rs/pull/1827 do delta-kernel. #96686 (Kseniia Sumarokova).
- No banco de dados Replicated, não atualize o cluster armazenado em cache para cada consulta fictícia. #96897 (Tuan Pham Anh).
- Use o índice da chave primária ao filtrar com
startsWithUTF8se o prefixo contiver apenas caracteres ASCII. #97055 (vkcku).
Melhoria
- Adicionado rastreamento do OpenTelemetry para solicitações ao Keeper. #91332 (Miсhael Stetsyuk).
- Novas opções de configuração:
logger.startup_console_level&logger.shutdown_console_levelpara permitir substituir o nível de log do console durante a inicialização e o desligamento do ClickHouse, respectivamente. #95919 (Garrett Thomas). - Respeitar as sobreposições definidas na linha de comando ao recarregar a configuração. Fecha #80294. #80295 (Alexey Milovidov).
- Permitir sobrescrever parâmetros de coleção nomeada com pares chave-valor na função de tabela
mongodb. #89616 (vanchaklar). - A otimização de leitura em ordem para tabelas Iceberg agora funciona com funções de ordenação complexas, como
icebergBucketeicebergTruncate, não apenas com referências simples a colunas. #90256 (Konstantin Vedernikov). - Adiciona uma nova coluna chamada parts_postpone_reasons em system.mutations para melhorar o diagnóstico, que exibe os motivos do adiamento das partes. #92206 (Shaohua Wang).
- Acompanhe as alterações no número de linhas a serem lidas (devido a inserções/exclusões ou ao uso do cache de condições de consulta) em
DataflowStatisticsCache. #93636 (Nikita Taranov). - Suporte à consulta SYSTEM RESET DDL WORKER [ON CLUSTER]. Ela solicita a redefinição do estado do DDLWorker em sua thread principal. Isso é útil para atualizar a réplica ativa quando os IDs de host são atualizados. #93780 (Tuan Pham Anh).
- Adicionado suporte a
mutation_idsemsystem.part_logpara os tipos de eventoMUTATE_PARTeMUTATE_PART_START. #93811 (Shaohua Wang). - As operações em segundo plano (Mutate, Merge) agora podem ser configuradas independentemente por meio do perfil ‘background’. Antes, essas operações compartilhavam as mesmas configurações das consultas regulares por meio do perfil ‘default’. #93905 (Arsen Muk).
- Adicionadas mais informações ao
system.crash_log. #94112 #95857 (Miсhael Stetsyuk). - Foi adicionada a nova métrica
QueryNonInternalpara acompanhar o número de consultas não internas em execução. Essa métrica é exposta comoClickHouseMetrics_QueryNonInternale ajuda os operadores a monitorar a concorrência de consultas em relação ao limitemax_concurrent_queries, que se aplica apenas a consultas não internas. #94284 (Ashwath Singh). - Adiciona suporte à coleta de estatísticas de bytes de entrada para colunas em partes compactas no
RuntimeDataflowStatisticsCacheUpdater. #94626 (Nikita Taranov). - Adiciona uma verificação para detectar configuração incorreta do Keeper que causa falhas na formação do cluster. Fecha #60932. #94682 (Konstantin Bogdanov).
- Melhora na desserialização de prefixos JSON durante o carregamento de partes. #94848 (Pavel Kruglov).
- Refatora a gravação usando o pipeline completo de INSERT, que aciona visões materializadas na tabela de destino. #94890 (Kai Zhu).
- Use otimizações do plano de busca por similaridade vetorial apenas se houver um índice para a coluna pesquisada. #94998 (Eduard Karacharov).
- Verifique o limite total de memória antes da autenticação do usuário e gere
(total) memory limit exceededse o limite total exceder o permitido. #95003 (Nikolai Kochetov). - Adicionada a opção de configuração
throw_on_unmatched_row_policies, que, quando habilitada, lança uma exceção se um usuário consultar uma tabela que tenha políticas de linha, mas nenhuma delas se aplique a esse usuário — evitando o comportamento ambíguo de retornar todas as linhas devido a uma configuração incorreta de controle de acesso. #95014 (Vitaly Baranov). - Atualização dinâmica dos tokens de acesso do S3 em consultas longas com Unity Catalog. Isso fecha #93981. #95069 (Konstantin Vedernikov).
- Desative a redução gradual de páginas sujas do jemalloc se o ClickHouse estiver sob pressão de memória contínua por
memory_worker_decay_adjustment_period_msmilissegundos. Reative a redução gradual de páginas sujas do jemalloc se o ClickHouse estiver operando em condições normais pelo mesmo período. #95145 (Antonio Andelic). - Suporte auxiliar ao ZooKeeper no S3Queue usando a configuração
keeper_pathdo s3Queue. #95203 (Diego Nieto). - Respeitar
max_parts_to_merge_at_oncenas mesclagens de partes com descarte por TTL. #95315 (Kseniia Sumarokova). - Adiciona
connection_addresseconnection_portao query_log para refletir a conexão física (addresseportsão substituídos ao se conectar por meio de proxy e auth_use_forwarded_address=1). #95471 (Yakov Olkhovskiy). - Corrigida a contabilização incorreta de memória do cache de condições da consulta. O principal problema era que ela não levava em conta a chave de cache, composta por várias strings (como part_name, o ID da tabela e toda a condição SQL). #95478 (Nikita Mikhaylov).
- O servidor iniciado com a configuração embutida permitirá manipular usuários e privilégios, salvando-os no diretório
access, como na configuração padrão. Isso facilita os testes. Também foram habilitadas todas as melhorias de access_control_improvements na configuração embutida e no clickhouse-local. #95481 (Alexey Milovidov). - Mensagens de erro de autenticação do S3 foram aprimoradas para incluir uma dica para verificar as credenciais quando o acesso for negado. #95648 (Gerald Latkovic).
- Habilita o cache de estatísticas e define o período de atualização do cache para 300s. #95841 (Han Fei).
- Adiciona o nome do componente em
system.aggregated_zookeeper_log. #95882 (Antonio Andelic). - Ignorar leituras no armazenamento de objetos ao consultar tabelas
DeltaLakeemsystem.tables. #95899 (Antonio Andelic). - Habilita
enable_max_bytes_limit_for_min_age_to_force_mergepor padrão quando a configuraçãocompatibilityestá definida como26.2ou superior. #95917 (Christoph Wurm). - Delta Lake agora está disponível no macOS. Corrige #95979. #95985 (Alexey Milovidov).
- Nas versões anteriores, ao combinar expressões ALTER conflitantes com UPDATE e RENAME COLUMN, era lançado um erro lógico em vez de uma exceção apropriada. Fecha #70678. #96022 (Alexey Milovidov).
- Melhorada a saída de ajuda para todos os aplicativos do ClickHouse, e adicionada a opção —no-sudo, com algumas correções. Esta é uma continuação de #58244, de Ilya Yatsishin. #96025 (Alexey Milovidov).
- Adicionar o alias
distanceCosineparacosineDistance, porque todas as outras funções de distância já têm um alias nesse formato. #96065 (Raufs Dunamalijevs). - Adiciona suporte à extensão
with_datado Keeper para melhorar a obtenção de tabelas no Database Replicated. #96090 (Nikolay Degterinsky). - Atualizado o chdig para v26.2.1 (novos recursos e suporte a MacOS). #96113 (Azat Khuzhin).
- Melhoria no pushdown de filtro para
numberseprimes. O ClickHouse agora pode derivar limites de valor conservadores a partir de condiçõesWHEREquando não é possível derivar limites exatos, e restringir a geração da sequência de acordo com isso (por exemplo, paraWHERE number % 5 < 2 AND number > 100 AND number < 300, o ClickHouse gerará apenas números entre 100 e 300 e, em seguida, aplicará o predicado), evitando varreduras não limitadas. Fecha #84853. Fecha #93913. #96115 (Nihal Z. Miaji). - O formatador anteriormente colocava
SELECTentre parênteses quando uma cláusulaCOMMENTestava presente, para eliminar ambiguidades na análise sintática. Em vez disso,COMMENTagora é emitido antes deAS SELECT, o que elimina a ambiguidade sem usar parênteses. #96293 (Alexey Milovidov). - A opção de configuração
allow_impersonate_useragora fica na seçãoaccess_control_improvements, em vez de ser uma configuração autônoma do servidor. #96451 (Vitaly Baranov). - Permite recarregar a quente a configuração
core_dump.size_limit, evitando a necessidade de reiniciar servidores para que as alterações de configuração entrem em vigor. #96524 (Miсhael Stetsyuk). - Melhora a interoperabilidade dos profilers de CPU e em tempo real com os timeouts de socket. #96601 (Sergei Trifonov).
- Impede o reaparecimento de dados removidos se ADD COLUMN for executado rapidamente após a mutação DROP COLUMN. #96713 (Alexey Milovidov).
- Alterado o tipo de
function_idemsystem.instrumentationde LowCardinality(Int32) para Int32. #96726 (Copilot). - A espera síncrona por mutações passará a respeitar o cancelamento da consulta e os limites de tempo. #96756 (Alexey Milovidov).
- Adicionado o comando de sistema
SYSTEM RELOAD DELTA KERNEL TRACING <level>para permitir alterar o logging do delta-kernel, o que pode ser útil para depuração. #96763 (Kseniia Sumarokova). - A filtragem por família de endereços IP, isto é, as configurações
dns_allow_resolve_names_to_ipv4/ipv6, é aplicada mesmo que o cache de DNS esteja desabilitado. #96810 (c-end). - Melhorias na introspecção do jemalloc. #96840 (Azat Khuzhin).
- Corrige a interface web do
/play, que geravaQUERY_CACHE_USED_WITH_SYSTEM_TABLEao consultar tabelas de sistema. #96869 (Alexey Milovidov). - Melhoria na UI Web: alterar o favicon para indicar o estado de uma consulta em execução; exibir erros de consultas auxiliares (carregamento de bancos de dados e tabelas) em vez de ignorá-los silenciosamente. Fecha #85055. #96883 (Alexey Milovidov).
- Torne o painel esquerdo da UI
/playclicável para alternar a lista de bancos de dados. #96884 (Alexey Milovidov). DROP DATABASEagora remove as tabelas na ordem inversa das dependências, aumentando a segurança contra falhas quando o banco de dados contém tabelas com dependências de carregamento (por exemplo, tabelasDistributedque usamjoinGet). #97057 (Alexey Milovidov).- Atualize o yaml-cpp para impedir que YAML inválido seja ignorado. #97333 (Azat Khuzhin).
- Exibir um indicador de carregamento na barra lateral de
play.htmlenquanto as tabelas são carregadas. #97531 (Alexey Milovidov). - Adiciona um botão para copiar os resultados brutos da consulta para a área de transferência na UI web integrada (play.html). #97532 (Alexey Milovidov).
- Corrigido o ofuscador de consultas (
clickhouse-format --obfuscate) para gerar SQL analisável em mais casos. #97584 (Alexey Milovidov).
Correção de bug (comportamento incorreto perceptível ao usuário em uma versão estável oficial)
- Após ALTERs somente de metadados, como a extensão dos elementos de enums, a otimização da agregação com projeção pode acabar gerando uma exceção. #84143 (Alexey Milovidov).
- As visões materializadas agora usam como contexto de execução o banco de dados em que foram criadas, o que significa que: - é possível omitir a qualificação explícita do banco de dados nos nomes referenciados na consulta SELECT da visão - se nenhuma qualificação explícita de banco de dados for informada, será assumido o mesmo banco de dados em que a visão materializada foi criada. #88193 (Dmitry Kovalev).
- Corrige a substituição de parâmetros de consulta em métodos de autenticação de CREATE USER ao usar ON CLUSTER. Os parâmetros de consulta em métodos de autenticação (por exemplo, senha) não estavam sendo substituídos, causando erros UNKNOWN_QUERY_PARAMETER em nós remotos. #92777 (xiaohuanlin).
- Corrigidas inconsistências na análise do índice de texto para as funções
has,mapContainsKeyemapContainsValue. Antes, consultas que usavam essas funções podiam retornar resultados diferentes dependendo de a expressão ser avaliada com ou sem um índice de texto. #93578 (Anton Popov). - Corrigido travamento ao anexar uma tabela a um banco de dados
MaterializedPostgreSQLsedropReplicationSlotlançar uma exceção durante o desenrolamento da pilha. #96871 (Alexey Milovidov). - Backups podiam derrubar o servidor se você fizesse muitos backups concorrentes em conflito com os mesmos arquivos. #93659 (Alexey Milovidov).
- Corrige consultas com réplicas paralelas e JOIN em tabela não MT. Fecha #92056. #93902 (Igor Nikonov).
- Corrige um problema em que colunas do Iceberg com ponto no nome retornavam NULL como valor. #94335 (Mikhail Koviazin).
- Correção no tratamento de strings UTF8 em
stringJaccardIndexUTF8e melhoria de desempenho. #94613 (Joanna Hulboj). - Corrige possíveis estouros em
WITH FILL STALENESS(que podem levar a UB e/ou loops infinitos). Corrige possível loop infinito devido a saltos muito grandes. Adiciona suporte ao analisador antigo (principalmente para testes de estresse). #94663 (Azat Khuzhin). - Corrige possíveis travamentos de consultas distribuídas quando hostnames são resolvidos para vários endereços e uma réplica remota trava. #94726 (c-end).
- Corrige resultado inválido ao fazer join de múltiplas expressões de tabela, quando a expressão de tabela mais à esquerda é uma table function
-Cluster. Resolve #89996. #94748 (Konstantin Bogdanov). - Corrige a poda incorreta da chave primária e do índice de salto para predicados com
toWeek,toYearWeek,toStartOfWeek,toLastDayOfWeeketoDayOfWeek, e corrige exceções em algumas dessas funções em consultas válidas comLowCardinality(String). #94816 (Nihal Z. Miaji). - Removida a dispensa desnecessária da verificação de permissões em consultas
ATTACHpara uma view com SQL Security. Isso evita uma possível escalada de privilégios quando um usuário anexa uma view com definidor sem validar o acesso necessário. #94865 (pufit). - Corrige um travamento na inicialização do
ReplicatedMergeTreecausado pela remoção concorrente de diretóriosdelete_tmp_*. #94892 (myeongjun). - Corrigido o
INSERTem tabelas Iceberg com visões materializadas, que fazia com que informações de desduplicação fossem perdidas e causava uma exceção. #94938 (Daniil Ivanik). - Corrige um bug em que
SYSTEM DROP QUERY CACHE TAG 'TAGNAME' ON CLUSTER <CLUSTERNAME>removia todo o cache em todo o cluster. #94978 (Rory Crispin). - Preservar a granularidade constante do índice (use_const_adaptive_granularity) após mesclagens verticais (v2 com uma correção para Nested e, de modo geral). #95013 (Azat Khuzhin).
- Corrige uma condição de corrida no cache do sistema de arquivos na versão 26.1, após [ClickHouse/ClickHouse#82764](https://github.com/ClickHouse/ClickHouse/pull/82764). #95042 (Kseniia Sumarokova).
- Corrige o cancelamento da função de tabela
postgresql()com KILL QUERY e o cancelamento de consulta (Ctrl+C) no clickhouse-client. #95136 (Roman Vasin). - Corrigida a inferência de tipos para colunas qualificadas de tabelas de origem quando várias junções são usadas com a cláusula
USING. Anteriormente, junções subsequentes atualizavam incorretamente os tipos das colunas subjacentes da origem para um supertipo comum, mesmo quando a coluna não estava envolvida naquela junção (por exemplo, emSELECT t2.a FROM t1 LEFT JOIN t2 USING (a) LEFT JOIN t3 USING (a), a colunat2.aé usada apenas na primeira junção, portanto seu tipo deve ser o supertipo det1.aet2.a, excluindot3.a). Isso podia levar a erros lógicos ou falhas quando funções esperavam tipos de coluna diferentes dos que realmente apareciam no plano de execução. #95157 (Vladimir Cherkasov). - Fazer a transformação da coluna apenas uma vez ao obter o conteúdo da lista e dos arquivos .avro do manifesto. #95164 (Daniil Ivanik).
- Corrige o cálculo incorreto do tamanho de colunas JSON, que poderia levar a uso excessivo de memória ou a estatísticas de coluna incorretas. #95207 (Azat Khuzhin).
- Corrigida a contabilização incorreta de memória ao aplicar grandes partes de patch após atualizações leves. Anteriormente, a aplicação de patches grandes podia causar uso excessivo de memória e fazer com que o processo do servidor fosse encerrado pelo OOM killer. #95231 (Anton Popov).
- Corrige um comportamento indefinido que poderia causar resultados incorretos ou uma exceção quando uma consulta distribuída com
max_parallel_replicasvoltava para uma réplica local durante a análise de índices. #95263 (Azat Khuzhin). - Corrigida a agregação de colunas esparsas para
sume séries temporais quandogroup_by_overflow_modeestá definido comoany. #95301 (Mikhail Koviazin). - Corrige um problema de confiabilidade na política de disco
plain_rewritable, em que um erro de rede durante a remoção do vínculo de um arquivo de metadados poderia deixar o armazenamento em um estado inconsistente. #95302 (Mikhail Artemenko). - Date substituído por Date32 para Iceberg. #95322 (Konstantin Vedernikov).
- O argumento
passwordda função de tabelaredisagora será mascarado nos logs e nas tabelas de sistema (por exemplo:query_log). #95325 (János Benjamin Antal). - Corrige um bug em que tabelas podiam ser removidas ou alteradas enquanto uma consulta distribuída ainda estava em execução nelas, o que podia causar exceções ou resultados incorretos. #95356 (Azat Khuzhin).
- Corrige um erro lógico em alguns casos em que
LIMIT/OFFSETnegativo é usado em consultas distribuídas. #95357 (Nihal Z. Miaji). - Corrige um bug em que o clickhouse-client pedia a senha duas vezes ao se conectar via ssh. #95372 (Isak Ellmer).
- Corrige uma condição de corrida no mecanismo de armazenamento S3(Azure)Queue. #95385 (Kseniia Sumarokova).
- Corrigido o erro no filtro prewhere causado por expressões lambda em prewhere. #95395 (Xiaozhe Yu).
- Corrige
optimize_syntax_fuse_functionspara não reescreversum/count/avgemsumCount()quando o argumento da agregação éNullable. Fecha #95390. #95441 (Nihal Z. Miaji). - Evita possíveis falhas em consultas distribuídas em caso de cancelamento. #95466 (Aleksandr Musorin).
- Corrige a desduplicação no streaming do engine S3(Azure)Queue. #95467 (Kseniia Sumarokova).
- Corrige a atualização das políticas de linha atribuídas ao usuário inicial em consultas distribuídas. #95469 (Vitaly Baranov).
- Corrige a verificação de discos criptografados em plain_rewritable (corrige a possível ocorrência de
It is not possible to register multiple plain-rewritable disks with the same object storage prefix). #95470 (Azat Khuzhin). - A função de tabela
mergeTreeProjectionnão tinha uma verificação de acesso, o que permitia que usuários sem permissão SELECT em uma tabela (mas com permissões para funções de tabela) lessem dados de suas projeções. Esta correção adiciona a mesma verificação de acesso quemergeTreeIndexemergeTreeAnalyzeIndexesjá possuem. #95480 (Alexey Milovidov). - Corrige um possível erro lógico na leitura da subcoluna size de subcolunas dinâmicas dos tipos Dynamic/JSON. #95573 (Pavel Kruglov).
- Corrige uma regressão na replicação zero-copy (experimental), introduzida por #94262, em que partes compartilhadas podiam ser excluídas antes de outras réplicas terminarem de obtê-las. #95597 (filimonov).
- Corrige falha ao aplicar
tupleElementa arrays de JSON. Fecha #95581. #95647 (Pavel Kruglov). - Corrige uma exceção de erro lógico ao usar um matcher (
*) dentro de uma função lambda em uma cláusula VALUES de um JOIN com USING. Fecha #93675. #95661 (Vladimir Cherkasov). - Corrigido o erro lógico
There was an error: Cannot obtain error messageao aguardar um DDL distribuído e excluir simultaneamente o banco de dados Replicated. Corrige #95539. #95664 (Alexander Tokmakov). - Corrigida a função
IN, que retornava resultados incorretos com valoresNULLquandotransform_null_inestá habilitado. Fecha #65776. #95674 (Nihal Z. Miaji). - Trata corretamente os tipos LowCardinality Nullable em
CASTquando a configuraçãocast_keep_nullableestá habilitada. Fecha #95670. #95747 (Alexey Milovidov). - Corrige a compactação de dados particionados do Delta Lake. #95773 (Kseniia Sumarokova).
- Corrige condição de corrida na coluna Nullable de join em filtros de runtime. #95775 (Hechem Selmi).
- Corrige um possível erro lógico na consulta com matcher (
*,table.*) eanalyzer_compatibility_join_using_top_level_identifierquando a colunaUSINGtem tipos diferentes nas tabelas e na lista SELECT. Fecha #90477. #95808 (Vladimir Cherkasov). - Corrige falhas de segurança de memória em operações paralelas de thread pool (backups, agregação, consultas distribuídas) que poderiam causar exceções quando ocorria um erro durante o agendamento de tarefas. #95818 (Raúl Marín).
- Corrige uma falha no
DROP WORKLOADquando executado concorrentemente com consultas que usam o workload que está sendo removido. #95856 (Alexey Milovidov). - Corrige a lentidão ao consultar tabelas de sistema com um usuário que tem permissões limitadas em muitos bancos de dados. Fecha #89371. #95874 (pufit).
- Corrige a execução de tupleElement em JSON com caminhos aninhados; antes, isso podia levar a um resultado incorreto de consulta. #95907 (Pavel Kruglov).
- Foi corrigido um erro
NOT_SUPPORTEDque podia ocorrer ao usar o algoritmo de JOINdirectcom uma tabela MergeTree vazia. #95935 (Vladimir Cherkasov). - Corrigido o problema em que o cliente não sugeria nem autocompletava nomes de alias para configurações, fecha #92190. #95945 (phulv94).
- Corrigido o event_date em system.asynchronous_metric_log. #95947 (Raúl Marín).
- Corrigido o problema de ignorar paths no tipo de dado JSON. Antes, com
JSON(SKIP path), todas as chaves JSON com o prefixopatheram ignoradas, inclusive chaves como"pathpath", o que podia levar à perda de dados nesses paths durante a inserção. Agora, isso foi corrigido, e apenas a chave"path"é ignorada. #95948 (Pavel Kruglov). - Uma parte com projeções desconhecidas não deve ser marcada como perdida para sempre. #95952 (Mikhail Artemenko).
- Corrige o problema em que uma string vazia passa a ser
NULLem uma tabelaJoincom chaveNullable(String). Fecha #71414. #96002 (Alexey Milovidov). - Agora o mecanismo PostgreSQL pode ler corretamente
BOOLEAN[]. Fecha #72754. #96006 (Alexey Milovidov). - Corrige o formato
ProtobufListno caso de leitura de um arquivo vazio. Fecha #70059. #96007 (Alexey Milovidov). - Corrige o formato
ProtobufList, que gerava um registro fantasma em tabelas vazias. Fecha #72596. #96010 (Alexey Milovidov). - Corrigida a incompatibilidade de tipos na função
ifentreUInt64eInt32em um caso incomum de consultas distribuídas com PREWHERE e inferência de tipos. Fecha #70017. #96012 (Alexey Milovidov). - Corrigidas consultas compiladas com
JITque envolvem o tipoBool. #96013 (Alexey Milovidov). - Corrige erro lógico na leitura de uma coluna UUID a partir de uma coluna TEXT do SQLite. Fecha #71263. #96016 (Alexey Milovidov).
- Corrige a conversão de tipos na engine SQLite para
DateTime,Date,UUIDe outros tipos. Fecha #73481. #96017 (Alexey Milovidov). - Valores
FixedStringforam escapados incorretamente em consultas a bancos de dados externos, SQLite e PostgreSQL. Corrige #73519. Em coautoria com @jh0x. #96019 (Alexey Milovidov). - Corrige falha de asserção em WindowTransform com um offset PRECEDING grande. Fecha #75852. #96026 (Alexey Milovidov).
- Corrige um bug com possível corrupção de dados quando inserts assíncronos concorrentes usam os mesmos nomes de parâmetros, mas contêm valores diferentes. #96035 (Seva Potapov).
- Corrigido o período dos profilers globais (controlados por
global_profiler_real_time_period_nseglobal_profiler_cpu_time_period_ns). Em vez do valor configurado, era usado um valor truncado, fazendo com que o profiler fosse despertado mais vezes do que o previsto. #96048 (Antonio Andelic). - Anteriormente, se o arquivo de dados de referência no arquivo de manifesto do Iceberg para exclusão por posição estivesse presente em uma entrada, mas fosse NULL, não obtínhamos os limites corretos para os arquivos de dados correspondentes. Este PR corrige esse bug. #96061 (Daniil Ivanik).
- Corrigida a revogação de papéis padrão. #96103 (Vitaly Baranov).
- Corrige um use-after-free na análise de índice em uma combinação rara de
use_primary_keydesabilitado e um número muito grande de disjunções de condições que usam o índice. #96112 (Alexey Milovidov). - Corrige uma regressão no codec
Gorillaquando um tamanho especificado explicitamente não corresponde ao tamanho do tipo de dado e o buffer é pequeno demais. Em versões anteriores, isso gerava uma exceção durante a descompressão. Fecha #78253. #96118 (Alexey Milovidov). - Evita deadlock em dicionários carregados quando um dicionário faz referência a uma tabela Merge que, por sua vez, faz referência a ele recursivamente. Fecha #78360. #96120 (Alexey Milovidov).
- Corrige o uso de valor não inicializado em
formatDateTimecom especificadores de formato sem largura fixa, como os dos estilos MySQL e JODA. #96133 (Alexey Milovidov). - A combinação das configurações
use_const_adaptive_granularityeindex_granularity_bytes(o que significa “granularidade não adaptativa”) levou a um erro no cálculo do número de linhas a serem lidas e a uma exceção. #96143 (Alexey Milovidov). - Executar uma mutação ALTER UPDATE inválida em tabelas no armazenamento de objetos do tipo arquivo, como S3 e Azure, podia levar ao desreferenciamento de nullptr. Fecha #92994. #96162 (Alexey Milovidov).
- Corrigido
AccessRights::contains, que retornava resultados incorretos com revogações parciais. #96170 (pufit). - Corrige colisão de hash no cache de condições de consulta para constantes de CTE após constant folding, o que poderia levar a um resultado de consulta incorreto. Fecha #96060. #96172 (Alexey Milovidov).
- Corrige um possível deadlock em ProcessList. Isso pode acontecer devido a uma possível inversão de bloqueios se o rastreador de overcommit de memória for acionado enquanto adicionamos uma tarefa ao verificador de cancelamento. #96182 (Antonio Andelic).
- Corrigido um bug em que consultas envolvendo junções externas (LEFT, RIGHT ou FULL) combinadas com vários INNER JOINs podiam retornar resultados incorretos devido à reordenação inválida das junções. Quando a condição ON de uma junção externa fazia referência a colunas de várias tabelas já unidas anteriormente, o otimizador não levava em conta todas as dependências entre as tabelas e podia reordenar as junções de forma incorreta, resultando na omissão de linhas. Fecha #95972. #96193 (Vladimir Cherkasov).
- Quando uma tabela não tem estatísticas definidas, o ClickHouse não deve tentar carregá-las. Isso evita uma certa sobrecarga (mais de 100 ms) na verificação da existência dos arquivos de estatísticas. (issue #96068). #96233 (Han Fei).
- Corrige
optimize_syntax_fuse_functionspara não convertersum/count/avgemsumCount()quando o argumento de agregação éLowCardinality(Nullable). Fecha #95390. #96239 (Nihal Z. Miaji). - Corrigida a poda incorreta de partições para as funções
not INenot hasem alguns casos. #96241 (Nihal Z. Miaji). - Correção de
stack-use-after-scopeno índice de similaridade vetorial. #96259 (Alexey Milovidov). - Corrige o executor de testes, que não reconhecia comentários com dica de erro quando uma consulta era precedida por um comentário SQL. #96336 (Yakov Olkhovskiy).
- Corrige erro lógico em KeyCondition quando uma tabela tem chave primária Nullable e a consulta usa a função
coalesce, com o primeiro argumento constante. #96340 (Alexey Milovidov). - A interação de
GROUPING SETS,group_by_use_nullse o tipo de dadoTuplecomLowCardinalityem seu interior podia produzir uma estrutura de bloco inesperada no pipeline de consulta, levando a um erro lógico. Isso surgiu após a introdução deTuplesNullable. #96358 (Alexey Milovidov). - Era possível criar uma tabela com uma expressão vazia
()como índice, o que resultava em um acesso inválido à memória. #96363 (Alexey Milovidov). - Corrigido um travamento no analyzer antigo com JOIN e aliases duplicados. #96405 (Ilya Golshtein).
- Corrigido o erro
Nested columns sizes are inconsistent with local_discriminatorscausado por uma otimização incorreta de filtragem in-place para colunas Variant. #96410 (Alexey Milovidov). - Corrigido
CREATE TABLE ... CLONE AS ..., que ignorava o qualificador completo da tabela de origem. #96415 (Hasyimi Bahrudin). - Corrigido o cancelamento da função de tabela
mysqlcom KILL QUERY e com o cancelamento da consulta (Ctrl+C) no clickhouse-client. #96437 (Roman Vasin). - Corrige
livelockna thread de verificação de cancelamento para consultas com valores elevados demax_execution_time. #96450 (Sergei Trifonov). - Corrige um erro lógico que ocorre em alguns casos quando
LIMIT/OFFSETfracionário é usado em consultas distribuídas. #96475 (Nihal Z. Miaji). - Corrige o desreferenciamento de ponteiro nulo em certas expressões com funções lambda. #96479 (Alexey Milovidov).
- Corrige resultados incorretos quando colunas
LowCardinalitysão convertidas emNullable. #96483 (Nihal Z. Miaji). - Corrige um crash ao criar uma tabela Iceberg com uma cláusula
ORDER BYque faz referência a uma coluna inexistente ou usa um argumento posicional. Fecha #93280. #96484 (Konstantin Vedernikov). - Corrigida a exceção de filtro em tempo de execução para colunas Tuple com subcampos Nullable. #96509 (Alexey Milovidov).
- Corrigida a exceção
LOGICAL_ERRORno leitor nativo do Parquet V3 quando a coluna de filtroPREWHEREcontém valores UInt8 não booleanos. #96594 (Alexey Milovidov). - Corrige a regeneração implícita de índice em tabelas replicadas durante alterações de metadados. #96600 (Raúl Marín).
- Corrige uma condição de corrida em DROP WORKLOAD. #96614 (Sergei Trifonov).
- Corrige um bug nas gravações em tabelas Iceberg em que inserções particionadas podiam gerar uma distribuição incorreta dos dados entre os arquivos de partição. #96620 (Konstantin Vedernikov).
- Corrigido o
heap-use-after-freeemCREATE TABLEcom restrições. #96669 (Nikita Taranov). - Validar a versão witness em bech32 para evitar estouro de buffer. #96671 (Raúl Marín).
- Corrige erros retornados por
system.tablesquando um catálogo REST de lago de dados é criado com uma configuraçãoauth_headerinválida. #96680 (Han Fei). - Corrigido o problema em que
min(timestamp)retornava epoch (1970-01-01) via_minmax_count_projectionapós um merge de TTL, quando todas as linhas de um bloco eram filtradas. #96703 (Raquel Barbadillo). - Melhorada a validação da configuração
iceberg_metadata_file_pathpara evitar path traversal e garantir que o arquivo de metadados especificado esteja dentro do diretório da tabela. #96754 (Daniil Ivanik). - Corrige travamento em
ifNullcom argumentoVariantusado emGROUP BY. #96790 (Alexey Milovidov). - Corrigidas colisões nas chaves de cache entre tabelas com a configuração
table_disk=1. #96818 (Raufs Dunamalijevs). - Corrige a thread de limpeza do MemoryWorker que ficava travada devido a uma race condition. #96819 (Antonio Andelic).
- Não registre em logs dados contendo credenciais em catálogos Iceberg. #96831 (Konstantin Vedernikov).
- Corrige o código de saída do clickhouse-client após erro no servidor. #96841 (Vitaly Baranov).
- Consultas com CROSS JOINs e réplicas paralelas habilitadas podiam retornar um resultado incorreto. Corrige #74337. #96848 (Igor Nikonov).
- Corrigidas consultas
ALTER TABLE DROP COLUMNque falhavam quando uma atualização leve já havia sido executada anteriormente na mesma coluna. #96861 (Anton Popov). - Corrige estouro de pilha (travamento) ao criar backups em arquivo (
.zip,.tzst) em um disco de armazenamento de objetosplain_rewritable. #96872 (Alexey Milovidov). - Corrige o travamento do servidor quando o backup falha por falta de espaço em disco ou outros erros de E/S no sistema de arquivos de destino. #96873 (Alexey Milovidov).
- Corrige
EXCEPT ALLeINTERSECT ALL, que ignoravam a multiplicidade das linhas e se comportavam como suas versõesDISTINCT. #96876 (Alexey Milovidov). - Corrigida a exceção
std::terminateemindexOfAssumeSortedquando chamada com tipos incompatíveis (por exemplo, um arrayIPv4com um valor de busca inteiro). #96877 (Alexey Milovidov). - Corrige a exceção
Bad cast from type DB::ColumnNullable to DB::ColumnStringao usar funções de janela comgroup_by_use_nulls = 1e CUBE/ROLLUP/GROUPING SETS. #96878 (Alexey Milovidov). - Corrige resultados incorretos quando expressões compiladas com JIT convertem
DateTimeemDateTime64(por exemplo, emCASE/if/multiIfcom tiposDateTimemistos). O valor era reinterpretado em vez de ser dimensionado corretamente, gerando timestamps incorretos após a compilação da expressão entrar em ação. #96879 (Alexey Milovidov). - Corrigida a exceção de erro lógico em
CoalescingMergeTreequando uma expressão de índice de salto produz uma coluna constante (por exemplo,bloom_filteremifNotFinite(1, c0)para uma coluna inteira). #96880 (Alexey Milovidov). - Corrige o número de porta incorreto na mensagem de erro ao se conectar acidentalmente via HTTP à porta do protocolo nativo com TLS habilitado. #96881 (Alexey Milovidov).
- Corrige o fato de
SETTINGSpor subconsulta não ser aplicado a funções de tabela comofileem CTEs e subconsultas. #96882 (Alexey Milovidov). - Corrige vazamento de memória em objetos BIO ao ler certificados X509. #96885 (Alexey Milovidov).
- Corrige a exceção
LOGICAL_ERRORno analisador de consultas quando uma expressão lambda é passada em um contexto em que se espera um valor concreto (por exemplo, como argumento acumulador dearrayFold). #96892 (Alexey Milovidov). - Corrige a exceção
ColumnNullable is not compatible with originalao converter tipos aninhados complexos (Array de Nullable Tuple contendo Map com valores Nullable Enum). #96924 (Alexey Milovidov). - Corrige uma condição de corrida no carregamento paralelo do Dicionário
HASHEDcom shards, que ocasionalmente podia fazer com que algumas linhas não fossem carregadas. #96953 (Alexey Milovidov). - Corrige uma race condition entre
REPLACE PARTITIONe mutações em segundo plano que poderia fazer com que tanto os dados antigos quanto os novos permanecessem visíveis após a substituição. #96955 (Alexey Milovidov). - Correção na função
arrayJoin, que produzia linhas duplicadas quando usada com INNER JOIN e cláusula WHERE, causada pela otimização parcial de push-down de predicados, que empurrava incorretamente filtros contendoarrayJoinpara baixo de um JOIN. #96989 (Alexey Milovidov). - Corrige falha (SEGFAULT) em
clearCachescausada porBlockIO::operator=não moverquery_metadata_cache, o que levava à destruição prematura de snapshots de armazenamento em cache e ao uso do armazenamentoMergeTreeDataapós sua liberação. #96995 (Alexey Milovidov). - Correção de falha de asserção em
IfTransformStringsToEnumPassquando a funçãoifoutransformretornaNullable(String)(por exemplo, comGROUP BY ... WITH CUBEegroup_by_use_nulls = true). #97002 (Alexey Milovidov). - Corrige dados incorretos gravados durante
INSERT ... SELECTcomUNION ALLeJOIN, em que colunas constantes do tipo string podiam receber valores errados após a compactação de blocos. #97019 (Hasyimi Bahrudin). - Corrige a exceção
assert_cast(ou corrupção silenciosa de dados em builds de release) ao gerar estatísticas de coluna apósALTER TABLE MODIFY COLUMNalterar o tipo da coluna. #97027 (Alexey Milovidov). - Corrige leituras de memória não inicializada no Azure Blob Storage, no protocolo SSH e nas interfaces Arrow Flight. #97053 (Alexey Milovidov).
- Corrige casos em que índices afetavam o resultado de consultas com ROW POLICY/PREWHERE e FINAL. #97076 (Yarik Briukhovetskyi).
- Corrige a condição de corrida remanescente entre
REPLACE PARTITIONe mutações em segundo plano em tabelasMergeTree, que poderia fazer dados antigos reaparecerem. #97105 (Alexey Milovidov). - Corrige índices implícitos em colunas de alias e realiza a validação completa antes de criá-los. #97115 (Raúl Marín).
- Corrige um erro lógico em
FunctionVariantAdaptorem funções que exigem argumentos const, comoarrayROCAUC. #97116 (Bharat Nallan). - Corrige mutações travadas quando
PartCheckThreadrecoloca na fila umGET_PARTpara uma parte que já sofreu mutação, deixando entradas fantasma emparts_to_do. #97162 (Alexey Milovidov). - Corrige a estimativa do número de linhas no plano de consulta para subconsultas com
ORDER BY ... LIMIT, o que poderia levar o otimizador a escolher uma ordem de join subótima. #97193 (Alexander Gololobov). - Corrige a exceção
LOGICAL_ERRORemFunctionVariantAdaptorquando uma função que opera em colunas do tipo Variant retorna o tipoNothing, o que pode acontecer com arrays vazios em consultasUNION ALL. #97213 (Alexey Milovidov). - Corrige uma condição de corrida durante operações de cópia multipart no S3 (por exemplo, durante
BACKUP/RESTOREno S3) que poderia causar exceções em caso de acesso concorrente. #97227 (Azat Khuzhin). - Corrige a exceção
LOGICAL_ERRORquandoarrayJoinna cláusulaWHEREreferencia colunas de ambos os lados de umJOIN. #97239 (Alexey Milovidov). - Correção da exceção
LOGICAL_ERRORao ler a subcoluna.sizede umNullable(String)esparso em umTuplecom PREWHERE. #97264 (Alexey Milovidov). - Corrige a exceção “O número de linhas no fragmento lazy não corresponde ao número de offsets” em
LazyMaterializingTransformao ler tabelas com granularidade de índice não adaptativa (index_granularity_bytes = 0) usandoORDER BY ... LIMIT. #97270 (Alexey Milovidov). - Corrige o
SYSTEM RESTART REPLICA, que fazia a tabela desaparecer do banco de dados quando a recriação da tabela falhava com uma exceção não relacionada ao ZooKeeper (por exemplo, limite de memória), causando divergências no hash dos metadados emDatabaseReplicated. #97276 (Alexey Milovidov). - O campo
readonlyemsystem.merge_tree_settingsagora reflete corretamente que certas configurações de MergeTree (por exemplo,index_granularity) são sempre somente leitura. #97277 (Robert Schulze). - Corrige uma falha durante a otimização de
count()em tabelasMergeTreequando o snapshot do armazenamento foi criado sem dados. #97281 (Pablo Marcos). - Corrige uma possível falha ao resolver nomes de função com base em informações de depuração para stack traces. #97294 (Azat Khuzhin).
- Corrige erro lógico em analyzer_compatibility_join_using_top_level_identifier e nas colunas ALIAS. Fecha #96228. #97297 (Vladimir Cherkasov).
- Corrigida a exceção
LOGICAL_ERRORemapplyOrderao usar colunas indexadas por texto com a cláusulaQUALIFY. #97313 (Alexey Milovidov). - A tabela de sistema
system.functionsagora exibecategories = 'Internal'para funções internas, em vez decategories = ''. #97315 (Robert Schulze). - Consulta com sequência de RIGHT JOIN e réplicas paralelas habilitadas pode produzir resultado incorreto. Corrige #74341. #97316 (Igor Nikonov).
- Corrige erros espúrios de
TABLE_UUID_MISMATCHque podiam ocorrer com views materializadas atualizáveis e em outros cenários em que tabelas são renomeadas. #97323 (Azat Khuzhin). - Corrigido segfault no backup de
StorageKeeperMapdevido a uso após liberação de um ponteiro de armazenamento inválido em um lote lazy de backup. #97336 (Alexey Milovidov). - Corrige a função
existscom uma subconsulta escalar dentro de umALTER UPDATE/DELETEquandomutations_execute_subqueries_on_initiatorestá habilitado. A subconsulta escalar era avaliada incorretamente, o que podia levar a um erro ou a um comando de mutação corrompido que impedia o carregamento da tabela na próxima reinicialização do servidor. #97347 (Kirill Kopnev). - Corrige a exceção lógica
Unexpected return type from equals. Expected Nullable(UInt8). Got Const(LowCardinality(Nullable(UInt8)))ao comparar NULL com uma coluna do tipo Variant que contém tipos LowCardinality. #97379 (Alexey Milovidov). - Corrige uma possível condição de corrida quando
EXCHANGE TABLESé executado em paralelo com o cache de consultas distribuído por shards habilitado. #97411 (Konstantin Vedernikov). - Corrige a exceção
LOGICAL_ERRORna conversão de Array paraQBitquandonullable_sourcede um wrapperTupleexterno substitui a coluna de array convertida por uma coluna com tipo incompatível. Fecha #97389. #97413 (Alexey Milovidov). - Corrige a inconsistência no round-trip da formatação de AST para literais de tupla com alias entre parênteses; por exemplo,
(('a', 'b') AS x)era reformatado incorretamente comotuple(('a', 'b') AS x). #97418 (Alexey Milovidov). - Corrige uma exceção durante inserções assíncronas com desduplicação quando uma falha de parsing resultava em um bloco vazio, com zero linhas. #97460 (Sema Checherinda).
- Corrige a exceção “O número de linhas no fragmento lazy não corresponde ao número de offsets” em
LazyMaterializingTransformao ler tabelas com granularidade de índice não adaptativa (index_granularity_bytes = 0) usandoORDER BY ... LIMIT. #97482 (Alexey Milovidov). - Corrige as configurações de inserção no Iceberg. Adiciona um alias para a configuração
allow_experimental_insert_into_iceberg. #97483 (Konstantin Vedernikov). - Corrige
ACCESS_DENIEDpara usuários sem a permissãoCREATE TEMPORARY TABLEquando a otimizaçãooptimize_inverse_dictionary_lookupreescreve os predicadosdictGet(...). O ClickHouse agora ignora essa reescrita e executa a expressão original. Fecha #97269. #97484 (Nihal Z. Miaji). - Corrigida falha de asserção (exceção em builds de depuração/com sanitizer) em
SeteMergeTreeIndexSetao processar colunas com subcolunas esparsas internas (por exemplo, colunasTuplede partes do MergeTree com perfis diferentes de serialização esparsa). #97493 (Alexey Milovidov). - Corrige um possível use-after-free no StorageKafka2. #97520 (Bharat Nallan).
- Correção de
INTO OUTFILEcomTRUNCATEe a configuraçãointo_outfile_create_parent_directoriesquando o caminho de saída contém diretórios. #97549 (Alexey Milovidov). - Corrigido o erro
BAD_ARGUMENTSao consultar tabelas com expressões lambda em colunas ALIAS por meio da função de tabelamerge()com o analisador habilitado. #97551 (Alexey Milovidov). - Corrigida a exceção em
system.zookeeper_infoquando o zxid do Keeper é 0. #97553 (Alexey Milovidov). - Corrigido um possível erro lógico no Dicionário
ip_triequando o tipo da chave não é String. #97555 (Bharat Nallan). - Corrige a falha na autenticação OAuth do REST catalog para o
RestCatalogbase (ela só funcionava em catálogos derivados, comoOneLakeCatalog). Isso quebrou o REST catalog padrão após a introdução do catálogo BigLake. #97561 (Konstantin Vedernikov). - As funções de geometria (
perimeterSpherical,areaSphericaletc.) agora aceitam subtipos individuais de geometria (Polygon,Ring,Pointetc.), além do tipo VariantGeometry. #97571 (Alexey Milovidov). - Corrige a exceção
LOGICAL_ERRORao usarisNull/isNotNullem subcolunas de tiposNullable(Tuple(... Nullable(T) ...)). Fecha #97224. #97582 (Alexey Milovidov). - Corrigida a desreferenciação de ponteiro nulo ao aplicar patch parts durante atualizações leves. #97583 (Alexey Milovidov).
BaseSettings::readBinarypassa o índice deaccessor.findparafield_infos[]sem verificar o valor sentinela que indica “não encontrado” (isto é,-1), o que pode causar um acesso fora dos limites destd::vector. O problema foi detectado graças ao hardening do libcxx. Isso provavelmente ocorreu durante a desserialização do plano de consulta, quando um servidor mais novo envia uma configuração desconhecida para um servidor mais antigo. O método de leitura baseado em string já trata isso corretamente; emreadBinary, faltava a mesma verificação. #97585 (Miсhael Stetsyuk).- Corrige resultados incorretos em consultas
UNION ALLem que um dos ramos tinha um predicado sempre falso — esse ramo lia dados indevidamente em vez de não retornar nada. #97620 (Bharat Nallan). - Corrige a falha em
IN (col)com uma única referência de coluna, que resultava no erroUNSUPPORTED_METHOD. #97646 (Alexey Milovidov). - Corrige a exceção de erro lógico em
GROUP BY ... WITH ROLLUP/CUBEquando as chaves incluemLowCardinality(Nullable(...))dentro deNullable(Tuple(...)). #97647 (Alexey Milovidov). - Corrige a inconsistência na formatação da AST para
NOT (1, 1, 1), que poderia causarLOGICAL_ERRORem compilações de depuração. #97653 (Alexey Milovidov). - Corrige a exceção de
keeper-converterao encontrar arquivos vazios de log de transações do ZooKeeper. #97673 (Alexey Milovidov).
melhorias em build, testes e empacotamento
- O ClickHouse agora pode ser compilado com clang-23 (master). #95578 (Alexey Milovidov).
- Corrige a definição forçada de
is_localcomo false quandobind_hostestá configurado e a substitui por um teste de integração. Complemento de #74741. #93109 #96018 (Zhigao Hong). - Testes de estresse: corrigir os testes de estresse e de upgrade na CI. ignorar as tags
no-{build}. adicionar randomização para compatibilidade. #94693 (Nikita Fomichev). - Disponibilizar o binário parser_memory_profiler a partir da build. A ferramenta pode ser usada para analisar o consumo de memória da AST. #95826 (Ilya Yatsishin).
- Adicionada a flag
--symbolizeà ferramentaparser_memory_profiler, que gera arquivos.heap.symcom os símbolos resolvidos nos resultados. #96477 (Ilya Yatsishin). - Fixar imagens Docker de terceiros em versões específicas nos testes de integração. #96500 (Alexey Milovidov).
- Restaura a possibilidade de fazer a vinculação dinâmica do
OpenSSL. Isso não é recomendado e não é usado em nenhum build de produção, mas a opção ainda existe para os entusiastas da Internet. #96506 (Govind R Nair). - Redução do intervalo do
magic_enumde [-100, 1000] para o padrão [-128, 127] com o uso de uma especialização por tipo paraCoordination::OpNum, melhorando o tempo de compilação. #96632 (Alexey Milovidov). - Removidos templates C++ desnecessários das classes Function para reduzir o tempo de compilação. #96646 (Alexey Milovidov).
- Mover a geração de
StorageSystemLicensespara a etapa de configuração, a fim de melhorar o paralelismo da compilação. #96697 (Alexey Milovidov). - Verificação de licenças em paralelo. #96727 (Raúl Marín).
- Adicionar teste funcional sem estado para dar suporte ao protocolo SSH. #96996 (Alexey Milovidov).
- Adiciona o Kafka 3.9.0 à infraestrutura de testes funcionais stateless, permitindo testar diretamente os motores de tabela Kafka e Kafka2 usando o ClickHouse Keeper como ZooKeeper. Seis novos testes stateless cobrem operações básicas de produção/consumo, colunas virtuais, INSERT, múltiplos formatos, tratamento de mensagens corrompidas e armazenamento de offsets com base no Keeper. #96997 (Alexey Milovidov).
- Adiciona um workflow de CI para compilar uma toolchain clang otimizada com PGO+BOLT. #96991 (Alexey Milovidov).
- Use a build do LLVM/Clang otimizada com PGO no CI, o que deve gerar um ganho de 20..30% na velocidade de compilação. #97031 (Alexey Milovidov).
- Substituídas as funções matemáticas da glibc por implementações do llvm-libc. #90151 (Konstantin Bogdanov).
- Atualização do Boost da versão 1.83 para 1.90, corrigindo uma falha de asserção no
devectorem builds de depuração. #97037 (Alexey Milovidov). - Atualizado
postgrespara REL_18_1. #95189 (Konstantin Bogdanov). - Passa a usar
libexpat2.7.3. #95218 (Konstantin Bogdanov). - Use
OpenSSL3.5.5. #95345 (Konstantin Bogdanov). - Use
simdjsonv4.2.4. #97129 (Konstantin Bogdanov). - Usa
libarchive3.8.5. #97131 (Konstantin Bogdanov). - Use
fast_floatv8.2.3. #97133 (Konstantin Bogdanov). - Use
abseil-cpp20260107.1 es2geometryv0.13.1. #97134 (Konstantin Bogdanov). - Atualiza
libxml2para 2.15.1. #95574 (Robert Schulze). - Atualizadas 7 imagens Docker de teste de integração Tier-3, de imagens base EOL ou removidas para versões atualmente suportadas. #97314 (Rahul).
- Adiciona consultas do benchmark TPC-DS. #97349 (Raufs Dunamalijevs).
- Substitua as opções individuais do CMake para conjuntos de instruções x86 (
ENABLE_SSSE3,ENABLE_AVX2,NO_SSE3_OR_HIGHER,ARCH_NATIVEetc.) por uma única opção numéricaX86_ARCH_LEVEL(1/2/3/4), alinhada aos níveis padrão de microarquitetura x86-64 já usados pelo sistema de despacho em tempo de execução. #97354 (Raúl Marín). - Evita a instanciação de variantes de template
division_by_nullable=truepara operações que não envolvem divisão emFunctionBinaryArithmetic, reduzindo o tempo de compilação e o tamanho do binário. #97496 (Raúl Marín). - Reduza o volume de inclusões de
Exception.hremovendo-o de cabeçalhos amplamente referenciados, comotypeid_cast.h,assert_cast.h,Context_fwd.h,IDataType.he vários cabeçalhos de Column. #97497 (Raúl Marín). - Sempre use os cabeçalhos integrados do
compiler-rt(interfaces do sanitizer e do XRay) em vez dos cabeçalhos do compilador do host e, por padrão, compile as bibliotecascompiler-rta partir do código-fonte. #97499 (Raúl Marín). - Evita incluir os headers boost/multiprecision em
wide_integer_impl.hem plataformas com suporte adequado along double, melhorando o tempo de compilação. #96633 (Alexey Milovidov). - Implementar o job de cobertura de código com LLVM e habilitá-lo inicialmente para a branch master. #90952 (Alexey Bakharew).
- Habilita o hardening rápido do libcxx para builds de release. Isso é necessário principalmente para verificações de acesso fora dos limites. Dados os resultados dos testes de desempenho, não se espera impacto perceptível no desempenho. #94757 (Miсhael Stetsyuk).
Lançamento do ClickHouse 26.1, 2026-01-29. Apresentação, Vídeo
alteração incompatível com versões anteriores
- Corrige a formatação inconsistente causada por uma substituição incorreta de aliases no formatador. Fecha #82833. Fecha #82832. Fecha #68296. Esta alteração pode ser incompatível com versões anteriores: quando o analisador está desabilitado, determinadas consultas CREATE VIEW em que IN referencia um alias não podem ser processadas. Para evitar essa incompatibilidade, habilite o analisador (ele está habilitado por padrão desde a versão 24.3). #82838 (Alexey Milovidov).
- Os codecs
DEFLATE_QPLeZSTD_QATforam removidos. Recomenda-se que os usuários convertam os dados existentes compactados comDEFLATE_QPLouZSTD_QATpara outro codec antes da atualização. Observe que, para usar esses codecs, era necessário habilitar as configuraçõesenable_deflate_qpl_codeceenable_zstd_qat_codec. #92150 (Robert Schulze). - Melhoramos a depuração de UDF ao habilitar a captura de stderr em
system.query_log.exception. Antes, o stderr de UDF era registrado apenas em arquivos e não aparecia nos logs de consulta, o que tornava a depuração impossível. Agora, por padrão, o stderr dispara exceções e é acumulado por completo (até 1 MB) antes de ser gerado, para que tracebacks completos do Python e mensagens de erro apareçam emsystem.query_log.exception, facilitando a solução de problemas. #92209 (Xu Jia). - A lista vazia de colunas na cláusula
JOIN USING ()agora é considerada um erro de sintaxe. Antes, deveria resultar emINVALID_JOIN_ON_EXPRESSIONdurante a execução da consulta. Em alguns casos, como ao fazer join com o armazenamentoJoin, isso levava aLOGICAL_ERROR, corrigindo #82502. #92371 (Vladimir Cherkasov). - Passa a usar correspondência parcial para
SKIP REGEXPno tipo JSON por padrão. Fecha #79250. #92847 (Pavel Kruglov). - Revertida a alteração “Permitir INSERT em colunas ALIAS simples” (reverte ClickHouse/ClickHouse#84154). Ela não funciona com formatos personalizados e não é protegida por uma configuração. #92849 (Azat Khuzhin).
- Configuração para gerar erro caso um catálogo de lago de dados não tenha acesso ao armazenamento de objetos. #93606 (Konstantin Vedernikov).
- O engine de banco de dados
Lazyfoi removido e não está mais disponível. Fecha #91231. #93627 (Alexey Milovidov). - Remova o modo
transposed_with_wide_viewdemetric_log— ele não pode ser usado devido a um bug. Não é mais possível definirsystem.metric_logcom esse modo. Isso reverte parcialmente #78412. #93867 (Alexey Milovidov). - O agendamento de CPU para workloads agora é preemptivo por padrão. Consulte a configuração de servidor
cpu_slot_preemption. #94060 (Sergei Trifonov). - Escapar os nomes dos arquivos de índice para evitar partes corrompidas. Com essa mudança, o ClickHouse não conseguirá carregar índices com caracteres não ASCII no nome criados por versões anteriores. Para lidar com isso, você pode usar a configuração do MergeTree
escape_index_filenames. #94079 (Raúl Marín). - As configurações de formato
exact_rows_before_limit,rows_before_aggregation,cross_to_inner_join_rewrite,regexp_dict_allow_hyperscan,regexp_dict_flag_case_insensitive,regexp_dict_flag_dotalledictionary_use_async_executorforam alteradas e agora são configurações regulares (não de formato). Esta é uma mudança puramente interna, sem efeitos visíveis para o usuário, exceto no caso (improvável) de você ter especificado alguma dessas configurações em definições de table engine Iceberg ou DeltaLake ou Kafka ou S3 ou S3Queue ou Azure ou Hive ou RabbitMQ ou Set ou FileLog ou NATS. Nesses casos, essas configurações antes eram ignoradas; agora, essas definições geram um erro. #94106 (Robert Schulze). - As funções
joinGet/joinGetOrNullagora exigem privilégiosSELECTna tabela Join subjacente. Após essa alteração, executarjoinGet('db.table', 'column', key)exige que o usuário tenha o privilégioSELECTtanto nas colunas de chave definidas na tabela Join quanto na coluna de atributo que está sendo recuperada. Consultas sem esses privilégios falharão comACCESS_DENIED. Para migrar, conceda as permissões necessárias usandoGRANT SELECT ON db.join_table TO userpara acesso à tabela inteira, ouGRANT SELECT(key_col, attr_col) ON db.join_table TO userpara acesso no nível de coluna. Essa alteração afeta todos os usuários e aplicativos que dependem dejoinGet/joinGetOrNulle para os quais concessões explícitas deSELECTnão haviam sido configuradas anteriormente. #94307 (Vladimir Cherkasov). - Verifica
SHOW COLUMNSem consultasCREATE TABLE ... AS .... Anteriormente, verificavaSHOW TABLES, o que é um privilégio incorreto para esse tipo de verificação de permissão. #94556 (pufit). - Torna o formato de saída
Hashindependente do tamanho dos blocos. #94503 (Alexey Milovidov). Note que isso altera os valores de hash de saída em comparação com as versões anteriores.
Novo recurso
- API HTTP e UI web embutida para o ClickHouse Keeper. #78181 (pufit e speeedmaster).
- A desduplicação de inserts assíncronos agora funciona com visões materializadas dependentes. Quando ocorre uma colisão por block_id, o bloco original é filtrado para remover as linhas associadas ao block_id, e as linhas restantes são transformadas com todas as consultas SELECT relevantes das visões materializadas; isso reconstrói o bloco original sem linhas conflitantes. #89140 (Sema Checherinda). Agora é permitido usar desduplicação com inserts assíncronos quando há visões materializadas envolvidas. #93957 (Sema Checherinda).
- Introduziu uma nova sintaxe e um novo framework para simplificar e ampliar a funcionalidade de índice de projeção. Isso dá continuidade a https://github.com/ClickHouse/ClickHouse/pull/81021. #91844 (Amos Bird).
- Adicionar suporte a índice de texto em colunas
Array. #89895 (Jimmy Aguilar Mena). - Ativa
use_variant_as_common_typepor padrão, o que permite usar tipos incompatíveis em umArray, em consultasUNIONe nos ramos deif/multiIf/case. #90677 (Alexey Milovidov). - Nova tabela de sistema
zookeeper_info. Implementa #88014. #90809 (Smita Kulkarni). - Suporte ao tipo
Variantem todas as funções. #90900 (Bharat Nallan). - Adiciona uma métrica
ClickHouse_Infoao endpoint/metricsdo Prometheus, contendo principalmente informações de versão, de modo que seja possível criar gráficos para acompanhar informações detalhadas de versão ao longo do tempo. #91125 (Christoph Wurm). - Introduz um novo comando de quatro letras
rcfgpara o Keeper, que permite alterar a configuração do cluster. Esse comando oferece possibilidades mais amplas de alteração da configuração do que a solicitação padrãoreconfigure. O comando recebe uma stringjsoncomo argumento. O conjunto completo de bytes enviados à interface TCP deve ter esta forma:rcfg{json_string_length_big_endian}{json_string}. Alguns exemplos do comando podem ser assim:{"preconditions": {"leaders": [1, 2], "members": [1, 2, 3, 4, 5]}, "actions": [{"transfer_leadership": [3]}, {"remove_members": [1, 2]}, {"set_priority": [{"id": 4, "priority": 100}, {"id": 5, "priority": 100}]}, {"transfer_leadership": [4, 5]}, {"set_priority": [{"id": 3, "priority": 0}]}]}. #91354 (alesapin). - Adiciona a função
reverseBySeparator, que inverte a ordem das substrings em uma string, separadas por um separador especificado. Fecha #91463. #91780 (Xuewei Wang). - Adiciona a nova configuração
max_insert_block_size_bytes, que permite controlar com mais precisão a formação dos blocos inseridos. #92833 (Kirill Kopnev). - É possível executar consultas DDL com a cláusula
ON CLUSTERem um banco de dados Replicated se a configuraçãoignore_on_cluster_for_replicated_databaseestiver habilitada. Nesse caso, o nome do cluster será ignorado. #92872 (Kirill). - Implementada a função
mergeTreeAnalyzeIndexes. #92954 (Azat Khuzhin). - Adiciona a nova configuração
use_primary_key. Defina-a comofalsepara desabilitar a poda de grânulos com base na chave primária. #93319 (Nihal Z. Miaji). - Adicionada a função de tabela
icebergLocalCluster. #93323 (Anton Ivashkin). - Adicionada a função
cosineDistanceTransposed, que calcula uma aproximação da distância de cosseno entre dois pontos. #93621 (Raufs Dunamalijevs). - Adicionada a coluna
filesà tabela system.parts, que mostra o número de arquivos em cada parte de dados. #94337 (Match). - Adiciona um escalonador max-min fair para controle de concorrência. Oferece mais equidade em cenários de alta sobresubscrição, quando muitas consultas competem por slots de CPU limitados. Consultas de curta duração não são prejudicadas por consultas de longa duração que acumularam mais slots ao longo do tempo. É habilitado pelo valor
max_min_fairda configuração do servidorconcurrent_threads_scheduler. #94732 (Sergei Trifonov). - Adicionada a possibilidade de o ClickHouse client substituir o SNI de TLS ao se conectar ao servidor. #89761 (Matt Klein).
- Suporte para tabelas temporárias em chamadas da função
joinGet. #92973 (Eduard Karacharov). - Suporte para vetores de exclusão no mecanismo de tabela
DeltaLake. #93852 (Kseniia Sumarokova). - Adicionado suporte a vetores de exclusão para
deltaLakeCluster. #94365 (Kseniia Sumarokova). - Suporte ao Google Cloud Storage para lagos de dados. #93866 (Konstantin Vedernikov).
Funcionalidade Experimental
- Move
QBitde Experimental para Beta. #93816 (Raufs Dunamalijevs). - Adiciona suporte a
Nullable(Tuple). Definaallow_experimental_nullable_tuple_type = 1para habilitá-lo. #89643 (Nihal Z. Miaji). - Adiciona suporte ao catálogo REST do Paimon, dando continuidade a https://github.com/ClickHouse/ClickHouse/pull/84423. #92011 (JIaQi Tang).
Melhorias de desempenho
- A configuração
use_skip_indexes_on_data_readagora vem habilitada por padrão. Essa configuração permite aplicar filtragem em streaming ao mesmo tempo que os dados são lidos, melhorando o desempenho da consulta e o tempo de inicialização. #93407 (Shankar Iyer). - Melhora o desempenho do
DISTINCTem colunasLowCardinality. Fecha #5917. #91639 (Nihal Z. Miaji). - Otimize a função de agregação
distinctJSONPathspara que leia apenas os caminhos JSON nas partes de dados, e não a coluna JSON inteira. #92196 (Pavel Kruglov). - Mais filtros foram propagados para as junções. #85556 (Nikita Taranov).
- Suporte a mais casos de push down da condição
ONda junção quando o filtro usa entradas de apenas um dos lados. Suporte a junçõesANY,SEMIeANTI. #92584 (Dmitry Novik). - Permite usar conjuntos equivalentes para aplicar pushdown de filtros em
SEMI JOIN. Fecha #85239. #92837 (Dmitry Novik). - Ignora a leitura do lado esquerdo do hash join quando o lado direito está vazio. Antes, líamos o lado esquerdo até o primeiro bloco não vazio, o que podia dar bastante trabalho em casos com filtragem intensa ou agregação. #94062 (Alexander Gololobov).
- Usando o método “fastrange” (Daniel Lemire) para particionar dados dentro do pipeline de consulta. Isso pode melhorar a ordenação paralela e as junções. #93080 (Alexey Milovidov).
- Melhora no desempenho de funções de janela quando
PARTITION BYcoincide ou é um prefixo da chave de ordenação. #87299 (Nikita Taranov). - O filtro externo é propagado até as views, o que permite aplicar PREWHERE em nós locais e remotos. Resolve #88189. #88316 (Igor Nikonov).
- Implementa a compilação JIT para mais funções. Fecha #73509. #88770 (Alexey Milovidov com Taiyang Li).
- Se um skip index usado em uma consulta
FINALestiver em uma coluna que faz parte da chave primária, o passo adicional de verificar, em outras partes, a interseção com a chave primária é desnecessário e não é mais executado. Resolve #85897. #93899 (Shankar Iyer). - Otimize o desempenho e o uso de memória para
LIMITeOFFSETfracionários. #91167 (Ahmed Gouda). - Corrigido o uso da lógica mais rápida de leitura aleatória no prefetcher do Parquet Reader V3. Fecha #90890. #91435 (Arsen Muk).
- Melhora o desempenho do
icebergCluster. Fecha #91462. #91537 (Yang Jiang). - Não filtre por colunas virtuais em filtros constantes. #91588 (c-end).
- Reduz o uso de memória de INSERT/merges com partes wide em tabelas com muitas colunas ao habilitar buffers de gravação adaptativos. Adiciona suporte a buffers de gravação adaptativos em discos criptografados. #92250 (Azat Khuzhin).
- Melhorado o desempenho da busca de texto completo com índice de texto e o tokenizador
sparseGrams, reduzindo o número de tokens pesquisados no índice. #93078 (Anton Popov). - A função
isValidASCIIfoi otimizada para casos positivos, ou seja, valores de entrada compostos apenas por ASCII. #93347 (Robert Schulze). - A otimização de leitura em ordem agora reconhece quando as colunas de ORDER BY são constantes por causa das condições em WHERE, permitindo leituras eficientes em ordem inversa. Isso beneficia consultas multilocatário, como
WHERE tenant='42' ORDER BY tenant, event_time DESC, que agora podem usar InReverseOrder em vez de exigir uma ordenação completa.”. #94103 (matanper). - Introduzida uma classe AST especializada para Enum para armazenar parâmetros de valor em pares (string, integer), em vez de filhos ASTLiteral, otimizando o consumo de memória. #94178 (Ilya Yatsishin).
- Análise distribuída de índices em múltiplas réplicas. Benéfica para armazenamento compartilhado e grandes volumes de dados no cluster. Isso se aplica ao SharedMergeTree (ClickHouse Cloud) e também pode se aplicar a outros tipos de tabelas MergeTree em armazenamento compartilhado. #86786 (Azat Khuzhin).
- Reduzir a sobrecarga dos filtros de runtime de JOIN desabilitando-os nos seguintes casos: - há bits demais definidos no filtro de Bloom - poucas linhas são filtradas em tempo de execução. #91578 (Alexander Gololobov).
- Use um buffer em memória para a entrada de subconsultas correlacionadas, a fim de evitar avaliá-la várias vezes. Parte de #79890. #91205 (Dmitry Novik).
- Permitir que todas as réplicas assumam intervalos órfãos durante a leitura com réplicas paralelas. Isso melhora o balanceamento de carga e reduz a latência na cauda longa. #91374 (zoomxi).
- A agregação/ordenação/join externos agora respeitam a configuração da consulta
temporary_files_codecem todos os contextos. Corrigidos os eventos de perfil ausentes para grace hash join. #92388 (Vladimir Cherkasov). - Torna mais robusta a detecção do uso de memória das consultas para gravação em disco durante agregação/ordenação. #92500 (Azat Khuzhin).
- Estimativa da contagem total de linhas e das estatísticas de NDV (número de valores distintos) das colunas-chave de agregação. #92812 (Alexander Gololobov).
- Otimizada a compressão da lista de postings com simdcomp. #92871 (Peng Jian).
- Refatoração do processamento no modo Ordered do S3Queue com buckets. Isso também deve melhorar o desempenho, reduzindo o número de requisições ao Keeper. #92889 (Kseniia Sumarokova).
- As funções
mapContainsKeyLikeemapContainsValueLikeagora podem usar um índice de texto emmapKeys()oumapValues(), respectivamente. #93049 (Michael Jarrett). - Reduza o uso de memória em sistemas que não sejam Linux (ative a limpeza imediata de páginas sujas do jemalloc). #93360 (Eduard Karacharov).
- Força o expurgo das arenas do jemalloc caso a proporção entre o tamanho das páginas sujas e
max_server_memory_usageexcedamemory_worker_purge_dirty_pages_threshold_ratio. #93500 (Eduard Karacharov). - Reduz o uso de memória da AST. #93601 (Nikolai Kochetov).
- Em alguns casos, vimos que o ClickHouse não respeita o limite de memória ao ler de uma tabela. Esse comportamento foi corrigido. #93715 (Nikita Mikhaylov).
- Habilita por padrão a extensão Keeper
CHECK_STATeTRY_REMOVE. #93886 (Mikhail Artemenko). - Interpretar os limites inferior e superior dos nomes de arquivo correspondentes a exclusões por posição a partir das entradas do arquivo de manifesto do Iceberg para selecionar melhor os arquivos de dados correspondentes. #93980 (Daniil Ivanik).
- Adicionadas mais duas configurações para controlar o número máximo de subcolunas dinâmicas em uma coluna JSON. A primeira é a configuração do MergeTree
merge_max_dynamic_subcolumns_in_compact_part(semelhante à já adicionadamerge_max_dynamic_subcolumns_in_wide_part), que limita o número de subcolunas dinâmicas criadas durante o merge em uma parte Compact. A segunda é a configuração no nível da consultamax_dynamic_subcolumns_in_json_type_parsing, que limita o número de subcolunas dinâmicas criadas durante o parsing de dados JSON, permitindo especificar o limite no insert. #94184 (Pavel Kruglov). - Otimiza ligeiramente a consolidação de colunas JSON em alguns casos. #94247 (Pavel Kruglov).
- Reduza os tamanhos das filas do pool de threads com base na experiência em ambiente de produção. Adicione uma verificação explícita do consumo de memória antes de ler qualquer dado do MergeTree. #94692 (Nikita Mikhaylov).
- Certifique-se de que o agendador dê preferência à thread MemoryWorker em caso de escassez de CPU, pois isso protege o processo do ClickHouse contra uma ameaça existencial. #94864 (Nikita Mikhaylov).
- Executa a limpeza de páginas sujas do jemalloc em uma thread separada da thread principal do MemoryWorker. Se a limpeza for lenta, isso poderá atrasar as atualizações do uso de RSS, o que pode levar ao encerramento do processo por falta de memória. Introduz a nova configuração
memory_worker_purge_total_memory_threshold_ratiopara iniciar a limpeza de páginas sujas com base na proporção do uso total de memória. #94902 (Antonio Andelic).
Melhoria
system.blob_storage_logagora está disponível para o Azure Blob Storage. #93105 (Alexey Milovidov).- Implementar
blob_storage_logpara Local e HDFS. Corrigir um erro quando oS3Queueusava algo diferente do nome do disco ao registrar emblob_storage_log. Adicionar a colunaerror_codeablob_storage_log. Dividir o arquivo de configuração de teste para simplificar os testes locais. #93106 (Alexey Milovidov). clickhouse-clienteclickhouse-localpassarão a destacar grupos de dígitos (milhares, milhões etc.) em literais numéricos durante a digitação. Isso fecha #93100. #93108 (Alexey Milovidov).- Adiciona suporte no
clickhouse-clienta argumentos de linha de comando com espaço ao redor do sinal de igual. Fecha #93077. #93174 (Cole Smith). - Com
<interactive_history_legacy_keymap>true</interactive_history_legacy_keymap>, o cliente de CLI agora pode voltar a usar Ctrl-R para a busca normal, como antes, enquanto Ctrl-T faz a busca fuzzy. #87785 (Larry Snizek). - A instrução para limpar caches
SYSTEM DROP [...] CACHEdava a falsa impressão de que ela desabilitava o cache. O ClickHouse agora também oferece suporte à instruçãoSYSTEM CLEAR [...] CACHE, que é mais clara. A sintaxe antiga continua disponível. #93727 (Pranav Tiwari). - Suporte a múltiplas colunas como chave primária no
EmbeddedRocksDB. Fecha #32819. #33917 (usurai). - Agora é possível usar IN com valores não constantes em escalares (consultas como
val1 NOT IN if(cond, val2, val3)). #93495 (Yarik Briukhovetskyi). - Impede que os
headersx-amz-server-side-encryptionsejam propagados para as requisições S3HeadObject,UploadParteCompleteMultipartUpload, pois não são suportados. #64577 (Francisco J. Jurado Moreno). - Rastreamento do particionamento do Hive para o modo ordenado no S3Queue. Resolve #71161. #81040 (Anton Ivashkin).
- Otimização da reserva de espaço no cache do sistema de arquivos.
FileCache::collectCandidatesForEvictionserá executado sem bloqueio exclusivo. #82764 (Kseniia Sumarokova). - Suporte à estratégia de rotação composta (tamanho + tempo) para o log do servidor. #87620 (Jianmei Zhang).
- O cliente de CLI agora pode especificar
<warnings>false</warnings>em vez da opção de linha de comando--no-warnings. #87783 (Larry Snizek). - Adiciona suporte à função de agregação
avgcom valores Date, DateTime e Time como argumentos. Fecha #82267. #87845 (Yarik Briukhovetskyi). - A otimização
use_join_disjunctions_push_downestá habilitada por padrão. #89313 (Alexey Milovidov). - Suporte a mais motores de tabela e tipos de fonte de dados em subconsultas correlacionadas. Fecha #80775. #90175 (Dmitry Novik).
- Se o schema da view parametrizada for especificado explicitamente, ele será exibido. Corrige #88875, #81385. #90220 (Grigorii Sokolik).
- Lida corretamente com a lacuna nas entradas de log do Keeper quando os logs estão antes do último índice confirmado. #90403 (Antonio Andelic).
- Melhorada a configuração
min_free_disk_bytes_to_perform_insertpara funcionar corretamente com volumes JBOD. #90878 (Aleksandr Musorin). - Agora é possível especificar a configuração
storage_class_nameem coleções nomeadas para o mecanismo de tabelaS3e a função de tabelas3. #91926 (János Benjamin Antal). - Suporte à inserção em zookeeper auxiliar via
system.zookeeper. #92092 (RinChanNOW). - Adiciona novas métricas para o Keeper: os profile events
KeeperChangelogWrittenBytes,KeeperChangelogFileSyncMicroseconds,KeeperSnapshotWrittenByteseKeeperSnapshotFileSyncMicroseconds, bem como as métricas de histogramaKeeperBatchSizeElementseKeeperBatchSizeBytes. #92149 (Miсhael Stetsyuk). - Adicionada uma nova configuração,
trace_profile_events_list, que limita o tracing comtrace_profile_eventà lista especificada de nomes de eventos. Isso permite uma coleta de dados mais precisa em workloads de grande porte. #92298 (Alexey Milovidov). - Adiciona suporte a SYSTEM NOTIFY FAILPOINT para failpoints pausáveis. - Adiciona suporte a SYSTEM WAIT FAILPOINT fp PAUSE/RESUME. #92368 (Shaohua Wang).
- Adicionada a coluna
creation(implícita/explícita) emsystem.data_skipping_indices. #92378 (Raúl Marín). - Permitir passar a descrição das colunas das tabelas dyn do YTsaurus para a fonte do dicionário. #92391 (MikhailBurdukov).
- Em #63985, passamos a permitir especificar todos os parâmetros necessários para a configuração de TLS individualmente por porta (consulte protocolos combináveis), de modo que não precisamos depender de uma configuração global de TLS. No entanto, a implementação ainda exige implicitamente a existência de uma seção de configuração global
openSSL.server, o que conflita com ambientes em que são necessárias configurações de TLS diferentes para portas diferentes. Por exemplo, em implantações keeper-in-server, precisamos de configurações de TLS separadas para a comunicação entre Keepers e as conexões do clickhouse client. #92457 (Miсhael Stetsyuk). - Adiciona uma nova configuração
input_format_binary_max_type_complexityque limita o número total de nós de tipo que podem ser decodificados em formato binário para evitar payloads maliciosos. #92519 (Raufs Dunamalijevs). - Passa a refletir as tarefas em execução em
system.background_schedule_pool{,_log}. Adiciona documentação. #92587 (Azat Khuzhin). - Executa a consulta atual na busca com Ctrl+R no cliente se nenhuma correspondência for encontrada no histórico. #92749 (Azat Khuzhin).
- Adiciona suporte a
EXPLAIN indices = 1como alias deEXPLAIN indexes = 1. Fecha #92483. #92774 (Pranav Tiwari). - O leitor de Parquet agora permite ler como JSON colunas Tuple ou map:
select x from file(f.parquet, auto, 'x JSON')funciona mesmo que o tipo da colunaxemf.parquetseja tuple ou map. #92864 (Michael Kolupaev). - Suporte a tuplas vazias no leitor de Parquet. #92868 (Michael Kolupaev).
- Recorre à cópia em modo leitura e escrita no Azure Blob Storage quando a cópia nativa falha com BadRequest (por exemplo, lista de blocos inválida). Antes, isso só era feito para o erro Unauthorized, observado ao copiar um blob entre diferentes contas de armazenamento. Mas às vezes também vemos o erro “The specified block list is invalid”. Agora, a condição foi atualizada para recorrer à leitura & escrita em todas as falhas da cópia nativa. #92888 (Smita Kulkarni).
- Corrige o throttling no endpoint de metadados do EC2 ao executar muitas consultas simultâneas no S3 com credenciais de perfil de instância do EC2. Antes, cada consulta criava seu próprio
AWSInstanceProfileCredentialsProvider, gerando solicitações simultâneas ao serviço de metadados do EC2, o que podia resultar em timeout e errosHTTP response code: 403. Agora, o provedor de credenciais fica em cache e é compartilhado entre todas as consultas. #92891 (Sav). - Reformula a configuração
insert_select_deduplicatepara permitir manter a compatibilidade com versões anteriores. #92951 (Sema Checherinda). - Registrar tarefas em segundo plano mais lentas do que a média (
background_schedule_pool_log.duration_threshold_milliseconds=30) para evitar o excesso de logs de tarefas. #92965 (Azat Khuzhin). - Em versões anteriores, alguns nomes de funções em C++ eram exibidos incorretamente (“mangled”) em
system.trace_logesystem.symbols, e a funçãodemanglenão conseguia processá-los adequadamente. Corrige #93074. #93075 (Alexey Milovidov). - Introduzida a configuração de backup
backup_data_from_refreshable_materialized_view_targetspara não fazer backup de views materializadas atualizáveis. RMVs com estratégia de atualização APPEND são sempre incluídas no backup. #93076 (Julia Kartseva). #93658 (Julia Kartseva) - Use informações mínimas de depuração em vez de não usar nenhuma informação de depuração para unidades de tradução pesadas, como funções. #93079 (Alexey Milovidov).
- Adicionado suporte de compatibilidade com o MinIO ao SDK C++ do AWS S3 por meio da implementação do mapeamento de códigos de erro para erros específicos do MinIO. Essa alteração permite que o ClickHouse trate corretamente e repita tentativas após erros do servidor MinIO ao usar implantações do MinIO em vez do AWS S3, melhorando a confiabilidade para usuários que executam armazenamento de objetos em clusters MinIO autogerenciados. #93082 (XiaoBinMu).
- Gravar perfis simbolizados do jemalloc (eliminando a necessidade de um binário durante a geração do perfil de heap). #93099 (Azat Khuzhin).
- Restaurada a ferramenta
clickhouse git-import— ela estava com problemas em commits grandes e inválidos. Veja https://presentations.clickhouse.com/2020-matemarketing/. #93202 (Alexey Milovidov). - Não exibir senhas do armazenamento URL no log de consultas. #93245 (Konstantin Vedernikov).
- Suporte ao tipo
GeometryemflipCoordinates. #93303 (Bharat Nallan). - Melhora a UX do SYSTEM INSTRUMENT ADD/REMOVE: usa literais String para nomes de funções, aplica patches a todas as funções correspondentes e permite usar function_name em
REMOVE. #93345 (Pablo Marcos). - Adiciona uma nova configuração
materialize_statistics_on_mergeque habilita/desabilita a materialização de estatísticas durante o merge. O valor padrão é1. #93379 (Han Fei). - O ClickHouse agora pode interpretar
SELECTsem parênteses em consultasDESCRIBE SELECT. Fecha #58382. #93429 (Yarik Briukhovetskyi). - Adiciona aleatorização às verificações de integridade do cache com determinada probabilidade. #93439 (Kseniia Sumarokova).
- Adicione a configuração
type_json_allow_duplicated_key_with_literal_and_nested_objectpara permitir caminhos duplicados em JSON quando um deles for um literal e o outro, um objeto aninhado, por exemplo,{"a" : 42, "a" : {"b" : 42}}. Alguns dados podem ter sido criados antes de essa restrição a caminhos duplicados ter sido adicionada em https://github.com/ClickHouse/ClickHouse/pull/79317, e outras manipulações desses dados agora podem causar erros. Com essa configuração, esses dados antigos ainda podem ser usados sem erros. #93604 (Pavel Kruglov). - Não imprimir valores de tipos simples em linhas separadas no Pretty JSON. #93836 (Pavel Kruglov).
- Quando há muitas instruções
alter table ... modify setting ..., pode acontecer de o bloqueio não ser adquirido em até 5 segundos. É melhor retornartimeoutdo quelogical error. #93856 (Han Fei). - Evita saída excessiva em caso de erro de sintaxe. Antes dessa mudança, era exibido o script SQL inteiro, que podia conter muitas consultas. #93876 (Alexey Milovidov).
- Calcule corretamente o tamanho em bytes da solicitação
checkcom estatísticas no Keeper. #93907 (Mikhail Artemenko). - Adicionada a configuração
use_hash_table_stats_for_join_reorderingpara controlar se as estatísticas, em tempo de execução, do tamanho da tabela hash são usadas na reordenação de junções. Essa configuração é ativada por padrão, preservando o comportamento existente decollect_hash_table_stats_during_joins. #93912 (Vladimir Cherkasov). - Agora, os usuários podem visualizar parcialmente configurações globais aninhadas do servidor na tabela
system.server_settings(por exemplo,logger.level). Isso se aplica apenas a configurações com estrutura fixa (sem listas, enumerações, repetições etc.). #94001 (Hechem Selmi). QBitagora pode ser comparado por igualdade. #94078 (Raufs Dunamalijevs).- Quando o Keeper detectar snapshot corrompido ou changelogs inconsistentes, lançar uma exceção em vez de abortar manualmente ou limpar os arquivos automaticamente. Isso deve resultar em um comportamento mais seguro do Keeper, com dependência de intervenção manual. #94168 (Antonio Andelic).
- Corrigido problema que podia deixar resíduos caso
CREATE TABLEfalhasse. #94174 (Azat Khuzhin). - Corrige o acesso à memória não inicializada (um bug no OpenSSL) quando é usada uma chave TLS protegida por senha. #94182 (Konstantin Bogdanov).
- Atualizado o chdig para v26.1.1. #94290 (Azat Khuzhin).
- Adiciona suporte a um particionamento mais genérico no modo ordenado do S3Queue. #94321 (Bharat Nallan).
- Adicionado o alias
use_statisticspara a configuraçãoallow_statistics_optimize. Isso é mais consistente com as configurações já existentesuse_primary_keyeuse_skip_indexes. #94366 (Robert Schulze). - Habilitada a configuração
input_format_numbers_enum_on_conversion_errorna conversão de números para Enums, para verificar se o elemento existe. #94384 (Elmi Ahmadov). - No modo ordenado do S3(Azure)Queue, limpar os nós com falha com base nos limites de rastreamento (antes isso era feito apenas no modo não ordenado, tanto para nós com falha quanto para nós processados; agora isso também será feito no modo ordenado, mas apenas para nós com falha). #94412 (Kseniia Sumarokova).
- Habilitado o gerenciamento de acesso para o usuário
defaultno clickhouse-local. O usuáriodefaultnoclickhouse-localnão tinha o privilégioaccess_management, o que fazia com que operações comoDROP ROW POLICY IF EXISTSfalhassem com o erroACCESS_DENIED, embora esse usuário devesse ter acesso irrestrito. #94501 (Alexey Milovidov). - Adicionado suporte a named collection para dicionários e tabelas do YTsaurus. #94582 (MikhailBurdukov).
- Adicionar suporte a coleções nomeadas definidas por SQL em BACKUP/RESTORE para S3 e Azure Blob Storage. Fecha #94604. #94605 (Pablo Marcos).
- Suporte ao bucketing baseado na chave de partição para S3Queue no modo ordenado. #94698 (Bharat Nallan).
- Adiciona uma métrica assíncrona com o tempo decorrido do
mergeem execução há mais tempo. #94825 (Raúl Marín). - Adiciona verificação do arquivo correspondente antes de aplicar a exclusão por posição usando
IcebergBitmapPositionDeleteTransform. #94897 (Yang Jiang). - Agora,
view_duration_msmostra o tempo em que o grupo ficou ativo, e não a soma da duração das threads nele. #94966 (Sema Checherinda). - Remove o limite máximo do número de tokens de busca nas funções
hasAnyTokensehasAllTokens, que era de 64. Exemplo:SELECT count() FROM table WHERE hasAllTokens(text, ['token_1', 'token_2', [...], 'token_65']]);A consulta resultaria em um erroBAD_ARGUMENTSporque há 65 tokens de busca. Com este PR, o limite foi removido por completo, e a mesma consulta seria executada sem erro. #95152 (Elmi Ahmadov). - Adiciona a configuração
input_format_numbers_enum_on_conversion_errorpara a conversão de números em enums, a fim de verificar se o elemento existe. Fecha: #56144. #56240 (Nikolay Degterinsky). - Compartilhe recursos do parser de formato entre a leitura do arquivo de dados e do position delete file em tabelas Iceberg para reduzir as alocações de memória. #94701 (Yang Jiang).
Correção de bug (comportamento incorreto perceptível ao usuário em uma versão estável oficial)
- Corrige um bug em que handlers de consulta predefinidos interpretavam espaços em branco à direita como dados durante inserções. #83604 (Fabian Ponce).
- Corrigido o erro INCOMPATIBLE_TYPE_OF_JOIN para o armazenamento Join, com aplicação da otimização de outer join para inner join. Resolve #80794. #84292 (Vladimir Cherkasov).
- Corrigida a exceção “Número inválido de linhas no Chunk” ao usar hash join com
allow_experimental_join_right_table_sortingativado. #86440 (yanglongwei). - Sempre substitua nomes de arquivos por hash no MergeTree se o sistema de arquivos não diferenciar maiúsculas de minúsculas. Antes, em sistemas de arquivos que não diferenciam maiúsculas de minúsculas (como o macOS), isso podia causar corrupção de dados quando vários nomes de coluna/subcoluna diferiam apenas pelo uso de maiúsculas e minúsculas. #86559 (Pavel Kruglov).
- Adicionar uma verificação completa de permissões durante a criação da consulta subjacente em uma visão materializada. #89180 (pufit).
- Corrigido travamento na função
icebergHashao usar argumento constante. #90335 (Michael Kolupaev). - Corrige erro lógico quando uma mutação sem transação altera partes de uma transação ativa, que acaba sendo revertida ao final. #90469 (Shaohua Wang).
- Atualiza
system.warningscorretamente após um banco de dados ordinary ser convertido em um banco de dados atomic. #90473 (sdk2). - Corrige uma falha de asserção ao ler um arquivo Parquet, quando parte de uma expressão prewhere é usada em outro ponto da consulta. #90635 (Max Kainov).
- Corrige um travamento em um cluster de nó único ao ler do Iceberg no modo split-by-buckets. Isso fecha #90913. #91553 (Konstantin Vedernikov).
- Corrige um possível erro lógico no mecanismo Log durante a leitura de subcolunas. Fecha #91710. #91711 (Pavel Kruglov).
- Corrigido erro lógico: ‘Storage does not support transaction’ durante ATTACH AS REPLICATED. #91772 (Shaohua Wang).
- Correção para filtros em tempo de execução que funcionavam incorretamente quando o LEFT ANTI JOIN tinha uma condição adicional aplicada posteriormente. #91824 (Alexander Gololobov).
- Corrige um erro que ocorria em uma comparação null-safe envolvendo o tipo Nothing. Fecha #91834. Fecha #84870. Fecha #91821. #91884 (Yarik Briukhovetskyi).
- Corrige bugs na decodificação de DELTA_BYTE_ARRAY no leitor nativo de Parquet que afetavam dados de texto altamente repetitivos. #91929 (Daniel Muino).
- Armazena em cache o esquema apenas do arquivo a partir do qual ele foi inferido nos globs, em vez de todos os arquivos, durante a inferência de esquema. Fecha #91745. #92006 (Pavel Kruglov).
- Corrige o erro
Couldn't pack tar archive: Failed to write all bytescausado por um cabeçalho incorreto de tamanho da entrada do arquivo. Corrige #89075. #92122 (Julia Kartseva). - Libera o fluxo da requisição em insert select para evitar o fechamento da conexão HTTP. #92175 (Sema Checherinda).
- Corrigido erro lógico em consultas com múltiplas junções com a cláusula
USINGejoin_use_nulls. #92251 (Vladimir Cherkasov). - Corrige um erro lógico na reordenação de join com join_use_nulls, fecha https://github.com/clickhouse/clickhouse/issues/90795. #92289 (Vladimir Cherkasov).
- Corrigida a formatação inconsistente da AST de arrayElement com literal negado. Fecha #92288 Fecha #92212 Fecha #91832 Fecha #91789 Fecha #91735 Fecha #88495 Fecha #92386. #92293 (Pavel Kruglov).
- Corrige uma possível falha ao usar a configuração
join_on_disk_max_files_to_merge. #92335 (Bharat Nallan). - Problema relacionado #https://github.com/ClickHouse/support-escalation/issues/6365. #92339 (Tuan Pham Anh).
- Corrige a ausência de verificação de acesso em
SYSTEM SYNC FILE CACHE. Fecha #92101. #92372 (Kseniia Sumarokova). - Corrigido o processamento de
count_distinct_optimizationem funções de janela e com múltiplos argumentos. #92376 (Raúl Marín). - Corrige o erro “Cannot write to finalized buffer” ao usar algumas funções de agregação com funções de janela. Fecha #91415. #92395 (Jimmy Aguilar Mena).
- Corrigido erro lógico com
CREATE TABLE ... AS urlCluster()e o mecanismo de banco de dadosReplicated. Fecha #92216. #92418 (Kseniia Sumarokova). - Herdar, durante a mutação no MergeTree, as configurações das informações de serialização da parte de origem. Isso corrige um possível resultado incorreto da consulta na parte mutada após alterações na serialização dos tipos de dados. #92419 (Pavel Kruglov).
- Corrige um possível conflito entre coluna e subcoluna com o mesmo nome, que levava ao uso da serialização incorreta e a falhas nas consultas. Fecha #90219. Fecha #85161. #92453 (Pavel Kruglov).
- Corrige
LOGICAL_ERRORs causados por modificações indesejadas no plano de consulta ao converterouter joineminner join. Também flexibiliza os requisitos da otimização para que ela possa ser aplicada nos casos em que funções injetivas são aplicadas às chaves de agregação durante junções. #92503 (János Benjamin Antal). - Corrige o possível erro
SIZES_OF_COLUMNS_DOESNT_MATCHdurante a ordenação de uma coluna de tupla vazia. Fecha #92422. #92520 (Pavel Kruglov). - Verificação de caminhos tipados incompatíveis no tipo JSON. Fecha #91577. #92539 (Pavel Kruglov).
- Corrigido o deadlock no SHOW CREATE DATABASE para o banco de dados Backup. #92541 (Azat Khuzhin).
- Use o código de erro correto ao validar o índice hypothesis. #92559 (Raúl Marín).
- Corrige a resolução de subcolunas dinâmicas em aliases de coluna no analyzer. Antes, a subcoluna dinâmica em um alias de coluna era encapsulada em
getSubcolumne, em alguns casos, podia nem ser resolvida. Fecha #91434. #92583 (Pavel Kruglov). - Evita travamento em tokens() com o segundo argumento NULL. #92586 (Raúl Marín).
- Corrige uma possível falha causada por mutação in-place das colunas
const PREWHEREsubjacentes. Isso poderia ter acontecido durante o encolhimento da coluna (IColumn::shrinkToFit) ou a filtragem (IColumn::filter), que poderiam ser disparados concorrentemente por várias threads. #92588 (Arsen Muk). - A criação e a materialização de índices de texto em tabelas que contêm partes grandes (mais de 4.294.967.295 linhas) estão temporariamente desativadas. Essa limitação evita resultados incorretos de consulta, pois a implementação atual do índice ainda não oferece suporte a partes tão grandes. #92644 (Anton Popov).
- Corrige um erro lógico
Too large size (A) passed to allocatordurante a execução de junções. Fecha #92043. #92667 (Yarik Briukhovetskyi). - Corrige um bug que fazia com que índices
ngrambf_v1com comprimento de ngrama (1º parâmetro) > 8 lançassem uma exceção. #92672 (Robert Schulze). - Corrige uma exceção não tratada durante a recarga em segundo plano de named collections quando o armazenamento ZooKeeper é usado. Fecha https://github.com/ClickHouse/clickhouse-private/issues/44180. #92717 (Kseniia Sumarokova).
- Corrige a lógica incorreta nas verificações de grants de acesso para grants com curinga. A tentativa anterior https://github.com/ClickHouse/ClickHouse/pull/90928 corrigiu uma vulnerabilidade crítica, mas acabou sendo restritiva demais, fazendo com que algumas instruções
GRANTcom curinga falhassem devido a revogações não relacionadas. #92725 (pufit). - Corrige um bug na lógica de skipping de dados quando
not match(...)é usado na cláusulaWHERE, causando resultados incorretos. Fecha #92492. #92726 (Nihal Z. Miaji). - Não tente excluir diretórios temporários durante a inicialização se uma tabela MergeTree for criada em um disco somente de leitura. #92748 (Alexey Milovidov).
- Corrige “Não é possível adicionar uma ação a um ExpressionActionsChain vazio” em ALTER TABLE REWRITE PARTS (v2). #92754 (Azat Khuzhin).
- Evita falha ao ler de uma
Connectiondesconectada. #92807 (Raufs Dunamalijevs). - Corrigido o erro lógico
Failed to set file processing within 100 retriesnoS3Queueno modoOrdered. Agora ele foi substituído por um aviso. Esse erro podia ocorrer antes da versão 25.10 se a sessão do Keeper expirasse; no entanto, nas versões 25.10+ ele continuará sendo apenas um aviso, já que ainda é teoricamente possível receber esse erro em caso de alta concorrência de processamento no modoOrdered. #92814 (Kseniia Sumarokova). - Anteriormente, algumas queries que usavam sharding por PK com uma condição falsa falhavam. Agora, isso não acontece mais. Necessário para https://github.com/ClickHouse/ClickHouse/pull/89313. #92815 (Yarik Briukhovetskyi).
- Correção do cálculo dos tamanhos descompactados dos índices de texto na tabela
system.parts. #92832 (Anton Popov). - Corrigido o uso do índice primário em atualizações leves com cláusula
INcontendo subconsultas no predicado da cláusulaWHERE. #92838 (Anton Popov). - Corrigida a criação da dica de tipo para o path ‘skip’ em JSON. Fecha #92731. #92842 (Pavel Kruglov).
- No engine de tabela S3, devemos evitar armazenar em cache a chave de partição quando houver funções não determinísticas. #92844 (Miсhael Stetsyuk).
- Corrige um possível erro
FILE_DOESNT_EXISTapós a mutação de uma coluna esparsa comratio_of_defaults_for_sparse_serialization=0.0. Fecha #92633. #92860 (Pavel Kruglov). - Corrige a inferência de esquema do Parquet no leitor antigo de Parquet (não usado por padrão) quando uma coluna JSON vem após uma coluna Tuple. Corrige a falha do leitor antigo de Parquet (não usado por padrão) ao processar tuplas vazias. #92867 (Michael Kolupaev).
- Corrige um erro lógico em múltiplas junções com condição constante e
join_use_nulls, fecha #92640. #92892 (Vladimir Cherkasov). - Corrige um possível erro
NOT_FOUND_COLUMN_IN_BLOCKdurante a inserção em uma tabela com subcoluna na expressão de partição. Fecha #93210. Fecha #83406. #92905 (Pavel Kruglov). - Corrige o erro
NO_SUCH_COLUMN_IN_TABLEno engine Merge em tabelas com aliases. Fecha #88665. #92910 (Pavel Kruglov). - Corrigido o caso em que NULL != NULL no full_sorting_join da coluna LowCardinality(Nullable(T)). #92924 (Vladimir Cherkasov).
- Corrigidos vários travamentos durante merges de índices de texto em tabelas
MergeTree. #92925 (Anton Popov). - Restaura os wrappers LowCardinality nos resultados de expressões SET, se necessário, durante a agregação TTL, para evitar exceções durante a otimização da tabela. #92971 (Seva Potapov).
- Corrige um erro lógico durante a análise de índice quando um array vazio é usado na função
has. Fecha #92906. #92995 (Nihal Z. Miaji). - Corrige possível travamento ao finalizar o pool de agendamento em segundo plano (pode causar travamentos do servidor durante o desligamento). #93008 (Azat Khuzhin).
- Corrige um possível erro FILE_DOESNT_EXIST após uma mutação em coluna esparsa quando a configuração
ratio_of_defaults_for_sparse_serializationfoi alterada para1.0via ALTER. #93016 (Pavel Kruglov). - Corrige um erro na lógica de skipping de dados quando
not materialize(...)ounot CAST(...)é usado na cláusula WHERE, o que causava resultados incorretos. Fecha #88536. #93017 (Nihal Z. Miaji). - Corrige uma possível utilização de partes desatualizadas devido a uma condição de corrida TOCTOU em partes compartilhadas. #93022 (Azat Khuzhin).
- Corrige travamento ao desserializar o estado agregado
groupConcatmalformado com offsets fora dos limites. #93028 (Raufs Dunamalijevs). - Corrigido problema que deixava a conexão em um estado inconsistente após o cancelamento preliminar de consultas distribuídas. #93029 (Azat Khuzhin).
- Corrige os resultados de join quando a chave de join do lado direito é uma coluna esparsa. Isso fecha #92920. Só consigo reproduzir o bug com
set compatibility='23.3'. Não tenho certeza se isso deve ser retroportado. #93038 (Amos Bird). - Corrige um possível
Cannot finalize buffer after cancellationemestimateCompressionRatio(). Corrige: #87380. #93068 (Azat Khuzhin). - Corrigidas as mesclagens de índices de texto construídos com base em expressões complexas (como
concat(col1, col2)). #93073 (Anton Popov). - Corrige a aplicação da projeção quando o filtro contém subcolunas. Fecha #92882. #93141 (Pavel Kruglov).
- Corrige um erro lógico que, em alguns casos, era disparado quando filtros de runtime de join eram adicionados ao plano de consulta. Isso era causado pelo retorno incorreto de colunas
constduplicadas de um dos lados do join. #93144 (Alexander Gololobov). - A função especial
__applyFilterusada por filtros de runtime de JOIN estava retornando o erro ILLEGAL_TYPE_OF_ARGUMENT em alguns casos válidos. #93187 (Alexander Gololobov). - Evita que colunas interpoladas diferentes colapsem em uma mesma coluna em um bloco quando as colunas interpoladas forem, na prática, aliases da mesma coluna. #93197 (Yakov Olkhovskiy).
- Não adicionar filtro em tempo de execução ao fazer join com a tabela da direita já preenchida. #93211 (Alexander Gololobov).
- Corrige a limpeza de watches persistentes do Keeper após o término de uma sessão. Isso fecha #92480. #93213 (Konstantin Vedernikov).
- Corrigido o ORDER BY com tupla no Iceberg. Isso encerra #92977. #93225 (Konstantin Vedernikov).
- Corrige um bug na configuração
s3queue_migrate_old_metadata_to_bucketsdo S3Queue. Fecha #93392, #93196, #81739. #93232 (Kseniia Sumarokova). - Remove colunas não utilizadas quando a projeção é reconstruída durante o merge. Isso reduz o uso de memória e cria menos partes temporárias. #93233 (Nikolai Kochetov).
- Corrige a remoção de colunas não usadas de subconsultas na presença de uma subconsulta escalar correlacionada. Antes dessa correção, a coluna poderia ser removida se fosse usada apenas na subconsulta correlacionada, e a consulta falharia com o erro
NOT_FOUND_COLUMN_IN_BLOCK. #93273 (Dmitry Novik). - Corrigida possível subcoluna ausente na MV durante alteração da tabela de origem. Fecha #93231. #93276 (Pavel Kruglov).
- Corrige o planejamento de consultas do mecanismo de tabela
Mergecom o analyzer, que podia gerar ILLEGAL_COLUMN parahostName()ao mesclar tabelas locais e remotas/Distributed. Fecha #92059. #93286 (Jinlin). - Corrige um caso em que
NOT INcom argumentos de array não constantes retornava um valor incorreto + adiciona suporte a funções Array não constantes. Fecha #14980. #93314 (Yarik Briukhovetskyi). - Corrige o erro
Not found columnna otimizaçãouse_top_k_dynamic_filtering. Corrige #93186. #93316 (Nikolai Kochetov). - Corrigida a reconstrução de índices de texto criados em subcolunas. #93326 (Anton Popov).
- Corrigido o tratamento de um array vazio como segundo argumento nas funções
hasAllTokensehasAnyTokens. #93328 (Anton Popov). - Corrige erro lógico quando filtros de runtime são usados em uma consulta com totais na tabela do lado direito. #93330 (Alexander Gololobov).
- O servidor não trava mais se a função
tokensfor chamada com parâmetros não constantes do tokenizer (o 2º, 3º e 4º parâmetros), por exemplo,SELECT tokens(NULL, 1, materialize(1)). #93383 (Robert Schulze). - Corrigida uma vulnerabilidade de estouro de inteiro na desserialização do estado de
groupConcatque poderia causar problemas de segurança de memória com estados agregados forjados. #93426 (Raufs Dunamalijevs). - Corrigida a análise de índice de texto em colunas do tipo array quando o índice não contém tokens (todos os arrays estão vazios ou todos os tokens são ignorados pelo tokenizador). #93457 (Anton Popov).
- Evita o login via OAuth no ClickHouse Client quando o nome de usuário e a senha estão na string de conexão. #93459 (Krishna Mannem).
- Corrige o suporte a credenciais provisionadas do Azure ADLS Gen2 no DataLakeCatalog - faz o parse das chaves
adls.sas-token.*em catálogos REST do Iceberg e corrige o parse de URLs ABFSS. #93477 (Karun Anantharaman). - Corrige o suporte a GLOBAL IN com o analyzer (antes, o Set era recriado no nó remoto). #93507 (Azat Khuzhin).
- Corrigida a extração de subcoluna durante a desserialização diretamente para colunas esparsas. #93512 (Pavel Kruglov).
- Corrigida a leitura direta a partir do índice de texto em consultas de pesquisa duplicadas. #93516 (Anton Popov).
- Correção para o erro NOT_FOUND_COLUMN_IN_BLOCK quando o runtime filter está habilitado e as tabelas em JOIN têm a mesma coluna retornada múltiplas vezes (por exemplo, SELECT a, a, a FROM t). #93526 (Alexander Gololobov).
- Corrigido um bug em que o clickhouse-client pedia a senha duas vezes ao se conectar via ssh. #93547 (Isak Ellmer).
- Garanta que o zookeeper seja encerrado no desligamento (corrige um possível travamento durante o desligamento em casos muito improváveis). #93602 (Azat Khuzhin).
- Corrige o LOGICAL_ERROR ao restaurar o ReplicatedMergeTree com condição de corrida na desduplicação. #93612 (Pablo Marcos).
- Corrigido o uso de coluna esparsa na atualização de TTL durante a desserialização direta em colunas esparsas em alguns formatos de entrada. Isso corrige o possível erro lógico
Unexpected type of result TTL column. #93619 (Pavel Kruglov). - Corrigidas funções de índice H3 que às vezes travavam ou ficavam presas ao serem chamadas com entradas inválidas. #93657 (Michael Kolupaev).
- O uso do índice
ngram_bfem dados não UTF-8 levou a uma leitura de memória não inicializada, com valores que poderiam acabar na estrutura do índice resultante. Fecha #92576. #93663 (Alexey Milovidov). - Verifique se o tamanho do buffer descomprimido está conforme o esperado. #93690 (Raúl Marín).
- Impedir que usuários obtenham a lista de colunas de uma tabela usando o mecanismo de tabela
mergesem que a permissãoSHOW COLUMNSseja verificada. #93695 (János Benjamin Antal). - Corrigida a materialização de índices de salto criados com base em subcolunas. #93708 (Anton Popov).
- Armazenamos os ponteiros compartilhados de
storageemQueryPipeline::resources::storage_holderspara garantir que os objetosIStoragenão sejam destruídos enquanto oPipelineExecutorestiver ativo. #93746 (Miсhael Stetsyuk). - Corrigida a anexação de BDs Replicated quando o host interservidor era alterado após a reinicialização. #93779 (Tuan Pham Anh).
- Corrige a asserção
!read_until_positionemReadBufferFromS3, que ocorria quando o cache estava habilitado. #93809 (Kseniia Sumarokova). - Corrige um erro lógico em um caso raro em que uma tupla vazia é usada com uma coluna
Map. Fecha #93784. #93814 (Nihal Z. Miaji). - Corrigida a corrupção de
_part_offsetquando as projeções são reconstruídas durante merges, e otimizado o processamento de projeções ao evitar leituras desnecessárias da coluna_part_offsete ignorar colunas desnecessárias nos cálculos de projeção. Isso dá continuidade às otimizações introduzidas em #93233. #93827 (Amos Bird). - Remover o tratamento para ‘versão inválida’. #93843 (Anton Ivashkin).
- Correção para
optimize_inverse_dictionary_lookup, que não funcionava com consulta distribuída quando a chave era do tipo inteiro com sinal. Fecha #93259. #93848 (Nihal Z. Miaji). - Corrige
lag/leadque não funcionavam com a consultaremote()distribuída. Fecha #90014. #93858 (Nihal Z. Miaji). - Corrige bug no despacho da instrumentação do sistema. #93937 (Pablo Marcos).
- Em https://github.com/ClickHouse/ClickHouse/pull/89173, adicionamos um campo extra à estrutura que o
TraceSenderenvia por meio de um pipe interno. No entanto, o tamanho do buffer não foi atualizado (aqui), portanto estamos gravando mais dados no buffer do que o definido embuffer_size, o que resulta em múltiplos flushes. E, comoTraceSender::sendé chamado de diferentes threads, os flushes dessas threads podem se intercalar, o que quebra a invariante da qual o lado receptor (TraceCollector) depende. #93966 (Miсhael Stetsyuk). - Corrige a conversão de tipos para um supertipo durante a operação de JOIN do armazenamento
Joincom a cláusulaUSING. Corrige #91672. Corrige #78572. #94000 (Dmitry Novik). - Correção para o caso em que o FilterStep não era adicionado corretamente quando um filtro de runtime de JOIN é aplicado à tabela Merge. #94021 (Alexander Gololobov).
- Uma consulta
SELECTque contém um predicado em várias colunas com skip indexes de filtro de Bloom e com condiçõesOReNOTpodia retornar resultados inconsistentes. Isso já foi corrigido. #94026 (Shankar Iyer). - Corrigido o CLEAR de coluna com índices dependentes. #94057 (Raúl Marín).
- Corrigido o uso de um valor não inicializado em
ReadWriteBufferFromHTTP. #94058 (Alexey Milovidov). - Corrige uma verificação incorreta de caminhos tipados em JSON. A verificação foi introduzida em https://github.com/ClickHouse/ClickHouse/pull/92842 e pode causar um erro na inicialização de tabelas já existentes. #94070 (Pavel Kruglov).
- Corrige o travamento durante a análise de filtros na presença de OUTER JOIN. Corrige #90979. #94080 (Dmitry Novik).
- Corrige a precisão de
uniqThetaao usar chaves de agregação UInt8 em paralelo (max_threads> 1 — padrão). #94095 (Azat Khuzhin). - Corrige falha causada por uma exceção gerada por uma chamada
socket.setBlocking(true)dentro deSCOPE_EXIT. #94100 (Miсhael Stetsyuk). - Corrige a perda de dados quando
DROP PARTITIONremove partes criadas por entradas de log mais recentes no ReplicatedMergeTree. #94123 (Tuan Pham Anh). - Corrigido um problema no leitor de Parquet v3, que tratava incorretamente arrays que atravessam limites de página. Isso acontece, por exemplo, em arquivos gravados pelo Arrow sem habilitar estatísticas de página nem índice de página. Afeta apenas colunas do tipo de dado Array. O sintoma mais provável é que um array a cada ~1 MB de dados seja truncado. Antes desta correção, use esta configuração como solução alternativa:
input_format_parquet_use_native_reader_v3 = 0. #94125 (Michael Kolupaev). - Corrige o excesso de watches no ReplicatedMergeTree ao aguardar uma entrada de log. #94133 (Azat Khuzhin).
- Funções
arrayShuffle,arrayPartialShuffleearrayRandomSamplepara materializar colunas constantes, para que linhas diferentes obtenham resultados diferentes. #94134 (Joanna Hulboj). - Corrigida condição de corrida na avaliação de funções de tabela em visões materializadas. #94171 (Alexey Milovidov).
- Corrige a desreferenciação de
nullptrnos motores de banco de dadosPostgreSQL(quando a consulta está incorreta). Fecha #92887. #94180 (Alexey Milovidov). - Corrige vazamento de memória em views materializadas atualizáveis que usam consultas
SELECTcom várias subconsultas. #94200 (Antonio Andelic). - Corrige uma condição de corrida de dados entre
DataPartStorageOnDiskBase::removeesystem.parts. Fecha #49076. #94262 (Alexey Milovidov). - Removido o especificador
noexceptincorreto na atribuição por cópia da HashTable, que pode levar a um crash (std::terminate) em caso de exceções de memória. #94275 (Nikita Taranov). - Anteriormente, criar uma projeção com colunas duplicadas em GROUP BY (por exemplo,
GROUP BY c0, c0) e inserir dados resultava emstd::length_errorseoptimize_row_orderestivesse habilitado. Corrige #94065. #94277 (Alexey Milovidov). - Corrige um bug raro no cliente ZooKeeper ao se conectar, que causa travamentos e falhas. #94320 (Azat Khuzhin).
- Corrigida a otimização de funções para subcolunas, que não era aplicada a subcolunas. #94323 (Pavel Kruglov).
- Corrige um resultado possivelmente incorreto em
RIGHT JOINaninhados quandoenable_lazy_columns_replicationestá habilitado. O bug fazia com que todas as linhas nas colunas replicadas retornassem incorretamente o mesmo valor, em vez de seus valores distintos. Fecha #93891. #94339 (Vladimir Cherkasov). - Corrige o pushdown de filtro em SEMI JOIN usando conjuntos de equivalência. Não aplique o pushdown do filtro se os tipos dos argumentos tiverem mudado. Corrige #93264. #94340 (Dmitry Novik).
- Corrige o uso do DeltaLake CDF com o mecanismo de banco de dados DataLake (integração com catálogos delta lake). Fecha #94122. #94342 (Kseniia Sumarokova).
- Corrige o valor incorreto da métrica atual
FilesystemCacheSizeLimitquando a política de cacheSLRUera usada. #94363 (Kseniia Sumarokova). - A criação de um engine de banco de dados Backup com menos de dois argumentos agora retorna uma mensagem de erro mais descritiva (
Wrong number of argumentsem vez destd::out_of_range: InlinedVector::at(size_type) const failed bounds check.). #94374 (Robert Schulze). - Ignora revogações impossíveis, no nível do banco de dados, de privilégios globais com opção de concessão. #94386 (pufit).
- Corrige a leitura de offsets esparsos em partes compactas. Fecha #94385. #94399 (Pavel Kruglov).
- Não impedir ALTER em colunas que usam índices implícitos, mesmo quando o modo
throwdealter_column_secondary_index_modeé usado. #94425 (Raúl Marín). - Corrige um travamento em
TCPHandlerquando várias chamadas dereceivePacketsExpectQueryleemProtocol::Client::IgnoredPartUUIDs. #94434 (Miсhael Stetsyuk). - Corrige a ocultação de dados sensíveis em
system.functions. #94436 (Vitaly Baranov). - Corrige a desreferenciação de
nullptrcomsend_profile_eventsdesabilitado. Esta funcionalidade foi introduzida recentemente no driver Python do ClickHouse. Fecha #92488. #94466 (Alexey Milovidov). - Corrige a incompatibilidade do
.mrkdo índice de texto durante os merges. #94494 (Peng Jian). - Quando
read_in_order_use_virtual_rowestá habilitado, o código acessava colunas de índice com base no tamanho completo da chave primária sem verificar se o índice havia sido truncado, o que levava a uso após liberação / memória não inicializada. Fecha #85596. #94500 (Alexey Milovidov). - Corrige um erro causado por incompatibilidade de tipos ao enviar tabelas externas para subconsultas com GLOBAL IN quando os tipos são Nullable. Fecha #94097. #94511 (Alexey Milovidov).
- Em versões anteriores, consultas com múltiplas condições de índice na mesma expressão podem, por engano, gerar a exceção
Not found column. Corrige #60660. #94515 (Alexey Milovidov). - Corrige o tratamento incorreto de coluna Nullable em join em filtros de runtime. #94555 (Alexander Gololobov).
- A criação de uma workload dentro de outra workload que está em uso não causa mais travamento. #94599 (Sergei Trifonov).
- Corrige uma falha durante a otimização de ANY LEFT JOIN quando
isNotNullé avaliado em uma coluna inexistente. #94600 (Molly). - Corrige a avaliação da expressão padrão ao fazer referência a outras colunas com valores padrão calculados. #94615 (Alexey Milovidov).
- Corrige problemas de permissão em operações de BACKUP/RESTORE. #94617 (Pablo Marcos).
- Corrigida a falha causada por conversão de tipo incorreta quando o tipo de dado é
Nullable(DateTime64). #94627 (Miсhael Stetsyuk). - Corrige um bug em que certas consultas distribuídas com
ORDER BYpodiam retornar colunasALIAScom valores invertidos (ou seja, a colunaaexibindo os dados da colunabe vice-versa). #94644 (filimonov). - Corrigido o armazenamento dos resultados do keeper-bench em arquivo. #94654 (Antonio Andelic).
- Corrigidas estimativas incorretas com estatísticas do tipo MinMax quando a coluna contém números de ponto flutuante negativos. #94665 (zoomxi).
- Corrigida a leitura de arquivos Parquet quando a chave de um map é do tipo struct. #94670 (Konstantin Vedernikov).
- Corrige possível resultado incorreto de RIGHT join ao usar condições complexas em ON. Fecha #92913. #94680 (Vladimir Cherkasov).
- Preserva a granularidade constante do índice (use_const_adaptive_granularity) após mesclagens verticais. #94725 (Azat Khuzhin).
- Corrige um bug de mutação com subconsultas escalares e dependências de tabela. Se uma tabela tivesse dependências (índice ou projeções) em uma coluna, as subconsultas escalares poderiam ser avaliadas e armazenadas em cache sem dados, levando a alterações incorretas. #94731 (Raúl Marín).
- Corrige o fallback de cpu_pressure no AsynchronousMetrics em caso de erro. #94827 (Raúl Marín).
- A função
getURLHostRFCnão tinha verificações de limites antes de desreferenciar ponteiros. Quando uma string vazia era passada paradomainRFC, a função lia memória não inicializada, o que acionava erros do MSan. #94851 (Alexey Milovidov). - Corrige o modo somente leitura em discos criptografados. #94852 (Azat Khuzhin).
- Corrige um erro lógico em
LIMIT/OFFSETfracionário ao usar o analyzer antigo com tabelas distribuídas. Fecha #94712. #94999 (Ahmed Gouda). - Corrigido travamento em algumas condições quando os filtros de runtime de JOIN estão habilitados por padrão. #95000 (Alexander Gololobov).
- Aprimora o mascaramento de senhas na URL usada no mecanismo de tabela
URL()e na função de tabelaurl(). #95006 (Vitaly Baranov). - A função
toStartOfIntervalagora funciona da mesma maneira quetoStartOfX, em queXéDay, Week, Month, Quarter, Yearquandoenable_extended_results_for_datetime_functionsestá ativado. #95011 (Kirill Kopnev). - Corrigidas comparações de strings constantes que não respeitavam as configurações
cast_string_to_date_time_mode,bool_true_representation,bool_false_representationeinput_format_null_as_default. Fecha #91681. #95040 (Nihal Z. Miaji). - Corrige uma condição de corrida no cache do sistema de arquivos. #95064 (Alexey Milovidov).
- Corrige uma condição de corrida rara no leitor de Parquet. #95068 (Alexey Milovidov).
- Corrige a falha na otimização top K quando
LIMITé zero. Fecha #93893. #95072 (Alexey Milovidov). - A conversão de DateTime/inteiros para Time64 extrai o componente de hora do dia com
toTime, que não é monotônico. O templateToDateTimeMonotonicityafirmava incorretamente que essa conversão era monotônica, causando a exceção “Invalid binary search result in MergeTreeSetIndex” em builds de depuração. #95125 (Alexey Milovidov). - Recriou a lista de entradas do arquivo manifest apenas quando necessário (antes, isso era feito em cada iteração). #95162 (Daniil Ivanik).
melhoria em build, testes e empacotamento
- Adiciona um conjunto de ferramentas para profiling de alocações de memória no parser de ClickHouse SQL usando os recursos de heap profiling do jemalloc. #94072 (Ilya Yatsishin).
- Adicionada uma ferramenta que simplifica a depuração de alocações de memória no parser. Ela usa a métrica
stats.allocateddo jemalloc antes e depois de fazer o parse da consulta para a representação AST, para mostrar o que foi alocado. Também oferece suporte ao modo de profiling de memória, que gera um dump do profile antes e depois para criar relatórios de onde as alocações ocorreram. #93523 (Ilya Yatsishin). - Remove inclusões transitivas de libc++. #92523 (Raúl Marín).
- Torna paralelos alguns testes sequenciais: https://github.com/ClickHouse/ClickHouse/pull/93030/changes#diff-c3a73510dae653c9bbfa24300b32f5d6ec663fd4e72cc4a3d5daa6e4342915df. #93030 (Nikita Fomichev).
- Limpa algumas flags de build. #93679 (Raúl Marín).
- Atualiza o c-ares de v1.34.5 para v1.34.6. Isso corrige a
CVE-2025-62408do c-ares, que não é relevante para o ClickHouse. #94129 (Govind R Nair). - Usa
curl8.18.0. #94742 (Konstantin Bogdanov).