Índice
Lançamento do ClickHouse v25.11, 2025-11-27
Lançamento do ClickHouse v25.10, 2025-10-30
Lançamento do ClickHouse v25.9, 2025-09-25
Lançamento do ClickHouse v25.8 LTS, 2025-08-28
Lançamento do ClickHouse v25.7, 2025-07-24
Lançamento do ClickHouse v25.6, 2025-06-26
Lançamento do ClickHouse v25.5, 2025-05-22
Lançamento do ClickHouse v25.4, 2025-04-22
Lançamento do ClickHouse v25.3 LTS, 2025-03-20
Lançamento do ClickHouse v25.2, 2025-02-27
Lançamento do ClickHouse v25.1, 2025-01-28
Changelog de 2024
Changelog de 2023
Changelog de 2022
Changelog de 2021
Changelog de 2020
Changelog de 2019
Changelog de 2018
Changelog de 2017
Lançamento do ClickHouse 25.12, 2025-12-18
alteração incompatível com versões anteriores
- ALTER MODIFY COLUMN agora exige um DEFAULT explícito ao converter colunas Nullable em tipos não anuláveis. Antes, esses ALTERs podiam travar com erros de cannot convert null to not null; agora, os NULLs são substituídos pela expressão padrão da coluna. Resolve #5985. #84770 (Vladimir Cherkasov).
- O tokenizer ngram não retornará mais ngrams menores do que o tamanho N com o qual foi configurado. A pesquisa de texto não retornará linhas quando os tokens de busca estiverem vazios. #89757 (George Larionov).
- Ao alterar uma coluna de
StringparaNullable(String), não faremos mutação nos dados. Mas, para a função de agregaçãouniq, ela usa uma estrutura de dados diferente: para uma coluna Nullable, usaráAggregateFunctionNullcom um agregadoruniqaninhado. AAggregateFunctionNullserializará uma flag bool extra. Isso tornará o arquivo de estatísticas incompatível. A correção é adicionar uma flag para registrar se é uma coluna Nullable durante a serialização. O formato das estatísticas mudou, e o servidor pode falhar se tivermos estatísticas no formato antigo. Este PR #90904 corrigirá a falha e gerará uma exceção quando as estatísticas existentes usarem o formato legado. Para evitar a exceção, devemos executarALTER TABLE table MATERIALIZE STATISTICS ALLpara regenerar as estatísticas e corrigir isso. #90311 (Han Fei). - Remova as configurações
allow_not_comparable_types_in_order_by/allow_not_comparable_types_in_comparison_functions. Permitir tipos não comparáveis em ORDER BY ou em funções de comparação pode levar a erros lógicos e a resultados inesperados. Resolve #90028. #90527 (Pavel Kruglov). - O valor padrão da configuração
check_query_single_value_resultfoi alterado detrueparafalse. Isso faz com queCHECK TABLEretorne resultados detalhados para cada parte, em vez de um resultado agregado (1 = ok, 0 = erros encontrados). Em comparação com o comportamento anterior, isso provavelmente está mais alinhado com o que o usuário deseja. #91009 (Robert Schulze). - Várias correções relacionadas a índices implícitos. O esquema exibido ou armazenado (metadados do Keeper) não incluirá índices implícitos, como os criados pelas configurações
add_minmax_index_for_numeric_columnsouadd_minmax_index_for_string_columns. Isso pode causar erros de metadados quando uma tabela ReplicatedMergeTree é criada ou atualizada em uma versão mais recente, enquanto há uma réplica em um lançamento anterior. Nesses casos, envie os DDLs para a réplica antiga até que o cluster seja totalmente atualizado. #91429 (Raúl Marín). - Atualizado o clickhouse-client para retornar um código de saída diferente de zero (159 - TIMEOUT_EXCEEDED) quando uma consulta atinge o timeout devido a
receive_timeout. Anteriormente, os timeouts retornavam o código de saída 0 (sucesso), o que dificultava que scripts e automações detectassem falhas por timeout. #91432 (Sav). - Agora é proibido criar tabelas
MergeTreeespeciais (comoReplacingMergeTree,CollapsingMergeTreeetc.) com uma chaveORDER BYvazia, já que o comportamento de merge nessas tabelas não é definido. Se você ainda precisar criar uma tabela desse tipo, habilite a configuraçãoallow_suspicious_primary_key. #91569 (Anton Popov). - Corrigidas as funções
bitShiftLeftebitShiftRightpara retornarem 0 ou um valor vazio quando o deslocamento for exatamente do tamanho do tipo. #91943 (Pablo Marcos). - Em continuidade a #88380. Este PR classifica a desativação de argumentos posicionais nas projeções como uma alteração incompatível com versões anteriores. Além disso, ele introduz a configuração
enable_positional_arguments_for_projectionspara permitir uma atualização segura de um cluster do ClickHouse quando houver argumentos posicionais nas projeções. #92007 (Dmitry Novik). - Habilita dados compartilhados avançados para JSON por padrão. Após essa alteração, não será mais possível fazer downgrade para versões anteriores à 25.8, porque essas versões não conseguirão ler novas partes de dados com coluna JSON. Para upgrades seguros, recomenda-se definir a configuração
compatibilitypara a versão anterior ou as configurações do MergeTreedynamic_serialization_version='v2', object_serialization_version='v2'. #92511 (Pavel Kruglov).
Novo recurso
- Agora, os usuários podem configurar tabelas S3/Azure Queue para mover ou adicionar tags aos arquivos processados, além das opções anteriores de manter ou remover arquivos. Resolve #72944. #86907 (Murat Khairulin).
- No armazenamento S3/Azure Queue, adicionada a configuração
commit_on_select(para definir se os dados processados precisam ser confirmados e se a açãoafter_processingdeve ser aplicada). O valor padrão éfalse; corrigida a verificação de mv anexada duranteselect. #91450 (Kseniia Sumarokova). - Adicione instrumentação em tempo de execução com o XRay para depurar problemas em produção e fazer profiling de forma determinística. Resolve #74249. #89173 (Pablo Marcos).
- Permite usar segundos argumentos não constantes em
IN. Também oferece suporte a uma tupla como segundo argumento. #77906 (Yarik Briukhovetskyi). - Funções para calcular a área e o perímetro do tipo Geometry. #89047 (Konstantin Vedernikov).
- Implementada a função
dictGetKeys, que retorna a(s) chave(s) do dicionário cujo atributo é igual ao valor especificado. Ela usa um cache de lookup reverso por consulta, ajustado pela configuraçãomax_reverse_dictionary_lookup_cache_size_bytes, para acelerar lookups repetidos. #89197 (Nihal Z. Miaji). - Adiciona a configuração
type_json_skip_invalid_typed_pathspara desabilitar exceções em inserções/conversões de tipo para o tipo JSON quando o JSON de entrada não puder ser convertido em caminhos explicitamente tipados no tipo JSON. Nesses casos, usa o valor null/zero do caminho tipado. #89886 (Max Justus Spransy). - Adicionado suporte ao join
direct(loop aninhado) para tabelas MergeTree. Para usá-lo, especifique-o como a única opção na configuração:join_algorithm = 'direct'. #89920 (Vladimir Cherkasov). - Suporte a
ORDER BYna operaçãoCREATEpara iceberg + ordenação emINSERT. Resolve #89916. #90141 (Konstantin Vedernikov). - Introduz configurações no nível da projeção, expostas por meio da nova cláusula
WITH SETTINGSemALTER TABLE ... ADD PROJECTION. Essas configurações permitem que as projeções substituam determinados parâmetros de armazenamento do MergeTree (por exemplo,index_granularity,index_granularity_bytes) individualmente. #90158 (Amos Bird). - Adicionada a função SQL
HMAC(algorithm, message, key)como parte de #73900 e #38775. #90837 (Mikhail f. Shiryaev). - Adiciona suporte ao uso da chave primária e de data skipping indexes pela função
hasquando o primeiro argumento é um array constante. Fecha #90980. #91023 (Nihal Z. Miaji). - Implementado o novo formato de entrada e saída
Buffers. Esse formato é semelhante aNative; no entanto, diferentemente deNative, ele não armazena nomes de colunas, tipos de colunas nem metadados extras. Fecha #84017. #91156 (Nihal Z. Miaji). - Adiciona a configuração
max_streams_for_files_processing_in_cluster_functionspara controlar o número de streams para leitura paralela de arquivos em funções de tabela cluster. Fecha #90223. #91323 (Pavel Kruglov). - Mascaramento de dados para segurança em nível de linha (disponível apenas no ClickHouse Cloud). Adiciona um parser de política de mascaramento de dados para dar suporte a isso no clickhouse-client. #90552 (pufit).
- Adicionar a opção
allow_reentryà função agregadorawindowFunnel. Quando habilitada com strict_order, ela ignora eventos que violam a ordem em vez de interromper a análise do funil. Isso permite lidar com jornadas de usuário com recarregamentos (A->A->B) ou navegação de retorno (A->B->A->C) sem subestimar as taxas de conversão. #86916 (Lee ChaeRok). - Compatibilidade do Keeper com o ZooKeeper: CREATE com STATISTICS. #88797 (Konstantin Vedernikov).
- Suporte a watches persistentes do ZooKeeper no ClickHouse Keeper. Continuação, parte 2: https://github.com/ClickHouse/ClickHouse/pull/78207. #88813 (Konstantin Vedernikov).
- Adiciona a configuração do MergeTree
alter_column_secondary_index_modepara controlar o que fazer com os índices durante as mutações. Valores possíveis: throw, drop, rebuild e compatibility. Fecha #77797. #89335 (Raúl Marín). - Como os tipos de dados
TimeeTime64já estão prontos para uso em produção, a configuraçãoenable_time_time64_typeagora vem habilitada por padrão. #89345 (Yarik Briukhovetskyi). - Suporte à leitura do CDF do DeltaLake por meio da função de tabela
deltaLakecom as configuraçõesdelta_lake_snapshot_start_version,delta_lake_snapshot_end_version. O CDF (Change Data Feed, um recurso que permite capturar e consultar automaticamente alterações de dados no nível da linha — como inserções, atualizações e exclusões — entre versões de uma tabela Delta) é habilitado no DeltaLake por meio dedelta.enableChangeDataFeed. As colunas fornecidas com os dados são_change_type,_commit_version,_commit_timestamp. #90431 (Kseniia Sumarokova). - Adiciona suporte a índices negativos para acessar elementos de tupla (por exemplo,
tuple.-1). #91665 (Amos Bird).
recurso experimental
- Introduz o formato de índice de texto v3 e o promove ao status Beta.
- Foi introduzida uma nova lógica para executar automaticamente consultas usando réplicas paralelas, controlada pela configuração
automatic_parallel_replicas_mode. Durante a execução normal em um único nó, o ClickHouse coleta estatísticas que depois serão consideradas na etapa de planejamento. Se essas estatísticas indicarem que o uso de réplicas paralelas provavelmente será benéfico, o ClickHouse executará automaticamente a consulta em questão com réplicas paralelas. O conjunto de consultas compatíveis ainda é bastante limitado no momento. #87541 (Nikita Taranov). - Acesse instâncias do ClickHouse Cloud com credenciais do Cloud usando —login. #89261 (Krishna Mannem).
- Adiciona a configuração de nível de sessão
aggregate_function_input_formatpara melhorar consultasINSERTem tabelas com colunasAggregateFunction, permitindo inserir dados como estado serializado, valores brutos ou arrays. #88088 (Punith Nandyappa Subashchandra).
Melhoria de desempenho
- Otimize consultas
ORDER BY...LIMIT Nusando skip index e filtro de limiar dinâmico para reduzir significativamente as linhas processadas. #89835 (Shankar Iyer). - O ClickHouse agora usa skip indexes para realizar a análise de índices em cláusulas
WHEREcom condições de filtro conectadas porANDeOR. Anteriormente, a cláusulaWHEREprecisava ser uma conjunção (AND) de condições de filtro para utilizar skip indexes. Uma nova configuraçãouse_skip_indexes_for_disjunctions(padrão: ativado) controla esse recurso. (issue #75228). #87781 (Shankar Iyer). - Suporte à manutenção da leitura em ordem a partir da tabela à esquerda em operações LEFT/INNER JOIN, o que pode ser aproveitado por etapas subsequentes. Pode ser desabilitado com a configuração
query_plan_read_in_order_through_join. Suporte à otimização de linha virtual durante a leitura (consulte a configuraçãoread_in_order_use_virtual_row) para LEFT/INNER JOINs. #89815 (Vladimir Cherkasov). - Melhora o desempenho das colunas materializadas sob demanda com um limite maior. #90309 (Nikolai Kochetov).
- Os usuários devem notar menor latência na análise de índices na presença de grandes índices
minmax(milhões de grânulos). #90428 (Shankar Iyer). - Implementado um algoritmo simples de reordenação de junções DPsize para INNER JOINs. Uma nova configuração experimental controla quais algoritmos são usados e em que ordem; por exemplo,
query_plan_optimize_join_order_algorithm='dpsize,greedy'significa que o DPsize é tentado primeiro, com fallback para greedy. #91002 (Alexander Gololobov). - Falha imediata quando as consultas atingem o limite de linhas. Resolve #61872. #62804 (Sean Haynes).
- #84477 adicionou restrições às consultas
selectque podem ser usadas em consultasinsert select from s3Cluster(...)para execução distribuída paralela. Essa mudança permite usarwhere, o que já era possível anteriormente. #84611 (Igor Nikonov). - Fazer prefetch das chaves durante a iteração da tabela hash para minimizar cache misses. #84708 (lgbo).
- Otimize a função de agregação
histogram, ordenando apenas a cauda do array de pontos e ignorando a ordenação para entradas monotônicas, obtendo um ganho de desempenho de ~10%. #85760 (MakarDev). - Melhor desempenho de filtragem para predicados com funções como
like,equals,hase outras, aproveitando um filtro preliminar adicional criado a partir do índice de texto. Essa otimização é habilitada pela configuraçãoquery_plan_text_index_add_hint. Melhorado o uso do índice de texto para colunas do tipo de dadoMap. #88550 (Anton Popov). - Otimize buscas inversas repetidas em Dicionário ao fazer buscas mais rápidas em um conjunto pré-calculado de possíveis valores de chave. Fecha #7968. #88971 (Nihal Z. Miaji).
- Aprimora o desempenho e o comportamento da função agregada
topK. #90091 (Raúl Marín). - Desempenho aprimorado das operações de comparação de
Decimal. Resolve #28192. #90153 (Konstantin Bogdanov). - Adicionar suporte a partition pruning para funções do Apache Paimon, em continuidade a https://github.com/ClickHouse/ClickHouse/pull/84423. #90253 (JIaQi).
- Usa operações SIMD avançadas para funções lógicas por meio de despacho dinâmico. #90432 (Raúl Marín).
- Melhora o desempenho da função JIT ao evitar inicializar desnecessariamente a coluna de resultado com zero. #90449 (Raúl Marín).
- Acelera a descompressão de
T64com despacho dinâmico. #90610 (Raúl Marín). - Otimiza a filtragem in-place no leitor MergeTree. Resolve #87119. #90630 (Xiaozhe Yu).
- Introduz uma heurística adicional para reduzir a amplitude das opções de merge selecionadas. Executar merges menores aumentará a amplificação de gravação, mas, ao mesmo tempo, pode ajudar a evitar erros
TOO_MANY_PARTS. #91163 (Mikhail Artemenko). - Melhora o desempenho de consultas em tabelas S3 criadas com padrão glob ao aplicar os valores do filtro
_path, o que evita operações de listagem no S3. Controlado pela configuraçãos3_path_filter_limit. #91165 (Eduard Karacharov). - Acelera a conversão de colunas para bool (em cláusulas WHERE) usando despacho dinâmico. #91203 (Raúl Marín).
- Acelera a ordenação de um único bloco numérico com despacho dinâmico. #91213 (Raúl Marín).
- Adiciona uma otimização para remover colunas não utilizadas em planos de consulta. Resolve #75152. #76487 (János Benjamin Antal).
- O valor padrão de
query_plan_optimize_join_order_limitfoi alterado para10. #89312 (Alexey Milovidov). - Ative por padrão a configuração
allow_statistics_optimize, para que o otimizador de junções use estatísticas de coluna. #89332 (Alexey Milovidov). - Adiciona suporte a filtros de runtime para
ANTIJOINs. Além disso, refatora a implementação dos filtros de runtime para reduzir a contenção de locks. #89710 (Dmitry Novik). - Reduz o uso de memória durante as operações de merge na tabela
system.metric_log(habilitada por padrão), definindomin_bytes_for_wide_partevertical_merge_algorithm_min_bytes_to_activatecomo 128MB. #89811 (filimonov). - Permite usar índice invertido em PREWHERE. Resolve #89975. #89977 (Peng Jian).
- Não adicione provedores S3 ao usar OAuth do GCP, que melhora o desempenho no GCS. #91706 (Antonio Andelic).
Aprimoramento
- Adicionada a nova configuração
apply_row_policy_after_final, que permite que a consulta aplique a política de linha somente após o FINAL, o que torna mais correto o comportamento do ReplacingMergeTree com políticas de linha. Corrige #90986. #91065 (Yarik Briukhovetskyi). - No formato
Pretty, tuplas nomeadas agora são exibidas no formato Pretty JSON. Isso resolve #65022. #91779 (Mostafa Mohamed Salah). - Adicionados os campos
last_error_time,last_error_message,last_error_query_idelast_error_traceà tabelasystem.error_log. #89879 (Narasimha Pakeer). - O cliente CLI agora pode suprimir a mensagem ‘A versão do ClickHouse server é mais antiga que a do ClickHouse client. Isso pode indicar que o servidor está desatualizado e pode ser atualizado’ ao usar
--no-server-client-version-messageoufalse. #87784 (Larry Snizek). - Adicionada mensagem de erro informando que a parte foi deduplicada. #80264 (Aleksandr Musorin).
- Adicionadas as colunas
dependenciesemissing_dependenciesasystem.kafka_consumerspara indicar as tabelas de destino de visões materializadas de tabelas Kafka. Adicionado o contadorKafkaMVNotReady. #85346 (Ilya Golshtein). - Agora, as expressões padrão da tabela funcionam corretamente com inserções via remote e pelo protocolo nativo. Fecha #87972. #88540 (Pervakov Grigorii).
- Permite desativar a coleta assíncrona de métricas
PSI_*_*. #88557 (MikhailBurdukov). - Adicionado suporte à serialização esparsa para colunas do tipo
Nullable. Esta é uma continuação de #44539. #88999 (Amos Bird). - O disco
plain-rewritabletem implementação e layout próprios. Não vamos mais baseá-lo em discosplainregulares. #89807 (Mikhail Artemenko). - Qualquer exceção em HTTP nunca deve conter o fragmento final de tamanho zero. #89998 (Kaviraj Kanagaraj).
- Adiciona uma verificação no lado do servidor do Keeper durante o handshake para rejeitar clientes quando
last_zxid_seen (provided by the client) > last_processed_zxid. Isso evita leituras desatualizadas quando os clientes se reconectam a réplicas com atraso. #90016 (Miсhael Stetsyuk). - Adiciona
kafka_consumer_reschedule_mscomo uma configuração ajustável do engine de tabelaKafkapara definir por quanto tempo os consumidores aguardam novos dados. Resolve #89204. #90112 (Jeremy Aguilon). - Adiciona uma nova coluna
parts_in_progress_namesasystem.mutationspara aprimorar o diagnóstico. #90155 (Shaohua Wang). - Tentar novamente em caso de erros de rede quando a biblioteca S3 analisa uma resposta XML. #90216 (Sema Checherinda).
- Queremos executar as instâncias do Keeper em processos separados do servidor e, para evitar sobrecarregar o Prometheus em regiões grandes, devemos continuar expondo apenas as métricas relacionadas ao Keeper. #90244 (Miсhael Stetsyuk).
- Adiciona suporte para carregar a configuração do ClickHouse Client dos caminhos do XDG Base Directory (por exemplo,
~/.config/clickhouse/config.xml), além do local legado~/.clickhouse-client/. Resolve #89882. #90306 (Wujun Jiang). - Adicionado limite de tamanho em bytes para o lote de requisições de append no Keeper. O limite é controlado por
keeper_server.coordination_settings.max_requests_append_bytes_size. #90342 (Antonio Andelic). - Adiciona uma configuração para o Iceberg para evitar um número excessivo de partições. #90365 (Konstantin Vedernikov).
- Atualiza as mensagens de aviso ao se aproximar dos limites de guardrail: mostra os valores atual e
throw. #90438 (Nikita Fomichev). - Fazer streaming de fragmentos na tabela
system.filesystem_cacheem vez de criar um único fragmento com todo o estado do cache. A leitura do estado do cache do sistema de arquivos pode demorar bastante em caches grandes e consumir muita memória, portanto fazer streaming dele é indispensável para implantações de grande porte. #90508 (Kseniia Sumarokova). - Corrige a mensagem de exceção incorreta no particionamento do Hive: faltava um espaço. #90685 (Alexey Milovidov).
- As entradas no cache de índice de similaridade vetorial agora são removidas quando partes da tabela são excluídas ou substituídas por partes mais recentes. Antes disso, elas só eram removidas de forma preguiçosa por evicção de cache. #90750 (Shankar Iyer).
- Atualiza o chdig (uma ferramenta de diagnóstico do ClickHouse via linha de comando) para v25.12.1. #91394 (Azat Khuzhin).
- Agora, URLs pré-assinadas passam a funcionar com S3. Fecha #65032. #90827 (Yarik Briukhovetskyi).
- O índice de texto agora funciona com tabelas
ReplacingMergeTree. #90908 (Elmi Ahmadov). - Evite expor a versão do servidor ClickHouse em respostas de erro HTTP retornadas antes da autenticação. #91003 (filimonov).
- Agora, a exceção
HTTP_CONNECTION_LIMIT_REACHEDserá lançada quando ohard_limitpara a conexão de clientes HTTP for atingido. Esse limite está definido como20000para as conexões de disco. #91016 (Sema Checherinda). - Adiciona
system.background_schedule_pool{,_log}para melhorar a introspecção dos jobs em segundo plano. #91157 (Azat Khuzhin). - Agora você pode comentar ou descomentar rapidamente as linhas atualmente selecionadas no editor de consultas da interface web usando
Ctrl+/(ouCmd+/no Mac), facilitando desativar temporariamente partes da sua consulta durante os testes. #91160 (Samuel K.). - Adicionada
system.completionsà lista de tabelas sempre acessíveis. #91166 (Yakov Olkhovskiy). - Adicionados os eventos de perfil
FailedInitialQueryeFailedInitialSelectQuery. #91172 (RinChanNOW). - Corrigido um possível esgotamento do pool de threads ao ler amostras de coluna em colunas JSON com muitas subcolunas, respeitando a configuração
merge_tree_use_prefixes_deserialization_thread_poolem vez de usar o pool de threads incondicionalmente. #91208 (Raufs Dunamalijevs). - Suporte para o tipo
JSONemtupleElement. Fecha #81630. #91327 (Pavel Kruglov). - Corrigidos erros espúrios de limite de memória quando o cache de páginas em userspace está ativado. #91361 (Michael Kolupaev).
- O tokenizer de ngrams agora pode ser configurado com ngram_length = 1. #91529 (George Larionov).
- Adiciona suporte a configurações de armazenamento dentro de funções em
INSERT INTO FUNCTION, de forma semelhante ao suporte já existente emSELECT. Fecha #89386. #91707 (Kseniia Sumarokova). - Gerar “não implementado” para a consulta TRUNCATE em lagos de dados, em vez de simplesmente não fazer nada. Fecha #86604. #91713 (Kseniia Sumarokova).
- Defina o tamanho máximo da mensagem no leitor Parquet v3 para evitar o erro
DB::Exception: apache::thrift::transport::TTransportException: MaxMessageSize reached. #91737 (Arthur Passos). - Adiciona uma configuração
insert_select_deduplicate. Isso deixa mais claro como lidamos com a desduplicação em inserções comINSERT SELECT. Em geral, não é possível fazer desduplicação para essas consultas, mas, se a tabela não for alterada e o resultado estiver ordenado, é possível fazer a desduplicação em uma nova tentativa. Não conseguíamos rastrear se a origem era a mesma. Mas poderíamos verificar se o resultado da consultaSELECTestá ordenado. Na verdade, descobriu-se que, no caso geral, é realmente difícil verificar isso, mas o caso simples comORDER BY ALLé fácil. No momento, a lógica aqui está quebrada. Tentamos desduplicar, mas, na maioria dos casos, ela simplesmente não detecta duplicatas entre os blocos porque oSELECTretorna dados diferentes. #91830 (Sema Checherinda). - Permite conversão implícita de tipos ao converter
ArrayemQBit. Arrays de inteiros e de ponto flutuante agora podem ser inseridos diretamente em colunasQBitsem conversões explícitas de tipo. #91846 (Raufs Dunamalijevs). - Adicionado um limite para o tamanho de mensagens
CapnProto. Ele pode ser alterado comformat_capn_proto_max_message_size. #91888 (Antonio Andelic). - Refinar as métricas do mark cache para rastrear apenas consultas (após #83415,
MarkCacheHits/MarkCacheMissestambém foram atualizados para merges; este PR reverterá esse comportamento). #91910 (Azat Khuzhin). - Correção do fato de
client_info.interfaceser definido comoTCPem conexões locais. #91933 (Konstantin Bogdanov). - O parâmetro
refresh_certificates_task_intervalna configuração do cliente ACME agora passa a esperar um valor em segundos. #92211 (Konstantin Bogdanov). - Eventos de partes agora são registrados em
system.part_logparasystem.*_log. #92217 (Azat Khuzhin).
Correção de bug (mau funcionamento perceptível ao usuário em um lançamento estável oficial)
- Corrige alguns bugs no PREWHERE relacionados a supertipos dos tipos de dados
TimeeTime64. Resolve #84544. #84715 (Yarik Briukhovetskyi). - Inicializa
DNSResolverantes do uso para respeitar configurações personalizadas. Corrige #76296. #81302 (Zhigao Hong). - Corrige, em alguns casos, a leitura de subcolunas a partir de uma coluna com ponto no nome. Resolve #81261, #82058, #88169. #87205 (Pavel Kruglov).
- Corrige o travamento do engine GenerateRandom com parâmetros não literais: retorna BAD_ARGUMENTS com uma mensagem clara em vez de LOGICAL_ERROR. #88157 (Shafi Ahmed).
- Corrige a remoção de colunas de projeção não utilizadas quando há
UNION. Corrige #88180. #88350 (Sema Checherinda). - Corrigido o sharding incorreto na otimização de
JOINquando a chave primária está ordenada em ordem decrescente. Corrige #88512. #88794 (Amos Bird). - Reativa s3queue_keeper_fault_injection_probablility, corrige problemas. #88800 (Kseniia Sumarokova).
- Corrigidos vários problemas causados pela remoção prematura de colunas no TTL. Resolve #88002. #88860 (Amos Bird).
- Lança uma exceção quando temporary_files_buffer_size é definido como 0. Resolve #88900. #88917 (Vladimir Cherkasov).
- Corrige o erro
Bad getque ocorria durante a análise do índiceSetquando o predicado continha a constanteNULL. Corrige #84856 e #82974. #89429 (Nikolai Kochetov). - Corrige
Cannot add subcolumn X.Y: column with this name already exists. Corrige #89599. #89602 (Azat Khuzhin). - Corrige bugs nas funções
theilsUecontingencyque causavam resultados incorretos. #89760 (Nihal Z. Miaji). - Corrige problemas de estabilidade de aliases: corrige StrictnessLevel com SharedDatabaseCatalog, impede que o destino também seja um alias e implementa interfaces adicionais (getSerializationHints, supportsReplication, getStoragePolicy, totalBytesUncompressed, lifetimeRows, lifetimeBytes, storesDataOnDisk, tryLockForShare, lockForShare). Resolve #89106. #89812 (Kai Zhu).
- Corrige um possível travamento durante uma consulta remota com
ARRAY JOINdentro deINe a configuraçãoenable_lazy_columns_replicationhabilitada. Resolve #90361. #89997 (Pavel Kruglov). - Corrige um possível erro de lógica ao usar
analyzer_compatibility_join_using_top_level_identifiercom várias junções. #90010 (Vladimir Cherkasov). - Corrige, em alguns casos, a inferência de valores DateTime64 inválidos a partir de Strings em formatos de texto. Resolve #89368. #90013 (Pavel Kruglov).
- Realiza verificações de tamanho durante a desserialização de dados de estados de agregação e de outras fontes. #90031 (Raúl Marín).
- Dividir os intervalos das partes por características de volume para habilitar merges de descarte por TTL para volumes frios. Após este patch, as partes com TTL máximo < now serão removidas do armazenamento frio. O algoritmo agendará apenas descartes de uma única parte. #90059 (Mikhail Artemenko).
- No caso de uma tabela Kafka ter sido criada com a configuração
kafka_handle_error_mode = 'dead_letter_queue'e a tabelasystem.dead_letter_queuenão estivesse configurada, o servidor poderia travar. Esse comportamento foi corrigido. Resolve #87573. #90064 (Nikita Mikhaylov). - Corrige um possível erro
Column with Array type is not represented by ColumnArray column: Replicateddurante a inserção ao usarARRAY JOINcom a configuraçãoenable_lazy_columns_replicationhabilitada. #90066 (Pavel Kruglov). - Corrigido um travamento durante o encerramento normal do servidor devido à ordem incorreta de destruição. Resolve #82420. #90076 (Nikita Mikhaylov).
- Corrige erro lógico e bug de módulo na tabela de sistema
numbersquando se usa um passo grande. Fecha #83398. #90123 (Nihal Z. Miaji). - Corrige a gravação em Parquet que não preservava a ordem original ao usar o gravador nativo com uma única thread. Reverte parcialmente https://github.com/ClickHouse/ClickHouse/pull/64424/files. #90126 (Arthur Passos).
- Não aplique a otimização de nó constante à expressão LIMIT/OFFSET. Corrige #89607. #90156 (Yakov Olkhovskiy).
- Corrige a incompatibilidade no particionamento Hive que impedia uma atualização tranquila na versão 25.8 (corrige o erro
All hive partitioning columns must be present in the schemadurante a atualização). #90202 (Kseniia Sumarokova). - Corrige a exceção JSON em tabela Iceberg com coluna timestamp ao usar o catálogo Glue. Resolve #90210. #90209 (Alsu Giliazova).
- Corrige uma divergência na contagem de linhas em MergeTreeReaderIndex quando a única parte tem menos linhas do que index_granularity. Resolve #89691. #90254 (Peng Jian).
- Corrige consulta
WITH FILLinfinita comnan/inf. Resolve #69261. #90255 (Konstantin Bogdanov). - Corrige o erro ‘coluna não encontrada’ com query_plan_use_logical_join_step=0 e condição residual na cláusula JOIN ON. Resolve #88635. #90279 (Vladimir Cherkasov).
- Corrige algumas consultas com a otimização de projeções agregadas. #90288 (János Benjamin Antal).
- Corrige um bug na leitura de subcolunas de JSON em partes compactas que poderia levar ao erro
CANNOT_READ_ALL_DATA. Resolve #90264. #90302 (Pavel Kruglov). - Agora o ClickHouse não usará a otimização de leitura em ordem para Iceberg se a ordem de classificação não estiver especificada nos arquivos de manifesto (ou for diferente da default_sort_order da tabela). Corrige #89178. #90304 (alesapin).
- Time e Time64 agora devem respeitar corretamente os fusos horários ao converter de DateTime e DateTime64 (devem mostrar a hora no mesmo fuso horário em que ela é mostrada ao usuário como DateTime[64]). Fecha #89896. #90310 (Yarik Briukhovetskyi).
- Corrige um bug em que
SELECT CAST(CAST(now(), 'Time'), 'Time64')produzia um resultado incorreto. Fecha #88349. #90324 (Yarik Briukhovetskyi). - Corrigido um travamento causado por overflow de inteiro em randomStringUTF8. #90326 (Michael Kolupaev).
- Corrigidas as atualizações de descoberta de cluster em configurações multicluster com
multicluster_root_pathpara evitar atrasos e perda de atualizações do ZooKeeper. #90341 (RinChanNOW). - Corrige um possível erro lógico no prewhere em um caminho JSON inexistente com index_granularity_bytes=0. Resolve #86924. #90375 (Pavel Kruglov).
- Corrigido um bug em
L2DistanceTransposedque causava falhas quando o argumento precision excedia o intervalo válido. Resolve #90401. #90405 (Raufs Dunamalijevs). - Corrige um possível erro lógico em
arrayUnioncom o argumentoArray(Dynamic). Resolve #90270. #90409 (Pavel Kruglov). - Corrige um possível erro lógico ao renomear e modificar a mesma coluna Nested em um mesmo ALTER. Resolve #90406. #90412 (Pavel Kruglov).
- Corrige o parsing de valores JSON/Dynamic/Variant a partir de parâmetros HTTP. Resolve #88925. #90430 (Pavel Kruglov).
- Foi corrigida uma condição de corrida no particionamento do Hive, em que um
KeyValuePairExtractorestático causava corrupção de dados ou travamentos durante leituras concorrentes de arquivos. #90474 (Paresh Joshi). - Corrigidos cálculos incorretos de distância em
L2DistanceTransposedao usar vetores de referência do tipo array (que, por padrão, sãoArray(Float64))) com colunasQBitcujos tipos de elemento não sãoFloat64(Float32,BFloat16). A função agora faz automaticamente o cast do vetor de referência para corresponder ao tipo de elemento deQBit. Resolve #89976. #90485 (Raufs Dunamalijevs). - Corrige um bug em que
toDateTimeOrNull, ao receber um argumento negativo, retorna NULL. #90490 (Yarik Briukhovetskyi). - Corrige um possível erro lógico na saída de
LowCardinality(Bool/Date32)no formatoArrow. Resolve #83883. #90505 (Pavel Kruglov). - Corrigidas as funções de parsing de IPv4 (por exemplo,
IPv4StringToNumOrDefault) que retornavam valores incorretos para algumas entradas inválidas. Resolve #90544. Resolve #87583. #90545 (Michael Kolupaev). - Repetir a tentativa de markReplicasActive quando não for possível resolver o endereço durante a verificação do host local: registrar um aviso no log se houver uma exceção durante a verificação do próprio host em DDLTask. Em DDLWorker::markReplicasActive, lançar uma exceção para tentar novamente se nenhum host local for encontrado e houver IDs de host em clusters. #90556 (Tuan Pham Anh).
- Corrige um erro lógico causado por um caso raro na função
equals. Fecha #88142. #90557 (Nihal Z. Miaji). - Espera-se que isso corrija falhas do sanitizador de thread em
test_ssh/test.py::test_paramiko_password. #90612 (Govind R Nair). - Corrige erro lógico na função
concatWithSeparatorao usar uma coluna constante que não é do tipo string. Fecha #90596. #90655 (Nihal Z. Miaji). - Corrige a formatação de
INTO OUTFILE. Corrige #90207. #90656 (Azat Khuzhin). - Corrige um possível travamento ao executar mutações com subconsultas e
allow_statistics_optimize=1. Resolve #90626. #90664 (Azat Khuzhin). - Corrigida a validação do analisador para
LIMIT BYcomGROUP BY, para que gere o erroNOT_AN_AGGREGATEcorreto em vez deNOT_FOUND_COLUMN_IN_BLOCKquandoLIMIT BYusa colunas que não estão emGROUP BY. Fecha #89713. #90665 (xiaohuanlin). - Corrige erros de conversão de tipo ao usar colunas
LowCardinalitycomo chaves de partição. Fecha #89412. #90666 (xiaohuanlin). - Corrige um problema em que consultas com predicados de filtro contendo constantes geradas a partir da simplificação de funções não determinísticas (por exemplo,
shardNum()) podiam usar incorretamente o cache de condições da consulta. #90692 (Eduard Karacharov). - Corrige segfault em consulta com a função EXISTS na cláusula JOIN ON. Agora a consulta simplesmente retorna o erro
INVALID_JOIN_ON_EXPRESSION. Fecha #90698. #90719 (Vladimir Cherkasov). - Corrigido o erro lógico: ‘Inconsistent AST formatting’ em AccessRightsElement ao usar o banco de dados padrão sem nenhuma tabela. #90742 (Pablo Marcos).
- Corrige a validação de acesso para consultas
ALTER UPDATEquando a função de tabelaremoteé usada comlocalhostcomo host de destino. #90761 (pufit). - Corrige os Secrets ocultos em named collections para que dependam de
display_secrets_in_show_and_selecteformat_display_secrets_in_show_and_select. #90765 (Pablo Marcos). - Desative
enable_shared_storage_snapshot_in_query(causa vazamentos de memória). #90770 (Azat Khuzhin). - Corrige o problema de duplicação de dados em RIGHT JOIN com tabela distribuída quando réplicas paralelas estão habilitadas. #90806 (zoomxi).
- Corrige um possível estado inconsistente de dados compartilhados e caminhos dinâmicos em JSON, que poderia levar a erros lógicos e resultados inesperados. #90816 (Pavel Kruglov).
- Corrigido o ALTER MODIFY QUERY com dictGet() e o nome do dicionário em CSE para SharedCatalog (recurso disponível apenas na nuvem). #90860 (Azat Khuzhin).
- Corrige a compatibilidade da serialização em memória do estado de agregação de String. Uma serialização diferente poderia levar a resultados duplicados se a consulta de agregação fosse executada em instâncias com versões diferentes. A nova serialização pode ser habilitada com
serialize_string_in_memory_with_zero_byte. #90880 (Antonio Andelic). - Corrigido o flush em segundo plano do Buffer no caso de INSERTs frequentes. #90892 (Azat Khuzhin).
- Não listar o diretório pai de contrib/ em system.licenses. #90901 (Raúl Marín).
- Corrigido o alto uso de memória durante a leitura de colunas JSON/Dynamic/Variant. #90907 (Pavel Kruglov).
- Corrigida a alocação de buffer na função base58Decode. #90909 (Antonio Andelic).
- Corrige um possível erro lógico ao receber outra solicitação de leitura de uma réplica após o envio de uma resposta com a flag
finish=true. Isso era possível devido a uma condição de corrida lógica emMergeTreeReadPoolParallelReplicas, embora fosse muito improvável que ocorresse. #90921 (Nikita Taranov). - Corrigida a verificação de grants com curinga para REVOKE parcial. Adicionados mais testes. #90922 (pufit).
- Corrige a agregação de
SummingMergeTreeem colunasNestedLowCardinality. #90927 (Ivan Babrou). - Corrige o tratamento de privilégios globais em revogações com curinga Corrige o problema em que a revogação de um privilégio com curinga pode, acidentalmente, revogar alguns privilégios de nível global, como
CREATE USER. #90928 (pufit). - Corrige um possível loop infinito ao listar blobs no Azure. #90947 (Julia Kartseva).
- Corrige flushes excessivos do Buffer (consomem CPU e geram muitos logs). #91000 (Azat Khuzhin).
- … Não permitir definir adaptive_write_buffer_initial_size como 0. #91001 (Pedro Ferreira).
- Corrige um erro no JSON quando o caminho pode estar tanto nos dados compartilhados quanto nos caminhos dinâmicos durante a leitura de subobjetos em partes compactas com
write_marks_for_substreams_in_compact_partsdesativado. #91014 (Pavel Kruglov). - Corrige std::out_of_range em CTE com dictGet sem argumentos. Fecha #91027. #91022 (Pavel Kruglov).
- Corrige a leitura de subcolunas dinâmicas de colunas materializadas em mutações. Fecha #90653. #91040 (Pavel Kruglov).
- Corrigida a função
arrayFilter, que não funcionava ao usar um array vazio e a funçãoisNull. Fecha #73849. #91105 (Nihal Z. Miaji). - Corrige um erro lógico em
ARRAY JOINquando uma das colunas da tabela é do tipo tupla vazia. Fecha #90801. #91123 (Nihal Z. Miaji). - Corrige a materialização tardia de uma coluna adicionada por meio de alter add column em partes antigas. #91142 (Pavel Kruglov).
- Corrige a mesclagem de colunas JSON em Summing/Aggregating/Coalescing MergeTree. Antes, isso podia levar a caminhos dinâmicos inesperados ao gravar em partes de dados. #91151 (Pavel Kruglov).
- Corrige uma possível inconsistência na estrutura dinâmica durante a escrita em partes compactas que poderia levar a segfault. #91152 (Pavel Kruglov).
- Corrige o parsing de valores
floatsubnormais em notação científica. Fecha #78903. #91162 (Nihal Z. Miaji). - Corrige a inferência de esquema incorreta em INSERT SELECT a partir de uma subconsulta com uma fonte de esquema implícito. #91204 (Pervakov Grigorii).
- Corrige https://github.com/clickhouse/clickhouse/issues/91206: quando criamos uma tabela com estatísticas, gravamos algo e removemos uma das estatísticas, o sistema falha ao lê-la novamente, porque assumimos que a serialização e a desserialização terão os mesmos tipos de estatísticas. Nesta correção, verificamos se os metadados atuais contêm as estatísticas serializadas; caso contrário, criamos uma estatística simulada e desserializamos apenas para ignorá-la. #91227 (Han Fei).
- Corrige a inserção em uma coluna CoalescingMergeTree com Tuple de JSON/Dynamic e LowCardinality. Fecha #91215. #91270 (Pavel Kruglov).
- Correção no SYSTEM DROP FILESYSTEM CACHE ON CLUSTER. #91304 (Anton Ivashkin).
- Corrige um possível erro lógico “Bad cast from type DB::ColumnSparse to DB::ColumnNullable”. Fecha #91284. #91309 (Pavel Kruglov).
- Corrige uma falha ao desserializar fluxos de bytes criados de forma maliciosa em tipos QBit aninhados, algo que deveria ser impossível, mas que poderia ser explorado para derrubar o servidor. #91313 (Raufs Dunamalijevs).
- Corrigida a tabela de alias com argumentos vazios no banco de dados Replicated. Resolvido #91378. #91382 (Kai Zhu).
- Atualmente, a configuração está definida como false, então, quando a fila de async insert é descarregada em um servidor remoto, os inserts são sempre síncronos, mesmo que a configuração esteja como True para um usuário. #91386 (Mikhail f. Shiryaev).
- Remove colunas esparsas do cabeçalho nos algoritmos de merge. Fecha #91377. #91396 (Pavel Kruglov).
- Corrige um bug de particionamento Hive na versão 25.8 que pode levar ao lançamento incorreto da exceção
A hive partitioned file can't contain only partition columns. #91403 (Kseniia Sumarokova). - Corrige falha em
dictGetDescendantscausada porNULLquando o tipo de Dicionário oferece suporte a Hierarchy, mas nenhuma coluna éHIERARCHICAL. Fecha #92026. Fecha #92121. #91420 (Nihal Z. Miaji). - Corrige travamento na função
INquando são usados argumentos lambda e argumentos de tupla não constantes. Fecha #91379. #91446 (Nihal Z. Miaji). - Corrigidas escritas paralelas acionadas por inserções em MaterializedView em mecanismos de armazenamento que não oferecem suporte a elas. #91449 (Pervakov Grigorii).
- Tratamento de valores NULL em dicionários XML do Ytsaurus. #91465 (MikhailBurdukov).
- Corrigida a falha do tipo
QBitao usar parâmetros de consulta comoSET param_q=[1,2,3,4]; SELECT {q:QBit(Float32,4)}. #91488 (Raufs Dunamalijevs). - Corrigido LOGICAL_ERROR quando untuple é usado em uma expressão constante. #91507 (Pervakov Grigorii).
- Corrige uma possível condição de corrida no
librdkafka. #91521 (János Benjamin Antal). - Corrige erro lógico causado pelo argumento com asteriscos na função
remote. Fecha #90568. #91524 (Nihal Z. Miaji). - Corrige um overflow ao ler o formato ORC para os tipos Date e DateTime64. Fecha #70976. #91572 (Yarik Briukhovetskyi).
- Desabilite ALTERs para motores de tabela com armazenamento de objetos. Por exemplo, ALTER ADD PROJECTION poderia impossibilitar a reinicialização do servidor, já que motores com armazenamento de objetos não oferecem suporte a projeções. #91573 (Nikolay Degterinsky).
- Corrigido problema em que
L2DistanceTransposedretornava resultados incorretos ao usar vetores de referência não constantes (por exemplo, de uma tabela). #91517. #91593 (Raufs Dunamalijevs). - Corrige um bug em JOINs com condições FALSE que retornavam
LOGICAL_ERRORdurante a fase de dispatch. Fecha #91173. #91598 (Yarik Briukhovetskyi). - Corrige o aumento no uso de memória em join com “filtro adicional”, fecha #91011. #91664 (Vladimir Cherkasov).
- Corrige consultas com JOIN envolvendo view e réplicas paralelas habilitadas. #91813 (Igor Nikonov).
- Corrige a configuração do delta lake
delta_lake_snapshot_version, que podia produzir um resultado incorreto quando usada com o mecanismo de tabela (não a função de tabela) e com o valor -1 (desabilitado), após uma versão de snapshot ter sido usada anteriormente. Fecha #87676. #91818 (Kseniia Sumarokova). - Corrige o LOGICAL_ERROR no RecursiveCTEChunkGenerator. #91827 (Pablo Marcos).
- Corrige incompatibilidade da estrutura de blocos em consultas que usam FINAL e PREWHERE. #91847 (Antonio Andelic).
- Corrigido erro lógico com
join_use_nullse múltiplas junções, juntamente com junção cruzada. #91853 (Vladimir Cherkasov). - Adicionar mecanismo de reparo para JSON com caminho duplicado em dados compartilhados e caminhos dinâmicos, que podem ocorrer devido ao bug corrigido em https://github.com/ClickHouse/ClickHouse/pull/90816. #91886 (Pavel Kruglov).
- Corrigido o bug no leitor ORC ao ler colunas do tipo string codificadas com DICTIONARY_V2 e que contêm apenas valores NULL. #91889 (Peng Jian).
- Corrige uma inconsistência de serialização entre substreams esparsos e Nullable em colunas Tuple que poderia levar a partes corrompidas ou falhas durante a leitura. Isso corrige https://github.com/ClickHouse/ClickHouse/pull/91851. @Algunenano Você poderia, por favor, ajudar a verificar se isso pode corrigir o teste de estresse no repositório privado? @CurtizJ Você também poderia dar uma olhada, por favor? Obrigado! #91932 (Amos Bird).
- Corrigido
Directory '{}' does not exist (LOGICAL_ERROR)ao criar backups em discos regraváveis simples. #91935 (Julia Kartseva). - Evita travamento ao conectar ao MongoDB com coleções nomeadas. #91959 (Antonio Andelic).
- Corrige o erro “TOO_MANY_MARKS”, que poderia ocorrer após algumas consultas
ALTERem partes compactas. #91980 (alesapin). - Fecha https://github.com/clickhouse/clickhouse/issues/87417 o schema de escrita do formato v1 tem um erro: o tipo de “added_snapshot_id” deve ser “long”, e não “null, long”, porque ele é obrigatório. isso é um bug porque não é compatível com outros sistemas, como o Spark. quando misturamos esses manifest files, o bug ocorre. #92078 (Han Fei).
- Corrige os nomes incorretos de
readWKTereadWKB, que estavam com o estilo errado nas versões anteriores. #92094 (Alexey Milovidov). - Corrige numerosos erros lógicos, erros de overflow e bugs funcionais na função
midpoint. Fecha #91816. #92102 (Nihal Z. Miaji). - Corrige resultados incorretos que poderiam ocorrer ao ler determinadas subcolunas (por exemplo, o tamanho da string) com codificação esparsa. #92156 (Pavel Kruglov).
- Corrigido
system.view_refreshes, que falhava com o erroNo macro 'replica' in config. #92203 (Michael Kolupaev). - Corrigido o replace de UDF em format. #92210 (Raúl Marín).
- Em
ddlworker::markreplicasactive, se nenhum host ativo for encontrado eremote_serverstiver alguns host_ids, registramos um aviso no log em vez de lançar uma exceção. #92223 (Tuan Pham Anh). - Coloque os operadores
IN,NOT INentre parênteses. Corrige #85075. #92225 (Mikhail f. Shiryaev). - Corrigido o backup de tabelas KeeperMap e Memory. Criar backup de tabelas usando um desses dois motores com
max_compress_block_sizedefinido como0podia causar um travamento. #92237 (Antonio Andelic). - Corrige falha ao ler dados String e a subcoluna .size do engine Log. Isso corrige #89909. Isso inclui alguns commits de #92290. #92341 (Amos Bird).
- Corrige o erro lógico causado pelo uso do tipo
Nothingem argumentos da funçãocaseWithExpression. Fecha #85354. #92351 (Nihal Z. Miaji). - Corrige possível travamento em funções de agregação após MEMORY_LIMIT_EXCEEDED. #92390 (Azat Khuzhin).
Melhorias de compilação/testes/empacotamento
- Use
clang-21na CI. #87074 (Konstantin Bogdanov). - Evite downloads pelo CMake ao fazer compilação cruzada. #90506 (Raúl Marín).
Lançamento do ClickHouse 25.11, 2025-11-27
alteração incompatível com versões anteriores
- Remoção do tipo obsoleto
Object. #85718 (Pavel Kruglov). - Remoção do recurso obsoleto
LIVE VIEW. Se você usaLIVE VIEW, não será possível atualizar para a nova versão. #88706 (Alexey Milovidov). - Nas versões anteriores, o tipo
Geometryera um alias deString, mas agora é um tipo com funcionalidade completa. #83344 (scanhex12). - Aplica escape aos nomes de arquivo criados para as subcolunas do tipo
Variantem data parts Wide de tabelas MergeTree. Essa alteração quebra a compatibilidade com tabelas antigas com tipos de dados Variant/Dynamic/JSON. Ela corrige o armazenamento de tipos com símbolos especiais dentro de Variant (como DateTime com um timezone específico que contém\). O escape pode ser desativado alterando a configuração do MergeTreeescape_variant_subcolumn_filenames(para manter a compatibilidade, desative essa configuração no MergeTree ou defina a configuraçãocompatibilitypara a versão anterior antes da atualização). Resolve #69590. #87300 (Pavel Kruglov). - Habilita por padrão o formato de serialização
with_size_streampara o tipo de dadoString. Essa alteração é compatível com versões anteriores, mas o novo formato de serialização é suportado apenas a partir da versão 25.10, o que significa que não será possível fazer downgrade para versões anteriores à 25.10. Se você quiser manter a possibilidade de fazer downgrade para a 25.9 e anteriores, configureserialization_info_versioncomobasicestring_serialization_versioncomosingle_streamna seçãomerge_treeda configuração do servidor. #89329 (Alexey Milovidov). - Adiciona suporte à marcação de exceções na resposta de resultados HTTP, permitindo que os clientes processem exceções com mais confiabilidade. Resolve #75175. A configuração
http_write_exception_in_output_formatvem desativada por padrão para manter a consistência entre formatos. #88818 (Kaviraj Kanagaraj). Embora isso não deva quebrar nenhum comportamento existente (no pior caso, uma string estranha será adicionada à mensagem de exceção), ainda faz sentido usar “alteração incompatível com versões anteriores” como categoria do changelog por precaução (porque nunca se sabe como alguns scripts malfeitos podem interpretar a mensagem de exceção). - Proíbe a criação de vários discos
plain-rewritablesobre o caminho compartilhado do armazenamento de objetos, pois isso pode levar a comportamento indefinido durante colisões entre diferentes transações de armazenamento de metadados. #89038 (Mikhail Artemenko). - Corrige a precedência das configurações SASL do armazenamento Kafka. As configurações SASL no nível da tabela especificadas em consultas CREATE TABLE agora substituem corretamente as configurações específicas de consumer/producer definidas nos arquivos de configuração. #89401 (János Benjamin Antal).
- Timestamps do Parquet sem timezone (isAdjustedToUTC=false) agora são lidos como DateTime64(…, ‘UTC’) em vez de DateTime64(…). Isso é menos incorreto, pois converter esse timestamp UTC em string produz uma representação do horário local correto. Use
input_format_parquet_local_time_as_utc = 0para obter o comportamento antigo. Resolve #87469. #87872 (Michael Kolupaev). - Uma pequena melhoria no codec
T64: ele não aceita mais tipos de dados desalinhados com o tamanho do elemento de compressão, o que antes acionava um bug. Resolve #89282. #89432 (yanglongwei).
Novo recurso
- Introduz o tipo
Geometry. Adiciona suporte à leitura dos formatosWKBeWKTpara esse tipo. Em versões anteriores, o tipoGeometryera um alias deString, mas agora é um tipo completo. #83344 (scanhex12). - Foi adicionada a instrução SQL
EXECUTE ASpara dar suporte à impersonação de usuário. Resolve #39048. #70775 (Shankar). - Adiciona a função
naiveBayesClassifierpara classificar texto usando Naive Bayes com base em ngrams. #88677 (Nihal Z. Miaji). - Adiciona suporte a
LIMITeOFFSETfracionários para selecionar uma fração de uma tabela. Fecha #81892. #88755 (Ahmed Gouda). - Subsistema do ClickHouse para o catálogo Microsoft OneLake. #89366 (scanhex12).
- Adiciona a função
flipCoordinates, que expõe o número necessário de dimensões em um array e troca os ponteiros dentro da coluna Tuple. Resolve #79469. #79634 (Sachin Kumar Singh). - Inclui a tabela
system.unicode, contendo uma lista de caracteres Unicode e suas propriedades. Fecha #80055. #80857 (wxybear). - Adiciona uma nova configuração do MergeTree
merge_max_dynamic_subcolumns_in_wide_part, que permite limitar o número de subcolunas dinâmicas na parte Wide após a mesclagem, independentemente dos parâmetros especificados no tipo de dados. #87646 (Pavel Kruglov). - Adicionado suporte à função de janela
cume_dist. Corrige #86920. #88102 (Manuel). - Agora, o usuário pode adicionar um novo argumento
preprocessorà criação de índice de texto. O argumento é uma expressão arbitrária que transforma cada documento antes da tokenização. #88272 (Jimmy Aguilar Mena). - Adiciona um campo
memory_usageaX-ClickHouse-ProgresseX-ClickHouse-Summary. Isso pode ser usado para coletar, no lado do cliente, o uso de memória das consultas em tempo real. #88393 (Christoph Wurm). - Adiciona a configuração
into_outfile_create_parent_directoriespara criar automaticamente os diretórios pai deINTO OUTFILE, evitando erros quando os caminhos de saída não existem. Isso simplifica fluxos de trabalho em que as consultas gravam resultados em diretórios aninhados. Resolve #88610. #88795 (Saksham). - Adiciona suporte à sintaxe
CREATE OR REPLACEpara tabelas temporárias. Fecha #35888. #89450 (Aleksandr Musorin). - Suporte a
arrayRemovepara remover todos os elementos iguais aelemdo arrayarr. Isso é necessário apenas para compatibilidade com o Postgres, já que o ClickHouse já tem uma função muito mais poderosa,arrayFilter. Resolve #52099. #89585 (tiwarysaurav). - Introduz a função escalar
midpoint, que calcula a média. Resolve #89029. #89679 (simonmichal). - A interface web agora conta com um botão de download. Ele baixa o resultado completo, mesmo que a interface exiba apenas parte dele. #89768 (Alexey Milovidov).
- Adiciona a configuração
arrow_flight_request_descriptor_typepara oferecer suporte ao Dremio e a outros servidores Arrow Flight que exigem descritores no formato de comando. Implementa #89523. #89826 (Shreyas Ganesh). - Novas funções de agregação
argAndMineargAndMaxque retornam o argumento e o respectivo valor extremo. Em versões anteriores, isso também era possível usando uma tupla como argumento. #89884 (AbdAlRahman Gad). - Configurações para gravar e verificar checksums do Parquet. #79012 (Michael Kolupaev).
- Adicionada a configuração
kafka_schema_registry_skip_bytesao engine de tabela Kafka para ignorar bytes do cabeçalho do envelope (por exemplo, o prefixo de 19 bytes do AWS Glue Schema Registry) antes de fazer o parsing da carga útil da mensagem. Isso permite que o ClickHouse consuma mensagens de serviços de registro de esquema que adicionam cabeçalhos de metadados. #89621 (Taras Polishchuk). - Adicionada a função
h3PolygonToCells, que pode preencher uma geometria com hexágonos H3. Resolve #33991. #66262 (Zacharias Knudsen). - Adiciona a coluna virtual
_tags(Map(String, String)) com todas as tags associadas ao blob no S3 (Observação: se o blob não tiver nenhuma tag, nenhuma requisição adicional será feita). Resolve #72945. #77773 (Zicong Qu).
recurso experimental
- Suporte à obtenção de certificados TLS de provedores ACME, RFC 8555, como o Let’s Encrypt. Isso permite a configuração automática de TLS em clusters distribuídos. #66315 (Konstantin Bogdanov).
- Suporte parcial à API HTTP de consulta do Prometheus. Para habilitá-la, adicione uma regra com o tipo
query_apina seção<prometheus>do arquivo de configuração. Os handlers compatíveis são/api/v1/query_rangee/api/v1/query. #86132 (Nikita Mikhaylov). - A busca de texto completo agora está em beta (antes, estava em estágio experimental). #88928 (Robert Schulze).
Aliaspassou para experimental e pode ser habilitado comallow_experimental_alias_table_engine = 1. #89712 (Kai Zhu).
Melhoria de desempenho
- O leitor de Parquet v3 vem habilitado por padrão. #88827 (Michael Kolupaev).
- Execução distribuída: melhor divisão das tarefas por IDs dos grupos de linhas, e não por arquivos. #87508 (scanhex12).
RIGHTeFULLJOINs agora usam ConcurrentHashJoin; isso significa que esses tipos de junção agora são executados com um grau mais alto de paralelismo. Melhora diversos casos deRIGHTeFULLJOINs em até duas vezes. Resolve #78027. #78462 (Yarik Briukhovetskyi).- Otimização para valores elevados de expressões constantes em consultas. Fecha #72880. #81104 (Yakov Olkhovskiy).
- Consultas
SELECTaté 8x mais rápidas com forte pruning de partições em tabelas com 10K+ partes. #85535 (James Morrison). - Quando uma consulta usa um mapa hash fixo para o estado de agregação (group by em um inteiro pequeno), o ClickHouse mescla o estado de agregação em paralelo para acelerar a consulta. #87366 (Jianfei Hu).
- Permite usar projeções (que usam
SELECTde_part_offsete umORDER BYdiferente) como índice secundário. Quando ativado, determinados predicados da consulta podem ser usados para ler dados de partes de projeção e gerar bitmaps para filtrar linhas com eficiência durante a etapa de PREWHERE. Este é o terceiro passo para implementar o índice de projeção, após #80343. #81021 (Amos Bird). - Corrige o VDSO em sistemas Aarch64 raros e possivelmente em outras combinações de arquitetura/kernel. #86096 (Tomas Hulata).
- Melhora a velocidade de descompressão do LZ4 ao simplificar o código e ajustar o algoritmo de seleção. #88360 (Raúl Marín).
- O S3 particiona objetos internamente com base em prefixos do nome da chave e se ajusta automaticamente a altas taxas de requisições por partição. Essa mudança introduz duas novas configurações de BACKUP: data_file_name_generator e data_file_name_prefix_length. Quando data_file_name_generator=checksum, os arquivos de dados do backup recebem nomes com base em um hash do seu conteúdo. Exemplo: para um checksum =
abcd1234ef567890abcd1234ef567890edata_file_name_prefix_length = 3, o caminho resultante será:abc/d1234ef567890abcd1234ef567890. A distribuição resultante das chaves melhora o balanceamento de carga entre as partições do S3 e reduz o risco de throttling. #88418 (Julia Kartseva). - Desempenho do índice de texto aprimorado com cache de blocos de dicionário e uso de tabelas hash para buscas por token em vez de busca binária. #88786 (Elmi Ahmadov).
- As consultas agora podem se beneficiar simultaneamente de
optimize_read_in_orderequery_plan_optimize_lazy_materialization. Resolve #88767. #88866 (Manuel). - Use projeção agregada em consultas com
DISTINCT. Fecha #86925. #88894 (Nihal Z. Miaji). - Cache de posting lists para melhorar o desempenho em execuções consecutivas. #88912 (Elmi Ahmadov).
- Executa a transformação LIMIT BY em streaming quando a ordem de ordenação da entrada corresponde às chaves do LIMIT BY. #88969 (Eduard Karacharov).
- Permite reescrever
ANY LEFT JOINouANY RIGHT JOINcomoALL INNER JOINem alguns casos. #89403 (Dmitry Novik). - Reduza a sobrecarga do logging: use menos operações atômicas por registro. #89651 (Sergei Trifonov).
- Quando os filtros em tempo de execução estiverem habilitados em uma consulta com múltiplas junções e vários filtros em tempo de execução forem adicionados, aplique em cascata as etapas de pushdown dos filtros recém-adicionados. #89725 (Alexander Gololobov).
- Acelerar ligeiramente algumas operações
uniqExactreduzindo a sobrecarga da fusão de tabelas hash. #89727 (Raúl Marín). - Aumento do limite de linhas para lazy materialization de 10 para 100. #89772 (Alexey Milovidov).
- Habilita a configuração
allow_special_serialization_kinds_in_output_formatspor padrão. Isso resultará em menor uso de memória e melhorará a velocidade das consultas ao gerar a saída de colunas Sparse/Replicated em alguns formatos de saída por linha. #89402 (Pavel Kruglov). - Adicionado paralelismo às consultas
ALTER TABLE ... FREEZE. #71743 (Kirill). - Adiciona cache para autenticação com bcrypt. #87115 (Nikolay Degterinsky).
- Se um skip index usado em uma consulta com
FINALestiver em uma coluna que faz parte da chave primária, a etapa adicional de verificar a interseção da chave primária em outras partes é desnecessária e agora não é mais executada. Resolve #85897. #88368 (Shankar Iyer). - A otimização
enable_lazy_columns_replicationagora é o padrão, o que reduzirá o uso de memória em junções. #89316 (Alexey Milovidov). - Adiciona um cache por tabela de
ColumnsDescriptionpara partes, reduzindo o uso de memória quando as tabelas contêm muitas partes e muitas colunas. #89352 (Azat Khuzhin). - Foi introduzido um cache para o cabeçalho desserializado do índice de texto, para reduzir I/O e melhorar o desempenho das consultas. O cache pode ser configurado por meio das novas configurações do servidor: -
text_index_header_cache_policy-text_index_header_cache_size-text_index_header_cache_max_entries-text_index_header_cache_size_ratio. #89513 (Elmi Ahmadov).
Aprimoramento
- UNION deve unificar os tipos com
Variant, se necessário, quandouse_variant_as_common_typeestiver definido. Corrige #82772. #83246 (Mithun p). - Roles definidos em SQL agora podem ser concedidos a usuários definidos em
users.xml. #88139 (c-end). - Registrar consultas internas (como as executadas internamente por dicionários, views materializadas atualizáveis etc.) e adicionar a nova coluna
is_internalasystem.query_log. #83277 (Miсhael Stetsyuk). - Operador
IS NOT DISTINCT FROM(<=>) aprimorado: adicionado suporte ao inversoIS DISTINCT FROMe a operandos numéricos compatíveis de tipos diferentes (por exemplo,Nullable(UInt32)eNullable(Int64)). Resolve #86763. #87581 (yanglongwei). clickhouse-clienteclickhouse-local, no modo interativo, destacarão na linha de comando os identificadores que tenham o mesmo nome do identificador atual sob o cursor. #89689 (Alexey Milovidov).- As configurações relacionadas ao formato de saída agora não afetam o cache de consultas. Além disso, o cache de consultas passará a ignorar a configuração
http_response_headers. Isso é necessário para permitir a implementação de funcionalidades como baixar o resultado do cache na interface web. #89756 (Alexey Milovidov). - A interface HTTP fornecerá os cabeçalhos
AgeeExpiresquando o cache de resultados de consulta for usado. A presença do cabeçalhoAgeindica se o resultado vem do cache, enquantoExpirestambém é definido na primeira gravação. Introduz novos eventos de perfil:QueryCacheAgeSeconds,QueryCacheReadRows,QueryCacheReadBytes,QueryCacheWrittenRows,QueryCacheWrittenBytes. #89759 (Alexey Milovidov). - Permitir inserções em tabelas remotas e de lago de dados quando
disable_insertion_and_mutationestiver habilitado (isto é, warehouses somente leitura no ClickHouse Cloud). #88549 (Alexander Tokmakov). - Adicionada a consulta
SYSTEM DROP TEXT INDEX CACHES. #90287 (Anton Popov). - Habilite
enable_shared_storage_snapshot_in_querypor padrão para obter melhores garantias de consistência. Não deve haver desvantagens. #82634 (Alexey Milovidov). - Adicionada a configuração
send_profile_events, que permite aos clientes reduzir o tráfego de rede quando os eventos de perfil não são utilizados. #89588 (Kaviraj Kanagaraj). - Permite desativar o download em segundo plano de segmentos próximos por consulta. Corrige #89524. #89668 (tanner-bruce).
- Permitir
FETCH PARTITIONquando houver discos com falha em tabelas MergeTree replicadas. #58663 (Duc Canh Le). - Corrigida exceção não tratada ao obter o schema da tabela MySQL no engine de banco de dados MySQL. #69358 (Duc Canh Le).
- Todas as consultas DDL
ON CLUSTERagora são executadas no contexto do usuário original da consulta para uma validação de acesso melhor. #71334 (pufit). - Adicionado suporte a
UUIDemParquetquando representado porFixedString(16)com o tipo lógicoUUID. #74484 (alekseev-maksim). - Desabilita o ThreadFuzzer por padrão em binários que não são do servidor. #89115 (Raúl Marín).
- Tornar as otimizações do plano de consulta visíveis ao subplano de entrada da subconsulta correlacionada, adiando sua materialização. Parte de #79890. #85455 (Dmitry Novik).
- Você pode ver uma barra de progresso, logs e estatísticas de desempenho para consultas
CREATE OR REPLACE TABLEcomSELECTno clickhouse-client. Essa consulta não resultará mais em timeout, mesmo que oSELECTdemore bastante. Resolve #38416. #87247 (Diskein). - Suporte aos tipos
JSONeDynamicnas funções de hash. Resolve #87734. #87791 (Pavel Kruglov). - Implementadas as partes ausentes do servidor ArrowFlight. #88013 (Vitaly Baranov).
- Adiciona várias métricas de histograma para o servidor e o Keeper para instrumentar a duração das etapas de execução das requisições do Keeper. As seguintes métricas serão adicionadas ao servidor:
keeper_client_queue_duration_milliseconds,keeper_client_send_duration_milliseconds,keeper_client_roundtrip_duration_milliseconds. As seguintes métricas serão adicionadas ao Keeper:keeper_server_preprocess_request_duration_milliseconds,keeper_server_process_request_duration_milliseconds,keeper_server_queue_duration_milliseconds,keeper_server_send_duration_milliseconds. #88158 (Miсhael Stetsyuk). - Adiciona a opção
input_headersà consultaEXPLAINpara incluir cabeçalhos de entrada nas etapas. #88311 (János Benjamin Antal). - Adiciona eventos de perfil para contar o número de requisições ao S3 e ao AzureBlobStorage atrasadas por throttlers. Corrige a inconsistência entre os eventos de perfil ThrottlerCount relacionados a disk e os não relacionados a disk. Agora, as requisições HTTP DELETE do AzureBlobStorage não sofrem limitação. #88535 (Sergei Trifonov).
- Armazena em cache as estatísticas em nível de tabela e adiciona duas configurações: a configuração do MergeTree
refresh_statistics_intervaldefine o intervalo de atualização do cache de estatísticas; 0 significa que nenhum cache será criado. A configuração de sessãouse_statistics_cachedefine se as estatísticas em nível de tabela devem ser usadas em uma consulta. Às vezes, queremos estatísticas melhores, então optamos por ignorar esse cache. #88670 (Han Fei). - Corrigida a deserialização binária de
ArrayeMappara usar a configuraçãomax_binary_array_sizeem vez demax_binary_string_sizena validação dos limites de tamanho. Isso garante que os limites corretos sejam aplicados na leitura no formatoRowBinary. #88744 (Raufs Dunamalijevs). - Foi introduzida a classe
LockGuardWithStopWatche ela passou a ser usada no background pool para executar merges. Se um mutex permanecer retido por um segundo, ou se alguma thread demorar mais de um segundo para obtê-lo, uma mensagem de aviso será exibida. O código mais pesado foi movido do destrutor deMergeMutateSelectedEntrypara o métodofinalizepara evitar reter o lock no executorMergeTreeBackgroundpor tempo demais. #88898 (Nikita Mikhaylov). - Permite usar automaticamente regiões opt-in da AWS para o S3 quando a região não é especificada no endpoint. Referência: regiões opt-in da AWS. #88930 (Andrey Zvonov).
- Agora é possível cancelar a consulta no clickhouse-client pressionando Ctrl-C enquanto o pager estiver em execução. Resolve #80778. #88935 (Grigorii).
- A interface web exibirá barras na tabela mesmo quando os valores forem negativos. Assim, ela poderá exibir um gráfico de barras bilateral, com cores diferentes nos lados negativo e positivo. #89016 (Alexey Milovidov).
- Desative
shared_merge_tree_create_per_replica_metadata_nodespara reduzir a quantidade de metadados armazenados peloSharedMergeTreeno Keeper. #89036 (Alexander Tokmakov). - Fazer o
S3Queuerespeitar a configuração do servidordisable_insertion_and_mutation. #89048 (Raúl Marín). - Definir
s3_retry_attemptscom valor padrão de 500 na versão 25.6 para garantir que os backups sejam concluídos com sucesso quando houver um reparticionamento no S3 e o S3 responder com errosSlowDownpor mais de 10 minutos. #89051 (Nikita Mikhaylov). - As configurações
kafka_compression_codecekafka_compression_levelagora podem ser usadas para especificar a compressão de produtores do Kafka em ambos os motores Kafka. #89073 (János Benjamin Antal). - Adiciona uma nova coluna
statisticsemsystem.columns, indicando os tipos de estatísticas criadas para esta tabela. Se um tipo de estatística for criado automaticamente, ele será exibido como (auto) no sufixo. #89086 (Han Fei). - Melhorada a mensagem de erro quando uma expansão genérica é passada em vez do nome do cluster para uma função de tabela
*Cluster. #89093 (Konstantin Bogdanov). - YTsaurus: permitir o uso de uma replicated_table como fonte de dados. #89107 (MikhailBurdukov).
- Consultas iniciadas com espaços em branco não são mais salvas no histórico da CLI. #89116 (Konstantin Bogdanov).
- Suporte para Array de String como entrada nas funções
hasAnyTokensouhasAllTokens. #89124 (Elmi Ahmadov). - Modificar a forma como os discos plain-rewritable armazenam seus metadados em memória, corrigindo inúmeros bugs relacionados ao aninhamento de diretórios e afins. #89125 (Mikhail Artemenko).
- As subconsultas que fazem parte de expressões
INao consultar uma tabela Iceberg serão pré-calculadas corretamente antes da análise de partition pruning. #89177 (Daniil Ivanik). - Ativado
create_table_empty_primary_key_by_defaultpor padrão. Isso melhora a usabilidade. #89333 (Alexey Milovidov). - Corrige um erro no código do engine de banco de dados
Backup, que podia gerar uma consulta inválida comSHOW CREATE DATABASEou ao consultarengine_fullemsystem.databases. Fecha #89477. #89341 (Alexey Milovidov). - Nas versões anteriores, a configuração
create_table_empty_primary_key_by_defaultnão surtia efeito quando você não especificava o engine da tabela na consulta CREATE TABLE. #89342 (Alexey Milovidov). - Atualiza
chdigpara v25.11.1 - inclui melhorias significativas no logging e vários outros aprimoramentos (notas de lançamento da versão 25.11). #89957 (Azat Khuzhin). (notas de lançamento da versão 25.10). #89452 (Azat Khuzhin). - Faz com que o redimensionador da área de texto da consulta na interface web ocupe toda a largura, o que o torna um pouco mais prático. Além disso, o redimensionador nativo do navegador não estava disponível no Safari no iPad e, após essa alteração, pelo menos é possível arrastar a borda inferior da área de texto, se você souber disso. #89457 (Alexey Milovidov).
- Melhorado o rastreamento de memória na geração de resultados de junções hash. Antes, as alocações temporárias durante a geração do resultado da junção não eram rastreadas adequadamente, o que podia levar ao estouro do limite de memória. #89560 (Azat Khuzhin).
- Log assíncrono do servidor: descarregar mais cedo e aumentar o tamanho padrão da fila. #89597 (Raúl Marín).
- Corrige valores incorretos de
FilesystemCacheBytes(e outros) emsystem.asynchronous_metrics. Executa consultasSYSTEMnos caches do sistema de arquivos apenas uma vez. Visão atômica para caches que apontam para o mesmo caminho emsystem.filesystem_caches. #89640 (Azat Khuzhin). - Foi esclarecida a descrição de algumas colunas em
system.view_refreshes. #89701 (Tuan Pham Anh). - Armazena em cache as credenciais do S3 usadas ao interagir com o endpoint STS, para que possam ser reutilizadas em diferentes chamadas de função. A quantidade de credenciais em cache pode ser controlada com
s3_credentials_provider_max_cache_size. #89734 (Antonio Andelic). - Corrige o pushdown de filtro em tempo de execução quando há várias etapas de expressão abaixo dele. #89741 (Alexander Gololobov).
- Se a memória do sistema for inferior a 5GB, não aplique
mlockao executável por padrão. #89751 (Alexey Milovidov). - As type hints na interface web não invadem mais o cabeçalho da tabela. A exibição das tooltips também foi corrigida — elas não ficam mais atrás do cabeçalho da tabela. #89753 (Alexey Milovidov).
- Exibir propriedades da tabela na interface web. Ao clicar no número de linhas ou de bytes, será aberta uma consulta a partir de
system.tables. Ao clicar no engine da tabela, será exibidoSHOW TABLES. #89771 (Alexey Milovidov). - Suporte a
non_replicated_deduplication_windowpara tabelas com um disco que não implementa gravação por append. Resolve #87281. #89796 (Tuan Pham Anh). - Adicionada a possibilidade de especificar uma lista de tabelas para fazer flush no comando
SYSTEM FLUSH ASYNC INSERT QUEUE. #89915 (Sema Checherinda). - Armazena os IDs dos blocos de desduplicação no
system.part_log. #89928 (Sema Checherinda). - Alterado o valor padrão da configuração de cache do sistema de arquivos
keep_free_space_remove_batchde 10 para 100, por ser mais eficiente. #90030 (Kseniia Sumarokova). - Introduza o tipo de merge TTL DROP e não atualize o próximo agendamento de merge TTL de exclusão após esse tipo de merge. #90077 (Mikhail Artemenko).
- Reduz o limite de nós na solicitação RemoveRecursive do Keeper durante a limpeza do S3Queue. #90201 (Antonio Andelic).
- A consulta
SYSTEM FLUSH LOGSpassa a aguardar a criação da tabela mesmo quando os logs estão vazios. #89408 (János Benjamin Antal). - Corrige
rows_before_limit_at_leastincorreto quando vários shards remotos estão envolvidos em uma agregação distribuída com merging ou quando há subconsultas em cláusulas IN. Isso corrige #63280. #63511 (Amos Bird). - Corrigida a exibição de
0 rows in setapós a consultaINSERT INTO ... SELECT. Fecha #47800. #79462 (Engel Danila).
Correção de bug (comportamento incorreto perceptível ao usuário em um lançamento estável oficial)
- Corrige
multiIfcom argumentos constantes e avaliação de curto-circuito. Fecha #72714. #84546 (Yakov Olkhovskiy). - Corrige erro lógico ao selecionar de uma tabela com uma restrição com subconsulta. Resolve #84190. #85575 (Pervakov Grigorii).
- Foi corrigido um bug em consultas especiais que usam uma URI com pontos de interrogação. #85663 (Yarik Briukhovetskyi).
- Corrigido problema em que às vezes faltavam colunas na saída de
EXPLAIN indexes = 1. Resolve #86696. #87083 (Michael Kolupaev). - Corrige o possível erro “Cannot add subcolumn with parallel replicas”. Fecha #84888. #87514 (Pavel Kruglov).
- No gravador Parquet, emitir a string
created_byno formato correto, por exemploClickHouse version 25.10.1 (build 5b1dfb14925db8901a4e9202cd5d63c11ecfbb9f)em vez deClickHouse v25.9.1.1-testing. Corrigida a compatibilidade do leitor Parquet com arquivos inválidos gravados por versões antigas do parquet-mr. #87735 (Michael Kolupaev). - Corrige o cálculo do phi-quadrado, que causava resultados incorretos em
cramersV,cramersVBiasCorrected,theilsUecontingency. #87831 (Nihal Z. Miaji). - Corrige a leitura de um array misto de Floats e Bools em JSON. Anteriormente, a inserção desses dados resultava em uma exceção. #88008 (Pavel Kruglov).
- Uso de shared_ptr para QueryState no TCPHandler para detectar se o estado é inválido em setProgressCallback, setFileProgressCallback e setBlockMarshallingCallback. #88201 (Tuan Pham Anh).
- Corrige erro lógico na reordenação do cross join quando query_plan_optimize_join_order_limit > 1, fecha #89409. #88286 (Vladimir Cherkasov).
- Corrige #88426 1. Não permite definições explícitas de colunas em Alias, e as colunas são carregadas automaticamente da tabela de destino. Isso garante que o alias sempre corresponda ao schema da tabela de destino. 2. Encaminha mais métodos de IStorage. #88552 (Kai Zhu).
- Após a recuperação, uma réplica de um banco de dados Replicated podia ficar travada por muito tempo, exibindo mensagens como
Failed to marked query-0004647339 as finished (finished=No node, synced=No node); isso foi corrigido. #88671 (Alexander Tokmakov). - Corrige o possível erro “Context has expired” no novo analisador ao usar subconsultas. #88694 (Azat Khuzhin).
- Corrigida uma falha de segmentação no leitor de Parquet quando input_format_parquet_local_file_min_bytes_for_seek é definido como 0. Corrige #78456. #88784 (Animesh).
- Corrige o resultado incorreto de min(PK)/max(PK) quando a PK está em ordem reversa. Isso corrige #83619. #88796 (Amos Bird).
- Corrige a propagação das restrições de tamanho definidas pelas configurações max_table_size_to_drop e max_partition_size_to_drop na operação DROP de tabelas internas. #88812 (Nikolay Degterinsky).
- Corrige o
top_kpara respeitar o parâmetrothresholdquando chamado com um único argumento. Fecha #88757. #88867 (Manuel). - Fontes de endpoint do ArrowFlight que exigiam uma conexão SSL (como as que ficam atrás de um AWS ALB) agora podem solicitar corretamente um conjunto de dados específico. #88868 (alex-shchetkov).
- Corrige o tratamento de
Nested(Tuple(...))não materializado (adicionado viaALTER). Corrige #83133. #88879 (Azat Khuzhin). - Corrige um bug na função
reverseUTF8. Em versões anteriores, ela invertia por engano os bytes de pontos de código UTF-8 com comprimento 4. Isso corrige #88913. #88914 (Alexey Milovidov). - Corrige o protocolo do icebergS3Cluster. Adiciona suporte à evolução de esquema e a exclusões posicionais e por igualdade na função de cluster iceberg. Resolve #88287. #88919 (Yang Jiang).
- Desativa parallel_replicas_support_projection para consultas com réplicas paralelas em tabelas distribuídas. Fecha #88899. #88922 (zoomxi).
- Propagação de contexto em casts internos. Corrige vários problemas em que as configurações de cast não eram propagadas. Fecha #88873. Fecha #78025. #88929 (Manuel).
- Corrige a detecção do formato de arquivo a partir de globs na função
file(). Resolve #88920. #88947 (Vitaly Baranov). - Não verificar a permissão de acesso
SET DEFINER <current_user>:definerao criar uma view com SQL SECURITY DEFINER. #88968 (pufit). - Corrigido o
LOGICAL_ERRORemL2DistanceTransposed(vec1, vec2, p), no qual a otimização para leitura parcial deQBitremovia incorretamenteNullabledo tipo de retorno quandoperaNullable. #88974 (Raufs Dunamalijevs). - Corrige travamento em tipo de catálogo desconhecido. Resolve #88819. #88987 (scanhex12).
- Isso fecha #88081. #88988 (scanhex12).
- Corrigida a degradação de desempenho na análise de índices de skipping. #89004 (Anton Popov).
- Corrige o erro ACCESS_ENTITY_NOT_FOUND ao tentar executar
clusterAllReplicaspor um usuário com uma função inexistente. Resolve #87670. #89068 (pufit). - Corrige o processamento de colunas esparsas por restrição CHECK. Fecha #88637. #89076 (Eduard Karacharov).
- Corrigida a contagem incorreta de linhas ao preencher as colunas virtuais em MergeTreeReaderTextIndex, o que causava um travamento com LOGICAL_ERROR. #89095 (Peng Jian).
- Evita vazamentos no contador de merge de TTL quando ocorrem exceções na preparação do merge. Resolve #89019. #89127 (save-my-heart).
- Corrigido o cálculo do tamanho do buffer necessário para operações de codificação e decodificação em base32/base58. #89133 (Antonio Andelic).
- Corrige
use-after-freeem Distributed devido a uma condição de corrida entre o encerramento e INSERTs em segundo plano. Resolve #88640. #89136 (Azat Khuzhin). - Evita possíveis condições de corrida devido a exceções mutáveis durante o parsing de Parquet. Corrige #88385. #89174 (Azat Khuzhin).
- View materializada atualizável: corrigida uma rara falha do servidor quando a tabela de origem era removida por completo durante uma atualização. #89203 (Michael Kolupaev).
- Esvazia os buffers ao enviar um erro no meio de um fluxo comprimido na interface HTTP. #89256 (Alexander Tokmakov).
- Evita que regras de mascaramento de consultas sejam aplicadas incorretamente a instruções DDL. #89272 (MikhailBurdukov).
- Corrigida a contagem incorreta de linhas ao preencher colunas virtuais em MergeTreeReaderTextIndex, o que causava uma falha com LOGICAL_ERROR. Reabre #89095. #89303 (Jimmy Aguilar Mena).
- Corrigido: Statistics countmin não oferece suporte à estimativa do tipo de dado LowCardinality(Nullable(String)) LOGICAL_ERROR. #89343 (Han Fei).
- Possível falha/comportamento indefinido na função IN quando os tipos das colunas da chave primária são diferentes dos tipos das colunas no lado direito da função IN. Exemplo: SELECT string_column, int_column FROM test_table WHERE (string_column, int_column) IN (SELECT ‘5’, ‘not a number’). Ocorre se muitas linhas forem selecionadas e houver linhas com tipos incompatíveis. #89367 (Ilya Golshtein).
- Corrige o truncamento dos argumentos de
countIf(*). Fecha #89372. #89373 (Manuel). - Evite perder checksums não compactados nas estatísticas de mutações. #89381 (Azat Khuzhin).
- Corrige LOGICAL_ERROR em L2DistanceTransposed(vec1, vec2, p), em que a otimização para leitura parcial de QBit removia incorretamente o Nullable do tipo de retorno quando p era LowCardinality(Nullable(T)). Resolve #88362. #89397 (Raufs Dunamalijevs).
- Corrige o carregamento de tabelas com serialização esparsa incorreta na própria tupla (gravada por versões mais antigas do ClickHouse). #89405 (Azat Khuzhin).
- Corrigido o tratamento incorreto da mesclagem de partes esvaziadas pelo TTL com projeções não vazias ao usar
deduplicate_merge_projection_mode='ignore'. Resolve #89430. #89458 (Amos Bird). - Corrige um erro lógico no join full_sorting_merge com colunas duplicadas. Resolve #86957. #89495 (Vladimir Cherkasov).
- Corrigida a leitura dos changelogs durante a inicialização do Keeper em casos em que um changelog não foi renomeado corretamente durante a rotação. #89496 (Antonio Andelic).
- Corrige resultados incorretos de JOIN ao usar condições OR com chaves únicas na tabela à direita. Resolve #89391. #89512 (Vladimir Cherkasov).
- Corrige possível “Context has expired” com o analyzer e PK IN (subconsulta) (v2). Corrige #89433. #89527 (Azat Khuzhin).
- Corrige a replicação do MaterializedPostgreSQL para tabelas com nomes de colunas configurados em maiúsculas. Resolve #72363. #89530 (Danylo Osipchuk).
- Corrige uma falha caso o estado de uma função de agregação contenha um valor serializado de uma coluna do tipo LowCardinality(String). #89550 (Pavel Kruglov).
- Corrigida a falha ao usar
ARRAY JOINno lado direito de um JOIN com a configuraçãoenable_lazy_columns_replicationhabilitada. #89551 (Pavel Kruglov). - Corrige um erro lógico em query_plan_convert_join_to_in. Resolve #89066. #89554 (Vladimir Cherkasov).
- Corrigida uma exceção no estimador de estatísticas ao tentar estimar condições com tipos incompatíveis entre coluna e constante que não podem ser convertidos. #89596 (Han Fei).
- Adiciona filtros em tempo de execução apenas para algoritmos de junção compatíveis, ou seja, junções por hash. Um filtro só pode ser criado quando o algoritmo de junção primeiro lê totalmente o lado direito e depois lê o lado esquerdo, mas o FullSortingMergeJoin, por exemplo, lê ambos os lados simultaneamente. Corrige #89220. #89652 (Alexander Gololobov).
- Corrige a execução concorrente das funções
hasAnyTokens,hasAllTokensetokenscom o tokenizersparseGrams. Resolve #89605. #89665 (Elmi Ahmadov). - Corrige erro lógico/travamento com
runtime filterdejoinem alguns casos. Corrige #89062. #89666 (Alexander Gololobov). - Corrige um possível erro lógico durante
ARRAY JOINna coluna map comenable_lazy_columns_replicationhabilitado. Fecha #89705. #89717 (Pavel Kruglov). - Evita travamento causado pela leitura do servidor remoto após a desconexão em consultas remotas durante o cancelamento. Resolve #89468. #89740 (Azat Khuzhin).
- Corrige uma condição de corrida no fluxo de leitura do índice de projeção. Resolve #89497. #89762 (Peng Jian).
- Corrige um bug na leitura do índice de projeção que poderia causar condições de corrida. Resolve #89497. #89775 (Amos Bird).
- Corrigido o tratamento da table function Paimon para tabelas sem partição. Resolve #89690. #89793 (JIaQi).
- Corrige um possível erro lógico ao ler caminhos e suas subcolunas na serialização avançada de dados compartilhados em JSON. Fecha #89805. #89819 (Pavel Kruglov).
- Corrige um possível estouro de pilha na desserialização binária de tipos de dados. Fecha #88710. #89822 (Pavel Kruglov).
- Corrige erro lógico com tupla vazia na função
IN. Fecha #88343. #89850 (Nihal Z. Miaji). - Remove funções injetivas de
GROUP BY, independentemente deoptimize_injective_functions_in_group_by, no analisador antigo, por compatibilidade. Resolve #89854. #89870 (Raufs Dunamalijevs). - Se a mesclagem foi interrompida por, por exemplo, um limite de memória, o executor em segundo plano de merge mutate chamará
cancelna tarefa de mesclagem sem adquirir um bloqueio, mas, nesse caso, a parte resultante criada parcialmente não será removida (já que não foi concluída e, neste estágio, não estava visível). Depois disso, a tarefa de mesclagem será destruída, o que acionará a destruição da parte resultante. Isso reverterá a transação de disco e fará com que os dados sejam removidos do S3. Ao final, essa limpeza de lixo foi executada sob o bloqueio do executor em segundo plano de merge mutate. #89875 (Mikhail Artemenko). - Corrigido erro lógico com tupla vazia na função
reversee emCAST. Fecha #89137. #89908 (Nihal Z. Miaji). - Agora, por padrão, o ClickHouse exibirá o banco de dados do catálogo do lago de dados na consulta
SHOW DATABASES. #89914 (alesapin). - Corrigido o uso da cópia nativa no GCS para backups. Devido à clonagem incorreta do cliente, a cópia nativa do GCS sempre falhava e recorria a uma abordagem menos eficiente, com leitura e gravação manuais dos dados. #89923 (Antonio Andelic).
- Corrige o cálculo do tamanho do buffer para
base32Encode. Calcularbase32Encodepara uma coluna de strings com tamanho menor que 5 poderia causar falhas. Resolve #89911. #89929 (Antonio Andelic). - Corrige o escape incorreto nas consultas
SHOW COLUMNSeSHOW FUNCTIONS. #89942 (alesapin). - Corrige a validação de URL no engine do MongoDB quando o nome de usuário contém o caractere ’@’. Antes, nomes de usuário com ’@’ causavam um error devido à codificação incorreta. #89970 (Kai Zhu).
- Retroportado em #90592: corrige uma possível falha durante uma consulta remota com
ARRAY JOINdentro deINe com a configuraçãoenable_lazy_columns_replicationhabilitada. Resolve #90361. #89997 (Pavel Kruglov). - Retroportado em #90448: corrige, em alguns casos, a inferência de valores DateTime64 inválidos a partir de Strings em formatos de texto. Resolve #89368. #90013 (Pavel Kruglov).
- Corrige erro lógico causado por uma coluna de tupla vazia em
BSONEachRoweMsgPack. Fecha #89814. Fecha #71536. #90018 (Nihal Z. Miaji). - Backportado em #90457: realizar verificações de tamanho ao desserializar dados de estados de agregação e outras fontes. #90031 (Raúl Marín).
- Corrige um possível erro ‘Invalid number of rows in Chunk’ em JOIN com colunas duplicadas. Resolve #89411. #90053 (Vladimir Cherkasov).
- Backport em #90588: corrige o possível erro
Column with Array type is not represented by ColumnArray column: Replicateddurante a inserção com uso deARRAY JOINe com a configuraçãoenable_lazy_columns_replicationhabilitada. #90066 (Pavel Kruglov). - Permite arquivos iniciados por ponto em user_files. Fecha #89662. #90079 (Raúl Marín).
- Backportado em #90647: corrige erro lógico e erro no operador módulo na tabela de sistema
numbersquando é usado um passo grande. Fecha #83398. #90123 (Nihal Z. Miaji). - Corrige overflow de inteiro na análise dos argumentos de Dicionário. Fecha #78506. #90171 (Raúl Marín).
- Backport em #90468: corrige incompatibilidade no particionamento do Hive que impedia uma atualização sem problemas para a versão 25.8 (corrige o erro
All hive partitioning columns must be present in the schemadurante a atualização). #90202 (Kseniia Sumarokova). - Corrigidos possíveis resultados incorretos em consultas
SELECTapós atualizações leves, com o cache de condições de consulta habilitado. Corrige #90176. Corrige #90054. #90204 (Anton Popov). - Corrige falha no StorageDistributed ao processar nomes malformados de diretórios de shard. #90243 (Aleksandr Musorin).
- Trata a conversão implícita de string para inteiro ou booleano em
LogicalExpressionOptimizerPass. Resolve #89803. #90245 (Elmi Ahmadov). - Corrige a formatação incorreta de certos índices de salto na definição da tabela, que causava
METADATA_MISMATCHe impedia a criação de novas réplicas no Replicated Database. #90251 (Nikolay Degterinsky). - Backport em #90381: corrige uma divergência na contagem de linhas em MergeTreeReaderIndex quando a única part tem menos linhas do que index_granularity. Resolve #89691. #90254 (Peng Jian).
- Backport aplicado em #90608: corrige um bug na leitura de subcolunas de JSON em partes compactas que podia levar ao erro
CANNOT_READ_ALL_DATA. Resolve #90264. #90302 (Pavel Kruglov). - Corrigidas as funções
trim,ltrimertrim, que não funcionavam com dois argumentos. Fecha #90170. #90305 (Nihal Z. Miaji). - Backport aplicado em #90625: corrige um possível erro lógico em prewhere em um caminho JSON inexistente com index_granularity_bytes=0. Resolve #86924. #90375 (Pavel Kruglov).
- Retroportado em #90484: corrigido um bug em
L2DistanceTransposedque provocava travamentos quando o argumento de precisão excedia o intervalo válido. Fecha #90401. #90405 (Raufs Dunamalijevs). - Retroportado em #90577: corrigidos cálculos incorretos de distância em
L2DistanceTransposedao usar vetores de referência do tipo array (que, por padrão, sãoArray(Float64))) com colunasQBitde tipos de elemento diferentes deFloat64(Float32,BFloat16). A função agora converte automaticamente o vetor de referência para que corresponda ao tipo de elemento deQBit. Resolve #89976. #90485 (Raufs Dunamalijevs). - Retroportado em #90601: corrige um erro lógico causado por um caso raro na função
equals. Fecha #88142. #90557 (Nihal Z. Miaji). - Corrigido o
CoalescingMergeTreepara tiposTuple. #88828 (scanhex12).
Melhoria de compilação/testes/empacotamento
- Corrige o erro
Connection refusedao executar o ClickHouse no Docker com scripts SQL de initdb e porta TCP alterada. #88042 (Grigorii). - Adiciona suporte experimental ao e2k como nova plataforma do ClickHouse. #90159 (Ramil Sattarov).
- Remove o uso remanescente de
FindPackagedo CMake. As compilações não devem depender dos pacotes do sistema. #89380 (Alexey Milovidov). - Usa cache do compilador nas compilações durante a configuração do CMake (por exemplo,
protoc). #89613 (Konstantin Bogdanov). - Usa o sysroot do FreeBSD 13.4. #89617 (Konstantin Bogdanov).
Lançamento do ClickHouse 25.10, 2025-10-31
Alteração incompatível com versões anteriores
- A configuração padrão
schema_inference_make_columns_nullablefoi alterada para respeitar as informações sobreNullabledas colunas nos metadados do Parquet/ORC/Arrow, em vez de tornar tudo Nullable. Sem alterações para formatos de texto. #71499 (Michael Kolupaev). - O cache de resultados de consultas ignorará a configuração
log_comment, de modo que alterar apenas olog_commentem uma consulta não resultará mais em cache miss. Há uma pequena chance de que os usuários tenham segmentado intencionalmente seu cache variando olog_comment. Essa mudança altera esse comportamento e, portanto, é incompatível com versões anteriores. Use a configuraçãoquery_cache_tagpara essa finalidade. #79878 (filimonov). - Em versões anteriores, consultas com funções de tabela com o mesmo nome das funções de implementação de operadores eram formatadas de forma inconsistente. Fecha #81601. Fecha #81977. Fecha #82834. Fecha #82835. As consultas
EXPLAIN SYNTAXnem sempre formatarão os operadores — o novo comportamento reflete melhor o propósito de explicar a sintaxe.clickhouse-format,formatQuerye similares não formatarão funções como operadores se a consulta as contiver na forma funcional. #82825 (Alexey Milovidov). - Proíbe o uso do tipo
Dynamicem chaves deJOIN. Isso pode levar a resultados inesperados quando um valor do tipoDynamicé comparado com um tipo que não sejaDynamic. É melhor converter a colunaDynamicpara o tipo necessário. #86358 (Pavel Kruglov). - A opção do servidor
storage_metadata_write_full_object_keyagora vem ativada por padrão e não pode mais ser desativada. Esta é uma alteração retrocompatível. Este é apenas um aviso. Esta alteração tem compatibilidade futura apenas com lançamentos 25.x. Isso significa que você só poderá fazer downgrade para algum lançamento 25.x caso precise reverter o novo lançamento. #87335 (Sema Checherinda). - Reduza
replicated_deduplication_window_secondsde uma semana para uma hora, a fim de armazenar menos znodes no ZooKeeper quando a taxa de inserção for baixa. #87414 (Sema Checherinda). - Renomeada a configuração
query_plan_use_new_logical_join_stepparaquery_plan_use_logical_join_step. #87679 (Vladimir Cherkasov). - A nova sintaxe permite uma configuração mais expressiva do parâmetro
tokenizerdo índice de texto. #87997 (Elmi Ahmadov). - Funções
searchAnyesearchAllrenomeadas parahasAnyTokensehasAllTokenspara maior consistência com a função existentehasToken. #88109 (Robert Schulze). - Remova
cache_hits_thresholddo cache do sistema de arquivos. Esse recurso foi adicionado por um colaborador externo antes de termos a política de cache SLRU e, agora que a temos, não faz sentido oferecer suporte às duas. #88344 (Kseniia Sumarokova). - Duas pequenas mudanças na forma como as configurações
min_free_disk_ratio_to_perform_insertemin_free_disk_bytes_to_perform_insertfuncionam: - usar bytes não reservados em vez de bytes disponíveis para determinar se uma inserção deve ser rejeitada. Isso provavelmente não é crucial se as reservas para merges em segundo plano e mutações forem pequenas em relação aos limites configurados, mas parece mais correto. - Não aplicar essas configurações a tabelas de sistema. A justificativa é que ainda queremos que tabelas comoquery_logcontinuem sendo atualizadas. Isso ajuda bastante na depuração. Os dados gravados em tabelas de sistema geralmente são pequenos em comparação com os dados reais, então elas devem conseguir continuar por muito mais tempo com um limite razoável demin_free_disk_ratio_to_perform_insert. #88468 (c-end). - Ativa o modo assíncrono para a replicação interna do Keeper. O Keeper manterá o mesmo comportamento de antes, com possíveis melhorias de desempenho. Se você estiver atualizando a partir de uma versão anterior à 23.9, precisará atualizar primeiro para 23.9+ e depois para 25.10+. Você também pode definir
keeper_server.coordination_settings.async_replicationcomo 0 antes da atualização e ativá-lo depois que ela for concluída. #88515 (Antonio Andelic).
novo recurso
- Adiciona suporte a
LIMITeOFFSETnegativos. Fecha #28913. #88411 (Nihal Z. Miaji). - O mecanismo
Aliascria um proxy para outra tabela. Todas as operações de leitura e escrita são encaminhadas para a tabela de destino, enquanto o próprio alias não armazena dados e apenas mantém uma referência à tabela de destino. #87965 (Kai Zhu). - Suporte completo ao operador
IS NOT DISTINCT FROM(<=>). #88155 (simonmichal). - Adicionada a capacidade de criar automaticamente estatísticas em todas as colunas apropriadas de tabelas
MergeTree. Também foi adicionada a configuração de nível de tabelaauto_statistics_types, que armazena, separadas por vírgulas, os tipos de estatísticas a serem criadas (por exemplo,auto_statistics_types = 'minmax, uniq, countmin'). #87241 (Anton Popov). - Um novo índice de filtro de Bloom para texto,
sparse_gram. #79985 (scanhex12). - Uma nova função
convpara converter números entre bases; no momento, ela oferece suporte a bases de2-36. #83058 (hp). - Adicionado suporte à sintaxe
LIMIT BY ALL. Assim comoGROUP BY ALLeORDER BY ALL,LIMIT BY ALLé expandido automaticamente para usar todas as expressões não agregadas da cláusula SELECT como chaves do LIMIT BY. Por exemplo,SELECT id, name, count(*) FROM table GROUP BY id LIMIT 1 BY ALLé equivalente aSELECT id, name, count(*) FROM table GROUP BY id LIMIT 1 BY id, name. Esse recurso simplifica as consultas quando você quiser aplicar LIMIT BY a todas as colunas não agregadas selecionadas sem precisar listá-las explicitamente. Fecha #59152. #84079 (Surya Kant Ranjan). - Adiciona suporte para consultar o Apache Paimon no ClickHouse. Essa integração permitirá que os usuários do ClickHouse interajam diretamente com o lago de dados do Paimon. #84423 (JIaQi).
- Adicionada a aggregate function
studentTTestOneSample. #85436 (Dylan). - Função de agregação
quantilePrometheusHistogram, que aceita os limites superiores e os valores cumulativos dos buckets do histograma como argumentos e realiza uma interpolação linear entre os limites superior e inferior do bucket em que se encontra a posição do quantil. Tem comportamento semelhante ao da funçãohistogram_quantiledo PromQL em histogramas clássicos. #86294 (Stephen Chi). - Uma nova tabela de sistema para arquivos de metadados do Delta Lake. #87263 (scanhex12).
- Adiciona
ALTER TABLE REWRITE PARTS- reescreve as partes da tabela do zero usando todas as novas configurações (já que algumas delas, comouse_const_adaptive_granularity, serão aplicadas apenas às novas partes). #87774 (Azat Khuzhin). - Adicionado o comando
SYSTEM RECONNECT ZOOKEEPERpara forçar a desconexão e a reconexão do ZooKeeper (https://github.com/ClickHouse/ClickHouse/issues/87317). #87318 (Pradeep Chhetri). - Limita o número de coleções nomeadas por meio das configurações
max_named_collection_num_to_warnemax_named_collection_num_to_throw. Adiciona a nova métricaNamedCollectione o erroTOO_MANY_NAMED_COLLECTIONS. #87343 (Pablo Marcos). - Adicionadas variantes otimizadas sem distinção entre maiúsculas e minúsculas das funções
startsWitheendsWith:startsWithCaseInsensitive,endsWithCaseInsensitive,startsWithCaseInsensitiveUTF8eendsWithCaseInsensitiveUTF8. #87374 (Guang Zhao). - Adiciona uma forma de definir
WORKLOADeRESOURCEem SQL usando a seção de configuração do servidor “resources_and_workloads”. #87430 (Sergei Trifonov). - Adiciona uma nova configuração de tabela
min_level_for_wide_partque permite especificar o nível mínimo para que uma parte seja criada como parte wide. #88179 (Christoph Wurm). - Adicionadas variantes recursivas dos comandos
cp-cpremv-mvrno cliente Keeper. #88570 (Mikhail Artemenko). - Adicionada uma configuração de sessão para excluir uma lista de skip indexes da materialização durante inserções (
exclude_materialize_skip_indexes_on_insert). Adicionada uma configuração de tabela MergeTree para excluir uma lista de skip indexes da materialização durante a mesclagem (exclude_materialize_skip_indexes_on_merge). #87252 (George Larionov).
recurso experimental
- Implementado o tipo de dado
QBit, que armazena vetores em formato bit-sliced, e a funçãoL2DistanceTransposed, que permite busca vetorial aproximada em que o equilíbrio entre precisão e velocidade é controlado por um parâmetro. #87922 (Raufs Dunamalijevs). - As funções
searchAllesearchAnyagora também funcionam com colunas sem texto. Nesses casos, elas usam o tokenizador padrão. #87722 (Jimmy Aguilar Mena).
Melhoria de desempenho
- Implementa a replicação sob demanda de colunas em JOIN e ARRAY JOIN. Evita converter representações especiais de colunas, como Sparse e Replicated, em colunas completas em alguns formatos de saída. Isso evita cópias desnecessárias de dados na memória. #88752 (Pavel Kruglov).
- Adiciona a serialização opcional da subcoluna
.sizepara colunas String no nível superior em tabelas MergeTree, para melhorar a compressão e permitir acesso eficiente a subcolunas. Introduz novas configurações do MergeTree para controlar a versão de serialização e otimizar expressões para strings vazias. #82850 (Amos Bird). - Suporte à leitura in order para Iceberg. #88454 (scanhex12).
- Acelera algumas consultas com
JOINao criar um filtro de Bloom a partir da subárvore da direita durante a execução e passar esse filtro para a varredura da subárvore da esquerda. Isso pode ser benéfico para consultas comoSELECT avg(o_totalprice) FROM orders, customer, nation WHERE c_custkey = o_custkey AND c_nationkey=n_nationkey AND n_name = 'FRANCE'. #84772 (Alexander Gololobov). - Desempenho das consultas aprimorado com a refatoração da ordem e da integração do Query Condition Cache (QCC) com a análise de índices. A filtragem do QCC agora é aplicada antes da análise da chave primária e do índice de salto, reduzindo o processamento desnecessário de índices. A análise de índices foi estendida para oferecer suporte a vários filtros de intervalo, e seus resultados de filtragem agora são gravados novamente no QCC. Isso acelera significativamente as consultas em que a análise de índices domina o tempo de execução — especialmente as que dependem de índices de salto (por exemplo, índices vetoriais ou índices invertidos). #82380 (Amos Bird).
- Diversas micro-otimizações para acelerar consultas pequenas. #83096 (Raúl Marín).
- Comprima logs e eventos de perfil no protocolo nativo. Em clusters com mais de 100 réplicas, eventos de perfil não compactados consomem de 1 a 10 MB/s, e a barra de progresso fica lenta em conexões de internet mais lentas. Isso encerra #82533. #83586 (Alexey Milovidov).
- Melhore o desempenho da pesquisa em strings com diferenciação entre maiúsculas e minúsculas (operações como filtragem, por exemplo,
WHERE URL LIKE '%google%') usando a biblioteca StringZilla, com instruções SIMD da CPU quando disponíveis. #84161 (Raúl Marín). - Reduz a alocação e a cópia de memória ao consultar uma tabela AggregatingMergeTree com FINAL quando a tabela tem colunas do tipo
SimpleAggregateFunction(anyLast). #84428 (Duc Canh Le). - Fornece uma lógica para aplicar pushdown aos predicados de disjunção do JOIN. Exemplo: no TPC-H Q7, para uma condição em 2 tabelas, n1 e n2, como
(n1.n_name = 'FRANCE' AND n2.n_name = 'GERMANY') OR (n1.n_name = 'GERMANY' AND n2.n_name = 'FRANCE'), extraímos filtros parciais separados para cada tabela:n1.n_name = 'FRANCE' OR n1.n_name = 'GERMANY'para n1 en2.n_name = 'GERMANY' OR n2.n_name = 'FRANCE'para n2. #84735 (Yarik Briukhovetskyi). - Melhora o desempenho do
LIKEcom prefixo ou sufixo usando a nova configuração padrãooptimize_rewrite_like_perfect_affix. #85920 (Guang Zhao). - Corrige a degradação de desempenho causada por uma chave serializada grande ao agrupar por várias colunas de string e número. É um desdobramento de #83884. #85924 (李扬).
- Adiciona a nova configuração
joined_block_split_single_rowpara reduzir o uso de memória em junções hash com muitas correspondências por chave. Isso permite que os resultados da junção hash sejam divididos em fragmentos até mesmo dentro das correspondências de uma única linha da tabela à esquerda, o que é particularmente útil quando uma linha da tabela à esquerda corresponde a milhares ou milhões de linhas da tabela à direita. Antes, todas as correspondências precisavam ser materializadas de uma só vez na memória. Isso reduz o pico de uso de memória, mas pode aumentar o uso de CPU. #87913 (Vladimir Cherkasov). - Melhorias no SharedMutex (melhoram o desempenho com um grande número de queries simultâneas). #87491 (Raúl Marín).
- Melhorado o desempenho na criação de índice de texto para documentos que contêm principalmente tokens pouco frequentes. #87546 (Anton Popov).
- Acelera o caso mais comum do destrutor de Field (melhorando o desempenho com um grande número de consultas pequenas). #87631 (Raúl Marín).
- Ignora o recálculo das estatísticas da tabela hash em tempo de execução durante a otimização de JOIN (melhora o desempenho de todas as consultas com JOINs). Adicionados novos eventos de perfil
JoinOptimizeMicrosecondseQueryPlanOptimizeMicroseconds. #87683 (Vladimir Cherkasov). - Foi habilitado o salvamento de marcas em cache e evitado o I/O direto no leitor MergeTreeLazy. Isso melhora o desempenho de consultas com ORDER BY e LIMIT pequeno. #87989 (Nikita Taranov).
- A consulta SELECT com a cláusula
FINALem uma tabelaReplacingMergeTreecom a colunais_deletedagora é executada mais rapidamente graças à paralelização aprimorada de duas otimizações existentes: 1. otimizaçãodo_not_merge_across_partitions_select_finalpara partições da tabela que têm apenas um únicopart; 2. divisão de outros intervalos selecionados da tabela emintersecting / non-intersecting, e apenas os intervalosintersectingprecisam passar pela transformação de mesclagem FINAL. #88090 (Shankar Iyer). - Reduz o impacto da ausência de fail points (o caminho de código padrão quando a depuração não está ativa). #88196 (Raúl Marín).
- Evita a varredura completa de
system.tablesao filtrar poruuid(Pode ser útil se você tiver apenas o UUID dos logs ou do caminho do ZooKeeper). #88379 (Azat Khuzhin). - Desempenho aprimorado das funções
tokens,hasAllTokens,hasAnyTokens. #88416 (Anton Popov). - Aplicado inline a
AddedColumns::appendFromBlockpara melhorar ligeiramente o desempenho de JOIN em alguns casos. #88455 (Nikita Taranov). - O preenchimento automático do cliente está mais rápido e mais consistente ao usar
system.completionsem vez de executar várias consultas às tabelas do sistema. #84694 (|2ustam). - Adiciona o novo parâmetro
dictionary_block_frontcoding_compressiondo índice de texto para controlar a compressão do dicionário. Por padrão, ele vem habilitado para usar a compressãofront-coding. #87175 (Elmi Ahmadov). - Consolida os dados de todas as threads antes de inserir em visões materializadas, de acordo com as configurações
min_insert_block_size_rows_for_materialized_viewsemin_insert_block_size_bytes_for_materialized_views. Anteriormente, separallel_view_processingestivesse ativado, cada thread que inserisse em uma visão materializada específica consolidaria a inserção de forma independente, o que poderia levar a um número maior de partes geradas. #87280 (Antonio Andelic). - Adicionada a configuração
temporary_files_buffer_sizepara controlar o tamanho do buffer dos gravadores de arquivos temporários. * Otimizado o consumo de memória da operaçãoscatter(usada, por exemplo, em grace hash join) para colunasLowCardinality. #88237 (Vladimir Cherkasov). - Adicionado suporte à leitura direta de índices de texto com réplicas paralelas. Melhorado o desempenho da leitura de índices de texto no armazenamento de objetos. #88262 (Anton Popov).
- Consultas que usam tabelas de catálogos de lago de dados usarão réplicas paralelas para processamento distribuído. #88273 (scanhex12).
- A heurística interna de ajuste do algoritmo de mesclagens em segundo plano, chamada “to_remove_small_parts_at_right”, será executada antes do cálculo da pontuação da faixa de merge. Antes disso, o seletor de merge escolhia o merge wide e, em seguida, filtrava seu sufixo. Correções: #85374. #88736 (Mikhail Artemenko).
aprimoramento
- Agora, a função
generateSerialIDoferece suporte a um argumento não constante com o nome da série. Fecha #83750. #88270 (Alexey Milovidov). - Adicionado o parâmetro opcional
start_valueà funçãogenerateSerialIDpara definir valores iniciais personalizados para novas séries. #88085 (Manuel). - Adicionada a opção
--semicolons_inlineemclickhouse-formatpara formatar consultas de modo que os pontos e vírgulas fiquem na última linha, em vez de em uma nova linha. #88018 (Jan Rada). - Permite configurar o throttling no nível do servidor quando a configuração é substituída no Keeper. Fecha #73964. #74066 (JIaQi).
mannWhitneyUTestnão lança mais exceção quando ambas as amostras contêm apenas valores idênticos. Agora, retorna um resultado válido, consistente com o SciPy. Isso fecha: #79814. #80009 (DeanNeaht).- A reescrita da transação de armazenamento de objetos do disco remove blobs remotos anteriores se a transação de metadados for confirmada. #81787 (Sema Checherinda).
- Corrigida a etapa de otimização para uma expressão de igualdade redundante quando
LowCardinalitydo tipo resultante difere antes e depois da otimização. #82651 (Yakov Olkhovskiy). - Quando clientes HTTP definem o header
X-ClickHouse-100-Continue: defer, além deExpect: 100-continue, o ClickHouse não envia uma resposta100 Continueao cliente até que a validação da QUOTA seja concluída com sucesso, evitando o desperdício de largura de banda da rede com a transmissão de corpos da requisição que acabariam sendo descartados de qualquer forma. Isso é relevante para consultas INSERT, em que a consulta pode ser enviada na query string da URL e os dados são enviados no corpo da requisição. Interromper uma requisição sem enviar o corpo completo impede a reutilização da conexão com HTTP/1.1, mas a latência adicional introduzida pela abertura de novas conexões normalmente é insignificante em comparação com a duração total do INSERT ao lidar com grandes volumes de dados. #84304 (c-end). - Mascarar credenciais do S3 nos logs ao usar DATABASE ENGINE = Backup com armazenamento S3. #85336 (Kenny Sun).
- Tornar visíveis ao subplano de entrada da subconsulta correlacionada as otimizações do plano de consulta ao adiar sua materialização. Parte de #79890. #85455 (Dmitry Novik).
- Uma alteração em SYSTEM DROP DATABASE REPLICA: - Ao remover junto com o banco de dados ou remover a réplica inteira: também remove a réplica de cada tabela do banco de dados - Se ‘WITH TABLES’ for especificado, remove a réplica de cada armazenamento - Caso contrário, a lógica permanece inalterada: remove a réplica apenas dos bancos de dados - Ao remover uma réplica de banco de dados com o caminho do Keeper: - Se ‘WITH TABLES’ for especificado: - Restaurar o banco de dados como Atomic - Restaurar tabelas RMT a partir da instrução no Keeper - Remover o banco de dados (as tabelas restauradas também são removidas) - Caso contrário, apenas remove a réplica no caminho do Keeper fornecido. #85637 (Tuan Pham Anh).
- Corrige a inconsistência na formatação do TTL quando ele contém a função
materialize. Fecha #82828. #85749 (Alexey Milovidov). - O estado da tabela Iceberg não é mais armazenado em um objeto de armazenamento. Isso deve tornar o Iceberg no ClickHouse compatível com consultas concorrentes. #86062 (Daniil Ivanik).
- Tornar persistente o bloqueio de bucket no modo ordenado do S3Queue, de forma semelhante aos nós de processamento no caso de
use_persistent_processing_nodes = 1. Adicionar injeção de falhas do Keeper nos testes. #86628 (Kseniia Sumarokova). - Exibe sugestões quando um usuário comete um erro de digitação no nome do formato. Fecha #86761. #87092 (flynn).
- As réplicas remotas passarão a ignorar a análise de índices quando não houver projeções. #87096 (zoomxi).
- Permite desativar a codificação UTF-8 para a tabela do YTsaurus. #87150 (MikhailBurdukov).
- Desabilitado
s3_slow_all_threads_after_retryable_errorpor padrão. #87198 (Nikita Mikhaylov). - Renomeada a função de tabela
arrowflightparaarrowFlight. #87249 (Vitaly Baranov). - Atualizado o
clickhouse-benchmarkpara aceitar-em vez de_nas flags de CLI. #87251 (Ahmed Gouda). - Torna síncrona a gravação em
system.crash_logdurante o tratamento de sinais. #87253 (Miсhael Stetsyuk). - Foi adicionada a configuração
inject_random_order_for_select_without_order_by, que insereORDER BY rand()em consultasSELECTde nível superior sem a cláusulaORDER BY. #87261 (Rui Zhang). - Aprimora a mensagem de erro de
joinGetpara que ela indique corretamente que o número dejoin_keysnão é igual ao número deright_table_keys. #87279 (Isak Ellmer). - Adicionada a capacidade de verificar o stat de um nó arbitrário do Keeper durante a transação de escrita. Isso pode ajudar a detectar o problema ABA. #87282 (Mikhail Artemenko).
- Redirecionar solicitações pesadas do ytsaurus para proxies de alta carga. #87342 (MikhailBurdukov).
- Corrige reversões de operações
unlink/rename/removeRecursive/removeDirectory/etc., bem como a contagem de hardlinks em quaisquer cargas de trabalho possíveis para metadados de transações em disk, além de simplificar as interfaces para torná-las mais genéricas, de modo que possam ser reutilizadas em outros armazenamentos de metadados. #87358 (Mikhail Artemenko). - Adicionado o parâmetro de configuração
keeper_server.tcp_nodelay, que permite desativarTCP_NODELAYpara o Keeper. #87363 (Copilot). - Adicionado suporte a
--connectionemclickhouse-benchmarks. Ele funciona da mesma forma que noclickhouse-client: você pode especificar conexões predefinidas noconfig.xml/config.yamldo cliente, no caminhoconnections_credentials, para evitar informar explicitamente usuário/senha via argumentos de linha de comando. Adicionado suporte a--accept-invalid-certificatenoclickhouse-benchmark. #87370 (Azat Khuzhin). - Agora,
max_insert_threadspassa a ter efeito em tabelas Iceberg. #87407 (alesapin). - Adiciona histograma e métricas dimensionais ao
PrometheusMetricsWriter. Dessa forma, o handlerPrometheusRequestHandlerterá todas as métricas essenciais e poderá ser usado para coleta de métricas confiável e com baixa sobrecarga em ambientes de nuvem. #87521 (Miсhael Stetsyuk). - A função
hasTokenagora retorna zero correspondências para o token vazio (antes, isso gerava uma exceção). #87564 (Jimmy Aguilar Mena). - Adicionado suporte a índice de texto para valores de
ArrayeMap(mapKeysemapValues). As funções compatíveis sãomapContainsKeyehas. #87602 (Elmi Ahmadov). - Adiciona uma nova métrica
ZooKeeperSessionExpired, que indica o número de sessões globais expiradas do ZooKeeper. #87613 (Miсhael Stetsyuk). - Use o cliente de armazenamento S3 com configurações específicas para backup (por exemplo, backup_slow_all_threads_after_retryable_s3_error) para cópia no lado do servidor (nativa) para um destino de backup. Marque s3_slow_all_threads_after_retryable_error como obsoleto. #87660 (Julia Kartseva).
- Corrige o tratamento incorreto das configurações
max_joined_block_size_rowsemax_joined_block_size_bytesna serialização do plano de consulta commake_distributed_planexperimental. #87675 (Vladimir Cherkasov). - A configuração
enable_http_compressionagora é o padrão. Isso significa que, se um cliente aceitar compressão HTTP, o servidor a usará. No entanto, essa mudança tem algumas desvantagens. O cliente pode solicitar um método de compressão mais pesado, comobzip2, o que não é razoável e aumentará o consumo de recursos do servidor (mas isso só ficará visível quando resultados grandes forem transferidos). O cliente pode solicitargzip, o que não é tão ruim, mas é menos eficiente quezstd. Fecha #71591. #87703 (Alexey Milovidov). - Adicionada uma nova entrada em
system.server_settings,keeper_hosts, que expõe a lista de hosts do [Zoo]Keeper aos quais ClickHouse pode se conectar. #87718 (Nikita Mikhaylov). - Adicione os valores
frometoaos dashboards do sistema para facilitar investigações históricas. #87823 (Mikhail f. Shiryaev). - Adiciona mais informações para monitoramento de desempenho em SELECTs do Iceberg. #87903 (Daniil Ivanik).
- Melhoria no cache do sistema de arquivos: reutilização do iterador de prioridade do cache entre threads que reservam espaço no cache simultaneamente. #87914 (Kseniia Sumarokova).
- Adicionada a capacidade de limitar solicitações no
Keeper(configuraçãomax_request_size, igual ajute.maxbuffernoZooKeeper, DESATIVADA por padrão por retrocompatibilidade, será ativada nos próximos lançamentos). #87952 (Azat Khuzhin). - Faz com que
clickhouse-benchmarkdeixe de incluir stacktraces em mensagens de erro por padrão. #87954 (Ahmed Gouda). - Evite usar o carregamento assíncrono de marcas no pool de threads (
load_marks_asynchronously=1) quando as marcas estiverem em cache (pois o pool pode estar sobrecarregado, e as consultas sofrerão uma penalidade por isso, mesmo que as marcas já estejam em cache). #87967 (Azat Khuzhin). - Ytsaurus: permitir a criação de tabelas/funções de tabela/dicionários com um subconjunto de colunas. #87982 (MikhailBurdukov).
- A partir de agora,
system.zookeeper_connection_logestá habilitado por padrão e pode ser usado para obter informações sobre as sessões do Keeper. #88011 (János Benjamin Antal). - Padroniza o comportamento de TCP e HTTP ao passar tabelas externas duplicadas. O HTTP permite que uma tabela temporária seja passada várias vezes. #88032 (Sema Checherinda).
- Remova os
MemoryPoolspersonalizados para leitura de Arrow/ORC/Parquet. Este componente parece ser desnecessário após #84082, já que agora rastreamos todas as alocações de qualquer maneira. #88035 (Nikita Mikhaylov). - Permite criar o banco de dados
Replicatedsem argumentos. #88044 (Pervakov Grigorii). clickhouse-keeper-client: Adicionado suporte para conexão à porta TLS do clickhouse-keeper, mantendo os nomes das flags iguais aos do clickhouse-client. #88065 (Pradeep Chhetri).- Adicionado um novo evento de perfil para acompanhar o número de vezes que uma mesclagem em segundo plano foi rejeitada por exceder os limites de memória. #88084 (Grant Holly).
- Habilita o analisador para validar expressões padrão de coluna em CREATE/ALTER TABLE. #88087 (Max Justus Spransy).
- Melhoria interna no planejamento de consultas: usar JoinStepLogical para
CROSS JOIN. #88151 (Vladimir Cherkasov). - Adicionado um alias para as funções
hasAnyTokens(hasAnyToken) ehasAllTokens(hasAllToken). #88162 (George Larionov). - Habilitar, por padrão, o profiler global de amostragem (ou seja, inclusive para threads do servidor não relacionadas a consultas): coletar stacktraces de todas as threads a cada 10 segundos de tempo de CPU e de tempo real. #88209 (Alexander Tokmakov).
- Atualização do SDK do Azure para incluir a correção de ‘Content-Length’ observada nas funcionalidades de cópia e criação de contêineres. #88278 (Smita Kulkarni).
- Tornar a função
lagcase insensitive para compatibilidade com o MySQL. #88322 (Lonny Kapelushnik). - Permite iniciar o
clickhouse-locala partir do diretórioclickhouse-server. Em versões anteriores, isso gerava o erroCannot parse UUID: .Agora você pode iniciar oclickhouse-locale manipular os bancos de dados do servidor sem iniciar o servidor. #88383 (Alexey Milovidov). - Adiciona a configuração
keeper_server.coordination_settings.check_node_acl_on_remove. Se estiver habilitada, antes de cada exclusão de um nó, serão verificadas as ACLs do próprio nó e do nó pai. Caso contrário, será verificada apenas a ACL do nó pai. #88513 (Antonio Andelic). - As colunas
JSONagora são formatadas de maneira legível ao usar o formatoVertical. Fecha #81794. #88524 (Frank Rosner). - Armazena os arquivos do
clickhouse-client(por exemplo, o histórico de consultas) nos locais descritos pela especificação XDG Base Directories, em vez de na raiz do diretório home.~/.clickhouse-client-historyainda será usado se já existir. #88538 (Konstantin Bogdanov). - Corrige um vazamento de memória causado por
GLOBAL IN(https://github.com/ClickHouse/ClickHouse/issues/88615). #88617 (pranavmehta94). - Adicionada sobrecarga a hasAny/hasAllTokens para aceitar uma string como entrada. #88679 (George Larionov).
- Adicionada uma etapa ao script de pós-instalação do
clickhouse-keeperpara permitir a inicialização automática com o sistema. #88746 (YenchangChan). - Verificar as credenciais na interface web apenas ao colá-las, em vez de a cada tecla pressionada. Isso evita um problema com servidores LDAP configurados incorretamente. Isso encerra #85777. #88769 (Alexey Milovidov).
- Limita o tamanho da mensagem de exceção quando uma restrição é violada. Em versões anteriores, você podia receber uma mensagem de exceção muito longa quando uma string muito longa era inserida, e ela acabava sendo registrada no query_log. Fecha #87032. #88801 (Alexey Milovidov).
- Correção ao solicitar a estrutura de um conjunto de dados ao servidor ArrowFlight durante a criação de uma tabela. #87542 (Vitaly Baranov).
Correção de bug (mau funcionamento visível ao usuário em um lançamento estável oficial)
- Corrigido um problema no GeoParquet que causava erros no protocolo do cliente. #84020 (Michael Kolupaev).
- Correção na resolução de funções dependentes do host, como
shardNum(), em subconsultas no nó iniciador. #84409 (Eduard Karacharov). - Corrigido o tratamento incorreto de datas anteriores ao
epochcom segundos fracionários em várias funções relacionadas a data e hora, comoparseDateTime64BestEffort,change{Year,Month,Day}emakeDateTime64. Antes, a parte fracionária dos segundos era subtraída dos segundos em vez de ser somada a eles. Por exemplo,parseDateTime64BestEffort('1969-01-01 00:00:00.468')retornava1968-12-31 23:59:59.532em vez de1969-01-01 00:00:00.468. #85396 (xiaohuanlin). - Corrigido o problema em que comandos ALTER COLUMN IF EXISTS falhavam quando o estado da coluna mudava dentro da mesma instrução ALTER. Comandos como DROP COLUMN IF EXISTS, MODIFY COLUMN IF EXISTS, COMMENT COLUMN IF EXISTS e RENAME COLUMN IF EXISTS agora tratam corretamente os casos em que uma coluna é excluída por um comando anterior na mesma instrução. #86046 (xiaohuanlin).
- Correção da inferência de Date/DateTime/DateTime64 para datas fora do intervalo suportado. #86184 (Pavel Kruglov).
- Corrige um travamento em que alguns dados válidos enviados por usuários para uma coluna
AggregateFunction(quantileDD)podiam fazer com que as mesclagens entrassem em recursão infinita. #86560 (Raphaël Thériault). - Suporte aos tipos JSON/Dynamic em tabelas criadas com a função de tabela
cluster. #86821 (Pavel Kruglov). - Corrigido o problema em que o resultado da função calculada na CTE era não determinístico na consulta. #86967 (Yakov Olkhovskiy).
- Corrige LOGICAL_ERROR no EXPLAIN com pointInPolygon em colunas de chave primária. #86971 (Michael Kolupaev).
- Corrige tabelas de lago de dados com uma sequência com codificação percentual no nome. Fecha #86626. #87020 (Anton Ivashkin).
- Corrige o comportamento incorreto de
IS NULLem colunas Nullable noOUTER JOINcomoptimize_functions_to_subcolumns, fecha #78625. #87058 (Vladimir Cherkasov). - Corrigida a contabilização incorreta da liberação de dados temporários no controle do limite
max_temporary_data_on_disk_size, corrige #87118. #87140 (JIaQi). - A função
checkHeadersagora valida corretamente os cabeçalhos fornecidos e rejeita os cabeçalhos proibidos. Autor original: Michael Anastasakis (@michael-anastasakis). #87172 (Raúl Marín). - Uniformiza o comportamento de
toDateetoDate32em todos os tipos numéricos. Corrige a verificação de underflow de Date32 durante o cast de int16. #87176 (Pervakov Grigorii). - Corrige erro lógico em réplicas paralelas em consultas com múltiplos JOINs, especialmente com RIGHT JOIN após LEFT/INNER JOIN. #87178 (Igor Nikonov).
- Passa a respeitar a configuração
input_format_try_infer_variantsno cache de inferência de esquema. #87180 (Pavel Kruglov). - Faça com que pathStartsWith corresponda apenas a caminhos dentro do prefixo. #87181 (Raúl Marín).
- Corrigidos erros lógicos na coluna virtual
_row_numbere nas exclusões por posição do Iceberg. #87220 (Michael Kolupaev). - Corrige o
LOGICAL_ERROR“Too large size passed to allocator” emJOINcausado pela mistura de blocos const e non-const. #87231 (Azat Khuzhin). - Corrigidas as atualizações leves com subconsultas que leem de outras tabelas
MergeTree. #87285 (Anton Popov). - Corrigida a otimização
move-to-prewhere, que não funcionava na presença de uma política de linha. Continuação de #85118. Fecha #69777. Fecha #83748. #87303 (Nikolai Kochetov). - Corrigida a aplicação de patches em colunas com expressão padrão ausentes nas partes de dados. #87347 (Anton Popov).
- Corrigida uma falha de segmentação ao usar nomes de campos de partição duplicados em tabelas MergeTree. #87365 (xiaohuanlin).
- Corrigida a atualização do EmbeddedRocksDB. #87392 (Raúl Marín).
- Corrigida a leitura direta a partir do índice de texto em armazenamento de objetos. #87399 (Anton Popov).
- Impedir a criação de um privilégio com
engineinexistente. #87419 (Jitendra). - Ignore apenas erros do tipo
not foundparas3_plain_rewritable(o que pode levar a todo tipo de problemas). #87426 (Azat Khuzhin). - Corrigidos dicionários com fonte YTSaurus e layouts range_hashed. #87490 (MikhailBurdukov).
- Corrige a criação de um array de tuples vazias. #87520 (Pavel Kruglov).
- Verificação de colunas inválidas durante a criação de tabelas temporárias. #87524 (Pavel Kruglov).
- Nunca inclua as colunas de partição do Hive no cabeçalho do formato. Corrige #87515. #87528 (Arthur Passos).
- Corrigida a preparação da leitura a partir de um format no DeltaLake quando um formato de texto é usado. #87529 (Pavel Kruglov).
- Corrige a validação de acesso para select e insert em tabelas Buffer. #87545 (pufit).
- Impedir a criação de índice de data skipping em tabela S3. #87554 (Bharat Nallan).
- Evita o vazamento da memória rastreada no
loggingassíncrono (pode haver um desvio significativo em 10 horas, ~100GiB) e no text_log (um desvio quase igual também é possível). #87584 (Azat Khuzhin). - Corrigido um bug que poderia levar à sobrescrita das configurações globais do servidor pelas configurações SELECT de uma View ou visão materializada, caso essa visão fosse removida de forma assíncrona e o servidor fosse reiniciado antes da conclusão da limpeza em segundo plano. #87603 (Alexander Tokmakov).
- Excluir os bytes do userspace page cache (se possível) ao calcular o aviso de excesso de memória. #87610 (Bharat Nallan).
- Corrige um bug em que a ordem incorreta dos tipos durante a desserialização de CSV causava
LOGICAL_ERROR. #87622 (Yarik Briukhovetskyi). - Corrigido o tratamento incorreto de
command_read_timeoutpara dicionários executáveis. #87627 (Azat Khuzhin). - Corrigido o comportamento incorreto de SELECT * REPLACE na cláusula WHERE com o novo analisador ao filtrar colunas substituídas. #87630 (xiaohuanlin).
- Corrigida a agregação em dois níveis ao usar
MergecomDistributed. #87687 (c-end). - Corrige a geração do bloco de saída no algoritmo HashJoin quando a lista de linhas à direita não é usada. Corrige #87401. #87699 (Dmitry Novik).
- O modo de leitura com réplicas paralelas podia ser selecionado incorretamente se não houvesse dados para leitura após a análise de índice. Fecha #87653. #87700 (zoomxi).
- Corrige o tratamento de colunas
timestamp/timestamptzno Glue. #87733 (Andrey Zvonov). - Isso fecha #86587. #87761 (scanhex12).
- Corrigida a escrita de valores booleanos na interface PostgreSQL. #87762 (Artem Yurov).
- Corrigido erro de tabela desconhecida em consulta INSERT SELECT com CTE, #85368. #87789 (Guang Zhao).
- Corrige a leitura da subcoluna nula de map em Variants, que não podem estar dentro de Nullable. #87798 (Pavel Kruglov).
- Corrigido o tratamento de erro quando não é possível remover completamente o banco de dados no cluster no nó secundário. #87802 (Tuan Pham Anh).
- Corrige vários bugs em índices de salto. #87817 (Raúl Marín).
- No AzureBlobStorage, foi alterado para tentar primeiro a cópia nativa e recorrer à leitura & gravação em caso de erro ‘Unauthorized’ (no AzureBlobStorage, se as contas de armazenamento da origem & do destino forem diferentes, recebemos o erro ‘Unauthorized’). E corrige a aplicação de “use_native_copy” quando o endpoint é definido na configuração. #87826 (Smita Kulkarni).
- ClickHouse falha se o arquivo ArrowStream tiver um dicionário não único. #87863 (Ilya Golshtein).
- Corrigido erro fatal ao usar approx_top_k e finalizeAggregation. #87892 (Jitendra).
- Corrigida a mesclagem com projeções quando o último bloco está vazio. #87928 (Raúl Marín).
- Não remova funções injetivas de GROUP BY se os tipos dos argumentos não forem permitidos em GROUP BY. #87958 (Pavel Kruglov).
- Correção para a eliminação incorreta de grânulos/partições em chaves baseadas em DateTime, ao usar a configuração
session_timezoneem consultas. #87987 (Eduard Karacharov). - Retorna o número de linhas afetadas após a consulta na interface PostgreSQL. #87990 (Artem Yurov).
- Restringe o uso de pushdown de filtro no PASTE JOIN, pois isso pode causar resultados incorretos. #88078 (Yarik Briukhovetskyi).
- Aplica a normalização de URI antes da avaliação da checagem de grants introduzida por https://github.com/ClickHouse/ClickHouse/pull/84503. #88089 (pufit).
- Corrige erro lógico quando ARRAY JOIN COLUMNS() não encontra nenhuma coluna no novo analisador. #88091 (xiaohuanlin).
- Corrigido o aviso “High ClickHouse memory usage” (excluindo o cache de páginas). #88092 (Azat Khuzhin).
- Corrigida uma possível corrupção de dados em tabelas
MergeTreecomTTLde coluna configurado. #88095 (Anton Popov). - Corrige uma possível exceção não tratada ao ler
system.tablescom tabelas inválidas em bancos de dados externos (PostgreSQL/SQLite/…) vinculados. #88105 (Azat Khuzhin). - Corrigido travamento nas funções
mortonEncodeehilbertEncodequando chamadas com argumento de tupla vazio. #88110 (xiaohuanlin). - Agora, as consultas
ON CLUSTERlevarão menos tempo quando houver réplicas inativas no cluster. #88153 (alesapin). - Agora, o worker de DDL remove hosts desatualizados do conjunto de réplicas. Isso reduzirá a quantidade de metadados armazenados no ZooKeeper. #88154 (alesapin).
- Corrigido o funcionamento do ClickHouse sem cgroups (acidentalmente, cgroups passaram a ser um requisito para métricas assíncronas). #88164 (Azat Khuzhin).
- Reverta corretamente a operação de mover diretório em caso de erro. Precisamos reescrever todos os objetos
prefix.pathalterados durante a execução, não apenas o objeto raiz. #88198 (Mikhail Artemenko). - Corrigida a propagação da flag
is_sharedemColumnLowCardinality. Isso pode levar a um resultado incorreto em group-by se um novo valor for inserido em uma coluna depois que os valores de hash já tiverem sido pré-calculados e armazenados em cache noReverseIndex. #88213 (Nikita Taranov). - Corrige a configuração de workload
max_cpu_share. Agora, ela pode ser usada sem que a configuração de workloadmax_cpusesteja definida. #88217 (Neerav). - Corrige um bug em que mutações muito pesadas com subconsultas podiam travar no estágio de preparação. Agora é possível interromper essas mutações com
SYSTEM STOP MERGES. #88241 (alesapin). - Agora, subconsultas correlacionadas funcionarão com armazenamento de objetos. #88290 (alesapin).
- Evite tentar inicializar bancos de dados do DataLake ao acessar
system.projectionsesystem.data_skipping_indices. #88330 (Azat Khuzhin). - Agora, os catálogos de data lake só serão exibidos nas tabelas de introspecção do sistema se
show_data_lake_catalogs_in_system_tablesestiver explicitamente habilitado. #88341 (alesapin). - Corrigido o DatabaseReplicated para que respeite a configuração
interserver_http_host. #88378 (xiaohuanlin). - Os argumentos posicionais agora estão explicitamente desabilitados no contexto da definição de projeções, pois não fazem sentido nessa etapa interna da consulta. Isso corrige #48604. #88380 (Amos Bird).
- Corrigida a complexidade quadrática na função
countMatches. Fecha #88400. #88401 (Alexey Milovidov). - Faz com que os comandos
ALTER COLUMN ... COMMENTde tabelas KeeperMap sejam replicados, para que sejam gravados nos metadados do banco de dados Replicated e propagados para todas as réplicas. Fecha #88077. #88408 (Eduard Karacharov). - Corrige um caso de dependência cíclica falsa com visões materializadas no Database Replicated, que impedia adicionar novas réplicas ao banco de dados. #88423 (Nikolay Degterinsky).
- Corrige a agregação de colunas esparsas quando
group_by_overflow_modeestá definido comoany. #88440 (Eduard Karacharov). - Corrige o erro “column not found” ao usar
query_plan_use_logical_join_step=0com várias cláusulas FULL JOIN USING. Fecha #88103. #88473 (Vladimir Cherkasov). - Clusters grandes com número de nós > 10 têm alta probabilidade de falhar na restauração com o erro
[941] 67c45db4-4df4-4879-87c5-25b8d1e0d414 <Trace>: RestoreCoordinationOnCluster The version of node /clickhouse/backups/restore-7c551a77-bd76-404c-bad0-3213618ac58e/stage/num_hosts changed (attempt #9), will try again. O nónum_hostsé sobrescrito por vários hosts ao mesmo tempo. A correção torna dinâmica a configuração que controla o número de tentativas. Fecha #87721. #88484 (Mikhail f. Shiryaev). - Este PR é apenas para garantir compatibilidade com a 23.8 e versões anteriores. Esse problema de compatibilidade foi introduzido por este PR: https://github.com/ClickHouse/ClickHouse/pull/54240 Este SQL falhará com
enable_analyzer=0(antes da 23.8, estava ok). #88491 (JIaQi). - Corrigido o overflow de inteiro detectado pelo UBSAN na mensagem de erro de
accurateCastao converter valores grandes para DateTime. #88520 (xiaohuanlin). - Corrige o CoalescingMergeTree para tipos Tuple. Isso encerra #88469. #88526 (scanhex12).
- Impedir exclusões para
iceberg_format_version=1. Isso fecha #88444. #88532 (scanhex12). - Este patch corrige a operação de movimentação em discos
plain-rewritablepara pastas com profundidade arbitrária. #88586 (Mikhail Artemenko). - Corrigido o SQL SECURITY DEFINER com funções *cluster. #88588 (Julian Maicher).
- Corrige um possível travamento causado por mutação concorrente das colunas const subjacentes do PREWHERE. #88605 (Azat Khuzhin).
- Corrigida a leitura no índice de texto e habilitado o cache de condições de consulta (com as configurações
use_skip_indexes_on_data_readeuse_query_condition_cacheativadas). #88660 (Anton Popov). - Uma exceção
Poco::TimeoutExceptionlançada porPoco::Net::HTTPChunkedStreamBuf::readFromDevicecausa uma falha com SIGABRT. #88668 (Miсhael Stetsyuk). - Backport aplicado em #88910: após a recuperação, uma réplica de um banco de dados Replicated podia ficar travada por muito tempo, exibindo mensagens como
Failed to marked query-0004647339 as finished (finished=No node, synced=No node); isso foi corrigido. #88671 (Alexander Tokmakov). - Corrige a adição em
system.zookeeper_connection_logcaso o ClickHouse se conecte pela primeira vez após a recarga da configuração. #88728 (Antonio Andelic). - Corrigido um bug em que a conversão de DateTime64 para Date com
date_time_overflow_behavior = 'saturate'podia gerar resultados incorretos para valores fora do intervalo ao lidar com fusos horários. #88737 (Manuel). - Mais uma tentativa de corrigir o erro “having zero bytes error” no engine de tabela S3 com cache habilitado. #88740 (Kseniia Sumarokova).
- Corrige a validação de acesso no SELECT para a função de tabela
loop. #88802 (pufit). - Capture exceções quando o logging assíncrono falhar para evitar que o programa seja abortado. #88814 (Raúl Marín).
- Retroportado em #89060: corrige
top_kpara respeitar o parâmetro de limiar quando chamado com um único argumento. Fecha #88757. #88867 (Manuel). - Backportado em #88944: Corrige um bug na função
reverseUTF8. Em versões anteriores, ela invertia erroneamente os bytes de pontos de código UTF-8 de 4 bytes. Isso fecha #88913. #88914 (Alexey Milovidov). - Retroportado em #88980: Não verificar o acesso a
SET DEFINER <current_user>:definerao criar uma view com SQL SECURITY DEFINER. #88968 (pufit). - Retroportado em #89058: corrigido
LOGICAL_ERRORemL2DistanceTransposed(vec1, vec2, p), em que a otimização para leitura parcial deQBitremovia incorretamenteNullabledo tipo de retorno quandoperaNullable. #88974 (Raufs Dunamalijevs). - Backportado em #89167: corrige falha em um tipo de catálogo desconhecido. Resolve #88819. #88987 (scanhex12).
- Retroportado em #89028: corrigida a degradação de desempenho na análise de índices de skipping. #89004 (Anton Popov).
Melhorias de Compilação/Testes/Empacotamento
- Atualiza a biblioteca
postgrespara a versão 18.0. #87647 (Konstantin Bogdanov). - Habilita ICU no FreeBSD. #87891 (Raúl Marín).
- Usa SSE 4.2 quando o despacho dinâmico é para SSE 4.2, e não para SSE 4. #88029 (Raúl Marín).
- Não exige a flag
NO_ARMV81_OR_HIGHERcasoSpeculative Store Bypass Safenão esteja disponível. #88051 (Konstantin Bogdanov). - Quando o ClickHouse é compilado com
ENABLE_LIBFIU=OFF, as funções relacionadas a failpoint tornam-se no-ops e deixam de impactar o desempenho. Nesse caso, as consultasSYSTEM ENABLE/DISABLE FAILPOINTretornam o erroSUPPORT_IS_DISABLED. #88184 (c-end).
Lançamento do ClickHouse 25.9, 2025-09-25
Alteração incompatível com versões anteriores
- Desabilita operações binárias sem sentido com IPv4/IPv6: soma/subtração de um IPv4/IPv6 com um tipo não inteiro passa a ser desabilitada. Antes, isso permitia operações com tipos de ponto flutuante e gerava erros lógicos com alguns outros tipos (como DateTime). #86336 (Raúl Marín).
- Descontinua a configuração
allow_dynamic_metadata_for_data_lakes. Agora, todas as tabelas Iceberg tentam obter o schema atualizado da tabela no armazenamento antes da execução de cada consulta. #86366 (Daniil Ivanik). - A resolução da coluna coalescida da cláusula
OUTER JOIN ... USINGfoi alterada para ser mais consistente: anteriormente, ao selecionar tanto a coluna de USING quanto colunas qualificadas (a, t1.a, t2.a) em um OUTER JOIN, a coluna de USING era incorretamente resolvida comot1.a, mostrando 0/NULL para linhas da tabela da direita sem correspondência à esquerda. Agora, os identificadores da cláusula USING são sempre resolvidos para a coluna coalescida, enquanto os identificadores qualificados são resolvidos para as colunas não coalescidas, independentemente de quais outros identificadores estejam presentes na consulta. Por exemplo: ```sql SELECT a, t1.a, t2.a FROM (SELECT 1 as a WHERE 0) t1 FULL JOIN (SELECT 2 as a) t2 USING (a) — Antes: a=0, t1.a=0, t2.a=2 (incorreto - ‘a’ resolvido como t1.a) — Depois: a=2, t1.a=0, t2.a=2 (correto - ‘a’ é coalescida). #80848 (Vladimir Cherkasov). - Aumenta a janela de desduplicação replicada para até 10000. Isso é totalmente compatível, mas é possível imaginar cenários em que essa mudança leve a um alto consumo de recursos na presença de um grande número de tabelas. #86820 (Sema Checherinda).
novo recurso
- Agora você pode usar o NATS JetStream para consumir mensagens ao especificar as novas configurações
nats_streamenats_consumerpara a engine NATS. #84799 (Dmitry Novikov). - Adicionado suporte à autenticação e SSL na função de tabela
arrowFlight. #87120 (Vitaly Baranov). - Adicionado um novo parâmetro ao mecanismo de tabela
S3e à função de tabelas3, chamadostorage_class_name, que permite especificar a classe de armazenamento Intelligent-Tiering compatível com a AWS. Compatível tanto com o formato chave-valor quanto com o formato posicional (obsoleto). #87122 (alesapin). ALTER UPDATEna engine de tabela Iceberg. #86059 (scanhex12).- Adicionar a tabela de sistema
iceberg_metadata_logpara obter arquivos de metadados do Iceberg durante instruções SELECT. #86152 (scanhex12). - As tabelas
IcebergeDeltaLakeoferecem suporte à configuração personalizada de disco por meio da opçãodiskno nível de armazenamento. #86778 (scanhex12). - Suporte a discos de lago de dados no Azure. #87173 (scanhex12).
- Compatibilidade com o catálogo
Unityno Azure blob storage. #80013 (Smita Kulkarni). - Suporte a mais formatos (
ORC,Avro) para gravações emIceberg. Isso fecha #86179. #87277 (scanhex12). - Adicionada uma nova system table
database_replicascom informações sobre réplicas de banco de dados. #83408 (Konstantin Morozov). - Adicionada a função
arrayExcept, que subtrai um array de outro, tratando-os como conjuntos. #82368 (Joanna Hulboj). - Adiciona uma nova tabela
system.aggregated_zookeeper_log. A tabela contém estatísticas (por exemplo, número de operações, latência média, erros) de operações do ZooKeeper agrupadas por ID de sessão, caminho pai e tipo de operação, e gravadas periodicamente em disco. #85102 #87208 (Miсhael Stetsyuk). - Uma nova função,
isValidASCII. Retorna 1 se a string de entrada ou FixedString contiver apenas bytes ASCII (0x00–0x7F); caso contrário, 0. Fecha #85377. … #85786 (rajat mohan). - Configurações booleanas podem ser especificadas sem argumentos, por exemplo,
SET use_query_cache;, o que equivale a defini-las comotrue. #85800 (thraeka). - Novas opções de configuração:
logger.startupLevel&logger.shutdownLevelpermitem substituir, respectivamente, o nível de log durante a inicialização & o desligamento do ClickHouse. #85967 (Lennard Eijsackers). - Funções agregadas
timeSeriesChangesToGridetimeSeriesResetsToGrid. Comportam-se de forma semelhante atimeSeriesRateToGrid, aceitando parâmetros para timestamp inicial, timestamp final, passo e janela retroativa, bem como dois argumentos para os timestamps e valores, mas exigindo pelo menos 1 amostra por janela em vez de 2. Calcula umchanges/resetsdo PromQL, contando o número de vezes que o valor da amostra muda ou diminui na janela especificada para cada timestamp na grade temporal definida pelos parâmetros. O tipo de retorno éArray(Nullable(Float64)). #86010 (Stephen Chi). - Permite que os usuários criem views temporárias com sintaxe semelhante à das tabelas temporárias (
CREATE TEMPORARY VIEW). #86432 (Aly Kafoury). - Adiciona avisos de uso de CPU e memória à tabela
system.warnings. #86838 (Bharat Nallan). - Suporte ao indicador
oneofem entradasProtobuf. Uma coluna especial pode ser usada para indicar a presença de uma parte deoneof. Se uma mensagem contiver oneof einput_format_protobuf_oneof_presenceestiver definido, o ClickHouse preenche a coluna que indica qual campo dooneoffoi encontrado. #82885 (Ilya Golshtein). - Melhoria no profiling de alocação com base nas ferramentas internas do jemalloc. O Profiler global do jemalloc agora pode ser habilitado com a configuração
jemalloc_enable_global_profiler. As alocações e desalocações globais amostradas agora podem ser armazenadas emsystem.trace_logcom o tipoJemallocSampleao habilitar a configuraçãojemalloc_collect_global_profile_samples_in_trace_log. O profiling do jemalloc agora pode ser habilitado independentemente para cada consulta usando a configuraçãojemalloc_enable_profiler. O armazenamento de amostras emsystem.trace_logpode ser controlado por consulta usando a configuraçãojemalloc_collect_profile_samples_in_trace_log. Atualizado o jemalloc para uma versão mais recente. #85438 (Antonio Andelic). - Uma nova configuração para excluir arquivos ao excluir tabelas Iceberg. Isso fecha #86211. #86501 (scanhex12).
recurso experimental
- O índice de texto invertido foi refeito do zero para ser escalável em conjuntos de dados que não cabem na RAM. #86485 (Anton Popov).
- A reordenação de joins agora usa estatísticas. A funcionalidade pode ser habilitada definindo
allow_statistics_optimize = 1equery_plan_optimize_join_order_limit = 10. #86822 (Han Fei). - O suporte a
alter table ... materialize statistics allpermitirá materializar todas as estatísticas de uma tabela. #87197 (Han Fei).
Melhorias de desempenho
- Suporta a filtragem de partes de dados usando skip indexes durante a leitura para reduzir leituras desnecessárias de índices. Isso é controlado pela nova configuração
use_skip_indexes_on_data_read(desabilitada por padrão). Isso corrige #75774. Isso inclui algum trabalho de base em comum com #81021. #81526 (Amos Bird). - Adicionada a otimização da ordem de JOIN, que pode reordenar automaticamente junções para melhorar o desempenho (controlada pela configuração
query_plan_optimize_join_order_limit). Observe que a otimização da ordem de join atualmente tem suporte limitado a estatísticas e depende principalmente de estimativas de contagem de linhas dos motores de armazenamento — coleta de estatísticas mais sofisticada e estimativa de cardinalidade serão adicionadas em lançamentos futuros. Se você encontrar problemas com consultas JOIN após a atualização, poderá desativar temporariamente a nova implementação definindoSET query_plan_use_new_logical_join_step = 0e relatar o problema para investigação. Observação sobre a resolução de identificadores da cláusula USING: A resolução da coluna coalescida da cláusulaOUTER JOIN ... USINGfoi alterada para ficar mais consistente: anteriormente, ao selecionar tanto a coluna do USING quanto colunas qualificadas (a, t1.a, t2.a) em um OUTER JOIN, a coluna do USING era incorretamente resolvida comot1.a, exibindo 0/NULL para linhas da tabela da direita sem correspondência na esquerda. Agora, os identificadores da cláusula USING são sempre resolvidos para a coluna coalescida, enquanto os identificadores qualificados são resolvidos para as colunas não coalescidas, independentemente de quais outros identificadores estejam presentes na consulta. Por exemplo: ```sql SELECT a, t1.a, t2.a FROM (SELECT 1 as a WHERE 0) t1 FULL JOIN (SELECT 2 as a) t2 USING (a) — Antes: a=0, t1.a=0, t2.a=2 (incorreto - ‘a’ era resolvido como t1.a) — Depois: a=2, t1.a=0, t2.a=2 (correto - ‘a’ é coalescido). #80848 (Vladimir Cherkasov). INSERT SELECTdistribuído em lagos de dados. #86783 (scanhex12).- Aprimora a otimização de PREWHERE para condições como
func(primary_column) = 'xx'ecolumn in (xxx). #85529 (李扬). - Implementada a reescrita de JOIN: 1. Converter
LEFT ANY JOINeRIGHT ANY JOINem JOINSEMI/ANTIse a condição de filtro for sempre falsa para linhas com correspondência ou sem correspondência. Essa otimização é controlada por uma nova configuração,query_plan_convert_any_join_to_semi_or_anti_join. 2. ConverterFULL ALL JOINemLEFT ALLouRIGHT ALL JOINse a condição de filtro for sempre falsa para linhas sem correspondência de um dos lados. #86028 (Dmitry Novik). - Desempenho aprimorado das mesclagens verticais após a execução de uma exclusão leve. #86169 (Anton Popov).
- O desempenho de
HashJoinfoi ligeiramente otimizado em casos deLEFT/RIGHTjoin com muitas linhas sem correspondência. #86312 (Nikita Taranov). - Radix sort: ajuda o compilador a usar SIMD e a fazer um prefetching melhor. Usa despacho dinâmico para usar prefetching por software apenas em CPUs Intel. Dá continuidade ao trabalho de @taiyang-li em https://github.com/ClickHouse/ClickHouse/pull/77029. #86378 (Raúl Marín).
- Melhora o desempenho de consultas curtas com muitas partes nas tabelas (ao otimizar
MarkRangescomdevectorem vez dedeque). #86933 (Azat Khuzhin). - Melhorado o desempenho ao aplicar patch parts no modo join. #87094 (Anton Popov).
- Adicionada a configuração
query_condition_cache_selectivity_threshold(valor padrão: 1.0), que exclui da inserção no cache de condições de consulta os resultados de varredura de predicados com baixa seletividade. Isso permite reduzir o consumo de memória do cache de condições de consulta, em troca de uma taxa de acerto pior. #86076 (zhongyuankai). - Reduz o uso de memória em gravações no Iceberg. #86544 (scanhex12).
Aprimoramento
- Suporte à gravação de vários arquivos de dados no Iceberg em uma única inserção. Adiciona novas configurações,
iceberg_insert_max_rows_in_data_fileeiceberg_insert_max_bytes_in_data_file, para definir esses limites. #86275 (scanhex12). - Adiciona limite de linhas/bytes para arquivos de dados inseridos no delta lake. Controlado pelas configurações
delta_lake_insert_max_rows_in_data_fileedelta_lake_insert_max_bytes_in_data_file. #86357 (Kseniia Sumarokova). - Adiciona suporte a mais tipos de partição em gravações no Iceberg. Isso encerra #86206. #86298 (scanhex12).
- Tornar configurável a estratégia de nova tentativa do S3 e permitir que as configurações do disco S3 sejam recarregadas a quente ao alterar o arquivo XML de configuração. #82642 (RinChanNOW).
- Aprimorado o mecanismo de tabela S3(Azure)Queue para permitir que ele resista à perda de conexão com o ZooKeeper sem gerar possíveis duplicatas. Requer a ativação da configuração do S3Queue
use_persistent_processing_nodes(alterável porALTER TABLE MODIFY SETTING). #85995 (Kseniia Sumarokova). - Você pode usar parâmetros de consulta após
TOao criar uma visão materializada. Por exemplo:CREATE MATERIALIZED VIEW mv TO {to_table:Identifier} AS SELECT * FROM src_table. #84899 (Diskein). - Fornecer instruções mais claras aos usuários quando configurações incorretas forem especificadas para o mecanismo de tabela
Kafka2. #83701 (János Benjamin Antal). - Não é mais possível especificar fusos horários para o tipo
Time(o que não fazia sentido). #84689 (Yarik Briukhovetskyi). - Simplificada (e com alguns bugs evitados) a lógica relacionada ao parsing de Time/Time64 no modo
best_effort. #84730 (Yarik Briukhovetskyi). - Adicionada a função
deltaLakeAzureCluster(semelhante àdeltaLakeAzurepara o modo cluster) e a funçãodeltaLakeS3Cluster(alias dedeltaLakeCluster). Resolve #85358. #85547 (Smita Kulkarni). - Aplique a configuração
azure_max_single_part_copy_sizeàs operações normais de cópia, da mesma forma que no backup. #85767 (Ilya Golshtein). - Desacelera as threads do cliente S3 em caso de erros recuperáveis no armazenamento de objetos S3. Isso estende a configuração anterior
backup_slow_all_threads_after_retryable_s3_errorpara discos S3 e a renomeia para a forma mais gerals3_slow_all_threads_after_retryable_error. #85918 (Julia Kartseva). - Marque as configurações allow_experimental_variant/dynamic/json e enable_variant/dynamic/json como obsoletas. Agora, os três tipos estão habilitados incondicionalmente. #85934 (Pavel Kruglov).
- Suporte à filtragem pela URL completa (diretiva
full_url) emhttp_handlers(incluindo esquema e host:port). #86155 (Azat Khuzhin). - Adicionada uma nova configuração,
allow_experimental_delta_lake_writes. #86180 (Kseniia Sumarokova). - Corrigida a detecção do systemd no script init.d (corrige a verificação “Instalar pacotes”). #86187 (Azat Khuzhin).
- Adiciona uma nova métrica dimensional
startup_scripts_failure_reason. Essa métrica é necessária para diferenciar os vários tipos de erro que levam à falha dos scripts de inicialização. Em particular, para fins de alerta, precisamos distinguir entre erros transitórios (por exemplo,MEMORY_LIMIT_EXCEEDEDouKEEPER_EXCEPTION) e erros não transitórios. #86202 (Miсhael Stetsyuk). - Permite omitir a função
identityna partição de tabelas Iceberg. #86314 (scanhex12). - Adiciona a possibilidade de habilitar o logging JSON apenas para um canal específico; para isso, defina
logger.formatting.channelcomo um entresyslog/console/errorlog/log. #86331 (Azat Khuzhin). - Permite usar números nativos em
WHERE. Eles já são permitidos como argumentos de funções lógicas. Isso simplifica as otimizações de pushdown de filtros e move-to-prewhere. #86390 (Nikolai Kochetov). - Corrigido erro ao executar
SYSTEM DROP REPLICAem um Catálogo com metadados corrompidos. #86391 (Nikita Mikhaylov). - Adiciona tentativas extras à verificação de acesso ao disco (
skip_access_check = 0) no Azure, porque o provisionamento do acesso pode levar bastante tempo. #86419 (Alexander Tokmakov). - Torna a janela de obsolescência nas funções
timeSeries*()aberta à esquerda e fechada à direita. #86588 (Vitaly Baranov). - Adiciona os eventos de perfil
FailedInternal*Query. #86627 (Shane Andrade). - Corrige o tratamento de usuários com ponto no nome quando adicionados por meio de arquivo de configuração. #86633 (Mikhail Koviazin).
- Adicionar métrica assíncrona para uso de memória nas consultas (
QueriesMemoryUsageeQueriesPeakMemoryUsage). #86669 (Azat Khuzhin). - Você pode usar a flag
clickhouse-benchmark --precisepara obter relatórios mais precisos de QPS e de outras métricas por intervalo. Isso ajuda a manter um QPS consistente quando a duração das consultas é comparável ao intervalo de geração de relatórios--delay D. #86684 (Sergei Trifonov). - Permitir configurar os valores
nicedas threads do Linux para atribuir prioridades mais altas ou mais baixas a algumas delas (merge/mutate, consulta, visão materializada, cliente do ZooKeeper). #86703 (Miсhael Stetsyuk). - Corrige o erro enganoso “o upload especificado não existe”, que ocorre quando a exceção original se perde em um multipart upload devido a uma condição de corrida. #86725 (Julia Kartseva).
- Limita a descrição do plano da consulta na consulta
EXPLAIN. Não calcula a descrição para consultas que não sejamEXPLAIN. Foi adicionada a configuraçãoquery_plan_max_step_description_length. #86741 (Nikolai Kochetov). - Adiciona a possibilidade de ajustar os sinais pendentes na tentativa de contornar
CANNOT_CREATE_TIMER(para os profilers de consulta,query_profiler_real_time_period_ns/query_profiler_cpu_time_period_ns). Também coletaSigQde/proc/self/statuspara introspecção (seProcessSignalQueueSizeestiver próximo deProcessSignalQueueLimit, é provável que você receba errosCANNOT_CREATE_TIMER). #86760 (Azat Khuzhin). - Melhoria no desempenho da solicitação
RemoveRecursiveno Keeper. #86789 (Antonio Andelic). - Remover espaços em branco extras em
PrettyJSONEachRowna saída do tipo JSON. #86819 (Pavel Kruglov). - Agora registramos os tamanhos dos blobs de
prefix.pathquando o diretório é removido em um disco regravável simples. #86908 (alesapin). - Suporte para testes de desempenho em instâncias remotas do ClickHouse, incluindo o ClickHouse Cloud. Exemplo de uso:
tests/performance/scripts/perf.py tests/performance/math.xml --runs 10 --user <username> --password <password> --host <hostname> --port <port> --secure. #86995 (Raufs Dunamalijevs). - Respeita os limites de memória em alguns pontos conhecidos por alocar uma quantidade significativa de memória (>16MiB) (ordenação, async inserts, File, Log). #87035 (Azat Khuzhin).
- Lançar uma exceção se a configuração
network_compression_methodnão for um codec genérico suportado. #87097 (Robert Schulze). - A tabela de sistema
system.query_cacheagora retorna todas as entradas do cache de resultados de consultas, enquanto antes retornava apenas entradas compartilhadas ou entradas não compartilhadas do mesmo usuário e função. Isso é aceitável, pois as entradas não compartilhadas não devem revelar resultados de consultas, enquantosystem.query_cacheretorna os textos das consultas. Isso torna o comportamento da tabela de sistema mais semelhante ao desystem.query_log. #87104 (Robert Schulze). - Habilitada a avaliação de curto-circuito para a função
parseDateTime. #87184 (Pavel Kruglov). - Adicionada uma nova coluna
statisticsemsystem.parts_columns. #87259 (Han Fei).
Correção de bug (mau funcionamento perceptível ao usuário em um lançamento estável oficial)
- Os resultados de consultas
altersão validados apenas no nó iniciador para bancos de dados replicados e tabelas com replicação interna. Isso corrige situações em que uma consultaalterjá efetivada poderia ficar travada em outros nós. #83849 (János Benjamin Antal). - Limita o número de tarefas de cada tipo em
BackgroundSchedulePool. Evita situações em que todos os slots são ocupados por tarefas de um único tipo, enquanto outras tarefas ficam sem recursos. Também evita deadlocks quando as tarefas ficam esperando umas pelas outras. Isso é controlado pela configuração do servidorbackground_schedule_pool_max_parallel_tasks_per_type_ratio. #84008 (Alexander Tokmakov). - Desligue corretamente as tabelas ao recuperar a réplica do banco de dados. Um desligamento inadequado causaria LOGICAL_ERROR em alguns motores de tabela durante a recuperação da réplica do banco de dados. #84744 (Antonio Andelic).
- Verificação das permissões de acesso durante a geração de sugestões de correção de erros de digitação para o nome do banco de dados. #85371 (Dmitry Novik).
-
- LowCardinality para colunas do Hive 2. Preencher colunas do Hive antes das colunas virtuais (necessário para https://github.com/ClickHouse/ClickHouse/pull/81040) 3. LOGICAL_ERROR com formato vazio para o Hive #85528 4. Corrigir a verificação quando as colunas de partição do Hive são as únicas colunas 5. Verificar que todas as colunas do Hive estejam especificadas no esquema 6. Correção parcial para parallel_replicas_cluster com o Hive 7. Usar contêiner ordenado em extractkeyValuePairs para utilitários do Hive (necessário para https://github.com/ClickHouse/ClickHouse/pull/81040). #85538 (Arthur Passos).
- Evita a otimização desnecessária do primeiro argumento das funções
IN, que às vezes resultava em erro ao usar mapeamento de array. #85546 (Yakov Olkhovskiy). - O mapeamento entre IDs de origem do Iceberg e nomes do Parquet não era ajustado ao schema quando o arquivo Parquet era gravado. Este PR processa o schema relevante para cada arquivo de dados do Iceberg, e não o atual. #85829 (Daniil Ivanik).
- Corrigida a leitura do tamanho do arquivo separadamente da sua abertura. Relaciona-se a https://github.com/ClickHouse/ClickHouse/pull/33372, que foi introduzido em resposta a um bug em kernels do Linux anteriores ao lançamento
5.10. #85837 (Konstantin Bogdanov). - O ClickHouse Keeper não deixa mais de iniciar em sistemas em que o IPv6 está desabilitado no nível do kernel (por exemplo, RHEL com ipv6.disable=1). Agora, ele tenta usar um listener IPv4 como alternativa se o listener IPv6 inicial falhar. #85901 (jskong1124).
- Este PR fecha #77990. Adiciona suporte a TableFunctionRemote para réplicas paralelas em globalJoin. #85929 (zoomxi).
- Corrige ponteiro nulo em orcschemareader::initializeifneeded(). este PR trata do seguinte problema: #85292 ### entrada de documentação para alterações visíveis ao usuário. #85951 (yanglongwei).
- Adicionada uma verificação para permitir subconsultas correlacionadas na cláusula FROM somente se usarem colunas da consulta externa. Corrige #85469. Corrige #85402. #85966 (Dmitry Novik).
- Corrige o
alter updatede uma coluna com uma subcoluna usada na expressão materializada de outra coluna. Antes, a coluna materializada com uma subcoluna em sua expressão não era atualizada corretamente. #85985 (Pavel Kruglov). - Proibir a alteração de colunas cujas subcolunas são usadas na PK ou na expressão de partição. #86005 (Pavel Kruglov).
- Corrigida a leitura de subcolunas ao usar o modo de mapeamento de colunas não padrão no armazenamento DeltaLake. #86064 (Kseniia Sumarokova).
- Corrige o uso de valores padrão incorretos para caminhos com hint Enum em JSON. #86065 (Pavel Kruglov).
- Análise da URL do catálogo Hive do DataLake com sanitização de entrada. Fecha #86018. #86092 (rajat mohan).
- Corrigido erro lógico durante o redimensionamento dinâmico do cache do sistema de arquivos. Fecha #86122. Fecha https://github.com/ClickHouse/clickhouse-core-incidents/issues/473. #86130 (Kseniia Sumarokova).
- Use
NonZeroUInt64paralogs_to_keepem DatabaseReplicatedSettings. #86142 (Tuan Pham Anh). - Uma exceção era gerada por uma consulta
FINALcom skip index se a tabela (por exemplo,ReplacingMergeTree) tivesse sido criada com a configuraçãoindex_granularity_bytes = 0. Essa exceção já foi corrigida. #86147 (Shankar Iyer). - Remove UB e corrige problemas no parsing da expressão de partição do Iceberg. #86166 (Daniil Ivanik).
- Corrige travamento no caso de blocos const e non-const em um mesmo INSERT. #86230 (Azat Khuzhin).
- Processa inclusões de
/etc/metrika.xmlpor padrão ao criar discos via SQL. #86232 (alekar). - Corrigida a conversão de String para JSON em accurateCastOrNull/accurateCastOrDefault. #86240 (Pavel Kruglov).
- Suporte a diretórios sem ’/’ no engine Iceberg. #86249 (scanhex12).
- Corrige falha com replaceRegex, um haystack do tipo FixedString e uma needle vazia. #86270 (Raúl Marín).
- Corrige travamento durante ALTER UPDATE Nullable(JSON). #86281 (Pavel Kruglov).
- Corrige a ausência do definidor de coluna em system.tables. #86295 (Raúl Marín).
- Corrigido o cast de LowCardinality(Nullable(T)) para Dynamic. #86365 (Pavel Kruglov).
- Corrige um erro lógico durante gravações no DeltaLake. Fecha #86175. #86367 (Kseniia Sumarokova).
- Corrige
416 The range specified is invalid for the current size of the resource. The range specified is invalid for the current size of the resourceao ler blobs vazios do Azure blob storage no disco plain_rewritable. #86400 (Julia Kartseva). - Corrigido GROUP BY Nullable(JSON). #86410 (Pavel Kruglov).
- Corrigido um bug em visões materializadas: uma MV podia não funcionar se fosse criada, excluída e depois recriada com o mesmo nome. #86413 (Alexander Tokmakov).
- Gerar falha se todas as réplicas estiverem indisponíveis ao ler de funções *cluster. #86414 (Julian Maicher).
- Corrige o vazamento de
MergesMutationsMemoryTrackingcausado por tabelasBuffere corrigequery_views_logno streaming a partir deKafka(e outros). #86422 (Azat Khuzhin). - Corrige o show tables após a remoção da tabela de referência do armazenamento de alias. #86433 (RinChanNOW).
- Corrige o cabeçalho de fragmento ausente quando send_chunk_header está habilitado e a UDF é invocada via protocolo HTTP. #86469 (Vladimir Cherkasov).
- Corrige um possível deadlock quando os flushes do perfil do jemalloc estão habilitados. #86473 (Azat Khuzhin).
- Corrigida a leitura de subcolunas no engine de tabela DeltaLake. Fecha #86204. #86477 (Kseniia Sumarokova).
- Tratamento correto do ID do host de loopback para evitar colisão ao processar tarefas de DDL:. #86479 (Tuan Pham Anh).
- Corrige detach/attach em tabelas do mecanismo de banco de dados Postgres com colunas numéricas/decimais. #86480 (Julian Maicher).
- Corrigido o uso de memória não inicializada no getSubcolumnType. #86498 (Raúl Marín).
- As funções
searchAnyesearchAll, quando chamadas com padrões de busca vazios, agora retornamtrue(ou seja, “correspondem a tudo”). Antes, retornavamfalse. (issue #86300). #86500 (Elmi Ahmadov). - Corrigida a função
timeSeriesResampleToGridWithStaleness()quando o primeiro intervalo não tem valor. #86507 (Vitaly Baranov). - Corrige falha causada por
merge_tree_min_read_task_sizeser definido como 0. #86527 (yanglongwei). - Durante a leitura, o formato de cada arquivo de dados é obtido a partir dos metadados do Iceberg (antes, era obtido dos argumentos da tabela). #86529 (Daniil Ivanik).
- Ignora exceções durante a gravação do log ao encerrar e torna o encerramento mais seguro (para evitar SIGSEGV). #86546 (Azat Khuzhin).
- Corrige o mecanismo de banco de dados Backup que gerava exceção em consultas com arquivos de partes de tamanho zero. #86563 (Max Justus Spransy).
- Corrige a ausência do cabeçalho de fragmento quando send_chunk_header está habilitado e a UDF é invocada pelo protocolo HTTP. #86606 (Vladimir Cherkasov).
- Corrige o erro lógico no S3Queue “Expected current processor to be equal to ”, causado pela expiração da sessão do Keeper. #86615 (Kseniia Sumarokova).
- Problemas de nulabilidade em insert e pruning. Isso encerra #86407. #86630 (scanhex12).
- Não desative o cache do sistema de arquivos se o cache de metadados do Iceberg estiver desabilitado. #86635 (Daniil Ivanik).
- Corrigido o erro ‘Deadlock in Parquet::ReadManager (single-threaded)’ no leitor de Parquet v3. #86644 (Michael Kolupaev).
- Corrigido o suporte a IPv6 em
listen_hostpara o ArrowFlight. #86664 (Vitaly Baranov). - Corrige o encerramento do handler
ArrowFlight. Este PR corrige #86596. #86665 (Vitaly Baranov). - Corrige consultas distribuídas com
describe_compact_output=1. #86676 (Azat Khuzhin). - Corrige a análise da definição de janela e a aplicação dos parâmetros de consulta. #86720 (Azat Khuzhin).
- Corrige a exceção
Partition strategy wildcard can not be used without a '_partition_id' wildcard.ao criar uma tabela comPARTITION BY, mas sem usar curinga de partição, o que costumava funcionar em versões anteriores à 25.8. Fecha https://github.com/ClickHouse/clickhouse-private/issues/37567. #86748 (Kseniia Sumarokova). - Corrigido o LogicalError quando consultas paralelas tentam adquirir o mesmo bloqueio. #86751 (Pervakov Grigorii).
- Corrige a escrita de NULL nos dados compartilhados em JSON no formato de entrada RowBinary e adiciona algumas validações extras em ColumnObject. #86812 (Pavel Kruglov).
- Corrigida a permutação vazia de Tuple com limite. #86828 (Pavel Kruglov).
- Não use um nó Keeper separado para nós de processamento persistentes. Correção para https://github.com/ClickHouse/ClickHouse/pull/85995. Fecha #86406. #86841 (Kseniia Sumarokova).
- Corrige uma tabela com engine TimeSeries que impedia a criação de uma nova réplica em um banco de dados Replicated. #86845 (Nikolay Degterinsky).
- Corrige a consulta a
system.distributed_ddl_queuenos casos em que faltam determinados nós do Keeper em tarefas. #86848 (Antonio Andelic). - Corrige o reposicionamento de leitura no final do bloco descomprimido. #86906 (Pavel Kruglov).
- Processar a exceção lançada durante a execução assíncrona do Iceberg Iterator. #86932 (Daniil Ivanik).
- Corrigido o salvamento de configurações XML pré-processadas grandes. #86934 (c-end).
- Corrige o preenchimento do campo de data na tabela system.iceberg_metadata_log. #86961 (Daniil Ivanik).
- Corrigido o recálculo infinito de
TTLcomWHERE. #86965 (Anton Popov). - Corrigido um possível resultado incorreto da função
uniqExactcom os modificadoresROLLUPeCUBE. #87014 (Nikita Taranov). - Corrige a resolução do esquema da tabela com a table function
url()quando a configuraçãoparallel_replicas_for_cluster_functionsé definida como 1. #87029 (Konstantin Bogdanov). - Corrige o cast da saída de PREWHERE após sua divisão em múltiplas etapas. #87040 (Antonio Andelic).
- Corrigido o suporte a atualizações leves com a cláusula
ON CLUSTER. #87043 (Anton Popov). - Corrigida a compatibilidade de alguns estados de funções de agregação com o argumento String. #87049 (Pavel Kruglov).
- Corrige um problema em que o nome do modelo da OpenAI não era transmitido. #87100 (Kaushik Iska).
- EmbeddedRocksDB: O caminho deve ficar dentro de user_files. #87109 (Raúl Marín).
- Corrige tabelas KeeperMap criadas antes da versão 25.1, que deixavam dados no ZooKeeper após o comando DROP. #87112 (Nikolay Degterinsky).
- Corrige a leitura dos IDs de campo de maps e arrays no Parquet. #87136 (scanhex12).
- Corrigida a leitura de Array com a subcoluna de tamanhos de array na materialização tardia. #87139 (Pavel Kruglov).
- Corrigida a função CASE com argumentos Dynamic. #87177 (Pavel Kruglov).
- Corrige a leitura de um array vazio a partir de uma string vazia em CSV. #87182 (Pavel Kruglov).
- Corrige um possível resultado incorreto de
EXISTSnão correlacionado. O problema ocorria comexecute_exists_as_scalar_subquery=1, introduzido em https://github.com/ClickHouse/ClickHouse/pull/85481, e afeta a versão25.8. Corrige #86415. #87207 (Nikolai Kochetov). - Gera um erro se
iceberg_metadata_lognão estiver configurado, mas o usuário tentar obter informações de depuração sobre os metadados do Iceberg. Corrige o acesso anullptr. #87250 (Daniil Ivanik).
Melhorias de Compilação/Testes/Empacotamento
- Corrige a compatibilidade com o abseil-cpp 20250814.0, https://github.com/abseil/abseil-cpp/issues/1923. #85970 (Yuriy Chernyshov).
- Passa a controlar a compilação do lexer WASM independente por uma flag. #86505 (Konstantin Bogdanov).
- Corrige a compilação do crc32c em CPUs ARM mais antigas sem suporte à instrução
vmull_p64. #86521 (Pablo Marcos). - Usa
openldap2.6.10. #86623 (Konstantin Bogdanov). - Não tenta interceptar
memalignno Darwin. #86769 (Konstantin Bogdanov). - Usa
krb51.22.1-final. #86836 (Konstantin Bogdanov). - Corrige a extração dos nomes de crates Rust em
list-licenses.sh. #87305 (Konstantin Bogdanov).
Lançamento do ClickHouse 25.8 LTS, 2025-08-28
Alteração incompatível com versões anteriores
- Inferir
Array(Dynamic)em vez deTuplesem nome para arrays de valores com tipos diferentes em JSON. Para usar o comportamento anterior, desative a configuraçãoinput_format_json_infer_array_of_dynamic_from_array_of_different_types. #80859 (Pavel Kruglov). - Mover as métricas de latência do S3 para histogramas, por homogeneidade e simplicidade. #82305 (Miсhael Stetsyuk).
- Exigir backticks ao redor de identificadores com pontos em expressões default para evitar que sejam interpretados como identificadores compostos. #83162 (Pervakov Grigorii).
- A lazy materialization é habilitada apenas com o analyzer (que é o padrão), para evitar a manutenção sem analyzer — que, pela nossa experiência, apresenta alguns problemas (por exemplo, ao usar
indexHint()em condições). #83791 (Igor Nikonov). - Gravar valores do tipo
EnumcomoBYTE_ARRAYcom tipo lógicoENUMno formato de saída Parquet por padrão. #84169 (Pavel Kruglov). - Habilitar a configuração do MergeTree
write_marks_for_substreams_in_compact_partspor padrão. Isso melhora significativamente o desempenho da leitura de subcolunas de Compact parts recém-criadas. Servidores com versão inferior à 25.5 não conseguirão ler as novas Compact parts. #84171 (Pavel Kruglov). - O valor padrão anterior de
concurrent_threads_schedulereraround_robin, o que se mostrou injusto na presença de um grande número de consultas com uma única thread (por exemplo, INSERTs). Esta alteração tornafair_round_robin, uma alternativa mais segura, o agendador padrão. #84747 (Sergei Trifonov). - O ClickHouse oferece suporte à sintaxe heredoc no estilo do PostgreSQL:
$tag$ string contents... $tag$, também conhecida como literais de string delimitadas por cifrão. Em versões anteriores, havia menos restrições para tags: elas podiam conter caracteres arbitrários, incluindo pontuação e espaços em branco. Isso introduz ambiguidade de parsing com identificadores que também podem começar com o caractere cifrão. Ao mesmo tempo, o PostgreSQL permite apenas caracteres de palavra nas tags. Para resolver o problema, agora restringimos as tags de heredoc para conter apenas caracteres de palavra. Fecha #84731. #84846 (Alexey Milovidov). - As funções
azureBlobStorage,deltaLakeAzureeicebergAzureforam atualizadas para validar corretamente as permissõesAZURE. Todas as funções na variante de cluster (funções-Cluster) agora verificam permissões em relação às respectivas versões sem cluster. Além disso, as funçõesicebergLocaledeltaLakeLocalagora aplicam verificações da permissãoFILE. #84938 (Nikita Mikhaylov). - Habilita a configuração
allow_dynamic_metadata_for_data_lakes(configuração no nível de Table Engine) por padrão. #85044 (Daniil Ivanik). - Desabilitar por padrão o uso de aspas em inteiros de 64 bits nos formatos JSON. #74079 (Pavel Kruglov)
novo recurso
- Foi adicionado suporte básico ao dialeto PromQL. Para usá-lo, defina
dialect='promql'no clickhouse-client, aponte-o para a tabela TimeSeries usando a configuraçãopromql_table_name='X'e execute consultas comorate(ClickHouseProfileEvents_ReadCompressedBytes[1m])[5m:1m]. Além disso, você pode envolver a consulta PromQL em SQL:SELECT * FROM prometheusQuery('up', ...);. Até o momento, apenas as funçõesrate,deltaeincreasesão suportadas. Sem suporte a operadores unários/binários. Sem API HTTP. #75036 (Vitaly Baranov). - A geração de SQL com IA agora pode inferir as variáveis de ambiente ANTHROPIC_API_KEY e OPENAI_API_KEY, se estiverem disponíveis, permitindo oferecer uma opção sem configuração para usar esse recurso. #83787 (Kaushik Iska).
- Implementa suporte ao protocolo ArrowFlight RPC com a adição de: - nova função de tabela
arrowflight. #74184 (zakr600). - Agora todas as tabelas passaram a oferecer suporte à coluna virtual
_table(não apenas as tabelas com o mecanismoMerge), o que é especialmente útil para consultas com UNION ALL. #63665 (Xiaozhe Yu). - Permite o uso de qualquer política de armazenamento (ou seja, de armazenamento de objetos, como S3) para agregação/ordenação externas. #84734 (Azat Khuzhin).
- Implemente a autenticação do AWS S3 com um IAM role fornecido explicitamente. Implemente OAuth para GCS. Esses recursos até recentemente só estavam disponíveis no ClickHouse Cloud e agora são open source. Sincronize algumas interfaces, como a serialização dos parâmetros de conexão para armazenamento de objetos. #84011 (Alexey Milovidov).
- Adicionado suporte a exclusões por posição no TableEngine do Iceberg. #83094 (Daniil Ivanik).
- Suporte a Equality Deletes do Iceberg. #85843 (Han Fei).
- Gravações do Iceberg para CREATE. Fecha #83927. #83983 (Konstantin Vedernikov).
- Catálogos Glue para operações de gravação. #84136 (Konstantin Vedernikov).
- Catálogos REST do Iceberg para gravação. #84684 (Konstantin Vedernikov).
- Combina todos os arquivos de exclusão por posição do Iceberg em arquivos de dados. Isso reduzirá a quantidade e o tamanho dos arquivos Parquet no armazenamento Iceberg. Sintaxe:
OPTIMIZE TABLE table_name. #85250 (Konstantin Vedernikov). - Suporte ao
drop tableno Iceberg (remoção dos catálogos REST/Glue + remoção dos metadados da tabela). #85395 (Konstantin Vedernikov). - Adicionar suporte a mutações de exclusão ALTER DELETE para Iceberg no formato merge-on-read. #85549 (Konstantin Vedernikov).
- Adiciona suporte à escrita no DeltaLake. Fecha #79603. #85564 (Kseniia Sumarokova).
- Adicionada a configuração
delta_lake_snapshot_versionpara permitir a leitura de uma versão específica de snapshot no mecanismo de tabelaDeltaLake. #85295 (Kseniia Sumarokova). - Grava mais estatísticas do Iceberg (tamanhos de colunas, limites inferiores e superiores) nos metadados (entradas de manifesto) para poda min-max. #85746 (Konstantin Vedernikov).
- Suporte à adição/remoção/modificação de colunas no Iceberg para tipos simples. #85769 (Konstantin Vedernikov).
- Iceberg: suporte à gravação do arquivo version-hint. Isso encerra #85097. #85130 (Konstantin Vedernikov).
- Views, criadas por usuários efêmeros, agora armazenarão uma cópia de um usuário real e não serão mais invalidadas após o usuário efêmero ser excluído. #84763 (pufit).
- O índice de similaridade de vetores agora oferece suporte à quantização binária. A quantização binária reduz significativamente o consumo de memória e acelera o processo de criação de um índice vetorial (devido ao cálculo de distância mais rápido). Além disso, a configuração existente
vector_search_postfilter_multiplierfoi descontinuada e substituída por uma configuração mais geral:vector_search_index_fetch_multiplier. #85024 (Shankar Iyer). - Permite argumentos de chave-valor em
s3ou na função/no mecanismo de tabelas3Cluster, por exemplos3('url', CSV, structure = 'a Int32', compression_method = 'gzip'). #85134 (Kseniia Sumarokova). - Uma nova tabela de sistema para armazenar mensagens de entrada com erro de motores como o Kafka (“dead letter queue”). #68873 (Ilya Golshtein).
- O novo SYSTEM RESTORE DATABASE REPLICA para bancos de dados Replicated, semelhante à funcionalidade de restauração já existente no ReplicatedMergeTree. #73100 (Konstantin Morozov).
- O protocolo PostgreSQL agora é compatível com o comando
COPY. #74344 (Konstantin Vedernikov). - Adiciona suporte ao cliente C# para o protocolo MySQL. Isso fecha #83992. #84397 (Konstantin Vedernikov).
- Adicionado suporte a leituras e gravações no estilo de partição do Hive. #76802 (Arthur Passos).
- Adiciona a tabela de sistema
zookeeper_connection_logpara armazenar informações históricas sobre conexões com o ZooKeeper. #79494 (János Benjamin Antal). - A configuração do servidor
cpu_slot_preemptionhabilita o escalonamento preemptivo de CPU para workloads e garante a alocação max-min justa do tempo de CPU entre os workloads. Foram adicionadas novas configurações de workload para limitação de CPU:max_cpus,max_cpu_shareemax_burst_cpu_seconds. Mais detalhes: https://clickhouse.com/docs/operations/workload-scheduling#cpu_scheduling. #80879 (Sergei Trifonov). - Encerra a conexão TCP após um número configurado de consultas ou um limite de tempo. Isso é útil para uma distribuição mais uniforme das conexões entre os nós do cluster por trás de um balanceador de carga. Resolve #68000. #81472 (Kenny Sun).
- Réplicas paralelas agora oferecem suporte ao uso de projeções em consultas. #82659. #82807 (zoomxi).
- Suporte a DESCRIBE SELECT, além de DESCRIBE (SELECT …). #82947 (Yarik Briukhovetskyi).
- Exigir conexão segura para mysql_port e postgresql_port. #82962 (tiandiwonder).
- Agora você pode fazer buscas por chaves JSON sem diferenciar maiúsculas de minúsculas usando
JSONExtractCaseInsensitive(e outras variantes deJSONExtract). #83770 (Alistair Evans). - Adição da tabela
system.completions. Fecha #81889. #83833 (|2ustam). - Foi adicionada uma nova função
nowInBlock64. Exemplo de uso:SELECT nowInBlock64(6)retorna2025-07-29 17:09:37.775725. #84178 (Halersson Paris). - Adiciona
extra_credentialsao AzureBlobStorage para autenticação comclient_idetenant_id. #84235 (Pablo Marcos). - Adicionada a função
dateTimeToUUIDv7para converter um valor do tipo DateTime em um UUIDv7. Exemplo de uso:SELECT dateTimeToUUIDv7(toDateTime('2025-08-15 18:57:56'))retorna0198af18-8320-7a7d-abd3-358db23b9d5c. #84319 (samradovich). timeSeriesDerivToGridetimeSeriesPredictLinearToGrid, funções de agregação para reamostrar dados em uma grade temporal definida pelo timestamp inicial, timestamp final e passo especificados; calculamderivepredict_linearde forma semelhante ao PromQL, respectivamente. #84328 (Stephen Chi).- Adicionadas duas novas funções TimeSeries: -
timeSeriesRange(start_timestamp, end_timestamp, step), -timeSeriesFromGrid(start_timestamp, end_timestamp, step, values),. #85435 (Vitaly Baranov). - Adicionada nova sintaxe:
GRANT READ ON S3('s3://foo/.*') TO user. #84503 (pufit). - Adicionado
Hashcomo um novo formato de saída. Ele calcula um único valor de hash para todas as colunas e linhas do resultado. Isso é útil para calcular uma “impressão digital” do resultado, por exemplo, em casos em que a transferência de dados é um gargalo. Exemplo:SELECT arrayJoin(['abc', 'def']), 42 FORMAT Hashretornae5f9e676db098fdb9530d2059d8c23ef. #84607 (Robert Schulze). - Adiciona suporte à configuração de watches arbitrários em consultas Multi do Keeper. #84964 (Mikhail Artemenko).
- Adiciona a opção
--max-concurrencyà ferramentaclickhouse-benchmark, que habilita um modo com aumento gradual no número de consultas paralelas. #85623 (Sergei Trifonov). - Suporte para métricas parcialmente agregadas. #85328 (Mikhail Artemenko).
Recurso experimental
- O suporte a subconsultas correlacionadas passa a ser habilitado por padrão; elas não são mais experimentais. #85107 (Dmitry Novik).
- Os catálogos de lago de dados Unity, Glue, Rest e Hive Metastore passaram de experimental para beta. #85848 (Melvyn Peignon).
- Atualizações leves e exclusões passaram de experimental para beta.
- A busca vetorial aproximada com índices de similaridade vetorial agora está em GA. #85888 (Robert Schulze).
- Mecanismo de tabela e função de tabela Ytsaurus. #77606 (MikhailBurdukov).
- Anteriormente, os dados do índice de texto eram separados em vários segmentos (o tamanho padrão de cada segmento era 256 MiB). Isso podia reduzir o consumo de memória ao criar o índice de texto; no entanto, aumentava o espaço necessário em disco e o tempo de resposta da consulta. #84590 (Elmi Ahmadov).
Melhoria de desempenho
- Nova implementação do leitor de Parquet. Em geral, é mais rápida e oferece suporte a pushdown de filtro no nível da página e a PREWHERE. Atualmente, é experimental. Use a configuração
input_format_parquet_use_native_reader_v3para habilitá-la. #82789 (Michael Kolupaev). - Substituímos o transporte HTTP oficial da biblioteca do Azure pela nossa própria implementação de cliente HTTP para Azure Blob Storage. Introduzimos várias configurações para esses clientes, espelhando configurações do S3. Também introduzimos timeouts de conexão agressivos tanto para o Azure quanto para o S3. Melhoramos a introspecção dos profile events e das métricas do Azure. O novo cliente vem habilitado por padrão e oferece latências muito melhores para consultas frias no Azure Blob Storage. É possível voltar a usar o cliente
Curlantigo definindoazure_sdk_use_native_client=false. #83294 (alesapin). A implementação oficial anterior do cliente do Azure era inadequada para produção devido a picos de latência terríveis, que variavam de cinco segundos a vários minutos. Abandonamos essa implementação horrível e temos muito orgulho disso. - Processa os índices em ordem crescente de tamanho de arquivo. A ordenação geral dos índices prioriza os índices minmax e vetoriais (devido, respectivamente, à simplicidade e à seletividade), seguidos pelos índices menores. Entre os índices minmax/vetoriais, os menores também têm preferência. #84094 (Maruth Goyal).
- Ativa por padrão a configuração do MergeTree
write_marks_for_substreams_in_compact_parts. Isso melhora significativamente o desempenho da leitura de subcolunas em novas partes Compact. Servidores com versão inferior à 25.5 não poderão ler novas partes Compact. #84171 (Pavel Kruglov). azureBlobStoragetable engine: armazena em cache e reutiliza, quando possível, tokens de autenticação de identidade gerenciada para evitar limitação de taxa. #79860 (Nick Blakely).- As junções
ALLLEFT/INNERserão convertidas automaticamente paraRightAnyse o lado direito for funcionalmente determinado pelas colunas da chave de junção (todas as linhas têm valores exclusivos de chave de junção). #84010 (Nikita Taranov). - Adiciona
max_joined_block_size_bytes, além demax_joined_block_size_rows, para limitar o uso de memória de JOINs com colunas grandes. #83869 (Nikolai Kochetov). - Foi adicionada uma nova lógica (controlada pela configuração
enable_producing_buckets_out_of_order_in_aggregation, ativada por padrão) que permite enviar alguns buckets fora de ordem durante a agregação com uso eficiente de memória. Quando alguns buckets de agregação levam significativamente mais tempo para serem mesclados do que outros, isso melhora o desempenho ao permitir que o nó iniciador mescle, nesse meio-tempo, buckets com IDs mais altos. A desvantagem é um uso de memória potencialmente maior (não deve ser significativo). #80179 (Nikita Taranov). - Foi introduzida a configuração
optimize_rewrite_regexp_functions(ativada por padrão), que permite ao otimizador reescrever determinadas chamadas dereplaceRegexpAll,replaceRegexpOneeextractpara formas mais simples e eficientes quando detecta padrões específicos de expressão regular. (issue #81981). #81992 (Amos Bird). - Processamento de
max_joined_block_rowsfora do loop principal do hash JOIN. Desempenho ligeiramente melhor para ALL JOIN. #83216 (Nikolai Kochetov). - Processe primeiro os índices min-max de maior granularidade. Fecha #75381. #83798 (Maruth Goyal).
- Permite que agregações de janela
DISTINCTsejam executadas em tempo linear e corrige um bug emsumDistinct. Fecha #79792. Fecha #52253. #79859 (Nihal Z. Miaji). - As consultas de busca vetorial que usam um índice de similaridade vetorial têm menor latência devido à redução das leituras de armazenamento e do uso de CPU. #83803 (Shankar Iyer).
- Hash de rendezvous para melhorar a localidade do cache na distribuição de workload entre réplicas paralelas. #82511 (Anton Ivashkin).
- Implementado o addManyDefaults para combinadores If, de modo que agora as funções de agregação com combinadores If funcionem mais rapidamente. #83870 (Raúl Marín).
- Calcula a chave serializada de forma colunar ao agrupar por várias colunas do tipo string ou numéricas. #83884 (李扬).
- Eliminadas as varreduras completas nos casos em que a análise de índice resulta em intervalos vazios na leitura com réplicas paralelas. #84971 (Eduard Karacharov).
- Tente
-falign-functions=64para obter testes de desempenho mais estáveis. #83920 (Azat Khuzhin). - O índice de filtro de Bloom agora também é usado em condições como
has([c1, c2, ...], column), em quecolumnnão é do tipoArray. Isso melhora o desempenho dessas consultas, tornando-as tão eficientes quanto o operadorIN. #83945 (Doron David). - Reduz as chamadas desnecessárias de memcpy em CompressedReadBufferBase::readCompressedData. #83986 (Raúl Marín).
- Otimize
largestTriangleThreeBucketsremovendo os dados temporários. #84479 (Alexey Milovidov). - Otimize a desserialização de strings ao simplificar o código. Fecha #38564. #84561 (Alexey Milovidov).
- Corrigido o cálculo do tamanho mínimo da tarefa para réplicas paralelas. #84752 (Nikita Taranov).
- Desempenho aprimorado na aplicação de partes de patch no modo
Join. #85040 (Anton Popov). - Removido o byte zero. Fecha #85062. Alguns bugs menores foram corrigidos. As funções
structureToProtobufSchemaestructureToCapnProtoSchemanão inseriam corretamente um byte nulo terminador e usavam uma quebra de linha no lugar dele. Isso fazia com que faltasse uma quebra de linha na saída e podia causar overflows de buffer ao usar outras funções que dependem do byte zero (comologTrace,demangle,extractURLParameter,toStringCutToZeroeencrypt/decrypt). O layout de dicionárioregexp_treenão suportava o processamento de strings com bytes zero. A funçãoformatRowNoNewline, quando chamada com o formatoValuesou com qualquer outro format sem quebra de linha no fim das linhas, cortava erroneamente o último caractere da saída. A funçãostemcontinha um erro de segurança de exceção que podia levar a um vazamento de memória em um cenário muito raro. A funçãoinitcapfuncionava incorretamente para argumentosFixedString: não reconhecia o início da palavra no começo da string se a string anterior em um block terminasse com um caractere de palavra. Foi corrigida uma vulnerabilidade de segurança no format ApacheORC, que podia levar à exposição de memória não inicializada. O comportamento da funçãoreplaceRegexpAlle do alias correspondente,REGEXP_REPLACE, foi alterado: agora ela pode fazer uma correspondência vazia no fim da string mesmo se a correspondência anterior tiver processado a string inteira, como no caso de^a*|a*$ou^|.*— isso corresponde à semântica de JavaScript, Perl, Python, PHP e Ruby, mas difere da semântica do PostgreSQL. A implementação de muitas funções foi simplificada e otimizada. A documentação de várias funções estava incorreta e agora foi corrigida. Tenha em mente que a saída debyteSizepara colunas String e tipos complexos compostos por colunas String mudou (de 9 bytes por string vazia para 8 bytes por string vazia), e isso é normal. #85063 (Alexey Milovidov). - Otimize a materialização de constantes nos casos em que essa materialização é feita apenas para retornar uma única linha. #85071 (Alexey Milovidov).
- Melhorado o processamento paralelo de arquivos com o backend delta-kernel-rs. #85642 (Azat Khuzhin).
- Uma nova configuração, enable_add_distinct_to_in_subqueries, foi adicionada. Quando habilitada, o ClickHouse adicionará automaticamente DISTINCT às subconsultas em cláusulas IN para consultas distribuídas. Isso pode reduzir significativamente o tamanho das tabelas temporárias transferidas entre shards e melhorar a eficiência de rede. Observação: isso envolve um trade-off — embora a transferência pela rede seja reduzida, cada nó precisa realizar trabalho adicional de merging (desduplicação). Habilite essa configuração quando a transferência pela rede for um gargalo e o custo de merging for aceitável. #81908 (fhw12345).
- Reduz a sobrecarga do rastreamento de memória de consultas para funções definidas pelo usuário executáveis. #83929 (Eduard Karacharov).
- Implementa a filtragem interna do
delta-kernel-rs(estatísticas e poda de partições) no armazenamentoDeltaLake. #84006 (Kseniia Sumarokova). - Desabilitação mais granular dos índices de skipping que dependem de colunas atualizadas on the fly ou por partes de patch. Agora, os índices de skipping não são usados apenas nas partes afetadas por mutações on-the-fly ou partes de patch; anteriormente, esses índices eram desabilitados para todas as partes. #84241 (Anton Popov).
- Alocar a quantidade mínima de memória necessária para encrypted_buffer em named collections criptografadas. #84432 (Pablo Marcos).
- Suporte aprimorado para que índices de filtro de Bloom (regular, ngram e token) sejam usados quando o primeiro argumento é um Array constante (o conjunto) e o segundo é a coluna indexada (o subconjunto), permitindo uma execução de consultas mais eficiente. #84700 (Doron David).
- Reduz a contenção causada pelo bloqueio de armazenamento no Keeper. #84732 (Antonio Andelic).
- Adicionado o suporte que faltava a
read_in_order_use_virtual_rownoWHERE. Isso permite evitar a leitura de mais partes em consultas com filtros que não foram totalmente enviados paraPREWHERE. #84835 (Nikolai Kochetov). - Permite iterar assincronamente sobre objetos de uma tabela Iceberg sem armazenar explicitamente objetos para cada arquivo de dados. #85369 (Daniil Ivanik).
- Execute
EXISTSnão correlacionado como uma subconsulta escalar. Isso permite usar um cache de subconsultas escalares e aplicar constant folding ao resultado, o que é útil para índices. Para compatibilidade, foi adicionada a nova configuraçãoexecute_exists_as_scalar_subquery=1. #85481 (Nikolai Kochetov).
Aprimoramento
- Adiciona configurações
database_replicatedque definem os valores padrão de DatabaseReplicatedSettings. Se a configuração não estiver presente na consulta CREATE do banco de dados Replicated, o valor dessa configuração será usado. #85127 (Tuan Pham Anh). - As colunas da tabela na interface web (play) agora podem ser redimensionadas. #84012 (Doron David).
- Suporte a arquivo
.metadata.jsoncompactado por meio da configuraçãoiceberg_metadata_compression_method. Compatível com todos os métodos de compressão do ClickHouse. Isso fecha #84895. #85196 (Konstantin Vedernikov). - Exibe o número de intervalos a serem lidos na saída de
EXPLAIN indexes = 1. #79938 (Christoph Wurm). - Adiciona configurações para definir o tamanho do bloco de compressão do ORC e atualiza o valor padrão de 64KB para 256KB, para manter a consistência com o Spark e o Hive. #80602 (李扬).
- Adiciona o arquivo
columns_substreams.txtà parte Wide para rastrear todos os substreams armazenados nela. Isso ajuda a rastrear streams dinâmicos nos tipos JSON e Dynamic e, assim, evita a leitura de uma amostra dessas colunas para obter a lista de streams dinâmicos (por exemplo, para calcular os tamanhos das colunas). Além disso, agora todos os streams dinâmicos passam a ser refletidos emsystem.parts_columns. #81091 (Pavel Kruglov). - Adiciona a flag de CLI —show_secrets ao clickhouse format para ocultar dados sensíveis por padrão. #81524 (Nikolai Ryzhov).
- As solicitações de leitura e gravação no S3 passam a ter limitação de taxa no nível do socket HTTP (em vez de no nível das solicitações S3 como um todo), para evitar problemas com o throttling de
max_remote_read_network_bandwidth_for_serveremax_remote_write_network_bandwidth_for_server. #81837 (Sergei Trifonov). - Permite misturar diferentes collations na mesma coluna em janelas diferentes (em funções de janela). #82877 (Yakov Olkhovskiy).
- Adiciona uma ferramenta para simular, visualizar e comparar seletores de merge. #71496 (Sergei Trifonov).
- Adiciona suporte às funções de tabela
remote*com réplicas paralelas caso um cluster seja fornecido no argumentoaddress_expression. Além disso, corrige #73295. #82904 (Igor Nikonov). - Defina como TRACE todas as mensagens de log relacionadas à gravação de arquivos de backup. #82907 (Hans Krutzer).
- Funções Definidas pelo Usuário com nomes incomuns e codecs podem ser formatados de maneira inconsistente pelo formatador de SQL. Isso fecha #83092. #83644 (Alexey Milovidov).
- Agora é possível usar os tipos Time e Time64 no tipo JSON. #83784 (Yarik Briukhovetskyi).
- As junções com réplicas paralelas agora usam a etapa lógica de join. Em caso de qualquer problema com consultas com junções usando réplicas paralelas, tente
SET query_plan_use_new_logical_join_step=0e relate o problema. #83801 (Vladimir Cherkasov). - Corrige a compatibilidade de cluster_function_process_archive_on_multiple_nodes. #83968 (Kseniia Sumarokova).
- Suporte à alteração das configurações de
insertde mv no nível da tabelaS3Queue. Foram adicionadas novas configurações no nível deS3Queue:min_insert_block_size_rows_for_materialized_viewsemin_insert_block_size_bytes_for_materialized_views. Por padrão, serão usadas as configurações no nível de profile, e as configurações no nível deS3Queuevão substituí-las. #83971 (Kseniia Sumarokova). - Adicionado o evento de perfil
MutationAffectedRowsUpperBound, que mostra o número de linhas afetadas por uma mutação (por exemplo, o número total de linhas que atendem à condição na consultaALTER UPDATEouALTER DELETE. #83978 (Anton Popov). - Use informações do cgroup (se aplicável, ou seja, se
memory_worker_use_cgroupe cgroups estiverem disponíveis) para ajustar o rastreador de memória (memory_worker_correct_memory_tracker). #83981 (Azat Khuzhin). - MongoDB: conversão implícita de strings em tipos numéricos. Antes, se um valor em string fosse recebido de uma origem do MongoDB para uma coluna numérica em uma tabela do ClickHouse, uma exceção era lançada. Agora, o mecanismo tenta interpretar automaticamente o valor numérico contido na string. Fecha #81167. #84069 (Kirill Nikiforov).
- Destacar agrupamentos de dígitos nos formatos
Prettypara númerosNullable. #84070 (Alexey Milovidov). - Painel: o tooltip não ultrapassará o contêiner superior. #84072 (Alexey Milovidov).
- Pontos com visual um pouco melhor no dashboard. #84074 (Alexey Milovidov).
- O Dashboard agora tem um favicon ligeiramente melhor. #84076 (Alexey Milovidov).
- Interface web: dê aos navegadores a chance de salvar a senha. Além disso, os valores de URL também serão lembrados. #84087 (Alexey Milovidov).
- Adiciona suporte à aplicação de ACL extra em nós específicos do Keeper usando a configuração
apply_to_children. #84137 (Antonio Andelic). - Corrige o uso da serialização “compact” dos discriminadores de Variant no MergeTree. Anteriormente, ela não era usada em alguns casos em que poderia ser aplicada. #84141 (Pavel Kruglov).
- Foi adicionada às configurações de bancos de dados replicados uma configuração do servidor,
logs_to_keep, que permite alterar o parâmetro padrãologs_to_keeppara bancos de dados replicados. Valores menores reduzem o número de ZNodes (especialmente se houver muitos bancos de dados), enquanto valores maiores permitem que uma réplica ausente se recupere após um período mais longo. #84183 (Alexey Khatskevich). - Adiciona a configuração
json_type_escape_dots_in_keyspara escapar os pontos nas chaves JSON durante a análise do tipo JSON. A configuração fica desativada por padrão. #84207 (Pavel Kruglov). - Verifique se a conexão foi cancelada antes de verificar o EOF para evitar a leitura em uma conexão fechada. Corrige #83893. #84227 (Raufs Dunamalijevs).
- Melhoria sutil nas cores da seleção de texto na interface web. A diferença é significativa apenas para células de tabela selecionadas no modo escuro. Nas versões anteriores, não havia contraste suficiente entre o texto e o fundo da seleção. #84258 (Alexey Milovidov).
- Melhorado o tratamento do desligamento do servidor para as conexões dos clientes, com a simplificação das verificações internas. #84312 (Raufs Dunamalijevs).
- Foi adicionada uma configuração
delta_lake_enable_expression_visitor_loggingpara desativar os logs do visitor de expressões, pois eles podem ser verbosos demais até mesmo no nível de log de teste durante a depuração. #84315 (Kseniia Sumarokova). - As métricas em nível de cgroup e de todo o sistema agora são reportadas em conjunto. As métricas em nível de cgroup têm nomes
CGroup<Metric>e as métricas em nível de SO (coletadas do procfs) têm nomesOS<Metric>. #84317 (Nikita Taranov). - Gráficos ligeiramente melhores na interface web. Não muito, mas melhores. #84326 (Alexey Milovidov).
- Altere o valor padrão da configuração
max_retries_before_automatic_recoverydo banco de dados Replicated para 10, para que ele se recupere mais rapidamente em alguns casos. #84369 (Alexander Tokmakov). - Corrigida a formatação do CREATE USER com parâmetros de consulta (ou seja,
CREATE USER {username:Identifier} IDENTIFIED WITH no_password). #84376 (Azat Khuzhin). - Introduz
backup_restore_s3_retry_initial_backoff_ms,backup_restore_s3_retry_max_backoff_ms,backup_restore_s3_retry_jitter_factorpara configurar a estratégia de backoff de tentativas do S3 usada durante operações de backup e restauração. #84421 (Julia Kartseva). - Correção no modo ordenado do S3Queue: encerrar antes caso o desligamento tenha sido solicitado. #84463 (Kseniia Sumarokova).
- Suporte a gravações no Iceberg para leitura pelo pyiceberg. #84466 (Konstantin Vedernikov).
- Permitir a conversão de tipo dos valores de conjunto ao aplicar pushdown de filtros
IN/GLOBAL INsobre as chaves primárias do armazenamento KeyValue (por exemplo, EmbeddedRocksDB, KeeperMap). #84515 (Eduard Karacharov). - Atualização do chdig para 25.7.1. #84521 (Azat Khuzhin).
- Erros de baixo nível durante a execução de UDF agora falham com o código de erro
UDF_EXECUTION_FAILED, enquanto anteriormente podiam ser retornados códigos de erro diferentes. #84547 (Xu Jia). - Adicionado o comando
get_aclao KeeperClient. #84641 (Antonio Andelic). - Adiciona versão de snapshot aos motores de tabela para lago de dados. #84659 (Pete Hampton).
- Adiciona uma métrica com dimensões para o tamanho de
ConcurrentBoundedQueue, identificada pelo tipo de fila (isto é, para que a fila serve) e pelo id da fila (isto é, um id gerado aleatoriamente para a instância atual da fila). #84675 (Miсhael Stetsyuk). - A tabela
system.columnsagora disponibilizacolumncomo alias da colunanameexistente. #84695 (Yunchi Pang). - Nova configuração do MergeTree
search_orphaned_parts_drivespara limitar o escopo da busca por partes órfãs, por exemplo, a discos com metadados locais. #84710 (Ilya Golshtein). - Adiciona o 4LW
lgrqao Keeper para ativar/desativar o logging das requisições recebidas. #84719 (Antonio Andelic). - Fazer a correspondência dos forward_headers de autenticação externa sem diferenciar maiúsculas de minúsculas. #84737 (ingodwerust).
- A ferramenta
encrypt_decryptagora oferece suporte a conexões criptografadas com o ZooKeeper. #84764 (Roman Vasin). - Adicionar a coluna de format string a
system.errors. Essa coluna é necessária para agrupar o mesmo tipo de erro nas regras de alerta. #84776 (Miсhael Stetsyuk). - Atualizado o
clickhouse-formatpara aceitar--highlightcomo um alias de--hilite. - Atualizado oclickhouse-clientpara aceitar--hilitecomo um alias de--highlight. - Atualizada a documentação doclickhouse-formatpara refletir essa mudança. #84806 (Rishabh Bhardwaj). - Corrige a leitura do Iceberg por IDs de campo em tipos complexos. #84821 (Konstantin Vedernikov).
- Introduz uma nova configuração
backup_slow_all_threads_after_retryable_s3_errorpara reduzir a pressão sobre o S3 durante tempestades de novas tentativas causadas por erros comoSlowDown, desacelerando todas as threads assim que for detectado um único erro passível de nova tentativa. #84854 (Julia Kartseva). - Ignorar a criação e a renomeação da antiga tabela temporária de DDLs RMV sem append em DBs Replicated. #84858 (Tuan Pham Anh).
- Limita o tamanho do cache de entradas de log do Keeper com base no número de entradas, usando
keeper_server.coordination_settings.latest_logs_cache_entry_count_thresholdekeeper_server.coordination_settings.commit_logs_cache_entry_count_threshold. #84877 (Antonio Andelic). - Permite usar
simdjsonem arquiteturas não compatíveis (antes, isso levava a errosCANNOT_ALLOCATE_MEMORY). #84966 (Azat Khuzhin). - Logging assíncrono: tornar os limites ajustáveis e adicionar introspecção. #85105 (Raúl Marín).
- Reúne todos os objetos removidos para executar uma única operação de remoção no armazenamento de objetos. #85316 (Mikhail Artemenko).
- A implementação atual do Iceberg para arquivos de exclusão posicional mantém todos os dados em RAM. Isso pode sair bastante caro se os arquivos de exclusão posicional forem grandes, o que costuma acontecer. Minha implementação mantém apenas o último grupo de linhas dos arquivos de exclusão Parquet em RAM, o que é significativamente mais barato. #85329 (Konstantin Vedernikov).
- chdig: corrige artefatos na tela, corrige falha após editar consulta no editor, busca por
editorempath, atualiza para 25.8.1. #85341 (Azat Khuzhin). - Adiciona
partition_columns_in_data_fileque faltava à configuração do azure. #85373 (Arthur Passos). - Permitir passo zero nas funções
timeSeries*ToGrid. Isso faz parte de #75036. #85390 (Vitaly Baranov). - Adicionada a flag show_data_lake_catalogs_in_system_tables para controlar a adição de tabelas de lago de dados em system.tables. Resolve #85384. #85411 (Smita Kulkarni).
- Adicionado suporte à expansão de macros em
remote_fs_zero_copy_zookeeper_path. #85437 (Mikhail Koviazin). - A IA no clickhouse-client ficará um pouco melhor. #85447 (Alexey Milovidov).
- Habilite trace_log.symbolize por padrão em implantações antigas. #85456 (Azat Khuzhin).
- Amplia o suporte à resolução de identificadores compostos em mais casos. Em particular, melhora a compatibilidade de
ARRAY JOINcom o analyzer antigo. Introduz uma nova configuração,analyzer_compatibility_allow_compound_identifiers_in_unflatten_nested, para manter o comportamento antigo. #85492 (Nikolai Kochetov). - Ignorar UNKNOWN_DATABASE ao obter os tamanhos das colunas de tabelas em system.columns. #85632 (Azat Khuzhin).
- Foi adicionado um limite (configuração da tabela
max_uncompressed_bytes_in_patches) para o total de bytes descompactados em partes de patch. Isso evita lentidões significativas em consultas SELECT após atualizações leves e também previne possíveis usos indevidos dessas atualizações. #85641 (Anton Popov). - Adicionar uma coluna
parameterasystem.grantspara determinar o tipo de origem emGRANT READ/WRITEe o engine da tabela emGRANT TABLE ENGINE. #85643 (MikhailBurdukov). - Corrige o processamento da vírgula final nas colunas da consulta CREATE DICTIONARY após uma coluna com parâmetros, por exemplo, Decimal(8). Fecha #85586. #85653 (Nikolay Degterinsky).
- Adicionado suporte a arrays internos na função
nested. #85719 (Nikolai Kochetov). - Todas as alocações feitas por bibliotecas externas agora ficam visíveis para o memory tracker do ClickHouse e são contabilizadas corretamente. Isso pode resultar em um uso de memória reportado “mais alto” para determinadas consultas ou em falhas com
MEMORY_LIMIT_EXCEEDED. #84082 (Nikita Mikhaylov).
Correção de bug (mau funcionamento perceptível ao usuário em um lançamento estável oficial)
- Este PR corrige a resolução dos metadados ao consultar tabelas Iceberg por meio do catálogo REST. … #80562 (Saurabh Kumar Ojha).
- Corrigido markReplicasActive no DDLWorker e no DatabaseReplicatedDDLWorker. #81395 (Tuan Pham Anh).
- Corrigida a reversão da coluna Dynamic em caso de falha de parsing. #82169 (Pavel Kruglov).
- A função
trim, quando chamada com entradas totalmente constantes, agora produz uma string de saída constante. (Bug #78796). #82900 (Robert Schulze). - Corrige erro lógico com subconsultas duplicadas quando
optimize_syntax_fuse_functionsestá habilitado, fecha #75511. #83300 (Vladimir Cherkasov). - Corrigido o resultado incorreto em consultas com a cláusula
WHERE ... IN (<subquery>)e com o cache de condições de consulta habilitado (configuraçãouse_query_condition_cache). #83445 (LB7666). - Historicamente, a função
gcsnão exigia nenhuma permissão de acesso para ser usada. Agora, ela verificará a permissãoGRANT READ ON S3para seu uso. Fecha #70567. #83503 (pufit). - Ignorar nós indisponíveis durante INSERT SELECT de s3Cluster() em MergeTree replicado. #83676 (Igor Nikonov).
- Corrigida a gravação com append (no MergeTree, usado para transações experimentais) com os tipos de metadados
plain_rewritable/plain, que antes eram simplesmente ignorados. #83695 (Tuan Pham Anh). - Oculta os detalhes de autenticação do schema registry do Avro para que não fiquem visíveis ao usuário nem nos logs. #83713 (János Benjamin Antal).
- Corrige o problema em que, se uma tabela MergeTree é criada com
add_minmax_index_for_numeric_columns=1ouadd_minmax_index_for_string_columns=1, o índice é materializado posteriormente durante uma operação ALTER, o que impede a inicialização correta do banco de dados Replicated em uma nova réplica. #83751 (Nikolay Degterinsky). - Corrigida a saída do gravador Parquet, que gerava estatísticas incorretas (min/max) para tipos Decimal. #83754 (Michael Kolupaev).
- Corrigida a ordenação de valores NaN no tipo
LowCardinality(Float32|Float64|BFloat16). #83786 (Pervakov Grigorii). - Ao restaurar a partir de um backup, o usuário definidor pode não ter sido incluído no backup, o que pode inutilizar todo o backup. Para corrigir isso, postergamos a verificação das permissões na criação da tabela de destino durante a restauração e passamos a verificá-las apenas em tempo de execução. #83818 (pufit).
- Corrigida falha no cliente devido a uma conexão que permaneceu em estado desconectado após um
INSERTinválido. #83842 (Azat Khuzhin). - Permite fazer referência a qualquer tabela no argumento
view(...)da função de tabelaremotecom o analisador habilitado. Corrige #78717. Corrige #79377. #83844 (Dmitry Novik). - A chamada
Onprogressemjsoneachrowwithprogressfoi sincronizada com a finalização. #83879 (Sema Checherinda). - Fecha #81303. #83892 (Konstantin Vedernikov).
- Corrigido colorSRGBToOKLCH/colorOKLCHToSRGB para casos com mistura de argumentos const e não const. #83906 (Azat Khuzhin).
- Corrigida a escrita de caminhos JSON com valores NULL no formato RowBinary. #83923 (Pavel Kruglov).
- O problema de overflow com valores grandes (>2106-02-07) ao converter de Date para DateTime64 foi corrigido. #83982 (Yarik Briukhovetskyi).
- Sempre aplique
filesystem_prefetches_limit(não apenas noMergeTreePrefetchedReadPool). #83999 (Azat Khuzhin). - Corrige um erro raro em que a consulta
MATERIALIZE COLUMNpodia resultar em arquivos inesperados emchecksums.txte, eventualmente, em partes de dados desanexadas. #84007 (alesapin). - Corrige o erro lógico
Expected single dictionary argument for functionao executar JOIN com uma condição de desigualdade quando uma das colunas éLowCardinalitye a outra é uma constante. Fecha #81779. #84019 (Alexey Milovidov). - Corrigido travamento no ClickHouse client quando usado no modo interativo com realce de sintaxe. #84025 (Bharat Nallan).
- Corrigidos resultados incorretos quando o cache de condições de consulta é usado em conjunto com CTEs recursivas (problema #81506). #84026 (zhongyuankai).
- Trate adequadamente as exceções na atualização periódica de partes. #84083 (Azat Khuzhin).
- Corrige a incorporação do filtro à condição de JOIN nos casos em que os operandos de igualdade têm tipos diferentes ou fazem referência a constantes. Corrige #83432. #84145 (Dmitry Novik).
- Corrige um travamento raro do ClickHouse quando a tabela tem projeção,
lightweight_mutation_projection_mode = 'rebuild'e o usuário executa um lightweight delete que exclui TODAS as linhas de qualquer bloco da tabela. #84158 (alesapin). - Corrige deadlock causado pela thread em segundo plano de verificação de cancelamento. #84203 (Antonio Andelic).
- Corrige a análise recursiva infinita causada por definições inválidas de
WINDOW. Corrige #83131. #84242 (Dmitry Novik). - Corrigido um bug que causava codificação e decodificação incorretas em Bech32. O bug não foi detectado inicialmente porque uma implementação online do algoritmo usada nos testes tinha o mesmo problema. #84257 (George Larionov).
- Corrigida a construção incorreta de tuplas vazias na função
array(). Isso corrige o problema #84202. #84297 (Amos Bird). - Corrigido
LOGICAL_ERRORem consultas com réplicas paralelas e múltiplas junções INNER seguidas por uma junção RIGHT. Não use réplicas paralelas nessas consultas. #84299 (Vladimir Cherkasov). - Anteriormente, os índices
setnão consideravam colunasNullableao verificar se os grânulos passavam no filtro (problema #75485). #84305 (Elmi Ahmadov). - Agora o ClickHouse consegue ler tabelas do Glue Catalog quando o tipo de tabela é especificado em minúsculas. #84316 (alesapin).
- Não tente substituir funções de tabela por sua alternativa em cluster quando houver um JOIN ou uma subconsulta. #84335 (Konstantin Bogdanov).
- Correção do uso do logger em
IAccessStorage. #84365 (Konstantin Bogdanov). - Corrigido um erro lógico em atualizações leves que atualizam todas as colunas da tabela. #84380 (Anton Popov).
- O codec
DoubleDeltaagora só pode ser aplicado a colunas de tipo numérico. Em particular, colunasFixedStringnão podem mais ser compactadas comDoubleDelta. (corrige #80220). #84383 (Jimmy Aguilar Mena). - A comparação com o valor nan não estava usando os intervalos corretos durante a avaliação do índice
MinMax. #84386 (Elmi Ahmadov). - Corrigida a leitura de coluna Variant com materialização tardia. #84400 (Pavel Kruglov).
- Classifique
zoutofmemorycomo erro de hardware; caso contrário, ele gerará um erro lógico. Veja https://github.com/clickhouse/clickhouse-core-incidents/issues/877. #84420 (Han Fei). - Corrigido um travamento do servidor quando um usuário criado com
no_passwordtenta fazer login após a configuração do servidorallow_no_passwordser alterada para 0. #84426 (Shankar Iyer). - Corrige gravações fora de ordem no changelog do Keeper. Antes, era possível haver gravações em andamento no changelog, mas um rollback podia causar uma alteração simultânea no arquivo de destino. Isso levava a logs inconsistentes e a uma possível perda de dados. #84434 (Antonio Andelic).
- Agora, se todos os TTL forem removidos da tabela, o MergeTree não fará nada relacionado ao TTL. #84441 (alesapin).
- Era permitido usar INSERT SELECT distribuído em paralelo com LIMIT, o que é incorreto, pois isso leva à duplicação de dados na tabela de destino. #84477 (Igor Nikonov).
- Corrige o pruning de arquivos por coluna virtual em lagos de dados. #84520 (Kseniia Sumarokova).
- Corrige vazamentos no Keeper com armazenamento RocksDB (os iteradores não eram destruídos). #84523 (Azat Khuzhin).
- Corrige a falta de validação de colunas TTL em chaves de ordenação no
ALTER MODIFY ORDER BY. As colunas TTL agora são rejeitadas corretamente quando usadas em cláusulasORDER BYdurante operaçõesALTER, evitando possível corrupção da tabela. #84536 (xiaohuanlin). - Altera o valor anterior à versão 25.5 de
allow_experimental_delta_kernel_rsparafalsepor compatibilidade. #84587 (Kseniia Sumarokova). - Deixa de obter o schema dos arquivos manifest, mas armazena os schemas relevantes de cada snapshot de forma independente. Infere o schema relevante de cada arquivo de dados a partir do snapshot correspondente. O comportamento anterior violava a especificação do Iceberg para entradas de arquivos manifest com status existente. #84588 (Daniil Ivanik).
- Corrigido o problema em que a configuração do Keeper
rotate_log_storage_interval = 0fazia o ClickHouse travar. (issue #83975). #84637 (George Larionov). - Corrige o erro lógico do S3Queue “A tabela já está registrada”. Fecha #84433. Quebrou após https://github.com/ClickHouse/ClickHouse/pull/83530. #84677 (Kseniia Sumarokova).
- Bloqueia o ‘mutex’ ao obter o zookeeper da ‘view’ em RefreshTask. #84699 (Tuan Pham Anh).
- Corrige o erro
CORRUPTED_DATAao usar colunas lazy com ordenação externa. #84738 (János Benjamin Antal). - Corrige a poda de colunas com delta-kernel no armazenamento
DeltaLake. Fecha #84543. #84745 (Kseniia Sumarokova). - Atualiza as credenciais no delta-kernel do armazenamento DeltaLake. #84751 (Kseniia Sumarokova).
- Corrige o acionamento indevido de backups internos após problemas de conexão. #84755 (Vitaly Baranov).
- Corrigido um problema em que consultar uma fonte remota lenta podia resultar em vector out of bounds. #84820 (George Larionov).
- Os tokenizadores
ngrameno_opnão causam mais falha no índice de texto (experimental) quando há tokens de entrada vazios. #84849 (Robert Schulze). - Corrigidas atualizações leves em tabelas com os motores
ReplacingMergeTreeeCollapsingMergeTree. #84851 (Anton Popov). - Armazena corretamente todas as configurações nos metadados da tabela para tabelas que usam o engine de fila de objetos. #84860 (Antonio Andelic).
- Corrigida a contagem total de watches retornada pelo Keeper. #84890 (Antonio Andelic).
- Corrigidas as atualizações leves em tabelas com o mecanismo
ReplicatedMergeTreecriadas em servidores com versão inferior à 25.7. #84933 (Anton Popov). - Corrigidas as atualizações leves em tabelas com engine
MergeTreenão replicado após a execução da consultaALTER TABLE ... REPLACE PARTITION. #84941 (Anton Popov). - Corrige a geração de nomes de coluna para literais booleanos, passando a usar “true”/“false” em vez de “1”/“0”, o que evita conflitos de nomes de coluna entre literais booleanos e inteiros em consultas. #84945 (xiaohuanlin).
- Corrige o desvio no rastreamento de memória no pool de agendamento em segundo plano e no executor. #84946 (Azat Khuzhin).
- Corrige possíveis problemas de ordenação incorreta no mecanismo de tabela Merge. #85025 (Xiaozhe Yu).
- Implementa APIs ausentes para DiskEncrypted. #85028 (Azat Khuzhin).
- Adiciona uma verificação caso uma subconsulta correlacionada seja usada em um contexto distribuído, para evitar uma falha. Corrige #82205. #85030 (Dmitry Novik).
- Agora, o Iceberg não tenta mais armazenar em cache a versão relevante do snapshot entre consultas
selecte sempre tenta resolver o snapshot diretamente. A tentativa anterior de armazenar em cache o snapshot do Iceberg levou a problemas no uso da tabela Iceberg com time travel. #85038 (Daniil Ivanik). - Corrigido o double-free em
AzureIteratorAsync. #85064 (Nikita Taranov). - Melhoria na mensagem de erro ao tentar criar um usuário identificado com JWT. #85072 (Konstantin Bogdanov).
- Corrigida a limpeza de
patch partsnoReplicatedMergeTree. Anteriormente, o resultado de uma atualização leve podia ficar temporariamente invisível na réplica até que a parte mesclada ou mutada que materializa aspatch partsfosse baixada de outra réplica. #85121 (Anton Popov). - Correção de illegal_type_of_argument em mv quando os tipos são diferentes. #85135 (Sema Checherinda).
- Corrige um erro de segmentação na implementação do delta-kernel. #85160 (Kseniia Sumarokova).
- Corrige a recuperação de bancos de dados replicados quando a movimentação do arquivo de metadados demora muito. #85177 (Tuan Pham Anh).
- Corrigido o
Not-ready SetemIN (subquery)dentro da configuração de expressãoadditional_table_filters. #85210 (Nikolai Kochetov). - Remove chamadas desnecessárias de
getStatus()nas consultas SYSTEM DROP REPLICA. Corrige o caso em que uma tabela é excluída em segundo plano e a exceçãoShutdown for storage is calledé lançada. #85220 (Nikolay Degterinsky). - Corrigida condição de corrida na implementação delta-kernel do engine
DeltaLake. #85221 (Kseniia Sumarokova). - Corrige a leitura de dados particionados com o delta-kernel desativado no mecanismo
DeltaLake. Isso estava com falha na versão 25.7 (https://github.com/ClickHouse/ClickHouse/pull/81136). #85223 (Kseniia Sumarokova). - Adicionadas verificações de comprimento do nome da tabela que faltavam nas consultas CREATE OR REPLACE e RENAME. #85326 (Michael Kolupaev).
- Corrigida a criação de RMV em uma nova réplica do banco de dados Replicated caso o DEFINER seja removido. #85327 (Nikolay Degterinsky).
- Corrige a gravação no Iceberg de tipos complexos. #85330 (Konstantin Vedernikov).
- Não há suporte à gravação de limites inferior e superior para tipos complexos. #85332 (Konstantin Vedernikov).
- Corrige erro lógico ao ler a partir de funções de armazenamento de objetos por meio da tabela Distributed ou da função de tabela remote. Corrige: #84658, Corrige #85173, Corrige #52022. #85359 (alesapin).
- Corrige o backup de partes com projeções corrompidas. #85362 (Antonio Andelic).
- Proibir o uso da coluna
_part_offsetem projeções nos lançamentos até que ela seja estabilizada. #85372 (Sema Checherinda). - Corrige travamento e corrupção de dados durante ALTER UPDATE para JSON. #85383 (Pavel Kruglov).
- Consultas com réplicas paralelas que usam a otimização de leitura reversa em ordem podem produzir resultados incorretos. #85406 (Igor Nikonov).
- Corrige possível UB (travamentos) no caso de MEMORY_LIMIT_EXCEEDED durante a desserialização de String. #85440 (Azat Khuzhin).
- Corrigidas as métricas incorretas KafkaAssignedPartitions e KafkaConsumersWithAssignment. #85494 (Ilya Golshtein).
- Corrigida a subestimação da métrica de bytes processados quando PREWHERE (explícito ou automático) é usado. #85495 (Michael Kolupaev).
- Corrige a condição de retorno antecipado para a desaceleração da taxa de solicitações ao S3: passa a exigir que s3_slow_all_threads_after_network_error ou backup_slow_all_threads_after_retryable_s3_error seja verdadeiro para ativar o comportamento de desaceleração quando todas as threads estiverem pausadas devido a um erro passível de nova tentativa, em vez de exigir que ambos sejam verdadeiros. #85505 (Julia Kartseva).
- Este PR corrige a resolução dos metadados ao consultar tabelas Iceberg por meio do catálogo REST. … #85531 (Saurabh Kumar Ojha).
- Corrigido um travamento raro em inserções assíncronas ao alterar as configurações
log_commentouinsert_deduplication_token. #85540 (Anton Popov). - Parâmetros como date_time_input_format foram ignorados ao usar HTTP com multipart/form-data. #85570 (Sema Checherinda).
- Corrigido o mascaramento de segredos nas funções de tabela icebergS3Cluster e icebergAzureCluster. #85658 (MikhailBurdukov).
- Corrige a perda de precisão em
JSONExtractao converter números em JSON para tipos Decimal. Agora, os valores numéricos em JSON preservam sua representação decimal exata, evitando erros de arredondamento de ponto flutuante. #85665 (ssive7b). - Corrigido
LOGICAL_ERRORao usarCOMMENT COLUMN IF EXISTSna mesma instruçãoALTERapósDROP COLUMN. A cláusulaIF EXISTSagora ignora corretamente a operação de comentário caso a coluna tenha sido removida na mesma instrução. #85688 (xiaohuanlin). - Corrigida a contagem de leituras do cache para Delta Lake. #85704 (Kseniia Sumarokova).
- Corrige falha de segmentação no coalescing merge tree com strings grandes. Isso fecha #84582. #85709 (Konstantin Vedernikov).
- Atualiza o timestamp dos metadados nas gravações do Iceberg. #85711 (Konstantin Vedernikov).
- O uso de
distributed_depthcomo indicador da função Cluster estava incorreto e pode levar à duplicação de dados; em vez disso, useclient_info.collaborate_with_initiator. #85734 (Konstantin Bogdanov). - O Spark não consegue ler arquivos de exclusão por posição. #85762 (Konstantin Vedernikov).
- Corrige send_logs_source_regexp (após a refatoração do logging assíncrono em #85105). #85797 (Azat Khuzhin).
- Corrige uma possível inconsistência em dicionários com update_field em erros MEMORY_LIMIT_EXCEEDED. #85807 (Azat Khuzhin).
- Adicionado suporte a constantes globais da instrução
WITHnoINSERT SELECTdistribuído em paralelo com a tabela de destinoDistributed. Antes, a consulta podia gerar o erroUnknown expression identifier. #85811 (Nikolai Kochetov). - Mascaramento de credenciais para
deltaLakeAzure,deltaLakeCluster,icebergS3ClustereicebergAzureCluster. #85889 (Julian Maicher). - Corrige um erro lógico ao tentar
CREATE ... AS (SELECT * FROM s3Cluster(...))comDatabaseReplicated. #85904 (Konstantin Bogdanov). - Corrige requisições HTTP feitas pela função de tabela
url()para incluir corretamente os números de porta no header Host ao acessar portas não padrão. Isso resolve falhas de authentication ao usar URLs pré-assinadas com serviços compatíveis com S3, como o MinIO, em execução em portas personalizadas, o que é comum em ambientes de desenvolvimento. (Corrige #85898). #85921 (Tom Quist). - Agora, o Unity Catalog ignorará esquemas com tipos de dados incomuns em tabelas não Delta. Corrige #85699. #85950 (alesapin).
- Corrige a nulabilidade dos campos no Iceberg. #85977 (Konstantin Vedernikov).
- Corrigido um bug na recuperação do banco de dados
Replicated: se o nome de uma tabela contivesse o símbolo%, ela poderia ser recriada com um nome diferente durante a recuperação. #85987 (Alexander Tokmakov). - Corrige falhas em restaurações de backup devido ao erro
BACKUP_ENTRY_NOT_FOUNDao restaurar uma tabelaMemoryvazia. #86012 (Julia Kartseva). - Adicionar verificações para
sharding_keydurante o ALTER da tabela Distributed. Antes, um ALTER incorreto podia corromper a definição da tabela e impedir a reinicialização do servidor. #86015 (Nikolay Degterinsky). - Evita criar um arquivo de exclusão vazio do Iceberg. #86061 (Konstantin Vedernikov).
- Corrige valores altos de configuração que quebravam tabelas S3Queue e a reinicialização de réplica. #86074 (Nikolay Degterinsky).
Melhoria de compilação/testes/empacotamento
- Discos criptografados passaram a ser usados por padrão em testes com S3. #59898 (Nikita Mikhaylov).
- O binário
clickhousepassou a ser usado em testes de integração para obter símbolos de depuração completos. #83779 (Mikhail f. Shiryaev). - A libxml2 interna foi atualizada de 2.14.4 para 2.14.5. #84230 (Robert Schulze).
- O curl interno foi atualizado de 8.14.0 para 8.15.0. #84231 (Robert Schulze).
- Agora usamos menos memória para caches na CI e temos testes melhores de evicção. #84676 (alesapin).
Lançamento do ClickHouse 25.7, 2025-07-24
Alteração incompatível com versões anteriores
- Alterações na função
extractKeyValuePairs: foi introduzido um novo argumento,unexpected_quoting_character_strategy, que controla o que acontece quando umquoting_characteré encontrado inesperadamente durante a leitura de uma chave ou valor sem aspas. O valor pode ser um destes:invalid,acceptoupromote.invaliddescartará a chave e retornará ao estado de espera por chave.accepta tratará como parte da chave.promotedescartará o caractere anterior e iniciará o parsing como uma chave entre aspas. Além disso, após fazer o parsing de um valor entre aspas, a próxima chave só será processada se for encontrado um delimitador de par. #80657 (Arthur Passos). - Suporte a correspondência de zero byte na função
countMatches. Usuários que quiserem manter o comportamento antigo podem habilitar a configuraçãocount_matches_stop_at_empty_match. #81676 (Elmi Ahmadov). - Usa throttlers de todo o servidor para operações locais (
max_local_read_bandwidth_for_serveremax_local_write_bandwidth_for_server) e remotas (max_remote_read_network_bandwidth_for_serveremax_remote_write_network_bandwidth_for_server) ao gerar BACKUPs, além das configurações dedicadas do servidor (max_backup_bandwidth_for_server,max_mutations_bandwidth_for_serveremax_merges_bandwidth_for_server). #81753 (Sergei Trifonov). - Proíbe a criação de uma tabela sem colunas nas quais seja possível fazer insert. #81835 (Pervakov Grigorii).
- Paraleliza as funções de cluster por arquivo dentro de arquivos compactados. Em versões anteriores, o arquivo compactado inteiro (como zip, tar ou 7z) era uma unidade de trabalho. Foi adicionada uma nova configuração,
cluster_function_process_archive_on_multiple_nodes, com valor padrãotrue. Se definida comotrue, aumenta o desempenho do processamento de arquivos compactados em funções de cluster. Deve ser definida comofalsepor compatibilidade e para evitar erros durante a atualização para 25.7+ se você estiver usando funções de cluster com arquivos compactados em versões anteriores. #82355 (Kseniia Sumarokova). - A consulta
SYSTEM RESTART REPLICASfazia com que tabelas no banco de dados Lazy fossem ativadas, mesmo sem acesso a esse banco de dados, e isso acontecia enquanto essas tabelas estavam sendo removidas de forma concorrente. Observação: agoraSYSTEM RESTART REPLICASreiniciará apenas as réplicas nos bancos de dados em que você tiver permissão paraSHOW TABLES, o que é o comportamento natural. #83321 (Alexey Milovidov).
Novo recurso
- Adicionado suporte a atualizações leves em tabelas da família
MergeTree. As atualizações leves podem ser usadas com a nova sintaxe:UPDATE <table> SET col1 = val1, col2 = val2, ... WHERE <condition>. Adicionada a implementação de exclusões leves por meio de atualizações leves. Isso pode ser habilitado definindolightweight_delete_mode = 'lightweight_update'. #82004 (Anton Popov). - Suporte a tipos complexos na evolução do schema do Iceberg. #73714 (Konstantin Vedernikov).
- Adiciona suporte a INSERTs em tabelas Iceberg. #82692 (Konstantin Vedernikov).
- Leia os arquivos de dados do Iceberg por IDs de campo. Isso melhora a compatibilidade com o Iceberg: os campos podem ser renomeados nos metadados, enquanto são mapeados para nomes diferentes nos arquivos Parquet subjacentes. Isso corrige #83065. #83653 (Konstantin Vedernikov).
- Agora, o ClickHouse oferece suporte a arquivos
metadata.jsoncompactados para o Iceberg. Corrige #70874. #81451 (alesapin). - Suporte a
TimestampTZno Glue catalog. Fecha #81654. #83132 (Konstantin Vedernikov). - Adicionada a geração de SQL com IA ao cliente do ClickHouse. Agora você pode gerar consultas SQL a partir de descrições em linguagem natural basta adicionar
??no início da consulta. Compatível com os provedores OpenAI e Anthropic, com descoberta automática de schema. #83314 (Kaushik Iska). - Adicionada uma função para gravar tipos Geo no formato WKB. #82935 (Konstantin Vedernikov).
- Introduz dois novos tipos de acesso,
READeWRITE, para Sources e descontinua todos os tipos de acesso anteriores relacionados a Sources. Antes:GRANT S3 ON *.* TO user; agora:GRANT READ, WRITE ON S3 TO user. Isso também permite separar as permissõesREADeWRITEpara Sources, por exemplo:GRANT READ ON * TO user,GRANT WRITE ON S3 TO user. O recurso é controlado pela configuraçãoaccess_control_improvements.enable_read_write_grantse fica desabilitado por padrão. #73659 (pufit). - NumericIndexedVector: nova estrutura de dados vetorial baseada em compressão bitmap Roaring com fatias de bits, juntamente com mais de 20 funções para criação, análise e aritmética ponto a ponto. Pode reduzir o armazenamento e acelerar junções, filtros e agregações em dados esparsos. Implementa #70582 e o artigo “Large-Scale Metric Computation in Online Controlled Experiment Platform”, de T. Xiong e Y. Wang, da VLDB 2024. #74193 (FriendLey).
- A configuração de workload
max_waiting_queriesagora é suportada. Ela pode ser usada para limitar o tamanho da fila de consultas. Se o limite for atingido, todas as consultas subsequentes serão interrompidas com o erroSERVER_OVERLOADED. #81250 (Oleg Doronin). - Adicionadas funções financeiras:
financialInternalRateOfReturnExtended(XIRR),financialInternalRateOfReturn(IRR),financialNetPresentValueExtended(XNPV),financialNetPresentValue(NPV). #81599 (Joanna Hulboj). - Adiciona as funções geoespaciais
polygonsIntersectCartesianepolygonsIntersectSphericalpara verificar se há interseção entre dois polígonos. #81882 (Paul Lamb). - Suporte à coluna virtual
_part_granule_offsetem tabelas da família MergeTree. Essa coluna indica o índice de base zero do grânulo/mark ao qual cada linha pertence dentro da respectiva parte de dados. Isso resolve #79572. #82341 (Amos Bird). #82341 (Amos Bird) - Adicionadas as funções SQL
colorSRGBToOkLCHecolorOkLCHToSRGBpara converter cores entre os espaços de cor sRGB e OkLCH. #83679 (Fgrtue). - Permitir o uso de parâmetros em consultas
CREATE USERpara nomes de usuário. #81387 (Diskein). - A tabela
system.formatsagora contém informações adicionais sobre os formatos, como o tipo de conteúdo HTTP, os recursos de inferência de esquema etc. #81505 (Alexey Milovidov).
Recurso Experimental
- Adicionadas as funções
searchAnyesearchAll, que são ferramentas de uso geral para pesquisar em índices de texto. #80641 (Elmi Ahmadov). - O índice de texto agora oferece suporte ao novo tokenizer
split. #81752 (Elmi Ahmadov). - O valor padrão da granularidade do índice para índices
textfoi alterado para 64. Isso melhora o desempenho esperado da consulta média de teste em benchmarks internos. #82162 (Jimmy Aguilar Mena). - O bitmap de 256 bits armazena em ordem os labels de saída de um estado, mas os estados de saída são salvos em disco na ordem em que aparecem na tabela hash. Portanto, durante a leitura em disco, um label poderia apontar para o próximo estado errado. #82783 (Elmi Ahmadov).
- Habilitada a compressão zstd para o blob da árvore FST em índices de texto. #83093 (Elmi Ahmadov).
- O índice de similaridade vetorial foi promovido a beta. Foi introduzida a configuração de alias
enable_vector_similarity_index, que deve ser habilitada para usar o índice de similaridade vetorial. #83459 (Robert Schulze). - Removida a lógica experimental
send_metadatarelacionada à replicação zero-copy experimental. Ela nunca chegou a ser usada, e ninguém dá suporte a esse código. Como nem sequer havia testes relacionados a isso, há uma grande chance de que ele esteja quebrado há muito tempo. #82508 (alesapin). - Integrado o
StorageKafka2aosystem.kafka_consumers. #82652 (János Benjamin Antal). - Passou a estimar CNF/DNF complexas, por exemplo,
(a < 1 and a > 0) or b = 3, com base em estatísticas. #82663 (Han Fei).
Melhoria de desempenho
- Introduz logging assíncrono. Quando os logs são gravados em um dispositivo lento, isso não atrasa mais as consultas. #82516 (Raúl Marín). Limita o número máximo de entradas mantidas na fila. #83214 (Raúl Marín).
- O INSERT SELECT distribuído em paralelo fica ativado por padrão no modo em que o INSERT SELECT é executado independentemente em cada shard; consulte a configuração
parallel_distributed_insert_select. #83040 (Igor Nikonov). - Quando a consulta de agregação contém apenas uma única função
count()em uma coluna que não éNullable, a lógica de agregação é totalmente incorporada durante a sondagem da tabela hash. Isso evita alocar e manter qualquer estado de agregação, reduzindo significativamente o uso de memória e a sobrecarga de CPU. Isso aborda parcialmente #81982. #82104 (Amos Bird). - O desempenho de
HashJoinfoi otimizado com a remoção do loop adicional sobre tabelas hash no caso típico de haver apenas uma coluna de chave; além disso, as verificações denull_mapejoin_masktambém são eliminadas quando são sempretrue/false. #82308 (Nikita Taranov). - Otimização trivial para o combinador
-If. #78454 (李扬). - Consultas de busca vetorial que usam um índice de similaridade vetorial são executadas com menor latência devido à redução das leituras de armazenamento e do uso de CPU. #79103 (Shankar Iyer).
- Passa a respeitar
merge_tree_min_{rows,bytes}_for_seekemfilterPartsByQueryConditionCache, alinhando-o a outros métodos que filtram por índices. #80312 (李扬). - Torne multithread o pipeline após a etapa
TOTALS. #80331 (UnamedRus). - Corrigido o filtro por chave para os armazenamentos
RediseKeeperMap. #81833 (Pervakov Grigorii). - Adiciona a nova configuração
min_joined_block_size_rows(análoga amin_joined_block_size_bytes; o valor padrão é 65409) para controlar o tamanho mínimo do bloco (em linhas) dos blocos de entrada e saída de JOIN (se o algoritmo de JOIN oferecer suporte). Blocos pequenos serão combinados. #81886 (Nikita Taranov). ATTACH PARTITIONnão causa mais a remoção de todos os caches. #82377 (Alexey Milovidov).- Otimize o plano gerado para subconsultas correlacionadas removendo operações JOIN redundantes por meio de classes de equivalência. Se houver expressões equivalentes para todas as colunas correlacionadas,
CROSS JOINnão será gerado se a configuraçãoquery_plan_correlated_subqueries_use_substitutionestiver habilitada. #82435 (Dmitry Novik). - Ler apenas as colunas necessárias na subconsulta correlacionada quando ela for usada como argumento da função
EXISTS. #82443 (Dmitry Novik). - As comparações entre árvores de consulta durante a análise da consulta ficaram um pouco mais rápidas. #82617 (Nikolai Kochetov).
- Adicionado alinhamento ao Counter de ProfileEvents para reduzir o falso compartilhamento. #82697 (Jiebin Sun).
- As otimizações para
null_mapeJoinMaskde #82308 foram aplicadas ao caso de JOIN com múltiplas cláusulas disjuntivas. Além disso, a estrutura de dadosKnownRowsHolderfoi otimizada. #83041 (Nikita Taranov). - Um
std::vector<std::atomic_bool>simples é usado para flags de join, evitando o cálculo de um hash a cada acesso às flags. #83043 (Nikita Taranov). - Não fazer a pré-alocação de memória para as colunas de resultado quando
HashJoinusa o modo de saídalazy. Isso não é ideal, especialmente quando o número de correspondências é baixo. Além disso, sabemos a quantidade exata de correspondências depois que a junção é concluída, então podemos fazer uma pré-alocação mais precisa. #83304 (Nikita Taranov). - Minimize a cópia de memória em cabeçalhos de porta durante a construção do pipeline. PR original de heymind. #83381 (Raúl Marín).
- Melhoria na inicialização do clickhouse-keeper ao usar armazenamento RocksDB. #83390 (Antonio Andelic).
- Evite manter o lock durante a criação dos dados do snapshot de armazenamento para reduzir a contenção no lock em cenários de alta carga concorrente. #83510 (Duc Canh Le).
- Melhorado o desempenho do formato de entrada
ProtobufSinglecom a reutilização do serializador quando não ocorrem erros de parsing. #83613 (Eduard Karacharov). - Melhoria no desempenho da construção do pipeline, acelerando consultas curtas. #83631 (Raúl Marín).
- Otimização de
MergeTreeReadersChain::getSampleBlock, o que acelera consultas curtas. #83875 (Raúl Marín). - Listagem de tabelas em catálogos de dados acelerada por meio de solicitações assíncronas. #81084 (alesapin).
- Adiciona jitter ao mecanismo de retry do S3 quando a configuração
s3_slow_all_threads_after_network_errorestá habilitada. #81849 (zoomxi).
Aprimoramento
- Colorir os parênteses com várias cores para melhorar a legibilidade. #82538 (Konstantin Bogdanov).
- Destaca metacaracteres em padrões LIKE/REGEXP enquanto você digita. Já tínhamos isso no
clickhouse-formate no echo doclickhouse-client, mas agora isso também é feito no prompt de comando. #82871 (Alexey Milovidov). - O realce em
clickhouse-formate no eco do cliente funcionarão da mesma forma que o realce no prompt da linha de comando. #82874 (Alexey Milovidov). - Agora, os discos
plain_rewritablesão permitidos para metadados de banco de dados. Implemente os métodosmoveFileereplaceFileemplain_rewritablepara dar suporte a ele como disco de banco de dados. #79424 (Tuan Pham Anh). - Permitir backups de bancos de dados
PostgreSQL,MySQLeDataLake. Um backup desse tipo de banco de dados salvaria apenas a definição, e não os dados armazenados nele. #79982 (Nikolay Degterinsky). - A configuração
allow_experimental_join_conditionfoi marcada como obsoleta, pois agora ela é sempre permitida. #80566 (Vladimir Cherkasov). - Adiciona métricas de pressão às métricas assíncronas do ClickHouse. #80779 (Xander Garbett).
- Adicionadas as métricas
MarkCacheEvictedBytes,MarkCacheEvictedMarks,MarkCacheEvictedFilespara acompanhar as evicções no cache de marcas. (issue #60989). #80799 (Shivji Kumar Jha). - Suporte à gravação de
enumdo Parquet como array de bytes, conforme determina a especificação. #81090 (Arthur Passos). - Uma melhoria para o engine de tabela
DeltaLake: o delta-kernel-rs tem a APIExpressionVisitor, que foi implementada neste PR e aplicada à transformação de expressões de colunas de partição (ela substituirá uma abordagem antiga e obsoleta do delta-kernel-rs, usada anteriormente no nosso código). No futuro, esseExpressionVisitortambém permitirá implementar pruning com base em estatísticas e alguns recursos proprietários doDeltaLake. Além disso, o objetivo desta mudança é dar suporte a partition pruning no engine de tabelaDeltaLakeCluster(o resultado de uma expressão analisada — ActionsDAG — será serializado e enviado pelo iniciador junto com o caminho dos dados, porque esse tipo de informação, necessário para o pruning, está disponível apenas como metainformação na listagem de arquivos de dados, que é feita somente pelo iniciador, mas precisa ser aplicada aos dados em cada servidor de leitura). #81136 (Kseniia Sumarokova). - Mantém os nomes dos elementos ao derivar supertipos para tuplas nomeadas. #81345 (lgbo).
- Contar manualmente o número de mensagens consumidas para evitar depender do offset confirmado anteriormente no StorageKafka2. #81662 (János Benjamin Antal).
- Adicionado o
clickhouse-keeper-utils, uma nova ferramenta de linha de comando para gerenciar e analisar dados do ClickHouse Keeper. A ferramenta oferece suporte à geração de dumps de estado a partir de snapshots e changelogs, à análise de arquivos de changelog e à extração de intervalos específicos de logs. #81677 (Antonio Andelic). - Os limitadores de largura de banda de rede globais e por usuário nunca são reiniciados, o que garante que os limites
max_network_bandwidth_for_all_usersemax_network_bandwidth_for_all_usersnunca sejam excedidos. #81729 (Sergei Trifonov). - Suporte à gravação de geoparquets como formato de saída. #81784 (Konstantin Vedernikov).
- Impedir o início da mutação ALTER
RENAME COLUMNse ela renomear alguma coluna que, no momento, esteja afetada por uma mutação de dados incompleta. #81823 (Mikhail Artemenko). - O cabeçalho Connection é enviado por último entre os cabeçalhos. Quando sabemos disso, a conexão deve ser preservada. #81951 (Sema Checherinda).
- Ajuste da fila dos servidores TCP (64 por padrão) com base em listen_backlog (4096 por padrão). #82045 (Azat Khuzhin).
- Adicionada a capacidade de recarregar
max_local_read_bandwidth_for_serveremax_local_write_bandwidth_for_serverdinamicamente, sem reiniciar o servidor. #82083 (Kai Zhu). - Adicionado suporte para limpar todos os avisos da tabela
system.warningsusandoTRUNCATE TABLE system.warnings. #82087 (Vladimir Cherkasov). - Corrige a eliminação de partições em funções de cluster de lago de dados. #82131 (Kseniia Sumarokova).
- Corrige a leitura de dados particionados na table function DeltaLakeCluster. Neste PR, a versão do protocolo das funções de cluster foi aumentada, permitindo enviar informações extras do iniciador para as réplicas. Essas informações extras contêm a expressão de transformação do delta-kernel, necessária para fazer o parse das colunas de partição (e de outras coisas no futuro, como colunas geradas etc.). #82132 (Kseniia Sumarokova).
- A função
reinterpretagora oferece suporte à conversão paraArray(T), em queTé um Data type de tamanho fixo (issue #82621). #83399 (Shankar Iyer). - Agora o banco de dados Datalake passa a gerar uma exceção mais apropriada. Corrige #81211. #82304 (alesapin).
- Melhoria no CROSS JOIN ao retornar false de
HashJoin::needUsedFlagsForPerRightTableRow. #82379 (lgbo). - Permite gravar e ler colunas map como Array de Tuples. #82408 (MikhailBurdukov).
- Lista as licenças dos crates do Rust em
system.licenses. #82440 (Raúl Marín). - Macros como
{uuid}agora podem ser usadas na configuraçãokeeper_pathdo mecanismo de tabela S3Queue. #82463 (Nikolay Degterinsky). - Melhoria no Keeper: mover arquivos de changelog entre discos em uma thread em segundo plano. Antes, mover o changelog para outro disco bloqueava o Keeper como um todo até a movimentação ser concluída. Isso causava degradação de desempenho quando a movimentação era uma operação demorada (por exemplo, para um disco S3). #82485 (Antonio Andelic).
- Melhoria no Keeper: adicionada a nova configuração
keeper_server.cleanup_old_and_ignore_new_acl. Se estiver habilitada, todos os nós terão suas ACLs removidas, enquanto a ACL de novas solicitações será ignorada. Se o objetivo for remover completamente a ACL dos nós, é importante manter a configuração habilitada até que um novo snapshot seja criado. #82496 (Antonio Andelic). - Adicionada uma nova configuração de servidor
s3queue_disable_streaming, que desativa o streaming em tabelas com o mecanismo de tabela S3Queue. Essa configuração pode ser alterada sem reiniciar o servidor. #82515 (Kseniia Sumarokova). - Refatorado o recurso de redimensionamento dinâmico do cache do sistema de arquivos. Adicionados mais logs para introspecção. #82556 (Kseniia Sumarokova).
clickhouse-serversem arquivo de configuração também escutará a porta 9005 do PostgreSQL, como na configuração padrão. #82633 (Alexey Milovidov).- Em
ReplicatedMergeTree::executeMetadataAlter, obtemos o StorageID e, sem adquirir o DDLGuard, tentamos chamarIDatabase::alterTable. Nesse intervalo, tecnicamente poderíamos ter feito um EXCHANGE da tabela em questão com outra tabela; assim, quando obtivéssemos a definição, ela poderia ser a errada. Para evitar isso, adicionamos uma verificação separada para garantir que os UUIDs correspondam ao tentar chamarIDatabase::alterTable. #82666 (Nikolay Degterinsky). - Ao anexar um banco de dados com um disco remoto em modo somente leitura, adicione manualmente os UUIDs das tabelas ao DatabaseCatalog. #82670 (Tuan Pham Anh).
- Impede que o usuário use
naneinfcomNumericIndexedVector. Corrige #82239 e mais algumas coisas. #82681 (Raufs Dunamalijevs). - Não omita os valores zero nos formatos de cabeçalho
X-ClickHouse-ProgresseX-ClickHouse-Summary. #82727 (Nikita Mikhaylov). - Melhoria do Keeper: suporte a permissões específicas para a ACL world:anyone. #82755 (Antonio Andelic).
- Não permitir
RENAME COLUMNnemDROP COLUMNque envolvam colunas explicitamente listadas para soma no SummingMergeTree. Fecha #81836. #82821 (Alexey Milovidov). - Aprimora a precisão da conversão de
DecimalparaFloat32. Implementa a conversão deDecimalparaBFloat16. Fecha #82660. #82823 (Alexey Milovidov). - As barras de rolagem na interface web terão uma aparência um pouco melhor. #82869 (Alexey Milovidov).
clickhouse-servercom configuração embutida permitirá usar a interface web ao retornar uma resposta HTTP OPTIONS. #82870 (Alexey Milovidov).- Adiciona suporte para especificar ACLs adicionais do Keeper para paths na configuração. Se quiser adicionar ACLs adicionais para um path específico, defina isso na configuração em
zookeeper.path_acls. #82898 (Antonio Andelic). - Agora, o snapshot de mutações será criado a partir do snapshot das partes visíveis. Além disso, os contadores de mutação usados no snapshot serão recalculados com base nas mutações incluídas. #82945 (Mikhail Artemenko).
- Adiciona
ProfileEventquando o Keeper rejeita uma gravação por causa do limite flexível de memória. #82963 (Xander Garbett). - Adicionar as colunas
commit_time,commit_idemsystem.s3queue_log. #83016 (Kseniia Sumarokova). - Em alguns casos, precisamos ter múltiplas dimensões em nossas métricas. Por exemplo, contar merges ou mutações com falha por código de erro, em vez de usar um único contador. Foi introduzida a
system.dimensional_metrics, que faz exatamente isso e adiciona a primeira métrica dimensional, chamadafailed_merges. #83030 (Miсhael Stetsyuk). - Consolidar os avisos sobre configurações desconhecidas no clickhouse client e registrá-los de forma resumida. #83042 (Bharat Nallan).
- O clickhouse client agora passa a informar a porta local quando ocorre um erro de conexão. #83050 (Jianfei Hu).
- Tratamento de erros um pouco melhor em
AsynchronousMetrics. Se o diretório/sys/blockexistir, mas não estiver acessível, o servidor será iniciado sem monitorar os dispositivos de bloco. Fecha #79229. #83115 (Alexey Milovidov). - Desligar o SystemLogs após as tabelas comuns (e antes das tabelas de sistema, em vez de antes das comuns). #83134 (Kseniia Sumarokova).
- Adiciona logs ao processo de desligamento do
S3Queue. #83163 (Kseniia Sumarokova). - Suporte à interpretação de
TimeeTime64comoMM:SS,M:SS,SSouS. #83299 (Yarik Briukhovetskyi). - Quando
distributed_ddl_output_mode='*_only_active', não espere por réplicas novas ou recuperadas com atraso de replicação maior quemax_replication_lag_to_enqueue. Isso deve ajudar a evitarDDL task is not finished on some hostsquando uma nova réplica se torna ativa após concluir a inicialização ou a recuperação, mas acumulou um grande log de replicação durante a inicialização. Além disso, foi implementada a consultaSYSTEM SYNC DATABASE REPLICA STRICT, que aguarda até que o log de replicação fique abaixo demax_replication_lag_to_enqueue. #83302 (Alexander Tokmakov). - Não exiba descrições longas demais de ações de expressão em mensagens de exceção. Fecha #83164. #83350 (Alexey Milovidov).
- Adicionada a capacidade de analisar o prefixo e o sufixo da parte, além de verificar a cobertura de colunas não constantes. #83377 (Mikhail Artemenko).
- Padronizar os nomes dos parâmetros em ODBC e JDBC ao usar coleções nomeadas. #83410 (Andrey Zvonov).
- Quando o armazenamento está sendo desligado,
getStatuslança uma exceçãoErrorCodes::ABORTED. Anteriormente, isso fazia a consulta SELECT falhar. Agora, capturamos as exceçõesErrorCodes::ABORTEDe as ignoramos intencionalmente. #83435 (Miсhael Stetsyuk). - Adiciona métricas de recursos de processo (como
UserTimeMicroseconds,SystemTimeMicroseconds,RealTimeMicroseconds) aos eventos de perfil dopart_lognas entradasMergeParts. #83460 (Vladimir Cherkasov). - Ativa, por padrão, as feature flags
create_if_not_exists,check_not_existseremove_recursiveno Keeper, o que habilita novos tipos de requisições. #83488 (Antonio Andelic). - Encerrar o streaming de S3(Azure/etc)Queue antes de desligar quaisquer tabelas ao desligar o servidor. #83530 (Kseniia Sumarokova).
- Habilitado o uso de
Date/Date32como inteiros em formatos de entradaJSON. #83597 (MikhailBurdukov). - Facilitou a leitura das mensagens de exceção em determinadas situações de carregamento e adição de projeções. #83728 (Robert Schulze).
- Introduz uma opção de configuração para ignorar as verificações de integridade do checksum do binário do
clickhouse-server. Resolve #83637. #83749 (Rafael Roquetto).
Correção de bug (comportamento incorreto perceptível ao usuário em um lançamento estável oficial)
- Corrige o valor padrão incorreto da opção
--reconnectemclickhouse-benchmark. Ele foi alterado por engano em #79465. #82677 (Alexey Milovidov). - Corrige a inconsistência na formatação de
CREATE DICTIONARY. Fecha #82105. #82829 (Alexey Milovidov). - Corrige a formatação inconsistente de TTL quando contém uma função
materialize. Fecha #82828. #82831 (Alexey Milovidov). - Corrige a inconsistência na formatação de EXPLAIN AST em uma subconsulta quando ela contém opções de saída, como INTO OUTFILE. Fecha #82826. #82840 (Alexey Milovidov).
- Corrige a formatação inconsistente de expressões entre parênteses com aliases no contexto em que nenhum alias é permitido. Fecha #82836. Fecha #82837. #82867 (Alexey Milovidov).
- Use o código de erro correto ao multiplicar um estado de função de agregação por um IPv4. Fecha #82817. #82818 (Alexey Milovidov).
- Corrige erro lógico no cache do sistema de arquivos: “Tem zero bytes, mas o intervalo ainda não terminou”. #81868 (Kseniia Sumarokova).
- Recalcule o índice min-max quando o TTL reduzir o número de linhas para garantir a correção dos algoritmos que dependem dele, como
minmax_count_projection. Isso resolve #77091. #77166 (Amos Bird). - Para consultas com a combinação de
ORDER BY ... LIMIT BY ... LIMIT N, quandoORDER BYé executado como PartialSorting, o contadorrows_before_limit_at_leastagora reflete o número de linhas consumidas pela cláusula LIMIT, em vez do número de linhas consumidas pela etapa de ordenação. #78999 (Eduard Karacharov). - Corrige o excesso de salto de grânulos na filtragem em índices token/ngram com regexp que contém alternância e uma primeira alternativa não literal. #79373 (Eduard Karacharov).
- Corrigido um erro lógico com o operador
<=>e o armazenamento Join; agora a consulta retorna o código de erro correto. #80165 (Vladimir Cherkasov). - Corrige uma falha na função
loopquando usada com a família de funçõesremote. Garante que a cláusula LIMIT seja respeitada emloop(remote(...)). #80299 (Julia Kartseva). - Corrige o comportamento incorreto das funções
to_utc_timestampefrom_utc_timestampao processar datas anteriores à epoch Unix (1970-01-01) e posteriores à data máxima (2106-02-07 06:28:15). Agora, essas funções limitam corretamente os valores ao início da epoch e à data máxima, respectivamente. #80498 (Surya Kant Ranjan). - Para algumas consultas executadas com réplicas paralelas, a(s) otimização(ões) de leitura em ordem poderia(m) ser aplicada(s) no nó iniciador, enquanto não poderia(m) ser aplicada(s) nos nós remotos. Isso leva a modos de leitura diferentes usados pelo coordenador de réplicas paralelas (no nó iniciador) e pelos nós remotos, o que é um erro lógico. #80652 (Igor Nikonov).
- Corrigido erro lógico ao materializar a projeção quando o tipo da coluna foi alterado para Nullable. #80741 (Pavel Kruglov).
- Corrigido o recálculo incorreto de TTL em TTL GROUP BY ao atualizar o TTL. #81222 (Evgeniy Ulasik).
- Corrigido o filtro de Bloom do Parquet, que aplicava incorretamente uma condição como
WHERE function(key) IN (...)como se fosseWHERE key IN (...). #81255 (Michael Kolupaev). - Corrigido um possível travamento no
Aggregatorem caso de exceção durante o merge. #81450 (Nikita Taranov). - Corrigido
InterpreterInsertQuery::extendQueryLogElemImplpara adicionar crases aos nomes do banco de dados e da tabela quando necessário (por exemplo, quando os nomes contêm caracteres especiais como-). #81528 (Ilia Shvyrialkin). - Corrige a execução de
INcomtransform_null_in=1quando háNULLno argumento à esquerda e o resultado da subconsulta não é Nullable. #81584 (Pavel Kruglov). - Não valide tipos experimentais/suspeitos na execução de expressões default/materialize ao ler de uma tabela existente. #81618 (Pavel Kruglov).
- Corrige “Context has expired” durante operações de merge quando
dicté usado em uma expressão TTL. #81690 (Azat Khuzhin). - Corrige a monotonicidade da função CAST. #81722 (zoomxi).
- Corrige o problema em que as colunas necessárias não são lidas durante o processamento de subconsulta escalar correlacionada. Corrige #81716. #81805 (Dmitry Novik).
- Em versões anteriores, o servidor retornava conteúdo em excesso para solicitações a
/js. Isso resolve #61890. #81895 (Alexey Milovidov). - Anteriormente, as definições do table engine
MongoDBpodiam incluir um componente de caminho no argumentohost:port, que era ignorado silenciosamente. A integração com MongoDB se recusa a carregar essas tabelas. Com esta correção, passamos a permitir o carregamento dessas tabelas e a ignorar o componente de caminho se o engineMongoDBtiver cinco argumentos, usando o nome do banco de dados fornecido nos argumentos. Observação: A correção não é aplicada a tabelas recém-criadas nem a consultas com a table functionmongo, assim como a fontes de dicionário e coleções nomeadas. #81942 (Vladimir Cherkasov). - Corrigida uma possível falha no
Aggregatorem caso de exceção durante a mesclagem. #82022 (Nikita Taranov). - Corrige a análise de filtro quando a consulta usa apenas uma coluna de alias constante. Corrige #79448. #82037 (Dmitry Novik).
- Corrige LOGICAL_ERROR e o travamento subsequente ao usar a mesma coluna no TTL para GROUP BY e SET. #82054 (Pablo Marcos).
- Corrige a validação dos argumentos da função de tabela S3 no mascaramento de segredos, evitando um possível
LOGICAL_ERROR, e fecha #80620. #82056 (Vladimir Cherkasov). - Corrige condições de corrida no Iceberg. #82088 (Azat Khuzhin).
- Corrigido
DatabaseReplicated::getClusterImpl. Se o primeiro elemento (ou elementos) dehoststiverid == DROPPED_MARKe não houver outros elementos no mesmo shard, o primeiro elemento deshardsserá um vetor vazio, o que leva astd::out_of_range. #82093 (Miсhael Stetsyuk). - Correção de um erro de copiar e colar em arraySimilarity, impedindo o uso de pesos UInt32 e Int32. Atualização dos testes e da documentação. #82103 (Mikhail f. Shiryaev).
- Corrigido o erro
Not found columnem consultas comarrayJoinna condiçãoWHEREeIndexSet. #82113 (Nikolai Kochetov). - Corrigido um bug na integração com o Glue catalog. Agora o ClickHouse consegue ler tabelas com tipos de dados aninhados em que algumas subcolunas contêm valores decimais, por exemplo:
map<string, decimal(9, 2)>. Corrige #81301. #82114 (alesapin). - Corrige a degradação de desempenho no SummingMergeTree introduzida na versão 25.5 em https://github.com/ClickHouse/ClickHouse/pull/79051. #82130 (Pavel Kruglov).
- Ao passar configurações pela URI, considera-se o último valor. #82137 (Sema Checherinda).
- Corrige o erro “Context has expired” no Iceberg. #82146 (Azat Khuzhin).
- Corrige um possível deadlock em consultas remotas quando o servidor está com a memória sob pressão. #82160 (Kirill).
- Corrige overflow nas funções
numericIndexedVectorPointwiseAdd,numericIndexedVectorPointwiseSubtract,numericIndexedVectorPointwiseMultiply,numericIndexedVectorPointwiseDivideque ocorria ao aplicá-las a números grandes. #82165 (Raufs Dunamalijevs). - Corrige um bug nas dependências de tabelas que fazia com que visões materializadas não processassem consultas INSERT. #82222 (Nikolay Degterinsky).
- Corrige uma possível condição de corrida de dados entre a thread de sugestão e a thread principal do cliente. #82233 (Azat Khuzhin).
- Agora o ClickHouse pode ler tabelas Iceberg do catálogo Glue após a evolução do esquema. Corrige #81272. #82301 (alesapin).
- Corrigida a validação das configurações de métricas assíncronas
asynchronous_metrics_update_period_seasynchronous_heavy_metrics_update_period_s. #82310 (Bharat Nallan). - Corrige um erro lógico ao resolver o matcher em uma consulta com vários JOINs, fecha #81969. #82421 (Vladimir Cherkasov).
- Adicionar validade ao token do AWS ECS para que ele possa ser recarregado. #82422 (Konstantin Bogdanov).
- Corrige um bug relacionado a argumentos
NULLna funçãoCASE. #82436 (Yarik Briukhovetskyi). - Corrige condições de corrida no cliente (ao não usar o contexto global) e sobrescritas de
session_timezone(antes, sesession_timezonefosse definido, por exemplo, emusers.xml/nas opções do cliente como não vazio e, no contexto da consulta, como vazio, o valor deusers.xmlera usado, o que está incorreto; agora, o contexto da consulta sempre terá prioridade sobre o contexto global). #82444 (Azat Khuzhin). - Corrigida a desativação do alinhamento de borda para o buffer em cache nos motores de tabela externa. Isso foi quebrado em https://github.com/ClickHouse/ClickHouse/pull/81868. #82493 (Kseniia Sumarokova).
- Corrige a falha quando o armazenamento key-value é usado em um JOIN com uma chave com CAST de tipo. #82497 (Pervakov Grigorii).
- Corrigida a ocultação de valores de coleção nomeada em logs/query_log. Fecha #82405. #82510 (Kseniia Sumarokova).
- Corrige um possível travamento no logging ao encerrar uma sessão, pois o user_id às vezes pode ficar vazio. #82513 (Bharat Nallan).
- Corrige casos em que o parsing de Time podia causar problemas com o msan. Isso corrige: #82477. #82514 (Yarik Briukhovetskyi).
- Impedir que
threadpool_writer_pool_sizeseja definido como zero para garantir que as operações do servidor não travem. #82532 (Bharat Nallan). - Corrigido
LOGICAL_ERRORdurante a análise da expressão da política de linhas para colunas correlacionadas. #82618 (Dmitry Novik). - Corrige o uso incorreto dos metadados do objeto pai na função de tabela
mergeTreeProjectionquandoenable_shared_storage_snapshot_in_query = 1. Relacionado a #82634. #82638 (Amos Bird). - As funções
trim{Left,Right,Both}agora oferecem suporte a strings de entrada do tipo “FixedString(N)”. Por exemplo,SELECT trimBoth(toFixedString('abc', 3), 'ac')agora passa a funcionar. #82691 (Robert Schulze). - No AzureBlobStorage, para cópia nativa, comparamos os métodos de autenticação; se ocorrer uma exceção durante esse processo, o código foi atualizado para usar leitura e cópia como fallback (ou seja, cópia não nativa). #82693 (Smita Kulkarni).
- Corrige a desserialização de
groupArraySample/groupArrayLastno caso de elementos vazios (a desserialização podia ignorar parte dos dados binários se a entrada estivesse vazia, o que pode levar à corrupção durante a leitura dos dados e a UNKNOWN_PACKET_FROM_SERVER no protocolo TCP). Isso não afeta tipos numéricos nem tipos de data e hora. #82763 (Pedro Ferreira). - Corrigido um problema no backup de uma tabela
Memoryvazia, que fazia a restauração do backup falhar com o erroBACKUP_ENTRY_NOT_FOUND. #82791 (Julia Kartseva). - Corrige a segurança em caso de exceção na reescrita de union/intersect/except_default_mode. Fecha #82664. #82820 (Alexey Milovidov).
- Monitore o número de jobs assíncronos de carregamento de tabelas. Se houver jobs em execução, não atualize
tail_ptremTransactionLog::removeOldEntries. #82824 (Tuan Pham Anh). - Corrigidas condições de corrida no Iceberg. #82841 (Azat Khuzhin).
- A otimização da configuração
use_skip_indexes_if_final_exact_mode(introduzida na versão 25.6) podia falhar ao selecionar um intervalo candidato relevante, dependendo das configurações da engineMergeTree/ da distribuição dos dados. Isso já foi corrigido. #82879 (Shankar Iyer). - Define o salt dos dados de autenticação ao fazer o parsing a partir da AST com o tipo SCRAM_SHA256_PASSWORD. #82888 (Tuan Pham Anh).
- Ao usar uma implementação de Database que não usa cache, os metadados da tabela correspondente são excluídos depois que as colunas são retornadas e a referência é invalidada. #82939 (buyval01).
- Corrige a modificação de filtro em consultas com uma expressão JOIN envolvendo uma tabela com armazenamento
Merge. Corrige #82092. #82950 (Dmitry Novik). - Corrige o LOGICAL_ERROR em QueryMetricLog: mutex não pode ser NULL. #82979 (Pablo Marcos).
- Corrigida a saída incorreta da função
formatDateTimequando o especificador%fé usado junto com especificadores de tamanho variável (por exemplo,%M). #83020 (Robert Schulze). - Corrige a degradação de desempenho causada pelo analisador habilitado quando consultas secundárias sempre leem todas as colunas das VIEWs. Corrige #81718. #83036 (Dmitry Novik).
- Corrige mensagem de erro enganosa ao restaurar um backup em disco somente leitura. #83051 (Julia Kartseva).
- Não verificar dependências cíclicas ao criar tabelas sem dependências. Corrige a degradação de desempenho em casos de uso com a criação de milhares de tabelas, introduzida em https://github.com/ClickHouse/ClickHouse/pull/65405. #83077 (Pavel Kruglov).
- Corrige um problema na leitura implícita de valores negativos de Time na tabela e deixa a documentação mais clara. #83091 (Yarik Briukhovetskyi).
- Não use partes não relacionadas de um Dicionário compartilhado na função
lowCardinalityKeys. #83118 (Alexey Milovidov). - Corrige a regressão no uso de subcolunas com visões materializadas. Corrige: #82784. #83221 (Nikita Mikhaylov).
- Corrige uma falha no cliente devido à conexão permanecer em estado desconectado após um INSERT inválido. #83253 (Azat Khuzhin).
- Corrigido um travamento ao calcular o tamanho de um bloco com colunas vazias. #83271 (Raúl Marín).
- Corrigida uma possível falha no tipo Variant no UNION. #83295 (Pavel Kruglov).
- Corrige LOGICAL_ERROR no clickhouse-local para consultas SYSTEM sem suporte. #83333 (Surya Kant Ranjan).
- Corrige o
no_sign_requestpara o cliente S3. Ele pode ser usado para evitar explicitamente a assinatura de solicitações ao S3. Também pode ser definido para endpoints específicos usando configurações baseadas em endpoint. #83379 (Antonio Andelic). - Corrige um travamento que pode ocorrer em uma consulta com a configuração ‘max_threads=1’ quando executada sob carga com o escalonamento de CPU habilitado. #83387 (Fan Ziqi).
- Corrige a exceção
TOO_DEEP_SUBQUERIESquando a definição de CTE faz referência a outra expressão de tabela de mesmo nome. #83413 (Dmitry Novik). - Corrige o comportamento incorreto em que a execução de
REVOKE S3 ON system.*revoga permissões de S3 para*.*. Isso corrige #83417. #83420 (pufit). - Não compartilhe async_read_counters entre consultas. #83423 (Azat Khuzhin).
- Desabilita réplicas paralelas quando uma subconsulta contém FINAL. #83455 (zoomxi).
- Corrige um pequeno overflow de inteiro na configuração da opção
role_cache_expiration_time_seconds(issue #83374). #83461 (wushap). - Corrige um bug introduzido em https://github.com/ClickHouse/ClickHouse/pull/79963. Ao inserir em uma MV com um definer, a verificação de permissões deve usar os privilégios do definer. Isso corrige #79951. #83502 (pufit).
- Desabilitada a poda de arquivos com base em limites para elementos de array do Iceberg e valores de map do Iceberg, incluindo todos os respectivos subcampos aninhados. #83520 (Daniil Ivanik).
- Corrige possíveis erros de cache de arquivos não inicializado ao ser usado como armazenamento temporário de dados. #83539 (Bharat Nallan).
- Correção no Keeper: atualizar corretamente a contagem total de watches quando nós efêmeros são excluídos ao encerrar a sessão. #83583 (Antonio Andelic).
- Corrige a contabilização incorreta de memória relacionada a max_untracked_memory. #83607 (Azat Khuzhin).
- INSERT SELECT com UNION ALL poderia levar à desreferenciação de um ponteiro nulo em um caso específico. Isso encerra #83618. #83643 (Alexey Milovidov).
- Não permitir o valor zero para max_insert_block_size, pois isso pode causar erro lógico. #83688 (Bharat Nallan).
- Corrigido loop infinito em estimateCompressionRatio() com block_size_bytes=0. #83704 (Azat Khuzhin).
- Corrige as métricas
IndexUncompressedCacheBytes/IndexUncompressedCacheCells/IndexMarkCacheBytes/IndexMarkCacheFiles(anteriormente, elas eram incluídas na métrica sem o prefixoCache). #83730 (Azat Khuzhin). - Corrige um possível abort (devido ao
joindas threads da tarefa) e, possivelmente, travamentos (em testes unitários) durante o desligamento deBackgroundSchedulePool. #83769 (Azat Khuzhin). - Introduz uma configuração de compatibilidade com versões anteriores para permitir que o novo analisador referencie um alias externo na cláusula WITH em caso de conflitos de nomes. Corrige #82700. #83797 (Dmitry Novik).
- Corrige o deadlock no desligamento causado pelo bloqueio recursivo do contexto durante a limpeza da bridge de biblioteca. #83824 (Azat Khuzhin).
Melhoria em compilação/testes/empacotamento
- Compilação de uma biblioteca C mínima (10 KB) para o lexer do ClickHouse. Isso é necessário para #80977. #81347 (Alexey Milovidov). Adiciona um teste para o lexer standalone e a tag de teste
fasttest-only. #82472 (Yakov Olkhovskiy). - Adiciona uma verificação para as entradas do submodule do Nix. #81691 (Konstantin Bogdanov).
- Corrige uma série de problemas que podem ocorrer ao tentar executar testes de integração em localhost. #82135 (Oleg Doronin).
- Compila o SymbolIndex no Mac e no FreeBSD. (Mas ele funcionará apenas em sistemas ELF, Linux e FreeBSD). #82347 (Alexey Milovidov).
- Azure SDK atualizado para v1.15.0. #82747 (Smita Kulkarni).
- Adiciona o módulo de armazenamento do google-cloud-cpp ao sistema de compilação. #82881 (Pablo Marcos).
- Altera o
Dockerfile.ubuntudo clickhouse-server para atender aos requisitos da Docker Official Library. #83039 (Mikhail f. Shiryaev). - Complemento de #83158 para corrigir o upload de builds para
curl clickhouse.com. #83463 (Mikhail f. Shiryaev). - Adiciona o binário
busyboxe ferramentas de instalação emclickhouse/clickhouse-servere nas imagens oficiaisclickhouse. #83735 (Mikhail f. Shiryaev). - Adicionado suporte à variável de ambiente
CLICKHOUSE_HOSTpara especificar o host do servidor ClickHouse, alinhando-se às variáveis de ambiente existentesCLICKHOUSE_USEReCLICKHOUSE_PASSWORD. Isso permite uma configuração mais simples sem modificar diretamente o cliente ou os arquivos de configuração. #83659 (Doron David).
Lançamento do ClickHouse 25.6, 2025-06-26
Alteração incompatível com versões anteriores
- Anteriormente, a função
countMatchesinterrompia a contagem na primeira correspondência vazia, mesmo que o padrão a aceitasse. Para corrigir esse problema,countMatchesagora continua a execução avançando um único caractere quando ocorre uma correspondência vazia. Os usuários que quiserem manter o comportamento antigo podem ativar a configuraçãocount_matches_stop_at_empty_match. #81676 (Elmi Ahmadov). - Menor: força as configurações de servidor
backup_threadserestore_threadsa serem diferentes de zero. #80224 (Raúl Marín). - Menor: corrige
bitNotparaString, que retornará uma string terminada em zero na representação interna em memória. Isso não deve afetar nenhum comportamento visível ao usuário; no entanto, o autor quis destacar essa mudança. #80791 (Azat Khuzhin).
Novo recurso
- Novos tipos de dados:
Time([H]HH:MM:SS) eTime64([H]HH:MM:SS[.fractional]), além de algumas funções básicas de conversão de tipo e funções para interagir com outros tipos de dados. Foram adicionadas configurações para compatibilidade com a função existentetoTime. A configuraçãouse_legacy_to_timeestá definida para manter o comportamento antigo por enquanto. #81217 (Yarik Briukhovetskyi). Suporte para comparação entre Time/Time64. #80327 (Yarik Briukhovetskyi). - Uma nova ferramenta de linha de comando,
chdig- interface TUI para o ClickHouse (semelhante ao top), incluída no ClickHouse. #79666 (Azat Khuzhin). - Suporte à configuração
disknos motores de banco de dadosAtomiceOrdinary, especificando o disco em que os arquivos de metadados das tabelas serão armazenados. #80546 (Tuan Pham Anh). Isso permite anexar bancos de dados de fontes externas. - Um novo tipo de MergeTree,
CoalescingMergeTree- o engine usa o primeiro valor não nulo durante os merges em segundo plano. Isso fecha #78869. #79344 (scanhex12). - Funções de suporte para leitura de WKB (“Well-Known Binary” é um formato de codificação binária de vários tipos de geometria, usado em aplicações de GIS). Veja #43941. #80139 (scanhex12).
- Adicionado o agendamento de slots de consulta para cargas de trabalho; consulte agendamento de cargas de trabalho para obter mais detalhes. #78415 (Sergei Trifonov).
- Funções auxiliares
timeSeries*para acelerar alguns casos de uso ao trabalhar com dados de séries temporais: - reamostrar os dados em uma grade de tempo comtimestampinicial,timestampfinal e passo especificados - calculardelta,rate,ideltaeirateno estilo do PromQL. #80590 (Alexander Gololobov). - Adicionar as funções
mapContainsValuesLike/mapContainsValues/mapExtractValuesLikepara filtrar por valores em map e o suporte delas em índices baseados em filtro de Bloom. #78171 (UnamedRus). - Agora, as restrições de configuração podem especificar um conjunto de valores proibidos. #78499 (Bharat Nallan).
- Foi adicionada a configuração
enable_shared_storage_snapshot_in_querypara permitir o uso compartilhado do mesmo snapshot de armazenamento em todas as subconsultas de uma única consulta. Isso garante leituras consistentes da mesma tabela, mesmo quando ela é referenciada várias vezes na consulta. #79471 (Amos Bird). - Suporte à gravação de colunas
JSONemParquete à leitura direta de colunasJSONdeParquet. #79649 (Nihal Z. Miaji). - Adicionado suporte a
MultiPolygonempointInPolygon. #79773 (Nihal Z. Miaji). - Adicionado suporte para consultar tabelas Delta montadas em um sistema de arquivos local via a função de tabela
deltaLakeLocal. #79781 (roykim98). - Adicionada a nova configuração
cast_string_to_date_time_mode, que permite escolher o modo de parsing de DateTime durante o cast de String. #80210 (Pavel Kruglov). Por exemplo, você pode defini-la para o modo best effort. - Adicionadas as funções
bech32Encodeebech32Decodepara trabalhar com o algoritmo Bech do Bitcoin (issue #40381). #80239 (George Larionov). - Adicionar funções SQL para analisar os nomes das partes do MergeTree. #80573 (Mikhail Artemenko).
- Permite filtrar as partes selecionadas para a consulta com base no disco em que residem, introduzindo uma nova coluna virtual,
_disk_name. #80650 (tanner-bruce). - Adiciona uma página inicial com a lista de ferramentas web incorporadas. Ela será aberta quando for solicitada por um user agent do tipo navegador. #81129 (Alexey Milovidov).
- As funções
arrayFirst,arrayFirstIndex,arrayLastearrayLastIndexpassarão a filtrar os valores NULL retornados pela expressão de filtro. Em versões anteriores, resultados de filtro do tipo Nullable não eram compatíveis. Corrige #81113. #81197 (Lennard Eijsackers). - Agora também é possível escrever
USE DATABASE nameem vez deUSE name. #81307 (Yarik Briukhovetskyi). - Adicionada uma nova tabela do sistema
system.codecspara inspecionar os codecs disponíveis. (issue #81525). #81600 (Jimmy Aguilar Mena). - Suporte às funções de janela
lagelead. Fecha #9887. #82108 (Dmitry Novik). - A função
tokensagora oferece suporte a um novo tokenizer, chamadosplit, que é adequado para logs. #80195 (Robert Schulze). - Adicionado suporte ao argumento
--databasenoclickhouse-local. Agora é possível alternar para um banco de dados criado anteriormente. Isso encerra #44115. #81465 (Alexey Milovidov).
Funcionalidade experimental
- Implementa uma lógica semelhante à de rebalance do Kafka para
Kafka2usando ClickHouse Keeper. Para cada réplica, há suporte a dois tipos de bloqueios de partição: bloqueios permanentes e bloqueios temporários. A réplica tenta manter os bloqueios permanentes pelo maior tempo possível; em qualquer momento, não há mais do queall_topic_partitions / active_replicas_count(em queall_topic_partitionsé o número total de partições eactive_replicas_counté o número de réplicas ativas) bloqueios permanentes na réplica; se houver mais, a réplica libera algumas partições. Algumas partições ficam temporariamente retidas pela réplica. O número máximo de bloqueios temporários em uma réplica muda dinamicamente para dar a outras réplicas a chance de assumir algumas partições com bloqueios permanentes. Ao atualizar os bloqueios temporários, a réplica libera todos eles e tenta adquirir alguns outros novamente. #78726 (Daria Fomina). - Uma melhoria no índice de texto experimental: agora há suporte a parâmetros explícitos por meio de pares chave-valor. Atualmente, os parâmetros compatíveis são um
tokenizerobrigatório e dois opcionais:max_rows_per_postings_listengram_size. #80262 (Elmi Ahmadov). - Antes, o armazenamento
packednão era compatível com o índice full-text, porque o ID do segmento era atualizado em tempo real por meio da leitura e gravação do arquivo (.gin_sid) em disco. No caso do armazenamentopacked, não havia suporte para ler um valor do arquivo não confirmado, e isso levava a um problema. Agora isso foi corrigido. #80852 (Elmi Ahmadov). - Índices experimentais do tipo
gin(de que eu não gosto, porque é uma piada interna entre hackers do PostgreSQL) foram renomeados paratext. Índices existentes do tipogincontinuam podendo ser carregados, mas lançarão uma exceção (sugerindo índicestextem vez deles) quando alguém tentar usá-los em buscas. #80855 (Robert Schulze).
Melhoria de desempenho
- Habilita o suporte à filtragem com múltiplas projeções, permitindo o uso de mais de uma projeção na filtragem em nível de parte. Isso resolve #55525. Este é o segundo passo para implementar o índice de projeção, na sequência de #78429. #80343 (Amos Bird).
- Usar, por padrão, a política de cache
SLRUno cache do sistema de arquivos. #75072 (Kseniia Sumarokova). - Remove a contenção na etapa Resize do pipeline de consulta. #77562 (Zhiguo Zhou).
- Introduzida uma opção para transferir a (des)compressão e a (des)serialização de blocos para threads do pipeline, em vez de usar uma única thread associada a uma conexão de rede. Controlada pela configuração
enable_parallel_blocks_marshalling. Isso deve acelerar consultas distribuídas que transferem quantidades significativas de dados entre o nó iniciador e os nós remotos. #78694 (Nikita Taranov). - Melhorias de desempenho em todos os tipos de filtros de Bloom. Vídeo da conferência OpenHouse #79800 (Delyan Kratunov).
- Introduziu-se um caminho rápido em
UniqExactSet::mergequando um dos conjuntos está vazio. Além disso, agora, se o conjunto LHS for de dois níveis e o RHS for de um nível, não será feita a conversão do RHS para dois níveis. #79971 (Nikita Taranov). - Aprimorada a eficiência da reutilização de memória e reduzidas as falhas de página ao usar tabelas hash de dois níveis. Isso deve acelerar o
GROUP BY. #80245 (Jiebin Sun). - Evite atualizações desnecessárias e reduza a contenção por bloqueios no cache de condições de consulta. #80247 (Jiebin Sun).
- Otimização trivial para
concatenateBlocks. Há boas chances de isso beneficiar ohash joinparalelo. #80328 (李扬). - Ao selecionar intervalos de marca a partir do intervalo da chave primária, a busca binária não pode ser usada se a chave primária estiver envolvida em funções. Este PR melhora essa limitação: a busca binária ainda pode ser aplicada quando a chave primária está envolvida em uma cadeia de funções sempre monotônica ou quando a RPN contém um elemento que é sempre verdadeiro. Fecha #45536. #80597 (zoomxi).
- Melhora a velocidade de desligamento do engine
Kafka(remove o atraso extra de 3 segundos no caso de várias tabelasKafka). #80796 (Azat Khuzhin). - Async inserts: reduzem o uso de memória e melhoram o desempenho das consultas de inserção. #80972 (Raúl Marín).
- Não gere perfis dos processors se a tabela de log estiver desabilitada. #81256 (Raúl Marín). Isso acelera consultas muito curtas.
- Acelera
toFixedStringquando a entrada é exatamente a solicitada. #81257 (Raúl Marín). - Não processe os valores de cota quando o usuário não tiver limites. #81549 (Raúl Marín). Isso acelera consultas muito curtas.
- Corrigida uma regressão de desempenho no rastreamento de memória. #81694 (Michael Kolupaev).
- Melhoria na otimização da chave de sharding em consultas distribuídas. #78452 (fhw12345).
- Réplicas paralelas: evite aguardar réplicas lentas não utilizadas se todas as tarefas de leitura já tiverem sido atribuídas a outras réplicas. #80199 (Igor Nikonov).
- Réplicas paralelas usam um
timeoutde conexão próprio; veja a configuraçãoparallel_replicas_connect_timeout_ms. Antes, as configuraçõesconnect_timeout_with_failover_ms/connect_timeout_with_failover_secure_mseram usadas como valores detimeoutde conexão para consultas com réplicas paralelas (1 segundo por padrão). #80421 (Igor Nikonov). - Em sistemas de arquivos com journal,
mkdiré registrado no journal do sistema de arquivos, que é persistido em disco. Em caso de disco lento, isso pode demorar bastante. Mova isso para fora do escopo do bloqueio de reserva. #81371 (Kseniia Sumarokova). - Leitura dos arquivos de manifesto do Iceberg adiada até a primeira consulta de leitura. #81619 (Daniil Ivanik).
- Permite mover o predicado
GLOBAL [NOT] INpara a cláusulaPREWHERE, quando aplicável. #79996 (Eduard Karacharov).
Aprimoramento
EXPLAIN SYNTAXagora usa um novo analisador. Ele retorna a AST construída a partir da árvore de consulta. Foi adicionada a opçãoquery_tree_passespara controlar o número de etapas executadas antes de converter a árvore de consulta em AST. #74536 (Vladimir Cherkasov).- Implementada a serialização achatada para Dynamic e JSON no formato Native, que permite serializar/desserializar dados de Dynamic e JSON sem estruturas especiais, como shared variant para Dynamic e dados compartilhados para JSON. Essa serialização pode ser habilitada definindo
output_format_native_use_flattened_dynamic_and_json_serialization. Essa serialização pode ser usada para facilitar o suporte a Dynamic e JSON no protocolo TCP em clientes escritos em diferentes linguagens. #80499 (Pavel Kruglov). - Atualiza as credenciais do
S3após o erroAuthenticationRequired. #77353 (Vitaly Baranov). - Adicionadas métricas de dicionários a
system.asynchronous_metrics-DictionaryMaxUpdateDelay- o atraso máximo (em segundos) na atualização do dicionário. -DictionaryTotalFailedUpdates- o número de erros desde o último carregamento bem-sucedido em todos os dicionários. #78175 (Vlad). - Adiciona um aviso sobre bancos de dados possivelmente criados para salvar tabelas corrompidas. #78841 (János Benjamin Antal).
- Adicionada a coluna virtual
_timeaos mecanismosS3QueueeAzureQueue. #78926 (Anton Ivashkin). - Tornar recarregáveis a quente as configurações que controlam o encerramento de conexões quando a CPU está sobrecarregada. #79052 (Alexey Katsman).
- Adiciona o prefixo do contêiner aos caminhos de dados exibidos em system.tables para discos simples no Azure Blob Storage, tornando a exibição consistente com S3 e GCP. #79241 (Julia Kartseva).
- Agora,
clickhouse-clientelocaltambém aceitam parâmetros de consulta no formatoparam-<name>(hífen), além deparam_<name>(sublinhado). Isso corrige a #63093. #79429 (Engel Danila). - Mensagem de aviso detalhada sobre economia de largura de banda ao copiar dados do S3 local para o remoto com checksum habilitado. #79464 (VicoWu).
- Anteriormente, quando
input_format_parquet_max_block_size = 0(um valor inválido), o ClickHouse travava. Agora, esse comportamento foi corrigido. Isso fecha #79394. #79601 (abashkeev). - Adicionada a configuração
throw_on_errorparastartup_scripts: quandothrow_on_erroré verdadeiro, o servidor não inicia a menos que todas as consultas sejam concluídas com sucesso. Por padrão,throw_on_erroré falso, preservando o comportamento anterior. #79732 (Aleksandr Musorin). - Permite adicionar
http_response_headersahttp_handlersde qualquer tipo. #79975 (Andrey Zvonov). - A função
reverseagora oferece suporte ao tipo de dadoTuple. Fecha #80053. #80083 (flynn). - Resolve #75817: permite obter dados de
auxiliary_zookeepersna tabelasystem.zookeeper. #80146 (Nikolay Govorov). - Adiciona métricas assíncronas para os sockets TCP do servidor. Isso melhora a observabilidade. Fecha #80187. #80188 (Alexey Milovidov).
- Suporte a
anyLast_respect_nullseany_respect_nullscomoSimpleAggregateFunction. #80219 (Diskein). - Remover a chamada desnecessária de
adjustCreateQueryForBackuppara bancos de dados Replicated. #80282 (Vitaly Baranov). - Permitir opções adicionais (após
--, como em-- --config.value='abc') noclickhouse-localsem o sinal de igual. Fecha #80292. #80293 (Alexey Milovidov). - Destaca metacaracteres em consultas
SHOW ... LIKE. Isso fecha #80275. #80297 (Alexey Milovidov). - Torna a UDF SQL persistente no
clickhouse-local. A função criada anteriormente será carregada na inicialização. Isso fecha #80085. #80300 (Alexey Milovidov). - Corrige a descrição no plano EXPLAIN da etapa preliminar de DISTINCT. #80330 (UnamedRus).
- Permite usar named collections em ODBC/JDBC. #80334 (Andrey Zvonov).
- Métricas sobre a quantidade de discos somente leitura e com falha. O indicador registra em log quando
DiskLocalCheckThreadé iniciada. #80391 (VicoWu). - Adicionado suporte ao armazenamento
s3_plain_rewritablecom projeções. Em versões anteriores, objetos de metadados no S3 que referenciavam projeções não eram atualizados quando eram movidos. Fecha #70258. #80393 (Sav). - O comando
SYSTEM UNFREEZEnão tentará buscar partes em discos somente leitura e de gravação única. Isso fecha #80430. #80432 (Alexey Milovidov). - Reduzido o nível de log das mensagens sobre partes mescladas. #80476 (Hans Krutzer).
- Altera o comportamento padrão da poda de partições nas tabelas Iceberg. #80583 (Melvyn Peignon).
- Adiciona dois novos
ProfileEventspara observabilidade dos algoritmos de busca de índice:IndexBinarySearchAlgorithmeIndexGenericExclusionSearchAlgorithm. #80679 (Pablo Marcos). - Não emitir reclamações sobre
MADV_POPULATE_WRITEsem suporte em kernels mais antigos nos logs (para evitar poluição dos logs). #80704 (Robert Schulze). - Adicionado suporte a
Date32eDateTime64em expressões deTTL. #80710 (Andrey Zvonov). - Ajusta os valores de compatibilidade de
max_merge_delayed_streams_for_parallel_write. #80760 (Azat Khuzhin). - Corrigido um travamento: se uma exceção for gerada ao tentar remover um arquivo temporário (eles são usados para gravar dados temporários em disco) no destrutor, o programa pode terminar. #80776 (Alexey Milovidov).
- Adicionado o modificador
IF EXISTSaSYSTEM SYNC REPLICA. #80810 (Raúl Marín). - Expandir a mensagem de exceção sobre “Having zero bytes, but read range is not finished…”, adicionar a coluna finished_download_time a
system.filesystem_cache. #80849 (Kseniia Sumarokova). - Adiciona a seção de algoritmo de busca à saída do
EXPLAINao usá-lo com índices = 1. Ela mostra “busca binária” ou “busca genérica por exclusão”. #80881 (Pablo Marcos). - No início de 2024,
prefer_column_name_to_aliasfoi fixado diretamente no código como true para o handler do MySQL porque o novo analisador não estava habilitado por padrão. Agora, isso pode deixar de ficar fixado no código. #80916 (Yarik Briukhovetskyi). - Agora,
system.iceberg_historymostra o histórico de bancos de dados de catálogos, como Glue ou Iceberg REST. Além disso, as colunastable_nameedatabase_nameforam renomeadas paratableedatabaseemsystem.iceberg_historypor consistência. #80975 (alesapin). - Permitir o modo somente leitura para a função de tabela
merge, para que o privilégioCREATE TEMPORARY TABLEnão seja exigido para usá-la. #80981 (Miсhael Stetsyuk). - Introspecção aprimorada dos caches em memória (com exposição de informações sobre os caches em
system.metricsem vez do incompletosystem.asynchronouse_metrics). Adicionado o tamanho dos caches em memória (em bytes) aodashboard.html.VectorSimilarityIndexCacheSize/IcebergMetadataFilesCacheSizeforam renomeados paraVectorSimilarityIndexCacheBytes/IcebergMetadataFilesCacheBytes. #81023 (Azat Khuzhin). - Ignora bancos de dados com motores que não podem conter tabelas
RocksDBao ler desystem.rocksdb. #81083 (Pervakov Grigorii). - Permitir o uso de
filesystem_cachesenamed_collectionsno arquivo de configuração doclickhouse-local. #81105 (Alexey Milovidov). - Corrige o destaque de
PARTITION BYnas instruçõesINSERT. Em versões anteriores,PARTITION BYnão era destacado como palavra-chave. #81106 (Alexey Milovidov). - Duas pequenas melhorias na interface web: - tratar corretamente consultas sem retorno, como
CREATE,INSERT(até pouco tempo, essas consultas exibiam um spinner infinito); - ao clicar duas vezes em uma tabela, rolar para o topo. #81131 (Alexey Milovidov). - A métrica
MemoryResidentWithoutPageCacheinforma a quantidade de memória física usada pelo processo do servidor, excluindo o cache de páginas em userspace, em bytes. Isso oferece uma visão mais precisa do uso real de memória quando o cache de páginas em userspace está em uso. Quando o cache de páginas em userspace está desativado, esse valor é igual aMemoryResident. #81233 (Jayme Bird). - Marque como registradas as exceções registradas manualmente no cliente, no servidor local, no cliente Keeper e no aplicativo disks, para que não sejam registradas duas vezes. #81271 (Miсhael Stetsyuk).
- As configurações
use_skip_indexes_if_finaleuse_skip_indexes_if_final_exact_modeagora têmTruecomo valor padrão. Consultas com a cláusulaFINALagora usarão índices de omissão (quando aplicável) para selecionar os grânulos relevantes e também ler quaisquer grânulos adicionais correspondentes aos intervalos de chave primária correspondentes. Usuários que precisarem do comportamento anterior, com resultados aproximados/imprecisos, podem definiruse_skip_indexes_if_final_exact_modecomo FALSE após uma avaliação criteriosa. #81331 (Shankar Iyer). - Quando você tiver várias consultas na interface web, ela executará a que estiver sob o cursor. Continuação de #80977. #81354 (Alexey Milovidov).
- Este PR corrige problemas na implementação de
is_strictnas verificações de monotonicidade das funções de conversão. Atualmente, algumas funções de conversão, comotoFloat64(UInt32)etoDate(UInt8), retornam incorretamente false parais_strict, quando deveriam retornar true. #81359 (zoomxi). - Ao verificar se uma
KeyConditioncorresponde a um intervalo contínuo, se a chave estiver envolvida por uma cadeia de funções não estrita, umConstraint::POINTpode precisar ser convertido emConstraint::RANGE. Por exemplo:toDate(event_time) = '2025-06-03'implica um intervalo paraevent_time: [‘2025-06-03 00:00:00’, ‘2025-06-04 00:00:00’). Este PR corrige esse comportamento. #81400 (zoomxi). - Os aliases
clickhouse/chinvocarãoclickhouse-clientem vez declickhouse-localse--hostou--portforem especificados. Continuação de #79422. Corrige #65252. #81509 (Alexey Milovidov). - Agora que temos os dados sobre a distribuição do tempo de resposta do Keeper, podemos ajustar os buckets do histograma para métricas. #81516 (Miсhael Stetsyuk).
- Adicionado o evento de perfil
PageCacheReadBytes. #81742 (Kseniia Sumarokova). - Corrigido erro lógico no cache do sistema de arquivos: “Há zero bytes, mas o intervalo não foi concluído”. #81868 (Kseniia Sumarokova).
Correção de bug (mau funcionamento perceptível ao usuário em um lançamento estável oficial)
- Corrige view parametrizada com a consulta SELECT EXCEPT. Fecha #49447. #57380 (Nikolay Degterinsky).
- Analisador: corrige o nome da projeção da coluna após a promoção do tipo da coluna em join. Fecha #63345. #63519 (Dmitry Novik).
- Corrigido um erro lógico em casos de colisão de nomes de colunas quando analyzer_compatibility_join_using_top_level_identifier está habilitado. #75676 (Vladimir Cherkasov).
- Corrige o uso de CTE em predicados com pushdown quando
allow_push_predicate_ast_for_distributed_subqueriesestá habilitado. Corrige #75647. Corrige #79672. #77316 (Dmitry Novik). - Corrige um problema em que SYSTEM SYNC REPLICA LIGHTWEIGHT ‘foo’ indicava sucesso mesmo quando a réplica especificada não existia. O comando agora valida corretamente se a réplica existe no Keeper antes de tentar a sincronização. #78405 (Jayme Bird).
- Corrige uma falha em uma situação muito específica, quando a função
currentDatabaseera usada em seçõesCONSTRAINTde consultasON CLUSTER. Fecha #78100. #79070 (pufit). - Corrigida a passagem de roles externas em consultas entre servidores. #79099 (Andrey Zvonov).
- Tente usar IColumn em vez de Field em SingleValueDataGeneric. Isso corrige valores de retorno incorretos de algumas funções de agregação, como
argMax, para os tiposDynamic/Variant/JSON. #79166 (Pavel Kruglov). - Corrige a aplicação das configurações use_native_copy e allow_azure_native_copy para o Azure Blob Storage e passa a usar cópia nativa apenas quando as credenciais coincidem, resolvendo #78964. #79561 (Smita Kulkarni).
- Corrige erros lógicos relacionados ao escopo de origem desconhecida de uma coluna gerados ao verificar se essa coluna está correlacionada. Corrige #78183. Corrige #79451. #79727 (Dmitry Novik).
- Corrige resultados incorretos em grouping sets com ColumnConst e Analyzer. #79743 (Andrey Zvonov).
- Corrige a duplicação de resultados do shard local ao ler de uma tabela distribuída quando a réplica local está desatualizada. #79761 (Eduard Karacharov).
- Corrige a ordenação de NaNs com bit de sinal negativo. #79847 (Pervakov Grigorii).
- Agora, GROUP BY ALL não considera a parte GROUPING. #79915 (Yarik Briukhovetskyi).
- Corrigida a mesclagem incorreta de estados nas funções
TopK/TopKWeighted, que causava valores de erro excessivos mesmo quando a capacidade não havia se esgotado. #79939 (Joel Höner). - Passa a respeitar a configuração
readonlyno armazenamento de objetosazure_blob_storage. #79954 (Julia Kartseva). - Corrigidos resultados incorretos de consultas e falhas por falta de memória ao usar
match(column, '^…')com caracteres escapados com barra invertida. #79969 (filimonov). - Desativação do particionamento Hive para data lakes aborda parcialmente https://github.com/issues/assigned?issue=ClickHouse%7CClickHouse%7C79937. #80005 (Daniil Ivanik).
- Índices de salto com expressões lambda não podiam ser aplicados. Corrige o caso em que funções de alto nível na definição do índice correspondem exatamente à função da consulta. #80025 (Nikolai Kochetov).
- Corrige a versão dos metadados durante o ATTACH da parte na réplica que executa o comando ATTACH_PART a partir do log de replicação. #80038 (Aleksei Filatov).
- Os nomes de Executable User Defined Functions (eUDF) não são adicionados à coluna
used_functionsda tabelasystem.query_log, diferentemente de outras funções. Este PR implementa a inclusão do nome da eUDF caso ela tenha sido usada na consulta. #80073 (Kyamran). - Corrigido erro lógico no formato Arrow com LowCardinality(FixedString). #80156 (Pavel Kruglov).
- Corrigida a leitura de subcolunas no mecanismo Merge. #80158 (Pavel Kruglov).
- Corrigido um bug na comparação entre tipos numéricos em
KeyCondition. #80207 (Yarik Briukhovetskyi). - Corrige AMBIGUOUS_COLUMN_NAME quando a materialização tardia é aplicada a uma tabela com projeções. #80251 (Igor Nikonov).
- Corrige a otimização incorreta da contagem para filtros de prefixo em strings, como LIKE ‘ab_c%’, ao usar projeções implícitas. Isso corrige #80250. #80261 (Amos Bird).
- Corrige a serialização incorreta de campos numéricos aninhados como strings em documentos do MongoDB. Remove o limite máximo de profundidade dos documentos do MongoDB. #80289 (Kirill Nikiforov).
- Realiza verificações de metadados menos rigorosas para RMT no banco de dados Replicated. Fecha #80296. #80298 (Nikolay Degterinsky).
- Corrige a representação em texto de DateTime e DateTime64 para o armazenamento no Postgres. #80301 (Yakov Olkhovskiy).
- Permitir
DateTimecom fuso horário nas tabelasStripeLog. Isso fecha #44120. #80304 (Alexey Milovidov). - Desativa o push-down de filtro para o predicado com uma função não determinística quando a etapa do plano de consulta altera o número de linhas. Corrige #40273. #80329 (Nikolai Kochetov).
- Corrige possíveis erros lógicos e travamentos em projeções com subcolunas. #80333 (Pavel Kruglov).
- Corrige o erro
NOT_FOUND_COLUMN_IN_BLOCKcausado pela otimização de filter-push-down no sep lógico do JOIN quando a expressãoONnão é uma igualdade trivial. Corrige #79647 Corrige #77848. #80360 (Nikolai Kochetov). - Corrige resultados incorretos ao ler chaves em ordem inversa em tabelas particionadas. Isso corrige #79987. #80448 (Amos Bird).
- Corrigida a ordenação incorreta em tabelas com uma chave Nullable e o optimize_read_in_order habilitado. #80515 (Pervakov Grigorii).
- Corrigido o travamento do DROP de view materializada atualizável quando a view havia sido pausada usando SYSTEM STOP REPLICATED VIEW. #80543 (Michael Kolupaev).
- Corrige ‘Cannot find column’ em consulta distribuída com uma tupla constante. #80596 (Yakov Olkhovskiy).
- Corrige a função
shardNumnas tabelas Distributed comjoin_use_nulls. #80612 (János Benjamin Antal). - Corrige um resultado incorreto ao ler uma coluna que existe em um subconjunto de tabelas no engine Merge. #80643 (Pavel Kruglov).
- Corrige um possível problema no protocolo SSH (devido a travamento no replxx). #80688 (Azat Khuzhin).
- O timestamp na tabela iceberg_history agora deve estar correto. #80711 (Melvyn Peignon).
- Corrige possível falha em caso de erro no registro de dicionário (quando
CREATE DICTIONARYfalhava comCANNOT_SCHEDULE_TASK, era possível deixar um ponteiro pendente no registro de dicionários, o que depois levava a uma falha). #80714 (Azat Khuzhin). - Corrige o tratamento de globs enum com um único elemento em funções de tabela de armazenamento de objetos. #80716 (Konstantin Bogdanov).
- Corrige o tipo de resultado incorreto das funções de comparação com Tuple(Dynamic) e String, o que levava a um erro lógico. #80728 (Pavel Kruglov).
- Adiciona suporte ao tipo de dado
timestamp_ntz, que estava ausente, no Unity Catalog. Corrige #79535, corrige #79875. #80740 (alesapin). - Corrige o erro
THERE_IS_NO_COLUMNpara consultas distribuídas comIN cte. Corrige #75032. #80757 (Nikolai Kochetov). - Corrigido o problema de número excessivo de arquivos (que leva ao uso excessivo de memória) no
ORDER BYexterno. #80777 (Azat Khuzhin). - Este PR pode fechar #80742. #80783 (zoomxi).
- Corrige falha no Kafka porque
get_member_id()estava criandostd::stringa partir de NULL (provavelmente era um problema apenas quando a conexão com o broker falhava). #80793 (Azat Khuzhin). - Aguardar corretamente os consumidores antes de desligar o engine Kafka (consumidores ativos após o desligamento podem acionar várias asserções de depuração e também ler dados dos brokers em segundo plano depois que a tabela tiver sido excluída/desanexada). #80795 (Azat Khuzhin).
- Corrige
NOT_FOUND_COLUMN_IN_BLOCK, causado pela otimizaçãopredicate-push-down. Corrige #80443. #80834 (Nikolai Kochetov). - Corrige erro lógico ao resolver o curinga de asterisco (*) em função de tabela em JOIN com USING. #80894 (Vladimir Cherkasov).
- Corrige a contabilização de memória do cache de arquivos de metadados do Iceberg. #80904 (Azat Khuzhin).
- Corrige o particionamento incorreto ao usar chave de partição Nullable. #80913 (Pervakov Grigorii).
- Corrige o erro
Table does not existem consultas distribuídas com predicate pushdown (allow_push_predicate_ast_for_distributed_subqueries=1) quando a tabela de origem não existe no nó iniciador. Corrige #77281. #80915 (Nikolai Kochetov). - Corrige o erro lógico em funções aninhadas com janelas nomeadas. #80926 (Pervakov Grigorii).
- Corrigidos os extremos em colunas anuláveis e de ponto flutuante. #80970 (Pervakov Grigorii).
- Corrige possível falha ao consultar system.tables (provavelmente em situações de pressão de memória). #80976 (Azat Khuzhin).
- Corrige a renomeação atômica com TRUNCATE de arquivos cuja compressão é inferida pela extensão do arquivo. #80979 (Pablo Marcos).
- Corrigido
ErrorCodes::getName. #81032 (RinChanNOW). - Corrigido um bug em que o usuário não conseguia listar tabelas no Unity Catalog sem ter permissões para todas elas. Agora, todas as tabelas são listadas corretamente; uma tentativa de leitura de uma tabela restrita lançará uma exceção. #81044 (alesapin).
- Agora o ClickHouse ignorará erros e respostas inesperadas nos catálogos de lago de dados na consulta
SHOW TABLES. Corrige #79725. #81046 (alesapin). - Corrige o processamento de DateTime64 a partir de inteiros em JSONExtract e no processamento do tipo JSON. #81050 (Pavel Kruglov).
- A configuração date_time_input_format passa a ser refletida no cache de inferência de esquema. #81052 (Pavel Kruglov).
- Corrige falha em INSERT se a tabela tiver sofrido DROP após o início da consulta, mas antes do envio das colunas. #81053 (Azat Khuzhin).
- Corrigido o uso de valor não inicializado em quantileDeterministic. #81062 (Azat Khuzhin).
- Corrige o gerenciamento da contagem de hardlinks nas transações do disk metadatastoragefromdisk. adiciona testes. #81066 (Sema Checherinda).
- Os nomes das funções definidas pelo usuário (UDF) não são adicionados à tabela
system.query_log, ao contrário das demais funções. Este PR implementa a adição do nome da UDF a uma das duas colunasused_executable_user_defined_functionsouused_sql_user_defined_functionscaso a UDF tenha sido usada na requisição. #81101 (Kyamran). - Corrigidos erros
Too large size ... passed to allocatore possíveis travamentos em inserções via protocolo HTTP com formatos de texto (JSON,Values, …) e camposEnumomitidos. #81145 (Anton Popov). - Correção de LOGICAL_ERROR no caso de coluna esparsa em um bloco de INSERT enviado para MV não MT. #81161 (Azat Khuzhin).
- Corrigido
Unknown table expression identifieremdistributed_product_mode_local=localcom replicação cruzada. #81162 (Nikolai Kochetov). - Corrigido o armazenamento em cache incorreto do número de linhas em arquivos Parquet após a filtragem. #81184 (Michael Kolupaev).
- Corrige a configuração max_size_to_total_space do cache fs quando usada com um caminho de cache relativo. #81237 (Kseniia Sumarokova).
- Corrigido o travamento do clickhouse-local ao gerar saída de tuplas constantes ou maps no formato Parquet. #81249 (Michael Kolupaev).
- Verifique os offsets de array recebidos pela rede. #81269 (Azat Khuzhin).
- Corrige um caso específico em uma consulta que faz junções entre tabelas vazias e usa funções de janela. O bug leva a um crescimento explosivo no número de streams paralelos, o que causa OOMs. #81299 (Alexander Gololobov).
- Correções para funções Cluster de lago de dados (
deltaLakeCluster,icebergClusteretc.): (1) corrige um possível segfault emDataLakeConfigurationao usar a funçãoClustercom o analisador antigo; (2) remove atualizações duplicadas dos metadados do lago de dados (requisições extras ao armazenamento de objetos); (3) corrige a listagem redundante no armazenamento de objetos quando o formato não é especificado explicitamente (o que já havia sido feito para motores de lago de dados sem cluster). #81300 (Kseniia Sumarokova). - Faz com que a flag force_restore_data recupere metadados perdidos do Keeper. #81324 (Raúl Marín).
- Corrige erro de região no delta-kernel. Corrige #79914. #81353 (Kseniia Sumarokova).
- Desativado o JIT incorreto para divideOrNull. #81370 (Raúl Marín).
- Corrige erro de inserção quando uma tabela MergeTree tem um nome longo da coluna de partição. #81390 (hy123q).
- Incluído via backport em #81957: corrigido um possível travamento no
Aggregatorem caso de exceção durante a mesclagem. #81450 (Nikita Taranov). - Não armazene na memória o conteúdo de vários arquivos manifest. #81470 (Daniil Ivanik).
- Corrige possível travamento ao encerrar os pools em segundo plano (
background_.*pool_size). #81473 (Azat Khuzhin). - Corrige uma leitura fora dos limites no formato
Npyque ocorria ao gravar em uma tabela com o engineURL. Isso fecha #81356. #81502 (Alexey Milovidov). - Existe a possibilidade de que a interface web exiba
NaN%(problemas típicos de JavaScript). #81507 (Alexey Milovidov). - Corrigido
DatabaseReplicatedparadatabase_replicated_enforce_synchronous_settings=1. #81564 (Azat Khuzhin). - Corrigida a ordenação de tipos LowCardinality(Nullable(…)). #81583 (Pervakov Grigorii).
- O servidor não deve manter uma conexão HTTP se a solicitação não tiver sido lida completamente do socket. #81595 (Sema Checherinda).
- Faz com que subconsultas correlacionadas escalares retornem um resultado Nullable para a expressão de projeção. Corrige o caso em que uma subconsulta correlacionada produz um conjunto de resultados vazio. #81632 (Dmitry Novik).
- Correção de
Unexpected relative path for a deduplicated partduranteATTACHemReplicatedMergeTree. #81647 (Azat Khuzhin). - As configurações de consulta
use_iceberg_partition_pruningnão terão efeito para o armazenamento Iceberg, porque ele usa o contexto global em vez do contexto da consulta. Isso não é crítico, porque o valor padrão étrue. Este PR pode corrigir isso. #81673 (Han Fei). - Retroportado em #82128: corrige “Context has expired” durante operações de merge quando
dicté usado em uma expressão de TTL. #81690 (Azat Khuzhin). - Adiciona validação para a configuração do MergeTree
merge_max_block_sizepara garantir que ela não seja zero. #81693 (Bharat Nallan). - Corrige problemas no
clickhouse-localrelacionados a consultasDROP VIEWque ficavam travadas. #81705 (Bharat Nallan). - Corrige o join do StorageRedis em alguns casos. #81736 (Pervakov Grigorii).
- Corrige um travamento em
ConcurrentHashJoincomUSING ()vazio e o analisador antigo habilitado. #81754 (Nikita Taranov). - Correção no Keeper: bloqueia commits de novos logs se houver uma entrada inválida nos logs. Antes, se o líder aplicasse alguns logs incorretamente, ele continuava fazendo commit de novos logs, embora o seguidor detectasse uma divergência no digest e abortasse. #81780 (Antonio Andelic).
- Corrige o problema em que as colunas necessárias não são lidas durante o processamento de subconsulta correlacionada escalar. Corrige #81716. #81805 (Dmitry Novik).
- Alguém espalhou Kusto pelo nosso código. Limpamos tudo. Isso encerra #81643. #81885 (Alexey Milovidov).
- Em versões anteriores, o servidor retornava conteúdo excessivo para solicitações a
/js. Isso corrige #61890. #81895 (Alexey Milovidov). - Anteriormente, definições do
table engineMongoDBpodiam incluir um componente de caminho no argumentohost:port, que era ignorado silenciosamente. A integração com o MongoDB se recusava a carregar essas tabelas. Com esta correção, passamos a permitir o carregamento dessas tabelas e a ignorar o componente de caminho se oengineMongoDBtiver cinco argumentos, usando o nome do banco de dados informado nos argumentos. Observação: A correção não se aplica a tabelas recém-criadas nem a consultas com atable functionmongo, nem a fontes de dicionário e coleções nomeadas. #81942 (Vladimir Cherkasov). - Corrigida uma possível falha no
Aggregatorem caso de exceção durante o merge. #82022 (Nikita Taranov). - Correção de um erro de copiar e colar em
arraySimilarity, passando a proibir o uso de pesosUInt32eInt32. Atualização dos testes e da documentação. #82103 (Mikhail f. Shiryaev). - Corrige uma possível condição de corrida entre a thread de sugestões e a thread principal do cliente. #82233 (Azat Khuzhin).
Melhorias em compilação/testes/empacotamento
- Use
postgres16.9. #81437 (Konstantin Bogdanov). - Use
openssl3.2.4. #81438 (Konstantin Bogdanov). - Usa
abseil-cpp2025-01-27. #81440 (Konstantin Bogdanov). - Usa
mongo-c-driver1.30.4. #81449 (Konstantin Bogdanov). - Use
krb51.21.3-final. #81453 (Konstantin Bogdanov). - Use
orc2.1.2. #81455 (Konstantin Bogdanov). - Use
grpc1.73.0. #81629 (Konstantin Bogdanov). - Use
delta-kernel-rsv0.12.1. #81707 (Konstantin Bogdanov). - Atualizado
c-aresparav1.34.5. #81159 (Konstantin Bogdanov). - Atualização do
curlpara a versão 8.14 para corrigir as CVE-2025-5025 e CVE-2025-4947. #81171 (larryluogit). - Atualize o
libarchivepara a versão 3.7.9 para corrigir: CVE-2024-20696 CVE-2025-25724 CVE-2024-48958 CVE-2024-57970 CVE-2025-1632 CVE-2024-48957 CVE-2024-48615. #81174 (larryluogit). - Atualize o
libxml2para 2.14.3. #81187 (larryluogit). - Evite copiar o código-fonte vendorizado do Rust para
CARGO_HOME. #79560 (Konstantin Bogdanov). - Remova a dependência da biblioteca Sentry, substituindo-a pelo nosso próprio endpoint. #80236 (Alexey Milovidov).
- Atualizadas as dependências do Python nas imagens de CI para resolver alertas do Dependabot. #80658 (Raúl Marín).
- Tentar novamente ler a flag de parada de DDL replicado do Keeper na inicialização para tornar os testes mais robustos quando a injeção de falhas estiver habilitada no Keeper. #80964 (Alexander Gololobov).
- Use HTTPS para a URL do repositório do Ubuntu. #81016 (Raúl Marín).
- Atualiza as dependências de Python nas imagens de teste. #81042 (dependabot[bot]).
- Adiciona
flake.nixpara compilações com Nix. #81463 (Konstantin Bogdanov). - Corrige o
delta-kernel-rs, que exigia acesso à rede durante a compilação. Fecha #80609. #81602 (Konstantin Bogdanov). Leia o artigo A Year of Rust in ClickHouse.
Lançamento do ClickHouse 25.5, 2025-05-22
Alteração incompatível com versões anteriores
- A função
geoToH3agora aceita a entrada na ordem (lat, lon, res) (o que é comum em outras funções geométricas). Os usuários que desejarem manter a ordem de resultado anterior (lon, lat, res) podem definir a configuraçãogeotoh3_argument_order = 'lon_lat'. #78852 (Pratima Patel). - Adiciona a configuração de cache do sistema de arquivos
allow_dynamic_cache_resize, com valor padrãofalse, para permitir o redimensionamento dinâmico do cache do sistema de arquivos. Motivo: em certos ambientes (ClickHouse Cloud), todos os eventos de scaling ocorrem por meio da reinicialização do processo, e queremos que esse recurso fique explicitamente desabilitado para ter mais controle sobre o comportamento, além de servir como medida de segurança. Este PR está marcado como incompatível com versões anteriores porque, em versões mais antigas, o redimensionamento dinâmico do cache funcionava por padrão sem uma configuração específica. #79148 (Kseniia Sumarokova). - Removido o suporte aos tipos legados de índice
annoyeusearch. Ambos são stubs há muito tempo, ou seja, qualquer tentativa de usar os índices legados retornava um erro de qualquer forma. Se você ainda tiver índicesannoyeusearch, remova-os. #79802 (Robert Schulze). - Remove a configuração do servidor
format_alter_commands_with_parentheses. A configuração foi introduzida e desabilitada por padrão na versão 24.2. Ela foi habilitada por padrão na versão 25.2. Como não há versões LTS sem suporte ao novo formato, podemos remover a configuração. #79970 (János Benjamin Antal). - Habilita por padrão a implementação
delta-kernel-rsdo armazenamentoDeltaLake. #79541 (Kseniia Sumarokova). - Se a leitura de um
URLenvolver vários redirecionamentos, a configuraçãoenable_url_encodingserá aplicada corretamente em todos os redirecionamentos da cadeia. #79563 (Shankar Iyer). O valor padrão deenble_url_encodingagora éfalse. #80088 (Shankar Iyer).
Novo recurso
- Adicionado suporte a subconsultas correlacionadas escalares na cláusula WHERE. Fecha #6697. #79600 (Dmitry Novik). Adicionado suporte a subconsultas correlacionadas na lista de projeção em casos simples. #79925 (Dmitry Novik). #76078 (Dmitry Novik). Agora cobre 100% da suíte de testes TPC-H.
- A busca vetorial usando o índice de similaridade vetorial agora está em beta (antes, experimental). #80164 (Robert Schulze).
- Suporte a tipos geoespaciais no formato
Parquet. Isso encerra #75317. #79777 (scanhex12). - Novas funções
sparseGrams,sparseGramsHashes,sparseGramsHashesUTF8,sparseGramsUTF8para o cálculo de “n-grams esparsos” — um algoritmo robusto para extrair substrings para indexação e busca. #79517 (scanhex12). clickhouse-local(e seu alias abreviado,ch) agora usa umFROM tableimplícito quando há dados de entrada para processar. Isso corrige #65023. A inferência de formato também foi habilitada no clickhouse-local se--input-formatnão for especificado e ele estiver processando um arquivo comum. #79085 (Alexey Milovidov).- Adicionadas as funções
stringBytesUniqestringBytesEntropypara identificar dados possivelmente aleatórios ou criptografados. #79350 (Sachin Kumar Singh). - Adicionadas funções de codificação e decodificação em base32. #79809 (Joanna Hulboj).
- Adiciona as funções
getServerSettingegetMergeTreeSetting. Fecha #78318. #78439 (NamNguyenHoai). - Adicionada a nova configuração
iceberg_enable_version_hintpara usar o arquivoversion-hint.text. #78594 (Arnaud Briche). - Passa a permitir truncar tabelas específicas de um banco de dados, filtradas pela palavra-chave
LIKE. #78597 (Yarik Briukhovetskyi). - Suporte à coluna virtual
_part_starting_offsetem tabelas da famíliaMergeTree. Essa coluna representa a contagem cumulativa de linhas de todas as partes anteriores, calculada em tempo de consulta com base na lista atual de partes. Os valores cumulativos são mantidos durante toda a execução da consulta e continuam válidos mesmo após a poda de partes. A lógica interna relacionada foi refatorada para dar suporte a esse comportamento. #79417 (Amos Bird). - Adiciona as funções
divideOrNull,moduloOrNull,intDivOrNull,positiveModuloOrNullpara retornar NULL quando o argumento à direita for zero. #78276 (kevinyhzou). - A busca vetorial do ClickHouse agora oferece suporte à pré-filtragem e à pós-filtragem, além de fornecer configurações relacionadas para um controle mais preciso. (issue #78161). #79854 (Shankar Iyer).
- Adicionadas as funções
icebergHasheicebergBucket. Suporte ao pruning de arquivos de dados em tabelasIcebergparticionadas com atransformação bucket. #79262 (Daniil Ivanik).
Funcionalidade experimental
- Novos tipos de dados
Time/Time64:Time(HHH:MM:SS) eTime64(HHH:MM:SS.<fractional>), além de algumas funções básicas de cast e funções para interagir com outros tipos de dados. Além disso, o nome da função existente foi alterado de toTime para toTimeWithFixedDate, porque a função toTime é necessária para a função de cast. #75735 (Yarik Briukhovetskyi). 72459). - Catálogo do metastore do Hive para o datalake Iceberg. #77677 (scanhex12).
- Índices do tipo
full_textforam renomeados paragin. Isso segue a terminologia mais familiar do PostgreSQL e de outros bancos de dados. Os índices existentes do tipofull_textcontinuam podendo ser carregados, mas lançarão uma exceção (sugerindo índicesgin) quando se tentar usá-los em buscas. #79024 (Robert Schulze).
Melhorias de desempenho
- Altera o formato de parte compacta para salvar marcas de cada subfluxo, permitindo a leitura de subcolunas individuais. O formato Compact antigo continua sendo compatível com leituras e pode ser habilitado para gravações usando a configuração do MergeTree
write_marks_for_substreams_in_compact_parts. Ele vem desabilitado por padrão para tornar as atualizações mais seguras, pois altera o armazenamento das partes compactas. Será habilitado por padrão em um dos próximos lançamentos. #77940 (Pavel Kruglov). - Permite mover condições com subcolunas para prewhere. #79489 (Pavel Kruglov).
- Acelera os índices secundários ao avaliar suas expressões em vários grânulos de uma só vez. #64109 (Alexey Milovidov).
- Habilita
compile_expressions(compilador JIT para fragmentos de expressões comuns) por padrão. Isso fecha #51264, #56386 e #66486. #79907 (Alexey Milovidov). - Nova configuração introduzida:
use_skip_indexes_in_final_exact_mode. Se uma consulta em uma tabelaReplacingMergeTreetiver a cláusula FINAL, ler apenas intervalos da tabela com base em índices de salto pode produzir resultados incorretos. Essa configuração pode garantir o retorno de resultados corretos ao varrer partes mais recentes que se sobrepõem aos intervalos de chave primária retornados pelo índice de salto. Defina como 0 para desabilitar e 1 para habilitar. #78350 (Shankar Iyer). - As funções de tabela de cluster para armazenamento de objetos (por exemplo,
s3Cluster) agora atribuirão arquivos às réplicas para leitura com base em hash consistente, para melhorar a localidade do cache. #77326 (Andrej Hoos). - Melhora o desempenho de
S3Queue/AzureQueueao permitirINSERTs de dados em paralelo (isso pode ser habilitado com a configuração de queueparallel_inserts=true). Anteriormente,S3Queue/AzureQueuesó conseguiam executar em paralelo a primeira parte do pipeline (download e parsing); oINSERTera executado em uma única thread. E osINSERTs quase sempre são o gargalo. Agora, a escalabilidade será quase linear comprocessing_threads_num. #77671 (Azat Khuzhin).max_processed_files_before_commitmais equilibrado emS3Queue/AzureQueue. #79363 (Azat Khuzhin). - Introduzido um limiar (controlado pela configuração
parallel_hash_join_threshold) para voltar ao algoritmohashquando o tamanho da tabela da direita estiver abaixo desse limiar. #76185 (Nikita Taranov). - Agora usamos o número de réplicas para determinar o tamanho da tarefa de leitura quando as réplicas paralelas estão ativadas. Isso proporciona uma melhor distribuição do trabalho entre as réplicas quando o volume de dados a ser lido não é muito grande. #78695 (Nikita Taranov).
- Permite a mesclagem paralela dos estados
uniqExactna etapa final da agregação distribuída. #78703 (Nikita Taranov). - Corrige uma possível degradação de desempenho na mesclagem paralela de estados
uniqExactem agregações por chave. #78724 (Nikita Taranov). - Redução do número de chamadas à API List Blobs no Azure Storage. #78860 (Julia Kartseva).
- Corrige o desempenho do INSERT SELECT distribuído com réplicas paralelas. #79441 (Azat Khuzhin).
- Evita que
LogSeriesLimiterfaça a limpeza a cada instanciação, evitando contenção por bloqueios e regressões de desempenho em cenários de alta concorrência. #79864 (filimonov). - Acelera consultas com a otimização de contagem trivial. #79945 (Raúl Marín).
- Melhoria na inlining de algumas operações com
Decimal. #79999 (Konstantin Bogdanov). - Defina
input_format_parquet_bloom_filter_push_downcomo true por padrão. Além disso, corrija um erro no histórico de alterações das configurações. #80058 (Alexey Milovidov). - Otimizadas as mutações
ALTER ... DELETEpara partes em que todas as linhas devem ser excluídas. Agora, nesses casos, uma parte vazia é criada no lugar da original, sem executar uma mutação. #79307 (Anton Popov). - Evita cópias extras do block durante a inserção em compact part, quando possível. #79536 (Pavel Kruglov).
- Adiciona a configuração
input_format_max_block_size_bytespara limitar, em bytes, os blocos criados nos formatos de entrada. Isso pode ajudar a evitar o uso excessivo de memória durante a importação de dados quando as linhas contêm valores grandes. #79495 (Pavel Kruglov). - Remova as páginas de guarda de threads e async_socket_for_remote/use_hedge_requests. Altere o método de alocação em
FiberStackdemmapparaaligned_alloc, já que isso divide as VMAs e, sob carga intensa, o limite devm.max_map_countpode ser atingido. #79147 (Sema Checherinda). - Materialização tardia com réplicas paralelas. #79401 (Igor Nikonov).
Aprimoramento
- Adicionada a capacidade de aplicar exclusões leves em tempo real (com as configurações
lightweight_deletes_sync = 0,apply_mutations_on_fly = 1. #79281 (Anton Popov). - Se os dados no formato Pretty forem exibidos no terminal e um bloco subsequente tiver as mesmas larguras de coluna, ele poderá continuar a partir do bloco anterior, sendo unido a ele ao mover o cursor para cima. Isso resolve #79333. O recurso é controlado pela nova configuração
output_format_pretty_glue_chunks. #79339 (Alexey Milovidov). - Estende a função
isIPAddressInRangeaos tipos de dadosString,IPv4,IPv6,Nullable(String),Nullable(IPv4)eNullable(IPv6). #78364 (YjyJeff). - Permite alterar dinamicamente as configurações do pool de conexões do engine
PostgreSQL. #78414 (Samay Sharma). - Permite especificar
_part_offsetem uma projeção normal. Este é o primeiro passo para criar um índice de projeção. Pode ser usado com #58224 e pode ajudar a melhorar #63207. #78429 (Amos Bird). - Adicionadas novas colunas (
create_queryesource) emsystem.named_collections. Fecha #78179. #78582 (MikhailBurdukov). - Adicionado um novo campo
conditionà tabela de sistemasystem.query_condition_cache. Ele armazena a condição em texto simples cujo hash é usado como chave no cache de condições de consulta. #78671 (Robert Schulze). - Agora é possível criar índices de similaridade vetorial em colunas
BFloat16. #78850 (Robert Schulze). - Suporte a timestamps Unix com parte fracionária na análise
DateTime64em modo best effort. #78908 (Pavel Kruglov). - Na implementação delta-kernel do armazenamento
DeltaLake, correção no modo de mapeamento de coluna e adição de testes para evolução de schema. #78921 (Kseniia Sumarokova). - Melhora a inserção na coluna
Variantno formato Values com uma conversão de valores mais eficiente. #78923 (Pavel Kruglov). - A função
tokensfoi estendida para aceitar um argumento adicional “tokenizer”, além de outros argumentos específicos do tokenizer. #79001 (Elmi Ahmadov). - A instrução
SHOW CLUSTERagora expande macros (se houver) no seu argumento. #79006 (arf42). - As funções hash agora oferecem suporte a
NULLs em arrays, tuplas e maps. (issues #48365 e #48623). #79008 (Michael Kolupaev). - Atualizado o cctz para 2025a. #79043 (Raúl Marín).
- Altere o processamento padrão de stderr das UDFs para “log_last”. Isso melhora a usabilidade. #79066 (Alexey Milovidov).
- Adicionar a possibilidade de desfazer ações nas abas na interface web. Isso fecha #71284. #79084 (Alexey Milovidov).
- Removidas as configurações durante
recoverLostReplica, da mesma forma que foi feito em: https://github.com/ClickHouse/ClickHouse/pull/78637. #79113 (Nikita Mikhaylov). - Adiciona eventos de perfil:
ParquetReadRowGroupseParquetPrunedRowGroupspara analisar a poda de índice do Parquet. #79180 (flynn). - Suporte a
ALTERem banco de dados no cluster. #79242 (Tuan Pham Anh). - Ignorar explicitamente as execuções perdidas da coleta de estatísticas para QueryMetricLog; caso contrário, o log levará muito tempo para alcançar o horário atual. #79257 (Mikhail Artemenko).
- Algumas pequenas otimizações na leitura de formatos baseados em
Arrow. #79308 (Bharat Nallan). - A configuração
allow_archive_path_syntaxfoi marcada como experimental por engano. Adiciona um teste para evitar que configurações experimentais sejam habilitadas por padrão. #79320 (Alexey Milovidov). - Tornou as configurações do page cache ajustáveis por consulta. Isso é necessário para experimentação mais rápida e para possibilitar o ajuste fino de consultas de alta vazão e baixa latência. #79337 (Alexey Milovidov).
- Não exiba dicas para números nos formatos Pretty em números que se pareçam com a maioria dos hashes de 64 bits. Isso fecha #79334. #79338 (Alexey Milovidov).
- As cores dos gráficos nos dashboards avançados serão calculadas com base no hash da consulta correspondente. Isso facilita lembrar e localizar um gráfico ao navegar pelo dashboard. #79341 (Alexey Milovidov).
- Adicionada a métrica assíncrona
FilesystemCacheCapacity- capacidade total no filesystem virtualcache. Isso é útil para o monitoramento global da infraestrutura. #79348 (Alexey Milovidov). - Otimize o acesso a system.parts (o tamanho de colunas/índices é lido somente quando solicitado). #79352 (Azat Khuzhin).
- Calcula os campos relevantes para a consulta
'SHOW CLUSTER <name>'em vez de todos os campos. #79368 (Tuan Pham Anh). - Permite definir configurações de armazenamento para
DatabaseCatalog. #79407 (Kseniia Sumarokova). - Adicionado suporte a armazenamento local no
DeltaLake. #79416 (Kseniia Sumarokova). - Adicionada uma configuração em nível de consulta para habilitar o delta-kernel-rs:
allow_experimental_delta_kernel_rs. #79418 (Kseniia Sumarokova). - Corrige um possível loop infinito ao listar blobs do armazenamento de blobs do Azure/S3. #79425 (Alexander Gololobov).
- Adicionada a configuração
max_size_ratio_to_total_spacepara o cache do sistema de arquivos. #79460 (Kseniia Sumarokova). - No
clickhouse-benchmark, reconfigure a opçãoreconnectpara aceitar 0, 1 ou N como valores para reconexão, conforme o caso. #79465 (Sachin Kumar Singh). - Permite
ALTER TABLE ... MOVE|REPLACE PARTITIONpara tabelas em discosplain_rewritablediferentes. #79566 (Julia Kartseva). - O índice de similaridade vetorial agora também é usado quando o vetor de referência é do tipo
Array(BFloat16). #79745 (Shankar Iyer). - Adicionar last_error_message, last_error_trace e query_id à tabela system.error_log. Issue relacionada #75816. #79836 (Andrei Tinikov).
- Ativado o envio de relatórios de falhas por padrão. Isso pode ser desativado no arquivo de configuração do servidor. #79838 (Alexey Milovidov).
- A tabela de sistema
system.functionsagora mostra em qual versão do ClickHouse as funções foram introduzidas. #79839 (Robert Schulze). - Adicionada a configuração
access_control_improvements.enable_user_name_access_type. Essa configuração permite ativar/desativar grants precisos para usuários/funções, introduzida em https://github.com/ClickHouse/ClickHouse/pull/72246. Talvez seja recomendável desativar essa configuração caso você tenha um cluster com réplicas anteriores à versão 25.1. #79842 (pufit). - A implementação adequada do método
ASTSelectWithUnionQuery::clone()agora também leva em consideração o campois_normalized. Isso pode ajudar a resolver #77569. #79909 (Nikita Mikhaylov). - Corrige a formatação inconsistente de determinadas consultas com o operador EXCEPT. Se o lado esquerdo do operador EXCEPT terminar com
*, a consulta formatada perde os parênteses e passa a ser interpretada como um*com o modificadorEXCEPT. Essas consultas são encontradas pelo fuzzer e dificilmente ocorrerão na prática. Isso fecha #79950. #79952 (Alexey Milovidov). - Pequena melhoria no parsing do tipo
JSONusando o cache da ordem de desserialização de variantes. #79984 (Pavel Kruglov). - Adiciona a configuração
s3_slow_all_threads_after_network_error. #80035 (Vitaly Baranov). - O nível de logging das partes selecionadas para merge estava incorreto (Information). Fecha #80061. #80062 (Alexey Milovidov).
- trace-visualizer: adiciona runtime/share em tooltips e mensagens de status. #79040 (Sergei Trifonov).
- trace-visualizer: carregar dados do servidor ClickHouse. #79042 (Sergei Trifonov).
- Adicionar métricas para merges com falha. #79228 (Miсhael Stetsyuk).
clickhouse-benchmarkexibirá a porcentagem com base no número máximo de iterações, se especificado. #79346 (Alexey Milovidov).- Adiciona um visualizador para a tabela system.parts. #79437 (Sergei Trifonov).
- Adicionada ferramenta para análise da latência de consultas. #79978 (Sergei Trifonov).
Correção de bug (mau funcionamento perceptível ao usuário em um lançamento estável oficial)
- Corrige renomeações de colunas ausentes em uma parte de dados. #76346 (Anton Popov).
- Uma visão materializada pode ser iniciada tarde demais, por exemplo, depois da tabela Kafka que a alimenta por streaming. #72123 (Ilya Golshtein).
- Corrige a reescrita de consultas
SELECTdurante a criação deVIEWcom o analisador habilitado. Fecha #75956. #76356 (Dmitry Novik). - Corrigida a aplicação de
async_insertpelo servidor (viaapply_settings_from_server) (antes, isso levava a errosUnknown packet 11 from serverno cliente). #77578 (Azat Khuzhin). - Corrigido um problema em que a view materializada atualizável no banco de dados Replicated não funcionava em réplicas adicionadas recentemente. #77774 (Michael Kolupaev).
- Corrigido problema em views materializadas atualizáveis que comprometia os backups. #77893 (Michael Kolupaev).
- Corrigido um erro lógico antigo que era acionado em
transform. #78247 (Yarik Briukhovetskyi). - Corrige alguns casos em que o índice secundário não era aplicado com o analisador. Corrige #65607, corrige #69373. #78485 (Nikolai Kochetov).
- Corrigido o despejo de eventos de perfil (
NetworkSendElapsedMicroseconds/NetworkSendBytes) para o protocolo HTTP com compressão habilitada (o erro não deve ser maior que o tamanho do buffer, geralmente em torno de 1MiB). #78516 (Azat Khuzhin). - Corrige o analisador, que produzia LOGICAL_ERROR quando JOIN … USING envolvia uma coluna ALIAS; agora deve gerar o erro adequado. #78618 (Yakov Olkhovskiy).
- Corrigido o analisador: CREATE VIEW … ON CLUSTER falha quando o SELECT contém argumentos posicionais. #78663 (Yakov Olkhovskiy).
- Corrigido o erro
Block structure mismatchno caso deINSERT SELECTem uma função de tabela com inferência de esquema, se oSELECTtiver subconsultas escalares. #78677 (Pervakov Grigorii). - Correção no analisador: com prefer_global_in_and_join=1, em uma tabela Distributed, a função
inna consulta SELECT deve ser substituída porglobalIn. #78749 (Yakov Olkhovskiy). - Corrigidos vários tipos de consultas
SELECTque leem de tabelas com engineMongoDBou da função de tabelamongodb: consultas com conversão implícita de valor constante na cláusulaWHERE(por exemplo,WHERE datetime = '2025-03-10 00:00:00') ; consultas comLIMITeGROUP BY. Antes, elas podiam retornar resultados incorretos. #78777 (Anton Popov). - Corrige a conversão entre diferentes tipos JSON. Agora ela é feita por meio de um CAST simples, com conversão para String e de volta. É menos eficaz, mas 100% precisa. #78807 (Pavel Kruglov).
- Corrigido erro lógico na conversão do tipo Dynamic para Interval. #78813 (Pavel Kruglov).
- Corrigida a reversão da coluna em caso de erro de parsing de JSON. #78836 (Pavel Kruglov).
- Corrige o erro ‘bad cast’ ao usar join com uma coluna de alias constante. #78848 (Vladimir Cherkasov).
- Não permitir o uso de
prewhereem visão materializada em colunas com tipos diferentes na visão e na tabela de destino. #78889 (Pavel Kruglov). - Corrigido erro lógico no parsing de dados binários inválidos de uma coluna Variant. #78982 (Pavel Kruglov).
- Gera uma exceção quando o tamanho do lote do Parquet é definido como 0. Anteriormente, quando output_format_parquet_batch_size = 0, o ClickHouse travava. Agora, esse comportamento foi corrigido. #78991 (daryawessely).
- Corrige a desserialização dos discriminadores de Variant no formato basic em partes compactas. Foi introduzido em https://github.com/ClickHouse/ClickHouse/pull/55518. #79000 (Pavel Kruglov).
- Dicionários do tipo
complex_key_ssd_cacheagora rejeitam os parâmetrosblock_sizeewrite_buffer_sizequando são zero ou negativos (problema #78314). #79028 (Elmi Ahmadov). - Evite usar Field em colunas não agregadas no SummingMergeTree. Isso pode causar erros inesperados com os tipos Dynamic/Variant usados no SummingMergeTree. #79051 (Pavel Kruglov).
- Corrige a leitura de visão materializada com tabela de destino Distributed e cabeçalho diferente no analyzer. #79059 (Pavel Kruglov).
- Corrige um bug em que
arrayUnion()retornava valores extras (incorretos) em tabelas com inserções em lote. Corrige #75057. #79079 (Peter Nguyen). - Corrigida falha de segmentação em
OpenSSLInitializer. Fecha #79092. #79097 (Konstantin Bogdanov). - Sempre defina um prefixo para o ListObject do S3. #79114 (Azat Khuzhin).
- Corrige um bug em que arrayUnion() retornava valores extras (incorretos) em tabelas com inserts em lote. Corrige #79157. #79158 (Peter Nguyen).
- Corrigido erro lógico após o pushdown do filtro. #79164 (Pervakov Grigorii).
- Corrigido o engine de tabela DeltaLake ao usar a implementação delta-kernel com endpoints baseados em HTTP; corrigido o NOSIGN. Fecha #78124. #79203 (Kseniia Sumarokova).
- Correção no Keeper: evitar acionar watches em requisições múltiplas com falha. #79247 (Antonio Andelic).
- Proibir os tipos Dynamic e JSON em
IN. Com a implementação atual deIN, isso pode levar a resultados incorretos. O suporte adequado a esses tipos emINé complexo e pode ser feito no futuro. #79282 (Pavel Kruglov). - Corrige a verificação de caminhos duplicados durante o parsing do tipo JSON. #79317 (Pavel Kruglov).
- Corrige problemas de conexão com o SecureStreamSocket. #79383 (Konstantin Bogdanov).
- Corrigido o carregamento de discos plain_rewritable que contêm dados. #79439 (Julia Kartseva).
- Corrige travamento na descoberta dinâmica de subcolunas em partes Wide do MergeTree. #79466 (Pavel Kruglov).
- Verifique o comprimento do nome da tabela apenas nas consultas CREATE iniciais. Não faça essa verificação para consultas CREATE secundárias, a fim de evitar problemas de compatibilidade com versões anteriores. #79488 (Miсhael Stetsyuk).
- Corrigido o erro
Block structure mismatchem vários casos envolvendo tabelas com colunas esparsas. #79491 (Anton Popov). - Corrigidos dois casos de “Logical Error: Can’t set alias of * of Asterisk on alias”. #79505 (Raúl Marín).
- Corrige o uso de caminhos incorretos ao renomear um banco de dados Atomic. #79569 (Tuan Pham Anh).
- Corrigido o ORDER BY usando coluna JSON com outras colunas. #79591 (Pavel Kruglov).
- Corrigida a duplicação de resultados ao ler de um servidor remoto com
use_hedged_requestseallow_experimental_parallel_reading_from_replicasdesabilitados. #79599 (Eduard Karacharov). - Corrige um travamento na implementação do delta-kernel ao usar o Unity Catalog. #79677 (Kseniia Sumarokova).
- Corrige a resolução de macros para clusters com autodescoberta. #79696 (Anton Ivashkin).
- Lidar adequadamente com
page_cache_limitsconfigurado incorretamente. #79805 (Bharat Nallan). - Corrige o resultado da função SQL
formatDateTimese um formatador de tamanho variável (por exemplo,%W, ou seja, o dia da semanaMondayTuesdayetc.) for seguido por um formatador composto (um formatador que imprime vários componentes de uma só vez, por exemplo,%D, ou seja, a data americana05/04/25). #79835 (Robert Schulze). - IcebergS3 oferece suporte à otimização de contagem, mas o IcebergS3Cluster não. Como resultado, o valor retornado por count() no modo cluster pode ser um múltiplo do número de réplicas. #79844 (wxybear).
- Corrige o erro AMBIGUOUS_COLUMN_NAME com materialização preguiçosa quando nenhuma coluna é usada na execução da consulta antes da projeção. Exemplo: SELECT * FROM t ORDER BY rand() LIMIT 5. #79926 (Igor Nikonov).
- Ocultar a senha na consulta
CREATE DATABASE datalake ENGINE = DataLakeCatalog(\'http://catalog:8181\', \'admin\', \'password\'). #79941 (Han Fei). - Permite especificar um alias em JOIN USING. Especifique esse alias se a coluna tiver sido renomeada (por exemplo, por causa de ARRAY JOIN). Corrige #73707. #79942 (Nikolai Kochetov).
- Permitir que visões materializadas com UNION funcionem corretamente em novas réplicas. #80037 (Samay Sharma).
- O especificador de formato
%ena função SQLparseDateTimeagora reconhece dias com um único dígito (por exemplo,3), enquanto antes exigia preenchimento com espaço (por exemplo,3). Isso torna seu comportamento compatível com o MySQL. Para manter o comportamento anterior, defina a configuraçãoparsedatetime_e_requires_space_padding = 1. (problema #78243). #80057 (Robert Schulze). - Corrige os avisos
Cannot find 'kernel' in '[...]/memory.stat'no log do ClickHouse (issue #77410). #80129 (Robert Schulze). - Verifica o tamanho da pilha em FunctionComparison para evitar falha por estouro de pilha. #78208 (Julia Kartseva).
- Corrige condição de corrida durante
SELECTemsystem.workloads. #78743 (Sergei Trifonov). - Correção: materialização tardia em consultas distribuídas. #78815 (Igor Nikonov).
- Corrigida a conversão de
Array(Bool)paraArray(FixedString). #78863 (Nikita Taranov). - Simplificar a seleção da versão do Parquet. #78818 (Michael Kolupaev).
- Corrige a automesclagem do
ReservoirSampler. #79031 (Nikita Taranov). - Corrigido o armazenamento da tabela de destino da inserção no contexto do cliente. #79046 (Pervakov Grigorii).
- Corrige a ordem de destruição dos membros de dados de
AggregatingSortedAlgorithmeSummingSortedAlgorithm. #79056 (Nikita Taranov). enable_user_name_access_typenão deve afetar o tipo de acessoDEFINER. #80026 (pufit).- Consulta ao banco de dados system pode travar se os metadados do banco de dados system estiverem no Keeper. #79304 (Mikhail Artemenko).
Melhoria em Compilação/Testes/Empacotamento
- Permite reutilizar o binário
chcachejá compilado, em vez de recompilá-lo sempre. #78851 (János Benjamin Antal). - Adiciona espera por pausa do NATS. #78987 (Dmitry Novikov).
- Corrige a publicação incorreta de compilação ARM como amd64compat. #79122 (Alexander Gololobov).
- Usa código assembly gerado antecipadamente para o OpenSSL. #79386 (Konstantin Bogdanov).
- Correções para permitir a compilação com
clang20. #79588 (Konstantin Bogdanov). chcache: suporte a cache em Rust. #78691 (Konstantin Bogdanov).- Adiciona informações de unwind para arquivos assembly do
zstd. #79288 (Michael Kolupaev).
Lançamento do ClickHouse 25.4, 2025-04-22
Alteração incompatível com versões anteriores
- Verifica se todas as colunas de uma visão materializada correspondem à tabela de destino quando
allow_materialized_view_with_bad_selectéfalse. #74481 (Christoph Wurm). - Corrige casos em que
dateTruncé usado com argumentos Date/DateTime negativos. #77622 (Yarik Briukhovetskyi). - A integração legada do
MongoDBfoi removida. A configuração do servidoruse_legacy_mongodb_integrationtornou-se obsoleta e não tem mais efeito. #77895 (Robert Schulze). - Aprimora a validação de
SummingMergeTreepara ignorar a agregação em colunas usadas como chaves de partição ou de ordenação. #78022 (Pervakov Grigorii).
Novo recurso
- Adicionado o escalonamento de slots de CPU para cargas de trabalho; consulte a documentação para obter mais detalhes. #77595 (Sergei Trifonov).
clickhouse-localmanterá seus bancos de dados após a reinicialização se você especificar o argumento de linha de comando--path. Isso corrige #50647. Isso corrige #49947. #71722 (Alexey Milovidov).- Rejeita consultas quando o servidor está sobrecarregado. A decisão é tomada com base na razão entre o tempo de espera (
OSCPUWaitMicroseconds) e o tempo de processamento (OSCPUVirtualTimeMicroseconds). A consulta é rejeitada com certa probabilidade quando essa razão fica entremin_os_cpu_wait_time_ratio_to_throwemax_os_cpu_wait_time_ratio_to_throw(essas são configurações no nível da consulta). #63206 (Alexey Katsman). - Time travel no
Iceberg: adiciona uma configuração para consultar tabelasIcebergem um timestamp específico. #71072 (Brett Hoerner). #77439 (Daniil Ivanik). - Um cache em memória para metadados do
Iceberg, que armazena arquivos de manifesto/lista de manifestos emetadata.jsonpara acelerar as consultas. #77156 (Han Fei). - Suporte ao mecanismo de tabela
DeltaLakepara Azure Blob Storage. Corrige #68043. #74541 (Smita Kulkarni). - Adicionado um cache em memória para índices de similaridade vetorial desserializados. Isso deve acelerar consultas repetidas de busca aproximada de vizinhos mais próximos (ANN). O tamanho do novo cache é controlado pelas configurações do servidor
vector_similarity_index_cache_sizeevector_similarity_index_cache_max_entries. Este recurso substitui a funcionalidade de cache do índice de skipping de lançamentos anteriores. #77905 (Shankar Iyer). - Adiciona suporte à poda de partições no DeltaLake. #78486 (Kseniia Sumarokova).
- Suporte à atualização em segundo plano em tabelas
MergeTreesomente leitura, o que permite consultar tabelas atualizáveis com um número infinito de leitores distribuídos (lago de dados nativo do ClickHouse). #76467 (Alexey Milovidov). - Suporte ao uso de discos personalizados para armazenar arquivos de metadados de bancos de dados. Atualmente, isso só pode ser configurado no nível global do servidor. #77365 (Tuan Pham Anh).
- Suporte para ALTER TABLE … ATTACH|DETACH|MOVE|REPLACE PARTITION no disco plain_rewritable. #77406 (Julia Kartseva).
- Adiciona configurações de tabela para
SASLe credenciais ao engine de tabelaKafka. Isso permite configurar a autenticação baseada em SASL para Kafka e sistemas compatíveis com Kafka diretamente na instrução CREATE TABLE, em vez de precisar usar arquivos de configuração ou coleções nomeadas. #78810 (Christoph Wurm). - Permite definir
default_compression_codecpara tabelas MergeTree: ele é usado quando a consulta CREATE não define explicitamente um codec para as colunas especificadas. Isso resolve #42005. #66394 (gvoelfin). - Adiciona a configuração
bind_hostà configuração de clusters para que o ClickHouse possa usar uma rede específica em conexões distribuídas. #74741 (Todd Yocum). - Adiciona uma nova coluna,
parametrized_view_parameters, emsystem.tables. Fecha https://github.com/clickhouse/clickhouse/issues/66756. #75112 (NamNguyenHoai). - Permite alterar um comentário de banco de dados. Fecha #73351 ### Item de documentação para alterações voltadas ao usuário. #75622 (NamNguyenHoai).
- Suporte à autenticação
SCRAM-SHA-256no protocolo de compatibilidade do PostgreSQL. #76839 (scanhex12). - Adicionadas as funções
arrayLevenshteinDistance,arrayLevenshteinDistanceWeightedearraySimilarity. #77187 (Mikhail f. Shiryaev). - A configuração
parallel_distributed_insert_selectpassa a surtir efeito emINSERT SELECTparaReplicatedMergeTree(anteriormente, exigia tabelasDistributed). #78041 (Igor Nikonov). - Introduz a função
toInterval. Essa função aceita 2 argumentos (value e unit) e converte o valor em um tipoIntervalespecífico. #78723 (Andrew Davis). - Adiciona várias formas práticas de resolver o arquivo raiz
metadata.jsonem uma função de tabela e no engine Iceberg. Fecha #78455. #78475 (Daniil Ivanik). - Suporte a autenticação por senha no protocolo SSH no ClickHouse. #78586 (Nikita Mikhaylov).
Funcionalidade experimental
- Suporte a subconsultas correlacionadas como argumento da expressão
EXISTSna cláusulaWHERE. Fecha #72459. #76078 (Dmitry Novik). - Adicionadas as funções
sparseGramsesparseGramsHashes, com versões ASCII e UTF8. Autor: scanhex12. #78176 (Pervakov Grigorii). Não as use: a implementação mudará nas próximas versões.
Melhoria de desempenho
- Otimize o desempenho com colunas lazy, que leem os dados após ORDER BY e LIMIT. #55518 (Xiaozhe Yu).
- O cache de condições de consulta foi habilitado por padrão. #79080 (Alexey Milovidov).
- Acelera a geração do resultado de JOIN ao desvirtualizar chamadas para
col->insertFrom(). #77350 (Alexander Gololobov). - Mescla as condições de igualdade da etapa de filtro do plano de consulta à condição de JOIN, quando possível, para permitir usá-las como chaves da tabela hash. #78877 (Dmitry Novik).
- Use sharding dinâmico em JOIN se a chave de junção for um prefixo da PK em ambas as partes. Essa otimização é habilitada pela configuração
query_plan_join_shard_by_pk_ranges(desativada por padrão). #74733 (Nikolai Kochetov). - Adiciona suporte à poda de dados do
Icebergcom base nos valores de limite inferior e superior das colunas. Corrige #77638. #78242 (alesapin). - Implementa a otimização de contagem trivial para
Iceberg. Agora, consultas comcount()e sem filtros devem ser mais rápidas. Fecha #77639. #78090 (alesapin). - Adiciona a possibilidade de configurar o número de colunas que as mesclagens podem gravar em paralelo usando
max_merge_delayed_streams_for_parallel_write(isso deve reduzir o uso de memória das mesclagens verticais para o S3 em cerca de 25x). #77922 (Azat Khuzhin). - Desative
filesystem_cache_prefer_bigger_buffer_sizequando o cache for usado de forma passiva, como em merges. Isso reduz o consumo de memória durante os merges. #77898 (Kseniia Sumarokova). - Agora usamos o número de réplicas para determinar o tamanho da tarefa de leitura com parallel replicas habilitado. Isso proporciona uma melhor distribuição da carga de trabalho entre as réplicas quando o volume de dados a ser lido não é muito grande. #78695 (Nikita Taranov).
- Suporte à pré-busca assíncrona de E/S para o formato
ORC, melhorando o desempenho geral ao ocultar a latência de E/S remota. #70534 (李扬). - Pré-aloque a memória usada por inserções assíncronas para melhorar o desempenho. #74945 (Ilya Golshtein).
- Reduza a quantidade de solicitações ao Keeper eliminando o uso de solicitações
getindividuais, que poderiam causar uma carga significativa no Keeper com o aumento do número de réplicas, nos casos em quemultiReadestá disponível. #56862 (Nikolay Degterinsky). - Uma pequena otimização para executar funções com argumentos Nullable. #76489 (李扬).
- Otimizado
arraySort. #76850 (李扬). - Mescle as marcas da mesma parte e grave-as no cache de condições de consulta de uma só vez para reduzir o uso de locks. #77377 (zhongyuankai).
- Otimize o desempenho de
s3Clusterpara consultas com uma única expansão entre colchetes. #77686 (Tomáš Hromada). - Otimização da ordenação por uma única coluna Nullable ou LowCardinality. #77789 (李扬).
- Otimize o consumo de memória do formato
Native. #78442 (Azat Khuzhin). - Otimização trivial: não reescrever
count(if(...))comocountIfse for necessária uma conversão de tipo. Fecha #78564. #78565 (李扬). - A função
hasAllagora pode aproveitar os índices de skipping de texto completotokenbf_v1engrambf_v1. #77662 (UnamedRus). - O índice de similaridade vetorial podia alocar até 2x mais memória principal do que o necessário. Esta correção reformula a estratégia de alocação de memória, reduzindo o consumo de memória e melhorando a eficácia do cache do índice de similaridade vetorial. (problema #78056). #78394 (Shankar Iyer).
- Introduz uma configuração
schema_typepara a tabelasystem.metric_logcom o tipo de esquema. Há três esquemas permitidos:wide— esquema atual, cada métrica/evento em uma coluna separada (mais eficaz para leituras de colunas separadas),transposed— semelhante asystem.asynchronous_metric_log, métricas/eventos são armazenados como linhas, e o mais interessante,transposed_with_wide_view— cria a tabela subjacente com esquematransposed, mas também introduz uma view com esquemawideque traduz consultas para a tabela subjacente. Emtransposed_with_wide_view, não há suporte a resolução em subsegundos para a view;event_time_microsecondsé apenas um alias para retrocompatibilidade. #78412 (alesapin).
Aprimoramento
- Serialização do plano de consulta para consultas
Distributed. Foi adicionada a nova configuraçãoserialize_query_plan. Quando ativada, as consultas da tabelaDistributedusarão um plano de consulta serializado para a execução remota de consultas. Isso introduz um novo tipo de pacote no protocolo TCP;<process_query_plan_packet>true</process_query_plan_packet>deve ser adicionado à configuração do servidor para permitir o processamento desse pacote. #69652 (Nikolai Kochetov). - Suporte ao tipo
JSONe à leitura de subcolunas em views. #76903 (Pavel Kruglov). - Adicionado suporte a ALTER DATABASE … ON CLUSTER. #79242 (Tuan Pham Anh).
- As atualizações de views materializadas atualizáveis agora aparecem em
system.query_log. #71333 (Michael Kolupaev). - As Funções Definidas pelo Usuário (UDFs) agora podem ser marcadas como determinísticas por meio de uma nova opção em sua configuração. Além disso, o cache de consultas agora verifica se as UDFs chamadas em uma consulta são determinísticas. Se for esse o caso, ele armazena em cache o resultado da consulta. (Issue #59988). #77769 (Jimmy Aguilar Mena).
- Foi implementada uma lógica de backoff para todos os tipos de tarefas replicadas. Isso permite reduzir o uso de CPU, o uso de memória e o tamanho dos arquivos de log. Foram adicionadas as novas configurações
max_postpone_time_for_failed_replicated_fetches_ms,max_postpone_time_for_failed_replicated_merges_msemax_postpone_time_for_failed_replicated_tasks_ms, que são semelhantes amax_postpone_time_for_failed_mutations_ms. #74576 (MikhailBurdukov). - Adiciona
query_idaosystem.errors. Fecha #75815. #76581 (Vladimir Baikov). - Adicionado suporte para conversão de
UInt128emIPv6. Isso permite a operaçãobitAnde operações aritméticas comIPv6, além da conversão de volta paraIPv6. Fecha #76752. Isso também permite que o resultado da operaçãobitAndemIPv6seja convertido de volta paraIPv6. Veja também #57707. #76928 (Muzammil Abdul Rehman). - Não faz parse de valores especiais de
Boolem formatos de texto dentro do tipoVariantpor padrão. Isso pode ser habilitado com a configuraçãoallow_special_bool_values_inside_variant. #76974 (Pavel Kruglov). - Suporte à configuração, por tarefa, do tempo de espera para consultas de baixa
priority, tanto no nível da sessão quanto no nível do servidor. #77013 (VicoWu). - Implementa a comparação de valores do tipo de dados JSON. Agora, objetos JSON podem ser comparados de forma semelhante a Maps. #77397 (Pavel Kruglov).
- Melhor suporte a permissões em
system.kafka_consumers. Encaminha erros internos dolibrdkafka(vale notar que essa biblioteca é uma porcaria). #77700 (Ilya Golshtein). - Adicionada validação para as configurações da engine de tabela Buffer. #77840 (Pervakov Grigorii).
- Adicionada a configuração
enable_hdfs_preadpara habilitar ou desabilitar opreadnoHDFS. #77885 (kevinyhzou). - Adiciona profile events para o número de solicitações
multide leitura e escrita do ZooKeeper. #77888 (JackyWoo). - Permitir a criação de tabelas temporárias e a inserção nelas quando
disable_insertion_and_mutationestiver ativado. #77901 (Xu Jia). - Reduz
max_insert_delayed_streams_for_parallel_write(para 100). #77919 (Azat Khuzhin). - Corrige o parsing de ano na sintaxe Joda (isso vem do mundo Java, caso você esteja se perguntando), como
yyy. #77973 (李扬). - A operação de anexar partes de tabelas
MergeTreeserá realizada na ordem dos blocos, o que é importante para algoritmos especiais de mesclagem, comoReplacingMergeTree. Isso encerra #71009. #77976 (Alexey Milovidov). - As regras de mascaramento de consultas agora podem lançar um
LOGICAL_ERRORse houver correspondência. Isso ajudará a verificar se uma senha predefinida está vazando nos logs. #78094 (Nikita Mikhaylov). - Adicionada a coluna
index_length_columneminformation_schema.tablespara maior compatibilidade com o MySQL. #78119 (Paweł Zakrzewski). - Introduz duas novas métricas:
TotalMergeFailureseNonAbortedMergeFailures. Essas métricas são necessárias para detectar os casos em que muitas operações de merge falham em um curto período. #78150 (Miсhael Stetsyuk). - Corrige a análise incorreta da URL do S3 quando a chave não é especificada no estilo path. #78185 (Arthur Passos).
- Corrigidos os valores incorretos das métricas assíncronas
BlockActiveTime,BlockDiscardTime,BlockWriteTime,BlockQueueTimeeBlockReadTime(antes da alteração, 1 segundo era reportado incorretamente como 0,001). #78211 (filimonov). - Respeita o limite de
loading_retriespara erros ao enviar para a visão materializada do StorageS3(Azure)Queue. Antes disso, esses erros eram tentados novamente indefinidamente. #78313 (Kseniia Sumarokova). - No DeltaLake com a implementação
delta-kernel-rs, corrige problemas de desempenho e da barra de progresso. #78368 (Kseniia Sumarokova). - Suporte a
include,from_envefrom_zkpara discos em runtime. Fecha #78177. #78470 (Kseniia Sumarokova). - Adicionado um aviso dinâmico à tabela
system.warningspara mutações de longa duração. #78658 (Bharat Nallan). - Adicionado o campo
conditionà system tablesystem.query_condition_cache. Ele armazena a condição em texto simples cujo hash é usado como chave no cache de condições de consulta. #78671 (Robert Schulze). - Permite um valor vazio para o particionamento do Hive. #78816 (Arthur Passos).
- Corrige a coerção de tipo na cláusula
INparaBFloat16(ou seja,SELECT toBFloat16(1) IN [1, 2, 3];agora retorna1). Fecha #78754. #78839 (Raufs Dunamalijevs). - Não verificar partes em outros discos para
MergeTreesedisk = ...estiver definido. #78855 (Azat Khuzhin). - Passar a registrar os tipos de dados em
used_data_type_familiesdesystem.query_logcom nomes canônicos. #78972 (Kseniia Sumarokova). - Configurações de limpeza durante
recoverLostReplica, assim como foi feito em: #78637. #79113 (Nikita Mikhaylov). - Use colunas de inserção na inferência de esquema do INFILE. #78490 (Pervakov Grigorii).
Correção de bug (mau funcionamento perceptível ao usuário em um lançamento estável oficial)
- Corrige a análise incorreta de projeções quando
count(Nullable)é usado em projeções agregadas. Isso corrige #74495. Este PR também adiciona alguns logs relacionados à análise de projeções para esclarecer por que uma projeção é usada — ou por que não. #74498 (Amos Bird). - Corrigido
Part <...> does not contain in snapshot of previous virtual parts. (PART_IS_TEMPORARILY_LOCKED)duranteDETACH PART. #76039 (Aleksei Filatov). - Corrige skip indexes com expressões que contêm literais e não funcionavam no analisador, e remove conversões de tipo triviais durante a análise de índices. #77229 (Pavel Kruglov).
- Corrige um bug em que o parâmetro de consulta
close_sessionnão surtia efeito, fazendo com que as sessões nomeadas fossem fechadas apenas apóssession_timeout. #77336 (Alexey Katsman). - Corrigido o recebimento de mensagens do servidor NATS sem visões materializadas anexadas. #77392 (Dmitry Novikov).
- Corrige erro lógico ao ler de um
FileLogvazio usando a função de tabelamerge, fecha #75575. #77441 (Vladimir Cherkasov). - Usa as configurações padrão de formato na serialização
Dynamicda variante compartilhada. #77572 (Pavel Kruglov). - Corrige a verificação da existência do caminho dos dados da tabela no disco local. #77608 (Tuan Pham Anh).
- Corrige o envio de valores constantes ao servidor remoto para alguns tipos. #77634 (Pavel Kruglov).
- Corrige uma falha causada por contexto expirado em S3/AzureQueue. #77720 (Kseniia Sumarokova).
- Ocultar credenciais nos motores de tabela RabbitMQ, Nats, Redis e AzureQueue. #77755 (Kseniia Sumarokova).
- Corrigido comportamento indefinido na comparação com
NaNemargMin/argMax. #77756 (Raúl Marín). - Verifique regularmente se merges e mutações foram cancelados, mesmo quando a operação não produz nenhum bloco para gravação. #77766 (János Benjamin Antal).
- Corrigido o problema em que a view materializada atualizável em banco de dados Replicated não funcionava em réplicas adicionadas recentemente. #77774 (Michael Kolupaev).
- Corrige uma possível falha quando ocorre o erro
NOT_FOUND_COLUMN_IN_BLOCK. #77854 (Vladimir Cherkasov). - Corrige a falha que ocorre no S3/AzureQueue durante o preenchimento de dados. #77878 (Bharat Nallan).
- Desabilita a busca difusa no histórico do servidor SSH (já que exige a biblioteca skim). #78002 (Azat Khuzhin).
- Corrige um bug em que uma consulta de busca vetorial em uma coluna não indexada retornava resultados incorretos se houvesse outra coluna vetorial na tabela com um índice de similaridade vetorial definido. (Issue #77978). #78069 (Shankar Iyer).
- Corrigido um pequeno erro na mensagem “O formato de saída solicitado é binário… Deseja exibi-lo mesmo assim? [y/N]”. #78095 (Azat Khuzhin).
- Correção de um bug quando
toStartOfIntervalusa um argumento de origem igual a zero. #78096 (Yarik Briukhovetskyi). - Proibir a especificação de um parâmetro de consulta
session_idvazio na interface HTTP. #78098 (Alexey Katsman). - Corrige a sobrescrita de metadados no banco de dados
Replicated, que poderia ter ocorrido devido a uma consultaRENAMEexecutada logo após uma consultaALTER. #78107 (Nikolay Degterinsky). - Corrige uma falha no engine
NATS. #78108 (Dmitry Novikov). - Não tente criar o history_file no cliente embutido para SSH (nas versões anteriores, a criação sempre falhava, mas ainda assim era tentada). #78112 (Azat Khuzhin).
- Corrige a exibição de informações incorretas em
system.detached_tablesapós consultasRENAME DATABASEouDROP TABLE. #78126 (Nikolay Degterinsky). - Correção nas verificações de excesso de tabelas com o banco de dados
Replicatedapós #77274. Além disso, a verificação agora é feita antes de criar o storage para evitar a criação de nós não contabilizados no Keeper nos casos deReplicatedMergeTreeouKeeperMap. #78127 (Nikolay Degterinsky). - Corrige possível travamento devido à inicialização concorrente dos metadados do
S3Queue. #78131 (Azat Khuzhin). - As funções
groupArray*agora geram o erroBAD_ARGUMENTSpara o valor 0 do tipo Int no argumentomax_size, como já acontece para UInt, em vez de tentar executá-las com esse valor. #78140 (Eduard Karacharov). - Impede um travamento ao recuperar uma réplica perdida se a tabela local for removida antes de ser desanexada. #78173 (Raúl Marín).
- Corrigido o problema em que a coluna “alterable” em
system.s3_queue_settingssempre retornavafalse. #78187 (Kseniia Sumarokova). - Oculte a assinatura de acesso do Azure para que ela não fique visível ao usuário nem nos logs. #78189 (Kseniia Sumarokova).
- Corrigido o pré-carregamento de subfluxos com prefixos em partes Wide. #78205 (Pavel Kruglov).
- Corrigidos travamentos / resultado incorreto para
mapFromArraysno caso do tipoLowCardinality(Nullable)no array de chaves. #78240 (Eduard Karacharov). - Corrige as opções de autenticação do delta-kernel-rs. #78255 (Kseniia Sumarokova).
- Não agendar a tarefa de uma view materializada atualizável se
disable_insertion_and_mutationde uma réplica for true. Uma tarefa é uma forma de inserção; ela falhará sedisable_insertion_and_mutationfor true. #78277 (Xu Jia). - Validar o acesso às tabelas subjacentes do mecanismo
Merge. #78339 (Pervakov Grigorii). - O modificador
FINALpode ser ignorado ao consultar uma tabelaDistributed. #78428 (Yakov Olkhovskiy). bitmapMinretorna uint32_max quando o bitmap está vazio (e uint64_max quando o tipo de entrada é maior), o que corresponde ao comportamento do valor mínimo de um roaring_bitmap vazio. #78444 (wxybear).- Desabilita a paralelização do processamento de consultas logo após a leitura de FROM quando
distributed_aggregation_memory_efficientestiver habilitado, pois isso pode levar a um erro lógico. Fecha #76934. #78500 (flynn). - Defina pelo menos um stream para leitura caso haja zero streams planejados após aplicar a configuração
max_streams_to_max_threads_ratio. #78505 (Eduard Karacharov). - Corrigido erro lógico no armazenamento
S3Queue: “Não é possível remover o registro: o UUID da tabela não está registrado”. Fecha #78285. #78541 (Kseniia Sumarokova). - Agora, o ClickHouse consegue identificar seu cgroup v2 em sistemas com cgroups v1 e v2 habilitados. #78566 (Grigory Korolev).
- As funções de tabela
-Clusterfalhavam quando usadas com configurações em nível de tabela. #78587 (Daniil Ivanik). - Verificações aprimoradas quando transações não são compatíveis com o ReplicatedMergeTree no INSERT. #78633 (Azat Khuzhin).
- Limpeza das configurações de consulta ao fazer attach. #78637 (Raúl Marín).
- Corrige um travamento quando um caminho inválido foi especificado em
iceberg_metadata_file_path. #78688 (alesapin). - No engine de tabela
DeltaLakecom implementação delta-kernel-s, corrige o caso em que o esquema de leitura é diferente do esquema da tabela e, ao mesmo tempo, há colunas de partição, o que leva a um erro de “coluna não encontrada”. #78690 (Kseniia Sumarokova). - Corrige um problema em que, após o agendamento do fechamento de uma sessão nomeada (mas antes de o timeout expirar), a criação de uma nova sessão nomeada com o mesmo nome fazia com que ela fosse fechada no momento em que o fechamento da primeira sessão estava agendado. #78698 (Alexey Katsman).
- Corrigidos vários tipos de consultas
SELECTque leem de tabelas com engineMongoDBou da função de tabelamongodb: consultas com conversão implícita de um valor constante na cláusulaWHERE(por exemplo,WHERE datetime = '2025-03-10 00:00:00') ; consultas comLIMITeGROUP BY. Antes, elas podiam retornar resultados incorretos. #78777 (Anton Popov). - Não bloquear o encerramento da tabela durante a execução de
CHECK TABLE. #78782 (Raúl Marín). - Correção no Keeper: corrige a contagem de elementos efêmeros em todos os casos. #78799 (Antonio Andelic).
- Corrige erro de
castemStorageDistributedao usar funções de tabela diferentes deview. Fecha #78464. #78828 (Konstantin Bogdanov). - Corrige a inconsistência na formatação de
tupleElement(*, 1). Fecha #78639. #78832 (Konstantin Bogdanov). - Dicionários do tipo
ssd_cacheagora rejeitam os parâmetrosblock_sizeewrite_buffer_sizequando são zero ou negativos (issue #78314). #78854 (Elmi Ahmadov). - Corrige travamento em view materializada atualizável no caso de ALTER após um encerramento incorreto. #78858 (Azat Khuzhin).
- Corrigido o parsing de valores
DateTimeinválidos no formatoCSV. #78919 (Pavel Kruglov). - Correção no Keeper: evitar disparar watches em requisições múltiplas com falha. #79247 (Antonio Andelic).
- Corrige falha na leitura de tabela Iceberg quando o valor mínimo-máximo é especificado explicitamente, mas é
NULL. Observou-se que a biblioteca Iceberg para Go gerava arquivos tão problemáticos. Fecha #78740. #78764 (flynn).
Melhoria em Compilação/Testes/Empacotamento
- Passa a respeitar os recursos de CPU de destino no Rust e a habilitar LTO em todos os crates. #78590 (Raúl Marín).
Lançamento do ClickHouse 25.3 LTS, 2025-03-20
Alteração incompatível com versões anteriores
- Proíbe truncar bancos de dados Replicated. #76651 (Bharat Nallan).
- Revertido o cache de índice de skipping. #77447 (Nikita Mikhaylov).
Novo recurso
- O tipo de dado
JSONestá pronto para uso em produção. Veja https://jsonbench.com/. Os tipos de dadoDynamiceVariantestão prontos para uso em produção. #77785 (Alexey Milovidov). - Adiciona o protocolo SSH ao clickhouse-server. Agora, é possível se conectar ao ClickHouse usando qualquer cliente SSH. Isso resolve: #74340. #74989 (George Gamezardashvili).
- Substitua as funções de tabela por suas versões -Cluster se as réplicas paralelas estiverem ativadas. Corrige #65024. #70659 (Konstantin Bogdanov).
- Uma nova implementação do cache de páginas em espaço de usuário, que permite armazenar dados em cache na memória do próprio processo em vez de depender do cache de páginas do SO, o que é útil quando os dados são armazenados em um sistema de arquivos virtual remoto sem o respaldo do cache do sistema de arquivos local. #70509 (Michael Kolupaev).
- Adicionada a configuração do servidor
concurrent_threads_scheduler, que controla como os slots de CPU são distribuídos entre consultas concorrentes. Pode ser definida comoround_robin(comportamento anterior) oufair_round_robinpara resolver o problema da distribuição desigual de CPU entre INSERTs e SELECTs. #75949 (Sergei Trifonov). - Adiciona a função de agregação
estimateCompressionRatio#70801. #76661 (Tariq Almawash). - Adicionada a função
arraySymmetricDifference. Ela retorna todos os elementos de vários argumentos de array que não ocorrem em todos os argumentos. Exemplo:SELECT arraySymmetricDifference([1, 2], [2, 3])retorna[1, 3]. (issue #61673). #76231 (Filipp Abapolov). - Permite especificar explicitamente o arquivo de metadados a ser lido pelo Iceberg com a configuração
iceberg_metadata_file_pathda storage/table function. Corrige #47412. #77318 (alesapin). - Adicionada a função de hash
keccak256, comumente usada em implementações de blockchain, especialmente em sistemas baseados em EVM. #76669 (Arnaud Briche). - Adiciona três novas funções:
icebergTruncate, de acordo com a especificação https://iceberg.apache.org/spec/#truncate-transform-details,toYearNumSinceEpochetoMonthNumSinceEpoch. Adiciona suporte à transformaçãotruncatena poda de partições do engineIceberg. #77403 (alesapin). - Suporte ao tipo de dado
LowCardinality(Decimal)#72256. #72833 (zhanglistar). - Os profile events
FilterTransformPassedRowseFilterTransformPassedBytesmostrarão o número de linhas e de bytes filtrados durante a execução da consulta. #76662 (Onkar Deshpande). - Suporte ao tipo de métrica de histograma. A interface é muito semelhante à do cliente Prometheus, em que basta chamar
observe(value)para incrementar o contador do bucket correspondente ao valor. As métricas de histograma são expostas por meio desystem.histogram_metrics. #75736 (Miсhael Stetsyuk). - Suporte a CASE não constante para seleção com base em valores explícitos. #77399 (Yarik Briukhovetskyi).
Funcionalidade experimental
- Adicionado suporte ao Unity Catalog para tabelas DeltaLake sobre AWS S3 e sistema de arquivos local. #76988 (alesapin).
- Introduzida integração experimental com o catálogo de serviços AWS Glue para tabelas Iceberg. #77257 (alesapin).
- Adicionado suporte à autodescoberta dinâmica de clusters. Isso estende o recurso existente de autodescoberta de nós. O ClickHouse agora pode detectar e registrar automaticamente novos clusters em um caminho comum do ZooKeeper usando
<multicluster_root_path>. #76001 (Anton Ivashkin). - Permite a limpeza automática por merge de partições inteiras após um timeout configurável, com a nova configuração
enable_replacing_merge_with_cleanup_for_min_age_to_force_merge. #76440 (Christoph Wurm).
Melhoria de desempenho
- Implementa o cache de condições de consulta para melhorar o desempenho de consultas com condições repetidas. O intervalo da porção de dados que não atende à condição é armazenado como um índice temporário em memória. As consultas subsequentes usarão esse índice. Fecha #67768 #69236 (zhongyuankai).
- Remove ativamente dados do cache quando partes são removidas. Impede que o cache cresça até o tamanho máximo se a quantidade de dados for menor. #76641 (Alexey Milovidov).
- Substitui Int256 e UInt256 pelo i256 builtin do clang em cálculos aritméticos, o que melhora o desempenho #70502. #73658 (李扬).
- Em alguns casos (por exemplo, uma coluna array vazia), as partes de dados podem conter arquivos vazios. Podemos pular a gravação de blobs vazios no armazenamento de objetos e armazenar apenas os metadados desses arquivos quando a tabela reside em um disco com metadados e armazenamento de objetos separados. #75860 (Alexander Gololobov).
- Melhora o desempenho de min/max para Decimal32/Decimal64/DateTime64. #76570 (李扬).
- A compilação de consultas (configuração
compile_expressions) agora considera o tipo de máquina. Isso acelera essas consultas significativamente. #76753 (ZhangLiStar). - Otimiza
arraySort. #76850 (李扬). - Desabilita
filesystem_cache_prefer_bigger_buffer_sizequando o cache é usado passivamente, como em merges. #77898 (Kseniia Sumarokova). - Aplica o atributo
preserve_mostem alguns pontos do código, o que permite uma geração de código ligeiramente melhor. #67778 (Nikita Taranov). - Encerramento mais rápido dos servidores ClickHouse (elimina o atraso de 2,5 s). #76550 (Azat Khuzhin).
- Evita alocação excessiva em ReadBufferFromS3 e outros buffers de leitura remota, reduzindo pela metade o consumo de memória deles. #76692 (Sema Checherinda).
- Atualiza o zstd da versão 1.5.5 para 1.5.7, o que pode levar a algumas melhorias de desempenho. #77137 (Pradeep Chhetri).
- Reduz o uso de memória durante prefetches de coluna JSON em partes Wide. Isso é relevante quando o ClickHouse é usado sobre armazenamento compartilhado, como no ClickHouse Cloud. #77640 (Pavel Kruglov).
Aprimoramento
- Adiciona suporte à renomeação atômica quando
TRUNCATEé usado comINTO OUTFILE. Resolve #70323. #77181 (Onkar Deshpande). - Não é mais possível usar
NaNouinfcomo configurações para valores de ponto flutuante. Não que isso fizesse algum sentido antes. #77546 (Yarik Briukhovetskyi). - As réplicas paralelas são desabilitadas por padrão quando o analisador está desabilitado, independentemente da configuração
compatibility. Ainda é possível alterar esse comportamento definindo explicitamenteparallel_replicas_only_with_analyzercomofalse. #77115 (Igor Nikonov). - Adiciona a possibilidade de definir uma lista de cabeçalhos repassados dos cabeçalhos da requisição do cliente para o autenticador HTTP externo. #77054 (inv2004).
- Respeita a correspondência de colunas sem diferenciar maiúsculas de minúsculas para campos em colunas de tupla. Fecha https://github.com/apache/incubator-gluten/issues/8324. #73780 (李扬).
- Os parâmetros do codec Gorilla agora serão sempre salvos nos metadados da tabela, no arquivo .sql. Isso fecha: #70072. #74814 (Nikita Mikhaylov).
- Implementadas melhorias de parsing para determinados lagos de dados (parsing de Sequence ID: adicionada funcionalidade para fazer o parsing de identificadores de sequência em arquivos manifest E parsing de metadados Avro: o parser de metadados Avro foi reprojetado para ser facilmente extensível em futuras melhorias). #75010 (Daniil Ivanik).
- Removido o trace_id do ORDER BY padrão de
system.opentelemetry_span_log. #75907 (Azat Khuzhin). - A criptografia (atributo
encrypted_by) agora pode ser aplicada a qualquer arquivo de configuração (config.xml, users.xml, arquivos de configuração aninhados). Antes, funcionava apenas no arquivo config.xml de nível superior. #75911 (Mikhail Gorshkov). - Aprimora a tabela
system.warningse inclui algumas mensagens de aviso dinâmicas, que podem ser adicionadas, atualizadas ou removidas. #76029 (Bharat Nallan). - Este PR impossibilita a execução da consulta
ALTER USER user1 ADD PROFILES a, DROP ALL PROFILES, porque todas as operaçõesDROPdevem vir primeiro. #76242 (pufit). - Vários aprimoramentos para SYNC REPLICA (mensagens de erro melhores, melhorias nos testes, verificações básicas de consistência). #76307 (Azat Khuzhin).
- Use o fallback adequado quando a cópia multipart para o S3 falhar durante o backup com erro de Access Denied. A cópia multipart pode gerar erro de Access Denied quando o backup é feito entre buckets com credenciais diferentes. #76515 (Antonio Andelic).
- Atualizamos o librdkafka (que é uma porcaria) para a versão 2.8.0 (e continua sendo uma porcaria) e aprimoramos a sequência de desligamento das tabelas Kafka, reduzindo atrasos durante a remoção de tabelas e reinicializações do servidor. O
engine=Kafkanão sai mais explicitamente do consumer group quando uma tabela é removida. Em vez disso, o consumer permanece no grupo até ser removido automaticamente apóssession_timeout_ms(padrão: 45 segundos) de inatividade. #76621 (filimonov). - Corrigida a validação das configurações de requisição do S3. #76658 (Vitaly Baranov).
- Tabelas do sistema como
server_settingsousettingstêm uma coluna de valordefault, o que é prático. Adicionadas amerge_tree_settingsereplicated_merge_tree_settings. #76942 (Diego Nieto). - Adicionado
ProfileEvents::QueryPreempted, que tem lógica semelhante à deCurrentMetrics::QueryPreempted. #77015 (VicoWu). - Anteriormente, um banco de dados Replicated podia registrar nos logs credenciais especificadas em uma consulta. Esse comportamento foi corrigido. Fecha: #77123. #77133 (Nikita Mikhaylov).
- Permite ALTER TABLE DROP PARTITION para
plain_rewritable disk. #77138 (Julia Kartseva). - A configuração de backup/restauração
allow_s3_native_copyagora oferece suporte a três valores possíveis: -False- a cópia nativa do S3 não será usada; -True(padrão antigo) - o ClickHouse tentará primeiro a cópia nativa do S3; se falhar, poderá recorrer à abordagem de leitura+gravação; -'auto'(novo padrão) - o ClickHouse comparará primeiro as credenciais de origem e de destino. Se forem iguais, o ClickHouse tentará a cópia nativa do S3 e depois poderá recorrer à abordagem de leitura+gravação. Se forem diferentes, o ClickHouse irá diretamente para a abordagem de leitura+gravação. #77401 (Vitaly Baranov). - Suporte ao uso de token de sessão da AWS e de credenciais de ambiente no Delta Kernel para o mecanismo de tabela DeltaLake. #77661 (Kseniia Sumarokova).
Correção de bug (mau funcionamento perceptível ao usuário em um lançamento estável oficial)
- Corrige travamento ao processar o lote pendente de
INSERTdistribuído assíncrono (devido, por exemplo, aNo such file or directory). #72939 (Azat Khuzhin). - Aprimorada a conversão de datetime durante a análise de índice, com a aplicação de comportamento de saturação às conversões implícitas de Date para DateTime. Isso resolve possíveis imprecisões na análise de índice causadas por limitações no intervalo de datetime. Isso corrige #73307. Também corrige a conversão explícita
toDateTimequandodate_time_overflow_behavior = 'ignore', que é o valor padrão. #73326 (Amos Bird). - Corrige todo tipo de bugs causados por condição de corrida entre UUIDs e nomes de tabelas (por exemplo, isso corrigirá a condição de corrida entre
RENAMEeRESTART REPLICA; no caso deRENAMEconcorrente comSYSTEM RESTART REPLICA, você pode acabar reiniciando a réplica errada e/ou deixando uma das tabelas no estadoTable X is being restarted). #76308 (Azat Khuzhin). - Corrige a perda de dados ao habilitar async insert e executar insert into … from file … com blocos de tamanhos diferentes; se o tamanho do primeiro bloco < async_max_size, mas o segundo bloco > async_max_size, o segundo bloco não é inserido. Esses dados ficam retidos em
squashing. #76343 (Han Fei). - Renomeado o campo ‘marks’ para ‘marks_bytes’ em
system.data_skipping_indices. #76374 (Robert Schulze). - Corrige o tratamento de erros inesperados durante a evicção ao redimensionar dinamicamente o cache do sistema de arquivos. #76466 (Kseniia Sumarokova).
- Corrigida a inicialização de
used_flagno hash paralelo. Pode causar um travamento do servidor. #76580 (Nikita Taranov). - Corrigido um erro lógico ao chamar a função
defaultProfilesem uma projeção. #76627 (pufit). - Não solicitar autenticação básica interativa no navegador na interface web. Fecha #76319. #76637 (Alexey Milovidov).
- Corrigida a exceção THERE_IS_NO_COLUMN ao selecionar um literal booleano em tabelas distribuídas. #76656 (Yakov Olkhovskiy).
- O subcaminho dentro do diretório da tabela é escolhido de forma mais criteriosa. #76681 (Daniil Ivanik).
- Corrige um erro
Not found column in blockapós alterar uma tabela com uma subcoluna na PK. Após https://github.com/ClickHouse/ClickHouse/pull/72644, requer https://github.com/ClickHouse/ClickHouse/pull/74403. #76686 (Nikolai Kochetov). - Adicionar testes de desempenho para short-circuit de NULL e corrigir bugs. #76708 (李扬).
- Descarrega os buffers de gravação de saída antes de finalizá-los. Corrige o
LOGICAL_ERRORgerado durante a finalização de alguns formatos de saída, comoJSONEachRowWithProgressRowOutputFormat. #76726 (Antonio Andelic). - Adicionado suporte ao UUID binário do MongoDB (#74452) - Corrigido o pushdown de WHERE para o MongoDB ao usar a função de tabela (#72210) - Alterado o mapeamento de tipos entre MongoDB e ClickHouse para que o UUID binário do MongoDB só possa ser interpretado como UUID do ClickHouse. Isso deve evitar ambiguidades e surpresas no futuro. - Corrigido o mapeamento de OID, preservando a compatibilidade com versões anteriores. #76762 (Kirill Nikiforov).
- Corrigido o tratamento de exceções na desserialização paralela de prefixos de subcolunas JSON. #76809 (Pavel Kruglov).
- Corrige o comportamento da função
lgammapara inteiros negativos. #76840 (Ilya Kataev). - Corrige a análise de chave reversa para chaves primárias definidas explicitamente. Semelhante a #76654. #76846 (Amos Bird).
- Corrigida a formatação pretty-print de valores Bool no formato JSON. #76905 (Pavel Kruglov).
- Corrigida uma possível falha causada por rollback incorreto da coluna JSON em caso de erro durante inserções assíncronas. #76908 (Pavel Kruglov).
- Anteriormente,
multiIfpodia retornar colunas de tipos diferentes durante o planejamento e a execução principal. Isso fazia com que o código produzisse comportamento indefinido do ponto de vista do C++. #76914 (Nikita Taranov). - Corrigida a serialização incorreta de chaves constantes do tipo Nullable no MergeTree. Isso corrige #76939. #76985 (Amos Bird).
- Corrigida a ordenação dos valores
BFloat16. Fecha #75487. Fecha #75669. #77000 (Alexey Milovidov). - Correção de bug em JSON com subcoluna Variant, adicionando uma verificação para ignorar subcolunas efêmeras na verificação de consistência da parte. #72187. #77034 (Smita Kulkarni).
- Corrige travamento na análise de template no formato Values em caso de incompatibilidade de tipos. #77071 (Pavel Kruglov).
- Não permitir criar tabela EmbeddedRocksDB com subcoluna na chave primária. Anteriormente, essa tabela podia ser criada, mas as consultas
selectfalhavam. #77074 (Pavel Kruglov). - Corrige comparação inválida em consultas distribuídas porque o pushdown de predicados para nós remotos não respeita os tipos literais. #77093 (Duc Canh Le).
- Corrige travamento durante a criação de tabela Kafka com exceção. #77121 (Pavel Kruglov).
- Suporte a JSON e subcolunas nos motores Kafka e RabbitMQ. #77122 (Pavel Kruglov).
- Corrige o desenrolamento da pilha durante o tratamento de exceções no MacOS. #77126 (Eduard Karacharov).
- Corrigida a leitura da subcoluna ‘null’ na função getSubcolumn. #77163 (Pavel Kruglov).
- Corrige o índice de filtro de Bloom com
Arraye funções incompatíveis. #77271 (Pavel Kruglov). - A restrição quanto ao número de tabelas deve ser verificada apenas durante a consulta CREATE inicial. #77274 (Nikolay Degterinsky).
- Não é um bug:
SELECT toBFloat16(-0.0) == toBFloat16(0.0)agora retorna corretamentetrue(antes retornavafalse). Isso torna o comportamento consistente comFloat32eFloat64. #77290 (Shankar Iyer). - Corrige uma possível referência incorreta à variável key_index não inicializada, o que pode levar a travamento em compilações de depuração (essa referência não inicializada não causará problemas em compilações de lançamento porque o código subsequente provavelmente gerará erros.) ### item de documentação para mudanças visíveis ao usuário. #77305 (wxybear).
- Corrigido o nome da partição com valor Bool. Isso havia sido quebrado em https://github.com/ClickHouse/ClickHouse/pull/74533. #77319 (Pavel Kruglov).
- Corrige a comparação entre tuplas com elementos Nullable e strings. Como exemplo, antes da mudança, a comparação entre um Tuple
(1, null)e uma String'(1,null)'resultava em um erro. Outro exemplo seria a comparação entre um Tuple(1, a), em queaé uma coluna Nullable, e uma String'(1, 2)'. Esta mudança corrige esses problemas. #77323 (Alexey Katsman). - Corrige falha em ObjectStorageQueueSource. O problema foi introduzido em https://github.com/ClickHouse/ClickHouse/pull/76358. #77325 (Pavel Kruglov).
- Correção de
async_insertcominput. #77340 (Azat Khuzhin). - Correção:
WITH FILLpode falhar com NOT_FOUND_COLUMN_IN_BLOCK quando a coluna de ordenação é removida pelo planejador. Problema semelhante relacionado ao cálculo de um DAG inconsistente para a expressão INTERPOLATE. #77343 (Yakov Olkhovskiy). - Corrigidos vários LOGICAL_ERRORs relacionados à atribuição de alias a nós AST inválidos. #77445 (Raúl Marín).
- Na implementação do cache do sistema de arquivos, foi corrigido o tratamento de erros durante a gravação de segmentos de arquivo. #77471 (Kseniia Sumarokova).
- Faz o DatabaseIceberg usar o arquivo de metadados correto fornecido pelo catálogo. Fecha #75187. #77486 (Kseniia Sumarokova).
- O cache de consultas agora considera as UDFs não determinísticas. Assim, os resultados de consultas com UDFs não são mais armazenados em cache. Antes, os usuários podiam definir UDFs não determinísticas cujos resultados eram armazenados em cache por engano (issue #77553). #77633 (Jimmy Aguilar Mena).
- Corrigido o
system.filesystem_cache_log, que funcionava apenas com a configuraçãoenable_filesystem_cache_log. #77650 (Kseniia Sumarokova). - Corrige um erro lógico ao chamar a função
defaultRolesdentro de uma projeção. Continuação de #76627. #77667 (pufit). - Segundos argumentos do tipo
Nullablepara a funçãoarrayResizenão são mais permitidos. Antes, o uso deNullablecomo segundo argumento podia causar desde erros até resultados incorretos. (issue #48398). #77724 (Manish Gill). - Verifique regularmente se os merges e as mutações foram cancelados, mesmo quando a operação não produz nenhum bloco para ser gravado. #77766 (János Benjamin Antal).
Melhoria em compilação/testes/empacotamento
clickhouse-odbc-bridgeeclickhouse-library-bridgeforam movidos para um repositório separado, https://github.com/ClickHouse/odbc-bridge/. #76225 (Alexey Milovidov).- Corrige a compilação cruzada em Rust e permite desativar o Rust completamente. #76921 (Raúl Marín).
Lançamento do ClickHouse 25.2, 2025-02-27
Alteração incompatível com versões anteriores
- Habilita totalmente
async_load_databasespor padrão (mesmo para instalações que não atualizam oconfig.xml). #74772 (Azat Khuzhin). - Adiciona os formatos
JSONCompactEachRowWithProgresseJSONCompactStringsEachRowWithProgress. Continuação de #69989.JSONCompactWithNameseJSONCompactWithNamesAndTypesnão exibem mais “totals” — aparentemente, isso era um erro de implementação. #75037 (Alexey Milovidov). - Altera o valor padrão de
format_alter_operations_with_parenthesespara true, para eliminar a ambiguidade na lista de comandos ALTER (consulte https://github.com/ClickHouse/ClickHouse/pull/59532). Isso quebra a replicação com clusters anteriores à 24.3. Se você estiver atualizando um cluster que usa lançamentos mais antigos, desative essa configuração na configuração do servidor ou atualize primeiro para a 24.3. #75302 (Raúl Marín). - Remove a possibilidade de filtrar mensagens de log usando expressões regulares. A implementação introduziu uma condição de corrida de dados, então precisou ser removida. #75577 (János Benjamin Antal).
- A configuração
min_chunk_bytes_for_parallel_parsingnão pode mais ser zero. Isso corrige: #71110. #75239 (Nikita Mikhaylov). - Valida as configurações na configuração de cache. Configurações inexistentes antes eram ignoradas; agora, gerarão um erro e devem ser removidas. #75452 (Kseniia Sumarokova).
Novo recurso
- Suporte ao tipo
Nullable(JSON). #73556 (Pavel Kruglov). - Suporte a subcolunas nas expressões DEFAULT e MATERIALIZED. #74403 (Pavel Kruglov).
- Suporte à gravação de filtros de Bloom no Parquet usando a configuração
output_format_parquet_write_bloom_filter(habilitada por padrão). #71681 (Michael Kolupaev). - A interface web agora conta com navegação interativa pelo banco de dados. #75777 (Alexey Milovidov).
- Permite combinar discos read-only e read-write na política de armazenamento (como vários volumes ou vários discos). Isso permite ler dados de todo o volume, enquanto inserts darão preferência ao disco gravável (ou seja, política de armazenamento Copy-on-Write). #75862 (Azat Khuzhin).
- Adiciona um novo engine de banco de dados,
DatabaseBackup,que permite fazer ATTACH instantaneamente de tabelas/bancos de dados a partir de backup. #75725 (Maksim Kita). - Suporte a prepared statements no wire protocol do Postgres. #75035 (scanhex12).
- Adiciona a capacidade de fazer ATTACH de tabelas sem uma camada de banco de dados, o que é útil para tabelas MergeTree localizadas na Web, S3 e sistemas de arquivos virtuais externos semelhantes. #75788 (Azat Khuzhin).
- Adiciona uma nova função de comparação de strings,
compareSubstrings, para comparar partes de duas strings. Exemplo:SELECT compareSubstrings('Saxony', 'Anglo-Saxon', 0, 6, 5) AS resultsignifica “comparar lexicograficamente 6 bytes das strings ‘Saxon’ e ‘Anglo-Saxon’, começando no offset 0 da primeira string e no offset 5 da segunda string”. #74070 (lgbo). - Foi adicionada uma nova função,
initialQueryStartTime. Ela retorna o horário de início da consulta atual. O valor é o mesmo em todos os shards durante uma consulta distribuída. #75087 (Roman Lomonosov). - Adiciona suporte à autenticação SSL com coleções nomeadas para MySQL. Fecha #59111. #59452 (Nikolay Degterinsky).
Recursos experimentais
- Adiciona uma nova configuração,
enable_adaptive_memory_spill_scheduler, que permite que várias Grace JOINs na mesma consulta monitorem seu uso de memória combinado e acionem o spilling para armazenamento externo de forma adaptativa, evitandoMEMORY_LIMIT_EXCEEDED. #72728 (lgbo). - Faz com que o novo engine de tabela experimental
Kafkarespeite integralmente as feature flags do Keeper. #76004 (János Benjamin Antal). - Restaura o codec QPL (Intel), que havia sido removido na v24.10 devido a problemas de licenciamento. #76021 (Konstantin Bogdanov).
- Na integração com HDFS, adiciona suporte à opção de configuração
dfs.client.use.datanode.hostname. #74635 (Mikhail Tiukavkin).
Melhoria de desempenho
- Melhora o desempenho da leitura da coluna JSON completa em partes Wide no S3. Isso é feito com a adição de prefetches para a desserialização de prefixos de subcolunas, cache de prefixos desserializados e desserialização paralela de prefixos de subcolunas. Isso melhora em 4 vezes a leitura da coluna JSON no S3 em consultas como
SELECT data FROM tablee em cerca de 10 vezes em consultas comoSELECT data FROM table LIMIT 10. #74827 (Pavel Kruglov). - Corrige contenção desnecessária em
parallel_hashquandomax_rows_in_join = max_bytes_in_join = 0. #75155 (Nikita Taranov). - Corrige pré-alocação dupla em
ConcurrentHashJoincaso os lados do join sejam invertidos pelo otimizador. #75149 (Nikita Taranov). - Pequena melhoria em alguns cenários de join: pré-calcula o número de linhas de saída e reserva memória para elas. #75376 (Alexander Gololobov).
- Para consultas como
WHERE a < b AND b < c AND c < 5, agora é possível inferir novas condições de comparação (a < 5 AND b < 5) para melhorar a capacidade de filtragem. #73164 (Shichao Jin). - Melhoria no Keeper: desabilita o cálculo de digest ao confirmar no armazenamento em memória para melhorar o desempenho. Isso pode ser habilitado com a configuração
keeper_server.digest_enabled_on_commit. O digest ainda é calculado durante o pré-processamento das solicitações. #75490 (Antonio Andelic). - Faz push down da expressão de filtro de JOIN ON quando possível. #75536 (Vladimir Cherkasov).
- Calcula os tamanhos das colunas e dos índices de forma lazy no MergeTree. #75938 (Pavel Kruglov).
- Reintroduz o respeito a
ttl_only_drop_partsemMATERIALIZE TTL; lê apenas as colunas necessárias para recalcular o TTL e remove partes substituindo-as por partes vazias. #72751 (Andrey Zvonov). - Reduz o tamanho do buffer de escrita para arquivos de metadados plain_rewritable #75758 (Julia Kartseva).
- Reduz o uso de memória em algumas window functions. #65647 (lgbo).
- Avalia filtros de Bloom do Parquet e índices min/max em conjunto. Isso é necessário para dar suporte adequado a:
x = 3 or x > 5onde data = [1, 2, 4, 5]. #71383 (Arthur Passos). - Consultas passadas para o armazenamento
Executablenão ficam mais limitadas à execução em thread única. #70084 (yawnt). - Busca partes em paralelo em ALTER TABLE FETCH PARTITION (o tamanho do thread pool é controlado por
max_fetch_partition_thread_pool_size). #74978 (Azat Khuzhin). - Permite mover predicados com a função
indexHintparaPREWHERE. #74987 (Anton Popov).
Aprimoramento
- Corrigido o cálculo do tamanho em memória para colunas
LowCardinality. #74688 (Nikita Taranov). - A tabela
processors_profile_logagora tem uma configuração padrão com TTL de 30 dias. #66139 (Ilya Yatsishin). - Permite nomear shards na configuração do cluster. #72276 (MikhailBurdukov).
- Alterado o status de sucesso da resposta de remote write do Prometheus de 200/OK para 204/NoContent. #74170 (Michael Dempsey).
- Adiciona a possibilidade de recarregar
max_remote_read_network_bandwidth_for_serveemax_remote_write_network_bandwidth_for_serverem tempo real, sem reiniciar o servidor. #74206 (Kai Zhu). - Permitir o uso de caminhos de blob para calcular somas de verificação ao fazer backup. #74729 (Vitaly Baranov).
- Adicionada uma coluna de ID de consulta a
system.query_cache(fecha #68205). #74982 (NamHoaiNguyen). - É permitido cancelar consultas
ALTER TABLE ... FREEZE ...comKILL QUERYe automaticamente por timeout (max_execution_time). #75016 (Kirill). - Adicionado suporte a
groupUniqArrayArrayMapcomoSimpleAggregateFunction. #75034 (Miel Donkers). - Oculta as configurações de credenciais do catálogo no mecanismo de banco de dados
Iceberg. Fecha #74559. #75080 (Kseniia Sumarokova). intExp2/intExp10: Definem o comportamento em casos indefinidos: retornam 0 para argumento muito pequeno,18446744073709551615para argumento muito grande e lançam exceção se fornan. #75312 (Vitaly Baranov).- Suporte nativo a
s3.endpointa partir da configuração do catálogo emDatabaseIceberg. Fecha #74558. #75375 (Kseniia Sumarokova). - Não falhar silenciosamente se um usuário que executa
SYSTEM DROP REPLICAnão tiver permissões suficientes. #75377 (Bharat Nallan). - Adiciona um ProfileEvent sobre o número de vezes em que algum dos logs do sistema falhou ao fazer flush. #75466 (Alexey Milovidov).
- Adiciona uma verificação e logs adicionais para descriptografar e descompactar. #75471 (Vitaly Baranov).
- Adicionado suporte ao símbolo de micro (U+00B5) na função
parseTimeDelta. Agora, tanto o símbolo de micro (U+00B5) quanto a letra grega mi (U+03BC) são reconhecidos como representações válidas de microssegundos, alinhando o comportamento do ClickHouse com a implementação do Go (veja time.go e time/format.go). #75472 (Vitaly Orlov). - Substitua a configuração do servidor (
send_settings_to_client) pela configuração do cliente (apply_settings_from_server), que controla se o código no lado do cliente (por exemplo, a análise de dados de INSERT e a formatação da saída da consulta) deve usar as configurações deusers.xmle do perfil de usuário do servidor. Caso contrário, serão usadas apenas as configurações da linha de comando do cliente, da sessão e da consulta. Observe que isso se aplica apenas ao cliente nativo (não, por exemplo, ao HTTP) e não à maior parte do processamento de consultas (que ocorre no servidor). #75478 (Michael Kolupaev). - Mensagens de erro de sintaxe mais claras. Anteriormente, se a consulta fosse muito grande e o token cujo comprimento excedesse o limite fosse um literal de string muito grande, a mensagem com o motivo se perdia entre dois exemplos desse token muito longo. Corrigido o problema em que uma consulta com UTF-8 era truncada incorretamente na mensagem de erro. Corrigido o uso excessivo de aspas em fragmentos de consulta. Isso fecha #75473. #75561 (Alexey Milovidov).
- Adiciona eventos de perfil ao armazenamento
S3(Azure)Queue. #75618 (Kseniia Sumarokova). - Desativado o envio de configurações do servidor para o cliente (
send_settings_to_client=false) por questões de compatibilidade (Esse recurso será reimplementado posteriormente como uma configuração do cliente para melhorar a usabilidade). #75648 (Michael Kolupaev). - Adicionada a configuração
memory_worker_correct_memory_trackerpara habilitar a correção do memory tracker interno com informações de diferentes fontes, lidas periodicamente em uma thread em segundo plano. #75714 (Antonio Andelic). - Adicionar a coluna
normalized_query_hashasystem.processes. Observação: embora ela possa ser facilmente calculada dinamicamente com a funçãonormalizedQueryHash, isso é necessário para preparar alterações subsequentes. #75756 (Alexey Milovidov). - A consulta a
system.tablesnão gerará exceção mesmo que exista uma tabelaMergecriada sobre um banco de dados que não existe mais. O métodogetTotalRowsfoi removido das tabelasHiveporque não permitimos que ele execute operações complexas. #75772 (Alexey Milovidov). - Armazena start_time/end_time de backups com microssegundos. #75929 (Aleksandr Musorin).
- Adicionada a métrica
MemoryTrackingUncorrected, que mostra o valor do rastreador interno global de memória, não corrigido pelo RSS. #75935 (Antonio Andelic). - Permite analisar endpoints como
localhost:1234/handleem funções de tabelaPostgreSQLouMySQL. Isso corrige uma regressão introduzida em https://github.com/ClickHouse/ClickHouse/pull/52503. #75944 (Nikita Mikhaylov). - Adicionada uma configuração no servidor
throw_on_unknown_workloadque permite escolher o comportamento de uma consulta com a configuraçãoworkloaddefinida com um valor desconhecido: permitir acesso ilimitado (padrão) ou gerar um erroRESOURCE_ACCESS_DENIED. Isso é útil para forçar todas as consultas a usar o agendamento de workload. #75999 (Sergei Trifonov). - Não reescreva subcolunas como
getSubcolumnemARRAY JOIN, a menos que seja necessário. #76018 (Pavel Kruglov). - Repetir tentativas em caso de erros de coordenação ao carregar tabelas. #76020 (Alexander Tokmakov).
- Suporte ao flush individual de logs em
SYSTEM FLUSH LOGS. #76132 (Raúl Marín). - Melhorada a página do servidor
/binary. Uso da curva de Hilbert em vez da curva de Morton. Exibição de 512 MB de endereços no quadrado, o que o preenche melhor (nas versões anteriores, os endereços preenchiam apenas metade do quadrado). Coloração dos endereços mais próxima do nome da biblioteca do que do nome da função. Permite rolar um pouco mais para além da área. #76192 (Alexey Milovidov). - Tentar novamente consultas ON CLUSTER em caso de TOO_MANY_SIMULTANEOUS_QUERIES. #76352 (Patrick Galbraith).
- Adicionada a métrica assíncrona
CPUOverload, que calcula o déficit relativo de CPU do servidor. #76404 (Alexey Milovidov). - Alterado o valor padrão de
output_format_pretty_max_rowsde 10000 para 1000. Acho que isso melhora a usabilidade. #76407 (Alexey Milovidov).
Correção de bug (mau funcionamento perceptível ao usuário em um lançamento estável oficial)
- Corrige a formatação de exceções com um formato personalizado, caso elas ocorram durante a interpretação da consulta. Em versões anteriores, as exceções eram formatadas com o formato padrão, em vez do formato especificado na consulta. Isso corrige #55422. #74994 (Alexey Milovidov).
- Corrige o mapeamento de tipos para o SQLite (tipos inteiros em
int64, tipos de ponto flutuante emfloat64). #73853 (Joanna Hulboj). - Corrige a resolução de identificadores em escopos superiores. Permite o uso de aliases para expressões na cláusula WITH. Corrige #58994. Corrige #62946. Corrige #63239. Corrige #65233. Corrige #71659. Corrige #71828. Corrige #68749. #66143 (Dmitry Novik).
- Corrigida a monotonicidade da função negate. Em versões anteriores, a consulta
select * from a where -x = -42;, em quexé a chave primária, podia retornar um resultado incorreto. #71440 (Michael Kolupaev). - Corrige o tratamento de tuplas vazias em arrayIntersect. Corrige #72578. #72581 (Amos Bird).
- Corrigida a leitura de subcolunas de subobjetos JSON com prefixo incorreto. #73182 (Pavel Kruglov).
- Propagar corretamente as configurações do formato Native na comunicação cliente-servidor. #73924 (Pavel Kruglov).
- Verificação de tipos não suportados em alguns mecanismos de armazenamento. #74218 (Pavel Kruglov).
- Corrige travamento ao executar a consulta
INSERT INTO SELECTpela interface PostgreSQL no macOS (problema #72938). #74231 (Artem Yurov). - Corrigido o
max_log_ptrnão inicializado no banco de dados replicado. #74336 (Konstantin Morozov). - Corrigido travamento ao inserir
interval(problema #74299). #74478 (NamHoaiNguyen). - Corrigida a formatação de literais JSON constantes. Antes, isso podia levar a erros de sintaxe durante o envio da consulta para outro servidor. #74533 (Pavel Kruglov).
- Corrige a consulta CREATE que falhava ao usar expressões de partição constantes com projeções implícitas habilitadas. Isso corrige #74596 . #74634 (Amos Bird).
- Evite deixar a conexão em estado inconsistente após um INSERT terminar com exceção. #74740 (Azat Khuzhin).
- Evite reutilizar conexões que ficaram em estado intermediário. #74749 (Azat Khuzhin).
- Corrigido travamento durante o processamento da declaração do tipo JSON quando o nome do tipo não está em maiúsculas. #74784 (Pavel Kruglov).
- Keeper: corrige logical_error quando a conexão era encerrada antes de ser estabelecida. #74844 (Michael Kolupaev).
- Corrige um problema em que o servidor não conseguia iniciar quando havia uma tabela usando
AzureBlobStorage. As tabelas agora são carregadas sem fazer solicitações ao Azure. #74880 (Alexey Katsman). - Corrige a ausência dos campos
used_privilegesemissing_privilegesemquery_logpara operações de BACKUP e RESTORE. #74887 (Alexey Katsman). - Renova o ticket krb do HDFS se ocorrer erro de sasl durante a solicitação de select no hdfs. #74930 (inv2004).
- Corrigidas consultas ao banco de dados Replicated em startup_scripts. #74942 (Azat Khuzhin).
- Corrige problemas com expressões com alias de tipo na cláusula
JOIN ONquando é usada uma comparação null-safe. #74970 (Vladimir Cherkasov). - Reverte o estado da parte de deleting para outdated quando a operação de remoção falha. #74985 (Sema Checherinda).
- Em versões anteriores, quando havia uma subconsulta escalar, passamos a registrar o progresso (acumulado a partir do processamento da subconsulta) durante a inicialização do formato de dados, antes de os cabeçalhos HTTP serem gravados. Isso fazia com que cabeçalhos HTTP, como X-ClickHouse-QueryId e X-ClickHouse-Format, além de Content-Type, fossem perdidos. #74991 (Alexey Milovidov).
- Corrigidas consultas
CREATE TABLE AS...paradatabase_replicated_allow_replicated_engine_arguments=0. #75000 (Bharat Nallan). - Corrige problema que deixava a conexão no cliente em um estado inválido após exceções de INSERT. #75030 (Azat Khuzhin).
- Corrigida falha causada por exceção não tratada na replicação do PSQL. #75062 (Azat Khuzhin).
- O Sasl pode fazer com que qualquer chamada RPC falhe; a correção permite repetir a chamada caso o ticket do krb5 tenha expirado. #75063 (inv2004).
- Corrigido o uso de índices (primários e secundários) em colunas
Array,MapeNullable(..)com a configuraçãooptimize_function_to_subcolumnshabilitada. Antes, os índices dessas colunas podiam ser ignorados. #75081 (Anton Popov). - Desative
flatten_nestedao criar visões materializadas com tabelas internas, pois não será possível usar essas colunas niveladas. #75085 (Christoph Wurm). - Correção para alguns endereços IPv6 (como ::ffff:1.1.1.1) no campo forwarded_for que eram interpretados incorretamente, resultando na desconexão do cliente com uma exceção. #75133 (Yakov Olkhovskiy).
- Corrige o tratamento de JOIN null-safe para o tipo de dados LowCardinality Nullable. Anteriormente, JOIN ON com comparação null-safe, como
IS NOT DISTINCT FROM,<=>,a IS NULL AND b IS NULL OR a == b, não funcionava corretamente com colunas LowCardinality. #75143 (Vladimir Cherkasov). - Verifica se key_condition não é especificado ao contar total_number_of_rows no NumRowsCache. #75164 (Daniil Ivanik).
- Corrige consultas com interpolação não usada com o novo analisador. #75173 (János Benjamin Antal).
- Corrige a falha que causava travamento em CTE com Insert. #75188 (Shichao Jin).
- Correção no Keeper: evitar gravar em changelogs corrompidos ao reverter logs. #75197 (Antonio Andelic).
- Use
BFloat16como supertipo, quando apropriado. Isso fecha: #74404. #75236 (Nikita Mikhaylov). - Corrige valores padrão inesperados no resultado de JOIN com any_join_distinct_right_table_keys e OR em JOIN ON. #75262 (Vladimir Cherkasov).
- Mascarar as credenciais do mecanismo de tabela azureblobstorage. #75319 (Garrett Thomas).
- Corrigido o comportamento em que o ClickHouse podia, por engano, fazer pushdown de filtro em um banco de dados externo, como PostgreSQL, MySQL ou SQLite. Isso fecha: #71423. #75320 (Nikita Mikhaylov).
- Corrige uma falha no cache de esquema Protobuf que pode ocorrer durante a saída no formato Protobuf e durante a execução paralela da consulta
SYSTEM DROP FORMAT SCHEMA CACHE. #75357 (Pavel Kruglov). - Corrige um possível erro lógico ou problema de memória não inicializada quando um filtro de
HAVINGé antecipado com réplicas paralelas. #75363 (Vladimir Cherkasov). - Oculta informações sensíveis nas funções de tabela
icebergS3,icebergAzuree nos motores de tabela. #75378 (Kseniia Sumarokova). - A função
TRIMcom caracteres de remoção vazios calculados agora é tratada corretamente. Exemplo:SELECT TRIM(LEADING concat('') FROM 'foo')(problema #69922). #75399 (Manish Gill). - Corrige condição de corrida em IOutputFormat. #75448 (Pavel Kruglov).
- Corrige um possível erro
Elements ... and ... of Nested data structure ... (Array columns) have different array sizesquando subcolunas JSON do tipo Array são usadas em JOIN com tabelas distribuídas. #75512 (Pavel Kruglov). - Corrige a corrupção de dados com
CODEC(ZSTD, DoubleDelta). Fecha #70031. #75548 (Konstantin Bogdanov). - Corrige a interação entre allow_feature_tier e a configuração de compatibilidade do MergeTree. #75635 (Raúl Marín).
- Corrige o valor incorreto de processed_rows em system.s3queue_log caso o arquivo tenha sido reprocessado. #75666 (Kseniia Sumarokova).
- Passa a respeitar
materialized_views_ignore_errorsquando uma visão materializada grava em um mecanismo URL e há um problema de conectividade. #75679 (Christoph Wurm). - Corrigidos travamentos raros ao ler uma tabela
MergeTreeapós várias consultasRENAMEassíncronas (comalter_sync = 0) entre colunas de tipos diferentes. #75693 (Anton Popov). - Corrigido o erro
Block structure mismatch in QueryPipeline streamem algumas consultas comUNION ALL. #75715 (Nikolai Kochetov). - Reconstrói a projeção ao executar ALTER MODIFY da coluna de PK dela. Antes, isso podia levar a erros
CANNOT_READ_ALL_DATAdurante SELECTs após o ALTER MODIFY da coluna usada na PK da projeção. #75720 (Pavel Kruglov). - Corrige o resultado incorreto de
ARRAY JOINpara subconsultas escalares (com analisador). #75732 (Nikolai Kochetov). - Corrigida a desreferência de ponteiro nulo em
DistinctSortedStreamTransform. #75734 (Nikita Taranov). - Corrigido o comportamento de
allow_suspicious_ttl_expressions. #75771 (Aleksei Filatov). - Corrige a leitura de memória não inicializada na função
translate. Fecha #75592. #75794 (Alexey Milovidov). - Propagar as configurações de formato para a formatação de JSON como string no Native format. #75832 (Pavel Kruglov).
- Foi registrado no histórico de alterações de Settings que o hash paralelo passou a ser o algoritmo de join padrão na v24.12. Isso significa que o ClickHouse continuará usando hash não paralelo para join se estiver configurado um nível de compatibilidade anterior à v24.12. #75870 (Robert Schulze).
- Corrigido um bug que impedia a cópia de tabelas com índices min-max adicionados implicitamente para uma nova tabela (issue #75677). #75877 (Smita Kulkarni).
clickhouse-library-bridgepermite abrir bibliotecas arbitrárias do sistema de arquivos, o que significa que só é seguro executá-lo em um ambiente isolado. Para evitar uma vulnerabilidade quando ele é executado próximo ao clickhouse-server, limitaremos os caminhos das bibliotecas a um local definido na configuração. Essa vulnerabilidade foi encontrada por Arseniy Dugin no ClickHouse Bug Bounty Program. #75954 (Alexey Milovidov).- Acabamos usando serialização JSON para alguns metadados, o que foi um erro, porque o JSON não oferece suporte a dados binários dentro de literais de string, incluindo bytes nulos. Consultas SQL podem conter dados binários e UTF-8 inválido, então também precisamos oferecer suporte a isso em nossos arquivos de metadados. Ao mesmo tempo, o
JSONEachRowdo ClickHouse e formatos semelhantes contornam isso ao se desviarem do padrão JSON em favor de um round-trip perfeito para os dados binários. Veja a motivação aqui: https://github.com/ClickHouse/ClickHouse/pull/73668#issuecomment-2560501790. A solução é tornar a bibliotecaPoco::JSONconsistente com a serialização do formato JSON no ClickHouse. Isso fecha #73668. #75963 (Alexey Milovidov). - Corrige a verificação dos limites de commit no armazenamento
S3Queue. #76104 (Kseniia Sumarokova). - Corrigido problema ao anexar tabelas MergeTree com índices automáticos (
add_minmax_index_for_numeric_columns/add_minmax_index_for_string_columns). #76139 (Azat Khuzhin). - Corrigido o problema em que os stack traces das threads pai de um job (configuração
enable_job_stack_trace) não eram exibidos. Corrigido o problema em que a configuraçãoenable_job_stack_tracenão era propagada corretamente para as threads, fazendo com que o conteúdo do stack trace nem sempre respeitasse essa configuração. #76191 (Yakov Olkhovskiy). - Corrige a verificação incorreta de permissões, na qual
ALTER RENAMEexigia o privilégioCREATE USER. Fecha #74372. #76241 (pufit). - Corrigido o
reinterpretAscomFixedStringem arquiteturas big-endian. #76253 (Azat Khuzhin). - Corrigido erro lógico no S3Queue: “Expected current processor to be equal to for bucket ”. #76358 (Kseniia Sumarokova).
- Corrigido um deadlock em
ALTERcom o banco de dados Memory. #76359 (Azat Khuzhin). - Corrige erro lógico na análise de índice quando a condição em
WHEREcontém a funçãopointInPolygon. #76360 (Anton Popov). - Corrige possível chamada insegura no manipulador de sinal. #76549 (Yakov Olkhovskiy).
- Corrige o suporte a chave reversa no PartsSplitter. Isso corrige #73400. #73418 (Amos Bird).
melhoria em compilação/testes/empacotamento
- Suporte à compilação do HDFS tanto em Macs ARM quanto Intel. #74244 (Yan Xin).
- Habilitação de ICU e GRPC na compilação cruzada para Darwin. #75922 (Raúl Marín).
- Atualização para o LLVM 19 embutido. #75148 (Konstantin Bogdanov).
- Desativação do acesso à rede para o usuário padrão na imagem Docker. #75259 (Mikhail f. Shiryaev). Transforma todas as ações relacionadas ao clickhouse-server em uma função e as executa apenas ao iniciar o binário padrão em
entrypoint.sh. Uma melhoria há muito adiada foi sugerida em #50724. Adicionada a opção--usersaoclickhouse-extract-from-configpara obter valores dousers.xml. #75643 (Mikhail f. Shiryaev). - Remove cerca de 20 MB de código morto do binário. #76226 (Alexey Milovidov).
Lançamento do ClickHouse 25.1, 2025-01-28
Alteração incompatível com versões anteriores
JSONEachRowWithProgressgravará o progresso sempre que ele ocorrer. Nas versões anteriores, o progresso era mostrado apenas após cada bloco do resultado, o que o tornava inútil. A forma de exibição do progresso foi alterada: ele não mostrará valores zero. Isso fecha #70800. #73834 (Alexey Milovidov).- As tabelas
Mergeunificarão a estrutura das tabelas subjacentes usando uma união de suas colunas e derivando tipos comuns. Isso fecha #64864. Em certos casos, essa alteração pode ser incompatível com versões anteriores. Um exemplo é quando não há um tipo comum entre as tabelas, mas a conversão para o tipo da primeira tabela ainda é possível, como no caso de UInt64 e Int64 ou de qualquer tipo numérico e String. Se você quiser retornar ao comportamento antigo, definamerge_table_max_tables_to_look_for_schema_inferencecomo1ou definacompatibilitycomo24.12ou anterior. #73956 (Alexey Milovidov). - O formato de saída Parquet converte colunas Date e DateTime em tipos de data/hora compatíveis com Parquet, em vez de gravá-las como números brutos.
DateTimepassa a serDateTime64(3)(antes:UInt32); a configuraçãooutput_format_parquet_datetime_as_uint32restaura o comportamento antigo.Datepassa a serDate32(antes:UInt16). #70950 (Michael Kolupaev). - Por padrão, não permitir tipos não comparáveis (como
JSON/Object/AggregateFunction) emORDER BYe nas funções de comparaçãoless/greater/equal/etc. #73276 (Pavel Kruglov). - O mecanismo de banco de dados obsoleto
MaterializedMySQLfoi removido e não está mais disponível. #73879 (Alexey Milovidov). - A fonte de dicionário
mysqlnão executa mais a consultaSHOW TABLE STATUS, porque ela não fornece nenhum valor para tabelas InnoDB, assim como para quaisquer versões recentes do MySQL. Isso fecha #72636. Essa alteração é compatível com versões anteriores, mas foi colocada nesta categoria para aumentar a chance de você notá-la. #73914 (Alexey Milovidov). - As consultas
CHECK TABLEagora exigem um privilégioCHECKseparado. Nas versões anteriores, bastava ter o privilégioSHOW TABLESpara executar essas consultas. Porém, uma consultaCHECK TABLEpode ser pesada, e os limites usuais de complexidade de consulta para consultasSELECTnão se aplicam a ela. Isso criava um potencial de DoS. #74471 (Alexey Milovidov). - A função
h3ToGeo()agora retorna os resultados na ordem(lat, lon)(que é a ordem padrão para funções geométricas). Usuários que desejarem manter a ordem legada dos resultados(lon, lat)podem definir a configuraçãoh3togeo_lon_lat_result_order = true. #74719 (Manish Gill). - Um novo driver do MongoDB agora é o padrão. Usuários que quiserem continuar usando o driver legado podem definir a configuração do servidor
use_legacy_mongodb_integrationcomo true. #73359 (Robert Schulze).
Novo recurso
- Adicionada a possibilidade de aplicar mutações não concluídas (não materializadas pelo processo em segundo plano) durante a execução de consultas
SELECT, imediatamente após o envio. Isso pode ser habilitado definindoapply_mutations_on_fly. #74877 (Anton Popov). - Implementa o pruning de partições em tabelas
Icebergpara operações de transformação de partição relacionadas a tempo no Iceberg. #72044 (Daniil Ivanik). - Suporte a subcolunas na chave de ordenação do MergeTree e nos índices de salto. #72644 (Pavel Kruglov).
- Suporte para leitura de valores
HALF_FLOATdeApache Arrow/Parquet/ORC(eles são lidos comoFloat32). Isso encerra #72960. Tenha em mente que o half float IEEE-754 não é o mesmo queBFloat16. Encerra #73835. #73836 (Alexey Milovidov). - A tabela
system.trace_logconterá duas novas colunas,symbolselines, com o stack trace simbolizado. Isso permite coletar e exportar facilmente informações de perfil. Isso é controlado pelo valor de configuração do servidorsymbolizeemtrace_loge vem habilitado por padrão. #73896 (Alexey Milovidov). - Adiciona uma nova função,
generateSerialID, que pode ser usada para gerar números de incremento automático em tabelas. Continuação de #64310 por kazalika. Isso fecha #62485. #73950 (Alexey Milovidov). - Adicionada a sintaxe
query1 PARALLEL WITH query2 PARALLEL WITH query3 ... PARALLEL WITH queryNpara consultas DDL. Isso significa que as subconsultas{query1, query2, ... queryN}podem ser executadas em paralelo entre si (e isso é preferível). #73983 (Vitaly Baranov). - Foi adicionado um cache em memória para grânulos desserializados de índices de skipping. Isso deve tornar mais rápidas as consultas repetidas que usam índices de skipping. O tamanho do novo cache é controlado pelas configurações do servidor
skipping_index_cache_sizeeskipping_index_cache_max_entries. A motivação original para o cache foi os índices de similaridade vetorial, que agora ficaram muito mais rápidos. #70102 (Robert Schulze). - Agora, a interface web incorporada tem uma barra de progresso durante a execução da consulta. Ela permite cancelar consultas. Exibe o número total de registros e informações detalhadas sobre a velocidade. A tabela pode ser renderizada de forma incremental assim que os dados chegam. Habilita a compressão HTTP. A renderização da tabela ficou mais rápida. O cabeçalho da tabela passou a ficar fixo. Ela permite selecionar células e navegar entre elas com as teclas de seta. Corrige o problema em que o contorno da célula selecionada a deixava menor. As células não se expandem mais ao passar o mouse, mas apenas quando selecionadas. O momento de parar de renderizar os dados recebidos é decidido no cliente, e não no lado do servidor. Destaca grupos de dígitos em números. O design geral foi atualizado e ficou mais marcante. Verifica se o servidor está acessível e se as credenciais estão corretas, e exibe a versão do servidor e o tempo de atividade. O ícone de nuvem é contornado em todas as fontes, inclusive no Safari. Inteiros grandes dentro de tipos de dados aninhados serão renderizados melhor. Exibirá
inf/nancorretamente. Exibirá tipos de dados quando o mouse estiver sobre o cabeçalho de uma coluna. #74204 (Alexey Milovidov). - Adiciona a capacidade de criar índices min-max (skipping) por padrão para colunas gerenciadas pelo MergeTree, usando as configurações
add_minmax_index_for_numeric_columns(para colunas numéricas) eadd_minmax_index_for_string_columns(para colunas de texto). Por enquanto, ambas as configurações estão desativadas, portanto ainda não há mudança de comportamento. #74266 (Smita Kulkarni). - Adiciona os campos
script_query_numberescript_line_numberasystem.query_log, ao ClientInfo no protocolo nativo e aos logs do servidor. Isso fecha #67542. Créditos a pinsvin00 por ter dado início a esse recurso anteriormente em #68133. #74477 (Alexey Milovidov). - Adicionada a função de agregação
sequenceMatchEvents, que retorna os timestamps dos eventos correspondentes à cadeia de eventos mais longa no padrão. #72349 (UnamedRus). - Adicionada a função
arrayNormalizedGini. #72823 (flynn). - Adicionado suporte ao operador de subtração para
DateTime64, permitindo a subtração entre valoresDateTime64e também comDateTime. #74482 (Li Yin).
Recursos experimentais
- O tipo de dado
BFloat16está pronto para uso em produção. #73840 (Alexey Milovidov).
Melhoria de desempenho
- Função
indexHintotimizada. Agora, colunas usadas apenas como argumentos da funçãoindexHintnão são lidas da tabela. #74314 (Anton Popov). Se a funçãoindexHintfor uma peça central da sua arquitetura de dados corporativa, essa otimização vai salvar sua vida. - Contabilização mais precisa da configuração
max_joined_block_size_rowspara o algoritmo JOINparallel_hash. Ajuda a evitar maior consumo de memória em comparação com o algoritmohash. #74630 (Nikita Taranov). - Adicionado suporte à otimização de pushdown de predicados no nível do plano de consulta para a etapa
MergingAggregated. Isso melhora o desempenho de algumas consultas com o analyzer. #74073 (Nikolai Kochetov). - A divisão por hash dos blocos da tabela da esquerda foi removida da fase de probe do algoritmo de JOIN
parallel_hash. #73089 (Nikita Taranov). - Otimizado o formato de entrada RowBinary. Fecha #63805. #65059 (Pavel Kruglov).
- Grava partes no nível 1 se
optimize_on_insertestiver habilitado. Isso permite usar várias otimizações de consultas comFINALpara partes recém-gravadas. #73132 (Anton Popov). - A deserialização de strings ficou mais rápida graças a algumas otimizações de baixo nível. #65948 (Nikita Taranov).
- Ao executar uma comparação de igualdade entre registros, como durante operações de merge, as linhas passam a ser comparadas primeiro pelas colunas com maior probabilidade de serem diferentes. #63780 (UnamedRus).
- Melhora o desempenho do grace hash join ao reordenar a tabela à direita no join pelas chaves. #72237 (kevinyhzou).
- Permite que
arrayROCAUCearrayAUCPRcalculem áreas parciais da curva inteira, para que esse cálculo possa ser paralelizado em conjuntos de dados muito grandes. #72904 (Emmanuel). - Evite criar threads ociosas em excesso. #72920 (Guo Wangyang).
- Não liste as chaves do armazenamento de blobs se houver apenas expansão entre chaves na função de tabela. Fecha #73333. #73518 (Konstantin Bogdanov).
- Otimização de curto-circuito para funções executadas em argumentos Nullable. #73820 (李扬).
- Não aplicar
maskedExecuteem colunas que não sejam de função melhora o desempenho da execução com curto-circuito. #73965 (lgbo). - Desative a detecção automática de cabeçalhos nos formatos de entrada para
Kafka/NATS/RabbitMQ/FileLogpara melhorar o desempenho. #74006 (Azat Khuzhin). - Executar o pipeline com maior grau de paralelismo após a agregação com grouping sets. #74082 (Nikita Taranov).
- Reduz a seção crítica no
MergeTreeReadPool. #74202 (Guo Wangyang). - Melhoria de desempenho de réplicas paralelas. A desserialização de pacotes no iniciador da consulta, para pacotes não relacionados ao protocolo de réplicas paralelas, agora sempre ocorre na thread do pipeline. Antes, isso podia ocorrer em uma thread responsável pelo agendamento do pipeline, o que podia tornar o iniciador menos responsivo e atrasar a execução do pipeline. #74398 (Igor Nikonov).
- Melhora o desempenho de multirrequisições maiores no Keeper. #74849 (Antonio Andelic).
- Use wrappers de log por valor e não os aloque no heap. #74034 (Mikhail Artemenko).
- Restabelecer, em segundo plano, a conexão com as réplicas de dicionário do MySQL e do Postgres, para não atrasar as solicitações aos dicionários correspondentes. #71101 (Yakov Olkhovskiy).
- As réplicas paralelas usavam informações históricas sobre a disponibilidade das réplicas para melhorar a seleção, mas não atualizavam a contagem de erros da réplica quando a conexão ficava indisponível. Este PR passa a atualizar a contagem de erros da réplica quando ela fica indisponível. #72666 (zoomxi).
- Foi adicionada uma configuração do MergeTree,
materialize_skip_indexes_on_merge, que suprime a criação de skip indexes durante o merge. Isso permite controlar explicitamente (viaALTER TABLE [..] MATERIALIZE INDEX [...]) quando os skip indexes são criados. Isso pode ser útil se os skip indexes tiverem alto custo de compilação (por exemplo, vector similarity indexes). #74401 (Robert Schulze). - Otimizadas as solicitações ao Keeper em
Storage(S3/Azure)Queue. #74410 (Kseniia Sumarokova). #74538 (Kseniia Sumarokova). - Passa a usar até
1000réplicas paralelas por padrão. #74504 (Konstantin Bogdanov). - Melhora a reutilização da sessão HTTP ao ler do disco S3 (#72401). #74548 (Julian Maicher).
Aprimoramento
- Adiciona suporte a SETTINGS em uma consulta CREATE TABLE com ENGINE implícito e permite combinar configurações do engine e da consulta. #73120 (Raúl Marín).
- Ativa
use_hive_partitioningpor padrão. #71636 (Yarik Briukhovetskyi). - Adicionado suporte a CAST e ALTER entre tipos JSON com parâmetros diferentes. #72303 (Pavel Kruglov).
- Suporte à comparação por igualdade para valores de coluna JSON. #72991 (Pavel Kruglov).
- Melhora a formatação de identificadores com subcolunas JSON para evitar backticks desnecessários. #73085 (Pavel Kruglov).
- Melhorias nas métricas interativas. Corrige o problema de métricas de réplicas paralelas não serem exibidas por completo. Exibe as métricas em ordem da atualização mais recente e, em seguida, em ordem lexicográfica por nome. Não exibe métricas desatualizadas. #71631 (Julia Kartseva).
- Passa a formatar o formato de saída JSON por padrão. Adiciona a nova configuração
output_format_json_pretty_printpara controlar isso e a habilita por padrão. #72148 (Pavel Kruglov). - Passa a permitir
LowCardinality(UUID)por padrão. Isso se mostrou prático para clientes do ClickHouse Cloud. #73826 (Alexey Milovidov). - Mensagem mais clara durante a instalação. #73827 (Alexey Milovidov).
- Mensagem melhorada sobre redefinição de senha para o ClickHouse Cloud. #73831 (Alexey Milovidov).
- Melhorada a mensagem de erro para uma tabela File que não pode acrescentar dados a um arquivo. #73832 (Alexey Milovidov).
- Solicitar confirmação quando um usuário pedir acidentalmente a saída em formato binário (como Native, Parquet, Avro) no terminal. Isso fecha #59524. #73833 (Alexey Milovidov).
- Realce os espaços à direita nos formatos Pretty e Vertical no terminal para maior clareza. Isso é controlado pela configuração
output_format_pretty_highlight_trailing_spaces. Implementação inicial por Braden Burns em #72996. Fecha #71590. #73847 (Alexey Milovidov). clickhouse-clienteclickhouse-localdetectarão automaticamente a compressão da stdin quando ela for redirecionada de um arquivo. Isso fecha #70865. #73848 (Alexey Milovidov).- Por padrão, corta nomes de colunas longos demais nos formatos Pretty. Isso é controlado pelas configurações
output_format_pretty_max_column_name_width_cut_toeoutput_format_pretty_max_column_name_width_min_chars_to_cut. Esta é a continuação do trabalho de tanmaydatta em #66502. Fecha #65968. #73851 (Alexey Milovidov). - Deixe os formatos
Prettyainda mais bonitos: compacte os blocos se não tiver passado muito tempo desde a saída do bloco anterior. Isso é controlado pelas novas configuraçõesoutput_format_pretty_squash_consecutive_ms(50 ms por padrão) eoutput_format_pretty_squash_max_wait_ms(1000 ms por padrão). Continuação de #49537. Isso encerra #49153. #73852 (Alexey Milovidov). - Adiciona uma métrica para o número de partes de origem atualmente em processo de mesclagem. Isso fecha #70809. #73868 (Alexey Milovidov).
- Destaca colunas no formato
Verticalquando a saída é enviada para um terminal. Isso pode ser desativado com a configuraçãooutput_format_pretty_color. #73898 (Alexey Milovidov). - A compatibilidade com MySQL foi aprimorada a ponto de, agora, o
mysqlsh(uma CLI avançada do MySQL da Oracle) conseguir se conectar ao ClickHouse. Isso é necessário para facilitar os testes. #73912 (Alexey Milovidov). - Os formatos Pretty podem exibir campos com várias linhas dentro de uma célula da tabela, o que melhora a legibilidade. Isso vem habilitado por padrão e pode ser controlado pela configuração
output_format_pretty_multiline_fields. Continuação do trabalho de Volodyachan em #64094. Isso encerra #56912. #74032 (Alexey Milovidov). - Expor os headers HTTP X-ClickHouse ao JavaScript no navegador. Isso torna o desenvolvimento de aplicações mais prático. #74180 (Alexey Milovidov).
- O formato
JSONEachRowWithProgressincluirá eventos com metadados, bem como totais e extremos. Ele também incluirows_before_limit_at_leasterows_before_aggregation. O formato imprime a exceção corretamente se ela chegar após resultados parciais. O progresso agora inclui os nanossegundos transcorridos. Um evento final de progresso é emitido ao fim. O progresso durante a execução da consulta não será impresso com frequência maior do que o valor da configuraçãointeractive_delay. #74181 (Alexey Milovidov). - A ampulheta girará suavemente na UI do Play. #74182 (Alexey Milovidov).
- Mesmo que a resposta HTTP esteja comprimida, envie os pacotes assim que forem recebidos. Isso permite que o navegador receba pacotes de progresso e dados comprimidos. #74201 (Alexey Milovidov).
- Se o número de registros de saída for maior que N =
output_format_pretty_max_rows, em vez de exibir apenas as primeiras N linhas, a tabela de saída será cortada no meio, exibindo as N/2 primeiras linhas e as N/2 últimas linhas. Continuação de #64200. Isso fecha #59502. #73929 (Alexey Milovidov). - Permitir um planejamento de join mais geral quando o algoritmo de hash join estiver habilitado. #71926 (János Benjamin Antal).
- Permite criar índice
bloom_filterem colunas com o tipo de dadosDateTime64. #66416 (Yutong Xiao). - Quando
min_age_to_force_merge_secondsemin_age_to_force_merge_on_partition_onlyestiverem ambos habilitados, a mesclagem de partes ignorará o limite máximo de bytes. #73656 (Kai Zhu). - Adicionados cabeçalhos HTTP à tabela de logs de spans do OpenTelemetry para melhorar a rastreabilidade. #70516 (jonymohajanGmail).
- Suporte para gravar arquivos
orccom fuso horário personalizado, em vez de sempre usar o fuso horárioGMT. #70615 (kevinyhzou). - Respeita as configurações de agendamento de E/S ao gravar backups em diferentes nuvens. #71093 (János Benjamin Antal).
- Adiciona o alias
namepara a colunametricemsystem.asynchronous_metrics. #71164 (megao). - Historicamente, por algum motivo, a consulta
ALTER TABLE MOVE PARTITION TO TABLEverificava as permissõesSELECTeALTER DELETEem vez da permissão específicaALTER_MOVE_PARTITION. Este PR passa a usar esse tipo de acesso. Para compatibilidade, essa permissão também será concedida implicitamente seSELECTeALTER DELETEforem concedidos, mas esse comportamento será removido em lançamentos futuros. Fecha #16403. #71632 (pufit). - Lançar uma exceção ao tentar materializar uma coluna na chave de ordenação, em vez de permitir que isso quebre a ordenação. #71891 (Peter Nguyen).
- Ocultar informações sensíveis em
EXPLAIN QUERY TREE. #72025 (Yakov Olkhovskiy). - Suporte a tipos lógicos inteiros do Parquet no leitor “nativo”. #72105 (Arthur Passos).
- Solicita credenciais de forma interativa no navegador se o usuário padrão exigir uma senha. Em versões anteriores, o servidor retornava HTTP 403; agora, retorna HTTP 401. #72198 (Alexey Milovidov).
- Converta os tipos de acesso
CREATE_USER,ALTER_USER,DROP_USER,CREATE_ROLE,ALTER_ROLE,DROP_ROLEde globais para parametrizados. Isso significa que agora você pode conceder privilégios de gerenciamento de acesso com mais precisão:. #72246 (pufit). - Adiciona a coluna
latest_fail_error_code_nameasystem.mutations. Precisamos dessa coluna para introduzir uma nova métrica sobre mutações travadas e usá-la para criar gráficos dos erros encontrados na nuvem, bem como, opcionalmente, adicionar um novo alerta com menos ruído. #72398 (Miсhael Stetsyuk). - Reduz a quantidade de alocações na consulta
ATTACH PARTITION. #72583 (Konstantin Morozov). - Faz com que o limite
max_bytes_before_external_sortdependa do consumo total de memória da consulta (antes, era o número de bytes no bloco de ordenação de uma thread de ordenação; agora, tem o mesmo significado quemax_bytes_before_external_group_by— é o limite total para toda a memória da consulta em todas as threads). Além disso, foi adicionada mais uma configuração para controlar o tamanho do bloco em disco:min_external_sort_block_bytes. #72598 (Azat Khuzhin). - Ignorar as restrições de memória no collector de traces. #72606 (Azat Khuzhin).
- Adicionadas as configurações do servidor
dictionaries_lazy_loadewait_dictionaries_load_at_startupasystem.server_settings. #72664 (Christoph Wurm). - Adiciona a configuração
max_backup_bandwidthà lista de configurações que podem ser especificadas como parte das consultasBACKUP/RESTORE. #72665 (Christoph Wurm). - Redução do nível de log para o surgimento de partes replicadas no mecanismo ReplicatedMergeTree, ajudando a minimizar o volume de logs gerados em um cluster replicado. #72876 (mor-akamai).
- Melhora a extração de expressões comuns em disjunções. Permite simplificar a expressão de filtro resultante mesmo que não haja uma subexpressão comum a todas as disjunções. Continuação de #71537. #73271 (Dmitry Novik).
- No Storage
S3Queue/AzureQueue, é possível adicionar configurações a tabelas criadas sem configurações. #73283 (Kseniia Sumarokova). - Introduz a configuração
least_greatest_legacy_null_behavior(padrão:false), que controla se as funçõesleastegreatesttratam argumentosNULLretornando sempreNULL(setrue) ou ignorando-os (sefalse). #73344 (Robert Schulze). - Use múltiplas requisições do Keeper na thread de limpeza de ObjectStorageQueueMetadata. #73357 (Antonio Andelic).
- Quando o ClickHouse é executado em um cgroup, ainda coletamos métricas assíncronas de todo o sistema relacionadas à carga do sistema, ao escalonamento de processos, à memória etc. Elas podem fornecer sinais úteis quando o ClickHouse é o único processo no host com alto consumo de recursos. #73369 (Nikita Taranov).
- No mecanismo de armazenamento
S3Queue, passou a ser possível transferir tabelas ordenadas antigas criadas antes da versão 24.6 para a nova estrutura com buckets. #73467 (Kseniia Sumarokova). - Adiciona
system.azure_queue, de forma semelhante aosystem.s3queueexistente. #73477 (Kseniia Sumarokova). - A função
parseDateTime64(e suas variantes) agora produz resultados corretos para datas de entrada anteriores a 1970 ou posteriores a 2106. Exemplo:SELECT parseDateTime64InJodaSyntax('2200-01-01 00:00:00.000', 'yyyy-MM-dd HH:mm:ss.SSS'). #73594 (zhanglistar). - Corrige alguns problemas de usabilidade do
clickhouse-disksrelatados pelos usuários. Fecha #67136. #73616 (Daniil Ivanik). - Permite alterar as configurações de commit no armazenamento S3(Azure)Queue. (As configurações de commit são:
max_processed_files_before_commit,max_processed_rows_before_commit,max_processed_bytes_before_commit,max_processing_time_sec_before_commit). #73635 (Kseniia Sumarokova). - No armazenamento S3(Azure)Queue, o progresso entre as fontes é agregado para comparação com as configurações do limite de commit. #73641 (Kseniia Sumarokova).
- Adiciona suporte às configurações principais na consulta
BACKUP/RESTORE. #73650 (Vitaly Baranov). - Considere o
output_format_compression_levelna saída em Parquet. #73651 (Arthur Passos). - Adiciona a leitura de
fixed_size_listdo Apache Arrow como umArray, em vez de tratá-lo como um tipo não compatível. #73654 (Julian Meyers). - Adicionados dois motores de backup:
Memory(mantém os backups dentro da sessão atual do usuário) eNull(não mantém backups em lugar nenhum), para testes. #73690 (Vitaly Baranov). concurrent_threads_soft_limit_numeconcurrent_threads_soft_limit_num_ratio_to_corespassaram a poder ser alterados sem reiniciar o servidor. #73713 (Sergei Trifonov).- Adicionado suporte a tipos numéricos estendidos (
Decimal, números inteiros grandes) nas funçõesformatReadable. #73765 (Raúl Marín). - Suporte a TLS para compatibilidade com o protocolo wire do Postgres. #73812 (scanhex12).
- A função
isIPv4Stringretornava true se um endereço IPv4 válido fosse seguido por um byte nulo, quando nesse caso deveria retornar false. Continuação de #65387. #73946 (Alexey Milovidov). - Torna o código de erro do MySQL wire protocol compatível com o MySQL. Continuação de #56831. Fecha #50957. #73948 (Alexey Milovidov).
- Adiciona a configuração
validate_enum_literals_in_opearatorspara validar literais enum em operadores comoINeNOT INem relação ao tipo enum e lançar uma exceção se o literal não for um valor enum válido. #73985 (Vladimir Cherkasov). - No Storage
S3(Azure)Queue, efetuar o commit de todos os arquivos (em um único lote definido pelas configurações de commit) em uma única transação do Keeper. #73991 (Kseniia Sumarokova). - Desativa a detecção de cabeçalho para UDFs executáveis e dicionários (poderia levar a Function ‘X’: resultado incorreto, esperado Y linha(s), obtido Y-1). #73992 (Azat Khuzhin).
- Adicionada a opção
distributedparaEXPLAIN PLAN.Agora,EXPLAIN distributed=1 ...anexa o plano remoto às etapasReadFromParallelRemote*. #73994 (Nikolai Kochetov). - Use o tipo de retorno correto para not/xor com argumentos Dynamic. #74013 (Pavel Kruglov).
- Permitir a alteração de
add_implicit_sign_column_constraint_for_collapsing_engineapós a criação da tabela. #74014 (Christoph Wurm). - Suporte a subcolunas na consulta SELECT de uma visão materializada. #74030 (Pavel Kruglov).
- Agora há três maneiras simples de definir um prompt personalizado no
clickhouse-client: 1. por meio do parâmetro de linha de comando--prompt, 2. no arquivo de configuração, por meio da definição<prompt>[...]</prompt>, e 3. também no arquivo de configuração, por meio de configurações específicas de cada conexão<connections_credentials><prompt>[...]</prompt></connection_credentials>. #74168 (Christoph Wurm). - Detecta automaticamente uma conexão segura ao se conectar à porta 9440 no ClickHouse Client. #74212 (Christoph Wurm).
- Autenticação de usuários apenas com nome de usuário para http_handlers (antes, também era necessário que o usuário informasse a senha). #74221 (Azat Khuzhin).
- O suporte às linguagens de consulta alternativas PRQL e KQL foi classificado como Experimental. Para usá-las, especifique as configurações
allow_experimental_prql_dialect = 1eallow_experimental_kusto_dialect = 1. #74224 (Robert Schulze). - Suporte ao retorno do tipo Enum padrão em mais funções de agregação. #74272 (Raúl Marín).
- Em
OPTIMIZE TABLE, agora também é possível especificar a palavra-chaveFORCEcomo alternativa à palavra-chaveFINAL. #74342 (Robert Schulze). - Adiciona a métrica
IsServerShuttingDown, necessária para disparar um alerta quando o desligamento do servidor demora mais do que o esperado. #74429 (Miсhael Stetsyuk). - Adicionados os nomes de tabelas Iceberg ao EXPLAIN. #74485 (alekseev-maksim).
- Melhora a mensagem de erro ao usar RECURSIVE CTE com o analisador antigo. #74523 (Raúl Marín).
- Exibir mensagens de erro detalhadas em
system.errors. #74574 (Vitaly Baranov). - Permite o uso de senha na comunicação do cliente com o clickhouse-keeper. Esse recurso não é muito útil se você especificar a configuração SSL adequada para o servidor e o cliente, mas ainda pode ser útil em alguns casos. A senha não pode ter mais de 16 caracteres. Não tem relação com o modelo de autenticação do Keeper. #74673 (alesapin).
- Adiciona um código de erro ao recarregador de configuração. #74746 (Garrett Thomas).
- Adicionado suporte a endereços IPv6 nas funções de tabela e nos motores do MySQL e do PostgreSQL. #74796 (Mikhail Koviazin).
- Implementa a otimização de curto-circuito de
divideDecimal. Corrige #74280. #74843 (Kevin Mingtarja). - Agora é possível especificar usuários nos scripts de inicialização. #74894 (pufit).
- Adicionar suporte a tokens SAS do Azure. #72959 (Azat Khuzhin).
Correção de bug (mau funcionamento perceptível ao usuário em um lançamento estável oficial)
- Defina o nível de compressão do Parquet somente se o codec de compressão oferecer suporte. #74659 (Arthur Passos).
- Corrigida uma regressão em que o uso de locales de collation com modificadores causava erro. Por exemplo,
SELECT arrayJoin(['kk 50', 'KK 01', ' KK 2', ' KK 3', 'kk 1', 'x9y99', 'x9y100']) item ORDER BY item ASC COLLATE 'tr-u-kn-true-ka-shiftedagora funciona. #73544 (Robert Schulze). - Correção para a impossibilidade de criar um nó SEQUENTIAL com o keeper-client. #64177 (Duc Canh Le).
- Corrige a contagem incorreta de caracteres nas funções
position. #71003 (思维). - As operações
RESTOREpara entidades de acesso exigiam permissões além do necessário devido a revogações parciais não tratadas. Este PR corrige o problema. Fecha #71853. #71958 (pufit). - Evita pausa após
ALTER TABLE REPLACE/MOVE PARTITION FROM/TO TABLE. Obtém as configurações corretas para o agendamento de tarefas em segundo plano. #72024 (Aleksei Filatov). - Corrigido o tratamento de tuplas vazias em alguns formatos de entrada e saída (por exemplo, Parquet, Arrow). #72616 (Michael Kolupaev).
- As instruções GRANT SELECT/INSERT no nível de coluna em bancos de dados/tabelas com curinga agora geram erro. #72646 (Johann Gan).
- Corrige o problema em que um usuário não consegue executar
REVOKE ALL ON *.*devido a grants implícitos na entidade de acesso de destino. #72872 (pufit). - Corrige a formatação de fusos horários positivos da função escalar formatDateTime. #73091 (ollidraese).
- Correção para refletir corretamente a porta de origem quando a conexão é feita por meio de PROXYv1 e
auth_use_forwarded_addressestá definido — anteriormente, a porta do proxy era usada de forma incorreta. Adicionada a funçãocurrentQueryID(). #73095 (Yakov Olkhovskiy). - Propaga as configurações de formato para o NativeWriter no TCPHandler, para que configurações como
output_format_native_write_json_as_stringsejam aplicadas corretamente. #73179 (Pavel Kruglov). - Corrige um travamento no StorageObjectStorageQueue. #73274 (Kseniia Sumarokova).
- Corrige uma falha rara em uma view materializada atualizável durante o desligamento do servidor. #73323 (Michael Kolupaev).
- O marcador
%fda funçãoformatDateTimeagora gera incondicionalmente seis dígitos de fração de segundo. Isso torna o comportamento compatível com a função MySQLDATE_FORMAT. O comportamento anterior pode ser restaurado usando a configuraçãoformatdatetime_f_prints_scale_number_of_digits = 1. #73324 (ollidraese). - Corrigida a filtragem pela coluna
_etagao ler do armazenamentos3e da função de tabela. #73353 (Anton Popov). - Corrigido o erro
Not-ready Set is passed as the second argument for function 'in'ao usarIN (subquery)na expressãoJOIN ON, com o analisador antigo. #73382 (Nikolai Kochetov). - Correção na preparação para squashing em colunas Dynamic e JSON. Anteriormente, em alguns casos, novos tipos podiam ser inseridos em Variant compartilhado/dados compartilhados mesmo quando o limite de tipos/caminhos ainda não havia sido atingido. #73388 (Pavel Kruglov).
- Verifica se há tamanhos corrompidos durante a decodificação binária de tipos para evitar alocações excessivamente grandes. #73390 (Pavel Kruglov).
- Corrigido um erro lógico ao ler de um cluster com réplica única e réplicas paralelas habilitadas. #73403 (Michael Kolupaev).
- Correção do ObjectStorageQueue com ZooKeeper e versões mais antigas do Keeper. #73420 (Antonio Andelic).
- Implementa uma correção necessária para habilitar o particionamento Hive por padrão. #73479 (Yarik Briukhovetskyi).
- Correção de condição de corrida ao criar índice de similaridade vetorial. #73517 (Antonio Andelic).
- Corrige uma falha de segmentação quando a fonte do dicionário contém uma função com dados inválidos. #73535 (Yarik Briukhovetskyi).
- Corrige as tentativas de repetição de
insertcom falha no armazenamento S3(Azure)Queue. Fecha #70951. #73546 (Kseniia Sumarokova). - Corrigido erro na função
tupleElementque pode ocorrer em alguns casos para tuplas com elementosLowCardinalitye com a configuraçãooptimize_functions_to_subcolumnshabilitada. #73548 (Anton Popov). - Corrige o parsing de
enumglob seguido por outro de intervalo. Corrige #73473. #73569 (Konstantin Bogdanov). - Corrigido o problema em que parallel_replicas_for_non_replicated_merge_tree era ignorado em subconsultas de tabelas não replicadas. #73584 (Igor Nikonov).
- Correção para std::logical_error lançado quando a tarefa não pode ser agendada. Encontrado em testes de estresse. #73629 (Alexander Gololobov).
- Não interpretar consultas em
EXPLAIN SYNTAXpara evitar erros lógicos decorrentes de um estágio de processamento incorreto em consultas distribuídas. Corrige #65205. #73634 (Dmitry Novik). - Corrige uma possível inconsistência de dados na coluna Dynamic. Corrige um possível erro lógico:
Nested columns sizes are inconsistent with local_discriminators column size. #73644 (Pavel Kruglov). - Corrigido
NOT_FOUND_COLUMN_IN_BLOCKem consultas comFINALeSAMPLE. Corrigido um resultado incorreto em seleções comFINALdeCollapsingMergeTreee habilitadas as otimizações deFINAL. #73682 (Anton Popov). - Corrigida falha em LIMIT BY COLUMNS. #73686 (Raúl Marín).
- Corrige o bug quando se força o uso da projeção normal e a consulta é exatamente igual à projeção definida, mas a projeção não é selecionada e, assim, um erro é exibido. #73700 (Shichao Jin).
- Corrige a desserialização da estrutura Dynamic/Object. Isso podia levar a exceções CANNOT_READ_ALL_DATA. #73767 (Pavel Kruglov).
- Ignorar
metadata_version.txtdurante a restauração de partes de um backup. #73768 (Vitaly Baranov). - Corrige falha de segmentação ao converter com CAST para Enum usando LIKE. #73775 (zhanglistar).
- Correção para bucket do S3 Express que não funcionava como disco. #73777 (Sameer Tamsekar).
- Permite mesclar linhas com valores inválidos na coluna de sinal em tabelas CollapsingMergeTree. #73864 (Christoph Wurm).
- Corrigido erro ao consultar DDL com réplica offline. #73876 (Tuan Pham Anh).
- Corrige uma falha ocasional na comparação de tipos
map(), devido à possibilidade de criarMapsem os nomes explícitos (‘keys’,‘values’) de sua tupla aninhada. #73878 (Yakov Olkhovskiy). - Ignora funções de janela na resolução da cláusula GROUP BY ALL. Corrige #73501. #73916 (Dmitry Novik).
- Corrige privilégios implícitos (antes funcionavam como um curinga). #73932 (Azat Khuzhin).
- Corrige o alto consumo de memória durante a criação de maps aninhados. #73982 (Pavel Kruglov).
- Corrige o parsing de JSON aninhado com chaves vazias. #73993 (Pavel Kruglov).
- Correção: o alias pode deixar de ser adicionado à projeção se for referenciado por outro alias e selecionado em ordem inversa. #74033 (Yakov Olkhovskiy).
- Ignorar erros de objeto não encontrado no Azure durante a inicialização do disco plain_rewritable. #74059 (Julia Kartseva).
- Corrige o comportamento de
anyeanyLastcom tipos enum e uma tabela vazia. #74061 (Joanna Hulboj). - Corrige o caso em que o usuário especifica argumentos nomeados no engine de tabela Kafka. #74064 (Yarik Briukhovetskyi).
- Corrige a alteração das configurações do Storage
S3Queuede com o prefixo “s3queue_” para sem ele, e vice-versa. #74075 (Kseniia Sumarokova). - Adiciona a configuração
allow_push_predicate_ast_for_distributed_subqueries. Isso adiciona pushdown de predicados baseado em AST para consultas distribuídas com o analyzer. Esta é uma solução temporária usada até haver suporte a consultas distribuídas com serialização do plano de consulta. Fecha #66878 #69472 #65638 #68030 #73718. #74085 (Nikolai Kochetov). - Corrige um problema em que, após #73095, a porta pode estar presente no campo forwarded_for, o que impede a resolução do nome do host quando a porta está incluída. #74116 (Yakov Olkhovskiy).
- Corrigida a formatação incorreta de
ALTER TABLE (DROP STATISTICS ...) (DROP STATISTICS ...). #74126 (Han Fei). - Correção do problema #66112. #74128 (Anton Ivashkin).
- Não é mais possível usar
Loopcomo engine de tabela emCREATE TABLE. Essa combinação antes causava falhas de segmentação. #74137 (Yarik Briukhovetskyi). - Corrige um problema de segurança para evitar injeção de SQL nas funções de tabela postgresql e sqlite. #74144 (Pablo Marcos).
- Corrigido um travamento ao ler uma subcoluna de uma tabela compactada do engine Memory. Corrige #74009. #74161 (Nikita Taranov).
- Corrigido um loop infinito que ocorria em consultas à system.detached_tables. #74190 (Konstantin Morozov).
- Corrige erro lógico no s3queue ao marcar o arquivo como falho. #74216 (Kseniia Sumarokova).
- Corrige as configurações de cópia nativa (
allow_s3_native_copy/allow_azure_native_copy) paraRESTOREa partir do backup de base. #74286 (Azat Khuzhin). - Corrigido o problema em que o número de tabelas detached no banco de dados era um múltiplo de max_block_size. #74289 (Konstantin Morozov).
- Corrigida a cópia via ObjectStorage (ou seja, S3) quando as credenciais de origem e destino diferem. #74331 (Azat Khuzhin).
- Corrigida a detecção de “usar o método Rewrite na API JSON” para cópia nativa no GCS. #74338 (Azat Khuzhin).
- Corrigido o cálculo incorreto de
BackgroundMergesAndMutationsPoolSize(estava 2x acima do valor real). #74509 (alesapin). - Corrige o bug de vazamento de watches no Keeper ao habilitar o Cluster Discovery. #74521 (RinChanNOW).
- Corrigido problema de alinhamento de memória relatado pelo UBSan #74512. #74534 (Arthur Passos).
- Corrigida a limpeza concorrente do KeeperMap durante a criação de tabelas. #74568 (Antonio Andelic).
- Não remova colunas de projeção não utilizadas em subconsultas quando houver
EXCEPTouINTERSECT, para preservar o resultado correto da consulta. Corrige #73930. Corrige #66465. #74577 (Dmitry Novik). - Corrigidas consultas
INSERT SELECTentre tabelas com colunasTuple, e habilitada a serialização esparsa. #74698 (Anton Popov). - A função
rightfunciona incorretamente com deslocamento negativo constante. #74701 (Daniil Ivanik). - Corrigida uma falha que às vezes fazia a inserção de dados compactados com gzip falhar devido a uma descompressão defeituosa no lado do cliente. #74707 (siyuan).
- Revogações parciais de grants com curinga podiam remover mais privilégios do que o esperado. Fecha #74263. #74751 (pufit).
- Correção no Keeper: corrige a leitura de registros de log do disco. #74785 (Antonio Andelic).
- Corrigida a verificação de permissões para SYSTEM REFRESH/START/STOP VIEW; agora não é mais necessário ter essa permissão em
*.*para executar uma consulta em uma view específica, apenas as permissões dessa view são necessárias. #74789 (Alexander Tokmakov). - A função
hasColumnInTablenão considera colunas alias. Corrigida para também funcionar com colunas alias. #74841 (Bharat Nallan). - Corrige o erro FILE_DOESNT_EXIST que ocorria durante a mesclagem de partes de dados em uma tabela com uma coluna vazia no Azure Blob Storage. #74892 (Julia Kartseva).
- Corrige o nome da coluna da projeção ao fazer join em tabelas temporárias, fecha #68872. #74897 (Vladimir Cherkasov).
Melhoria em Compilação/Testes/Empacotamento
- O script de instalação universal passará a oferecer a instalação até mesmo no macOS. #74339 (Alexey Milovidov).