Skip to main content

Índice

Lançamento do ClickHouse v25.12, 2025-12-18
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 String para Nullable(String), não faremos mutação nos dados. Mas, para a função de agregação uniq, ela usa uma estrutura de dados diferente: para uma coluna Nullable, usará AggregateFunctionNull com um agregador uniq aninhado. A AggregateFunctionNull serializará 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 executar ALTER TABLE table MATERIALIZE STATISTICS ALL para 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_result foi alterado de true para false. Isso faz com que CHECK TABLE retorne 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_columns ou add_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 MergeTree especiais (como ReplacingMergeTree, CollapsingMergeTree etc.) com uma chave ORDER BY vazia, já que o comportamento de merge nessas tabelas não é definido. Se você ainda precisar criar uma tabela desse tipo, habilite a configuração allow_suspicious_primary_key. #91569 (Anton Popov).
  • Corrigidas as funções bitShiftLeft e bitShiftRight para 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_projections para 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 compatibility para a versão anterior ou as configurações do MergeTree dynamic_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ção after_processing deve ser aplicada). O valor padrão é false; corrigida a verificação de mv anexada durante select. #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ção max_reverse_dictionary_lookup_cache_size_bytes, para acelerar lookups repetidos. #89197 (Nihal Z. Miaji).
  • Adiciona a configuração type_json_skip_invalid_typed_paths para 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 BY na operação CREATE para iceberg + ordenação em INSERT. Resolve #89916. #90141 (Konstantin Vedernikov).
  • Introduz configurações no nível da projeção, expostas por meio da nova cláusula WITH SETTINGS em ALTER 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 has quando 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 a Native; no entanto, diferentemente de Native, 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_functions para 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 agregadora windowFunnel. 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_mode para 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 Time e Time64 já estão prontos para uso em produção, a configuração enable_time_time64_type agora vem habilitada por padrão. #89345 (Yarik Briukhovetskyi).
  • Suporte à leitura do CDF do DeltaLake por meio da função de tabela deltaLake com as configurações delta_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 de delta.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_format para melhorar consultas INSERT em tabelas com colunas AggregateFunction, permitindo inserir dados como estado serializado, valores brutos ou arrays. #88088 (Punith Nandyappa Subashchandra).

Melhoria de desempenho

  • Otimize consultas ORDER BY...LIMIT N usando 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 WHERE com condições de filtro conectadas por AND e OR. Anteriormente, a cláusula WHERE precisava ser uma conjunção (AND) de condições de filtro para utilizar skip indexes. Uma nova configuração use_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ção read_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 select que podem ser usadas em consultas insert select from s3Cluster(...) para execução distribuída paralela. Essa mudança permite usar where, 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, has e outras, aproveitando um filtro preliminar adicional criado a partir do índice de texto. Essa otimização é habilitada pela configuração query_plan_text_index_add_hint. Melhorado o uso do índice de texto para colunas do tipo de dado Map. #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 T64 com 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ção s3_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_limit foi alterado para 10. #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 ANTI JOINs. 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), definindo min_bytes_for_wide_part e vertical_merge_algorithm_min_bytes_to_activate como 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_id e last_error_trace à tabela system.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-message ou false. #87784 (Larry Snizek).
  • Adicionada mensagem de erro informando que a parte foi deduplicada. #80264 (Aleksandr Musorin).
  • Adicionadas as colunas dependencies e missing_dependencies a system.kafka_consumers para indicar as tabelas de destino de visões materializadas de tabelas Kafka. Adicionado o contador KafkaMVNotReady. #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-rewritable tem implementação e layout próprios. Não vamos mais baseá-lo em discos plain regulares. #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_ms como uma configuração ajustável do engine de tabela Kafka para definir por quanto tempo os consumidores aguardam novos dados. Resolve #89204. #90112 (Jeremy Aguilon).
  • Adiciona uma nova coluna parts_in_progress_names a system.mutations para 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_cache em 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_REACHED será lançada quando o hard_limit para a conexão de clientes HTTP for atingido. Esse limite está definido como 20000 para 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+/ (ou Cmd+/ 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 FailedInitialQuery e FailedInitialSelectQuery. #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_pool em vez de usar o pool de threads incondicionalmente. #91208 (Raufs Dunamalijevs).
  • Suporte para o tipo JSON em tupleElement. 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 em SELECT. 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 com INSERT 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 consulta SELECT está ordenado. Na verdade, descobriu-se que, no caso geral, é realmente difícil verificar isso, mas o caso simples com ORDER 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 o SELECT retorna dados diferentes. #91830 (Sema Checherinda).
  • Permite conversão implícita de tipos ao converter Array em QBit. Arrays de inteiros e de ponto flutuante agora podem ser inseridos diretamente em colunas QBit sem conversões explícitas de tipo. #91846 (Raufs Dunamalijevs).
  • Adicionado um limite para o tamanho de mensagens CapnProto. Ele pode ser alterado com format_capn_proto_max_message_size. #91888 (Antonio Andelic).
  • Refinar as métricas do mark cache para rastrear apenas consultas (após #83415, MarkCacheHits/MarkCacheMisses também foram atualizados para merges; este PR reverterá esse comportamento). #91910 (Azat Khuzhin).
  • Correção do fato de client_info.interface ser definido como TCP em conexões locais. #91933 (Konstantin Bogdanov).
  • O parâmetro refresh_certificates_task_interval na 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_log para system.*_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 Time e Time64. Resolve #84544. #84715 (Yarik Briukhovetskyi).
  • Inicializa DNSResolver antes 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 JOIN quando 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 get que ocorria durante a análise do índice Set quando o predicado continha a constante NULL. 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 theilsU e contingency que 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 JOIN dentro de IN e a configuração enable_lazy_columns_replication habilitada. Resolve #90361. #89997 (Pavel Kruglov).
  • Corrige um possível erro de lógica ao usar analyzer_compatibility_join_using_top_level_identifier com 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 tabela system.dead_letter_queue nã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: Replicated durante a inserção ao usar ARRAY JOIN com a configuração enable_lazy_columns_replication habilitada. #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 numbers quando 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 schema durante 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 FILL infinita com nan/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_path para 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 L2DistanceTransposed que causava falhas quando o argumento precision excedia o intervalo válido. Resolve #90401. #90405 (Raufs Dunamalijevs).
  • Corrige um possível erro lógico em arrayUnion com o argumento Array(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 KeyValuePairExtractor estático causava corrupção de dados ou travamentos durante leituras concorrentes de arquivos. #90474 (Paresh Joshi).
  • Corrigidos cálculos incorretos de distância em L2DistanceTransposed ao usar vetores de referência do tipo array (que, por padrão, são Array(Float64))) com colunas QBit cujos tipos de elemento não são Float64 (Float32, BFloat16). A função agora faz automaticamente o cast do vetor de referência para corresponder ao tipo de elemento de QBit. 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 formato Arrow. 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 concatWithSeparator ao 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 BY com GROUP BY, para que gere o erro NOT_AN_AGGREGATE correto em vez de NOT_FOUND_COLUMN_IN_BLOCK quando LIMIT BY usa colunas que não estão em GROUP BY. Fecha #89713. #90665 (xiaohuanlin).
  • Corrige erros de conversão de tipo ao usar colunas LowCardinality como 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 UPDATE quando a função de tabela remote é usada com localhost como host de destino. #90761 (pufit).
  • Corrige os Secrets ocultos em named collections para que dependam de display_secrets_in_show_and_select e format_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 em MergeTreeReadPoolParallelReplicas, 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 SummingMergeTree em colunas Nested LowCardinality. #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_parts desativado. #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ção isNull. Fecha #73849. #91105 (Nihal Z. Miaji).
  • Corrige um erro lógico em ARRAY JOIN quando 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 float subnormais 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 dictGetDescendants causada por NULL quando 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 IN quando 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 QBit ao usar parâmetros de consulta como SET 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 L2DistanceTransposed retornava 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_ERROR durante 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_nulls e 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 ALTER em 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 readWKT e readWKB, 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 erro No 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 e remote_servers tiver 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 IN entre 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_size definido como 0 podia 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 Nothing em argumentos da função caseWithExpression . 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

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ê usa LIVE VIEW, não será possível atualizar para a nova versão. #88706 (Alexey Milovidov).
  • Nas versões anteriores, o tipo Geometry era um alias de String, mas agora é um tipo com funcionalidade completa. #83344 (scanhex12).
  • Aplica escape aos nomes de arquivo criados para as subcolunas do tipo Variant em 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 MergeTree escape_variant_subcolumn_filenames (para manter a compatibilidade, desative essa configuração no MergeTree ou defina a configuração compatibility para a versão anterior antes da atualização). Resolve #69590. #87300 (Pavel Kruglov).
  • Habilita por padrão o formato de serialização with_size_stream para o tipo de dado String. 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, configure serialization_info_version como basic e string_serialization_version como single_stream na seção merge_tree da 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_format vem 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-rewritable sobre 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 = 0 para 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 formatos WKB e WKT para esse tipo. Em versões anteriores, o tipo Geometry era um alias de String, mas agora é um tipo completo. #83344 (scanhex12).
  • Foi adicionada a instrução SQL EXECUTE AS para dar suporte à impersonação de usuário. Resolve #39048. #70775 (Shankar).
  • Adiciona a função naiveBayesClassifier para classificar texto usando Naive Bayes com base em ngrams. #88677 (Nihal Z. Miaji).
  • Adiciona suporte a LIMIT e OFFSET fracioná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_usage a X-ClickHouse-Progress e X-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_directories para criar automaticamente os diretórios pai de INTO 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 REPLACE para tabelas temporárias. Fecha #35888. #89450 (Aleksandr Musorin).
  • Suporte a arrayRemove para remover todos os elementos iguais a elem do array arr. 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_type para 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 argAndMin e argAndMax que 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_bytes ao 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_api na seção <prometheus> do arquivo de configuração. Os handlers compatíveis são /api/v1/query_range e /api/v1/query. #86132 (Nikita Mikhaylov).
  • A busca de texto completo agora está em beta (antes, estava em estágio experimental). #88928 (Robert Schulze).
  • Alias passou para experimental e pode ser habilitado com allow_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).
  • RIGHT e FULL JOINs 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 de RIGHT e FULL JOINs 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 SELECT até 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 SELECT de _part_offset e um ORDER BY diferente) 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 = abcd1234ef567890abcd1234ef567890 e data_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_order e query_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 JOIN ou ANY RIGHT JOIN como ALL INNER JOIN em 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 uniqExact reduzindo 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_formats por 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 FINAL estiver 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_replication agora é o padrão, o que reduzirá o uso de memória em junções. #89316 (Alexey Milovidov).
  • Adiciona um cache por tabela de ColumnsDescription para 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, quando use_variant_as_common_type estiver 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_internal a system.query_log. #83277 (Miсhael Stetsyuk).
  • Operador IS NOT DISTINCT FROM (<=>) aprimorado: adicionado suporte ao inverso IS DISTINCT FROM e a operandos numéricos compatíveis de tipos diferentes (por exemplo, Nullable(UInt32) e Nullable(Int64)). Resolve #86763. #87581 (yanglongwei).
  • clickhouse-client e clickhouse-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 Age e Expires quando o cache de resultados de consulta for usado. A presença do cabeçalho Age indica se o resultado vem do cache, enquanto Expires també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_mutation estiver 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_query por 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 PARTITION quando 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 CLUSTER agora são executadas no contexto do usuário original da consulta para uma validação de acesso melhor. #71334 (pufit).
  • Adicionado suporte a UUID em Parquet quando representado por FixedString(16) com o tipo lógico UUID. #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 TABLE com SELECT no clickhouse-client. Essa consulta não resultará mais em timeout, mesmo que o SELECT demore bastante. Resolve #38416. #87247 (Diskein).
  • Suporte aos tipos JSON e Dynamic nas 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 à consulta EXPLAIN para 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_interval define o intervalo de atualização do cache de estatísticas; 0 significa que nenhum cache será criado. A configuração de sessão use_statistics_cache define 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 Array e Map para usar a configuração max_binary_array_size em vez de max_binary_string_size na validação dos limites de tamanho. Isso garante que os limites corretos sejam aplicados na leitura no formato RowBinary. #88744 (Raufs Dunamalijevs).
  • Foi introduzida a classe LockGuardWithStopWatch e 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 de MergeMutateSelectedEntry para o método finalize para evitar reter o lock no executor MergeTreeBackground por 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_nodes para reduzir a quantidade de metadados armazenados pelo SharedMergeTree no Keeper. #89036 (Alexander Tokmakov).
  • Fazer o S3Queue respeitar a configuração do servidor disable_insertion_and_mutation. #89048 (Raúl Marín).
  • Definir s3_retry_attempts com 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 erros SlowDown por mais de 10 minutos. #89051 (Nikita Mikhaylov).
  • As configurações kafka_compression_codec e kafka_compression_level agora 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 statistics em system.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 hasAnyTokens ou hasAllTokens. #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 IN ao 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_default por 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 com SHOW CREATE DATABASE ou ao consultar engine_full em system.databases. Fecha #89477. #89341 (Alexey Milovidov).
  • Nas versões anteriores, a configuração create_table_empty_primary_key_by_default não surtia efeito quando você não especificava o engine da tabela na consulta CREATE TABLE. #89342 (Alexey Milovidov).
  • Atualiza chdig para 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) em system.asynchronous_metrics. Executa consultas SYSTEM nos caches do sistema de arquivos apenas uma vez. Visão atômica para caches que apontam para o mesmo caminho em system.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 mlock ao 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á exibido SHOW TABLES. #89771 (Alexey Milovidov).
  • Suporte a non_replicated_deduplication_window para 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_batch de 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 LOGS passa a aguardar a criação da tabela mesmo quando os logs estão vazios. #89408 (János Benjamin Antal).
  • Corrige rows_before_limit_at_least incorreto 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 set após a consulta INSERT 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 multiIf com 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_by no formato correto, por exemplo ClickHouse version 25.10.1 (build 5b1dfb14925db8901a4e9202cd5d63c11ecfbb9f) em vez de ClickHouse 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, theilsU e contingency. #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_k para respeitar o parâmetro threshold quando 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 via ALTER). 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>:definer ao criar uma view com SQL SECURITY DEFINER. #88968 (pufit).
  • Corrigido o LOGICAL_ERROR em L2DistanceTransposed(vec1, vec2, p), no qual a otimização para leitura parcial de QBit removia incorretamente Nullable do tipo de retorno quando p era Nullable. #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 clusterAllReplicas por 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-free em 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 JOIN no lado direito de um JOIN com a configuração enable_lazy_columns_replication habilitada. #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, hasAllTokens e tokens com o tokenizer sparseGrams. Resolve #89605. #89665 (Elmi Ahmadov).
  • Corrige erro lógico/travamento com runtime filter de join em alguns casos. Corrige #89062. #89666 (Alexander Gololobov).
  • Corrige um possível erro lógico durante ARRAY JOIN na coluna map com enable_lazy_columns_replication habilitado. 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 de optimize_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á cancel na 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 reverse e em CAST. 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. Calcular base32Encode para uma coluna de strings com tamanho menor que 5 poderia causar falhas. Resolve #89911. #89929 (Antonio Andelic).
  • Corrige o escape incorreto nas consultas SHOW COLUMNS e SHOW 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 JOIN dentro de IN e com a configuração enable_lazy_columns_replication habilitada. 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 BSONEachRow e MsgPack. 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: Replicated durante a inserção com uso de ARRAY JOIN e com a configuração enable_lazy_columns_replication habilitada. #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 numbers quando é 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 schema durante a atualização). #90202 (Kseniia Sumarokova).
  • Corrigidos possíveis resultados incorretos em consultas SELECT apó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_MISMATCH e 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, ltrim e rtrim, 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 L2DistanceTransposed que 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 L2DistanceTransposed ao usar vetores de referência do tipo array (que, por padrão, são Array(Float64))) com colunas QBit de tipos de elemento diferentes de Float64 (Float32, BFloat16). A função agora converte automaticamente o vetor de referência para que corresponda ao tipo de elemento de QBit. 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 CoalescingMergeTree para tipos Tuple. #88828 (scanhex12).

Melhoria de compilação/testes/empacotamento

  • Corrige o erro Connection refused ao 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 FindPackage do 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_nullable foi alterada para respeitar as informações sobre Nullable das 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 o log_comment em uma consulta não resultará mais em cache miss. Há uma pequena chance de que os usuários tenham segmentado intencionalmente seu cache variando o log_comment. Essa mudança altera esse comportamento e, portanto, é incompatível com versões anteriores. Use a configuração query_cache_tag para 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 SYNTAX nem sempre formatarão os operadores — o novo comportamento reflete melhor o propósito de explicar a sintaxe. clickhouse-format, formatQuery e 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 Dynamic em chaves de JOIN. Isso pode levar a resultados inesperados quando um valor do tipo Dynamic é comparado com um tipo que não seja Dynamic. É melhor converter a coluna Dynamic para o tipo necessário. #86358 (Pavel Kruglov).
  • A opção do servidor storage_metadata_write_full_object_key agora 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_seconds de 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_step para query_plan_use_logical_join_step. #87679 (Vladimir Cherkasov).
  • A nova sintaxe permite uma configuração mais expressiva do parâmetro tokenizer do índice de texto. #87997 (Elmi Ahmadov).
  • Funções searchAny e searchAll renomeadas para hasAnyTokens e hasAllTokens para maior consistência com a função existente hasToken. #88109 (Robert Schulze).
  • Remova cache_hits_threshold do 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_insert e min_free_disk_bytes_to_perform_insert funcionam: - 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 como query_log continuem 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 de min_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_replication como 0 antes da atualização e ativá-lo depois que ela for concluída. #88515 (Antonio Andelic).

novo recurso

  • Adiciona suporte a LIMIT e OFFSET negativos. Fecha #28913. #88411 (Nihal Z. Miaji).
  • O mecanismo Alias cria 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 tabela auto_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 conv para converter números entre bases; no momento, ela oferece suporte a bases de 2-36. #83058 (hp).
  • Adicionado suporte à sintaxe LIMIT BY ALL. Assim como GROUP BY ALL e ORDER 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 a SELECT 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ção histogram_quantile do 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, como use_const_adaptive_granularity, serão aplicadas apenas às novas partes). #87774 (Azat Khuzhin).
  • Adicionado o comando SYSTEM RECONNECT ZOOKEEPER para 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_warn e max_named_collection_num_to_throw. Adiciona a nova métrica NamedCollection e o erro TOO_MANY_NAMED_COLLECTIONS. #87343 (Pablo Marcos).
  • Adicionadas variantes otimizadas sem distinção entre maiúsculas e minúsculas das funções startsWith e endsWith: startsWithCaseInsensitive, endsWithCaseInsensitive, startsWithCaseInsensitiveUTF8 e endsWithCaseInsensitiveUTF8. #87374 (Guang Zhao).
  • Adiciona uma forma de definir WORKLOAD e RESOURCE em 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_part que 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-cpr e mv-mvr no 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ção L2DistanceTransposed, 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 searchAll e searchAny agora 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 .size para 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 JOIN ao 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 como SELECT 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 e n2.n_name = 'GERMANY' OR n2.n_name = 'FRANCE' para n2. #84735 (Yarik Briukhovetskyi).
  • Melhora o desempenho do LIKE com prefixo ou sufixo usando a nova configuração padrão optimize_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_row para 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 JoinOptimizeMicroseconds e QueryPlanOptimizeMicroseconds. #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 FINAL em uma tabela ReplacingMergeTree com a coluna is_deleted agora é executada mais rapidamente graças à paralelização aprimorada de duas otimizações existentes: 1. otimização do_not_merge_across_partitions_select_final para partições da tabela que têm apenas um único part; 2. divisão de outros intervalos selecionados da tabela em intersecting / non-intersecting, e apenas os intervalos intersecting precisam 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.tables ao filtrar por uuid (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::appendFromBlock para 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.completions em vez de executar várias consultas às tabelas do sistema. #84694 (|2ustam).
  • Adiciona o novo parâmetro dictionary_block_frontcoding_compression do índice de texto para controlar a compressão do dicionário. Por padrão, ele vem habilitado para usar a compressão front-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_views e min_insert_block_size_bytes_for_materialized_views. Anteriormente, se parallel_view_processing estivesse 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_size para controlar o tamanho do buffer dos gravadores de arquivos temporários. * Otimizado o consumo de memória da operação scatter (usada, por exemplo, em grace hash join) para colunas LowCardinality. #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 generateSerialID oferece 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ção generateSerialID para definir valores iniciais personalizados para novas séries. #88085 (Manuel).
  • Adicionada a opção --semicolons_inline em clickhouse-format para 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).
  • mannWhitneyUTest nã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 LowCardinality do 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 de Expect: 100-continue, o ClickHouse não envia uma resposta 100 Continue ao 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_error por padrão. #87198 (Nikita Mikhaylov).
  • Renomeada a função de tabela arrowflight para arrowFlight. #87249 (Vitaly Baranov).
  • Atualizado o clickhouse-benchmark para aceitar - em vez de _ nas flags de CLI. #87251 (Ahmed Gouda).
  • Torna síncrona a gravação em system.crash_log durante o tratamento de sinais. #87253 (Miсhael Stetsyuk).
  • Foi adicionada a configuração inject_random_order_for_select_without_order_by, que insere ORDER BY rand() em consultas SELECT de nível superior sem a cláusula ORDER BY. #87261 (Rui Zhang).
  • Aprimora a mensagem de erro de joinGet para que ela indique corretamente que o número de join_keys não é igual ao número de right_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 desativar TCP_NODELAY para o Keeper. #87363 (Copilot).
  • Adicionado suporte a --connection em clickhouse-benchmarks. Ele funciona da mesma forma que no clickhouse-client: você pode especificar conexões predefinidas no config.xml/config.yaml do cliente, no caminho connections_credentials, para evitar informar explicitamente usuário/senha via argumentos de linha de comando. Adicionado suporte a --accept-invalid-certificate no clickhouse-benchmark. #87370 (Azat Khuzhin).
  • Agora, max_insert_threads passa a ter efeito em tabelas Iceberg. #87407 (alesapin).
  • Adiciona histograma e métricas dimensionais ao PrometheusMetricsWriter. Dessa forma, o handler PrometheusRequestHandler terá 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 hasToken agora 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 Array e Map (mapKeys e mapValues). As funções compatíveis são mapContainsKey e has. #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_rows e max_joined_block_size_bytes na serialização do plano de consulta com make_distributed_plan experimental. #87675 (Vladimir Cherkasov).
  • A configuração enable_http_compression agora é 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, como bzip2, 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 solicitar gzip, o que não é tão ruim, mas é menos eficiente que zstd. 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 from e to aos 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ção max_request_size, igual a jute.maxbuffer no ZooKeeper, DESATIVADA por padrão por retrocompatibilidade, será ativada nos próximos lançamentos). #87952 (Azat Khuzhin).
  • Faz com que clickhouse-benchmark deixe 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_log está 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 MemoryPools personalizados 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 Replicated sem 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) e hasAllTokens (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 lag case insensitive para compatibilidade com o MySQL. #88322 (Lonny Kapelushnik).
  • Permite iniciar o clickhouse-local a partir do diretório clickhouse-server. Em versões anteriores, isso gerava o erro Cannot parse UUID: . Agora você pode iniciar o clickhouse-local e 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 JSON agora são formatadas de maneira legível ao usar o formato Vertical. 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-history ainda 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-keeper para 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 epoch com segundos fracionários em várias funções relacionadas a data e hora, como parseDateTime64BestEffort, change{Year,Month,Day} e makeDateTime64. 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') retornava 1968-12-31 23:59:59.532 em vez de 1969-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 NULL em colunas Nullable no OUTER JOIN com optimize_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 checkHeaders agora 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 toDate e toDate32 em 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_variants no 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_number e nas exclusões por posição do Iceberg. #87220 (Michael Kolupaev).
  • Corrige o LOGICAL_ERROR “Too large size passed to allocator” em JOIN causado 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 engine inexistente. #87419 (Jitendra).
  • Ignore apenas erros do tipo not found para s3_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 logging assí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_timeout para 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 Merge com Distributed. #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 / timestamptz no 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_timezone em 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 MergeTree com TTL de coluna configurado. #88095 (Anton Popov).
  • Corrige uma possível exceção não tratada ao ler system.tables com tabelas inválidas em bancos de dados externos (PostgreSQL/SQLite/…) vinculados. #88105 (Azat Khuzhin).
  • Corrigido travamento nas funções mortonEncode e hilbertEncode quando chamadas com argumento de tupla vazio. #88110 (xiaohuanlin).
  • Agora, as consultas ON CLUSTER levarã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.path alterados durante a execução, não apenas o objeto raiz. #88198 (Mikhail Artemenko).
  • Corrigida a propagação da flag is_shared em ColumnLowCardinality. 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 no ReverseIndex. #88213 (Nikita Taranov).
  • Corrige a configuração de workload max_cpu_share. Agora, ela pode ser usada sem que a configuração de workload max_cpus esteja 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.projections e system.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_tables estiver 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 ... COMMENT de 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_mode está definido como any. #88440 (Eduard Karacharov).
  • Corrige o erro “column not found” ao usar query_plan_use_logical_join_step=0 com 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 accurateCast ao 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-rewritable para 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_read e use_query_condition_cache ativadas). #88660 (Anton Popov).
  • Uma exceção Poco::TimeoutException lançada por Poco::Net::HTTPChunkedStreamBuf::readFromDevice causa 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_log caso 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_k para 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>:definer ao criar uma view com SQL SECURITY DEFINER. #88968 (pufit).
  • Retroportado em #89058: corrigido LOGICAL_ERROR em L2DistanceTransposed(vec1, vec2, p), em que a otimização para leitura parcial de QBit removia incorretamente Nullable do tipo de retorno quando p era Nullable. #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 postgres para 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_HIGHER caso Speculative Store Bypass Safe nã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 consultas SYSTEM ENABLE/DISABLE FAILPOINT retornam o erro SUPPORT_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 ... USING foi 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 como t1.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_stream e nats_consumer para 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 S3 e à função de tabela s3, chamado storage_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 UPDATE na engine de tabela Iceberg. #86059 (scanhex12).
  • Adicionar a tabela de sistema iceberg_metadata_log para obter arquivos de metadados do Iceberg durante instruções SELECT. #86152 (scanhex12).
  • As tabelas Iceberg e DeltaLake oferecem suporte à configuração personalizada de disco por meio da opção disk no nível de armazenamento. #86778 (scanhex12).
  • Suporte a discos de lago de dados no Azure. #87173 (scanhex12).
  • Compatibilidade com o catálogo Unity no Azure blob storage. #80013 (Smita Kulkarni).
  • Suporte a mais formatos (ORC, Avro) para gravações em Iceberg. Isso fecha #86179. #87277 (scanhex12).
  • Adicionada uma nova system table database_replicas com 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 como true. #85800 (thraeka).
  • Novas opções de configuração: logger.startupLevel & logger.shutdownLevel permitem substituir, respectivamente, o nível de log durante a inicialização & o desligamento do ClickHouse. #85967 (Lennard Eijsackers).
  • Funções agregadas timeSeriesChangesToGrid e timeSeriesResetsToGrid. Comportam-se de forma semelhante a timeSeriesRateToGrid, 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 um changes/resets do 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 oneof em entradas Protobuf. Uma coluna especial pode ser usada para indicar a presença de uma parte de oneof. Se uma mensagem contiver oneof e input_format_protobuf_oneof_presence estiver definido, o ClickHouse preenche a coluna que indica qual campo do oneof foi 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 em system.trace_log com o tipo JemallocSample ao habilitar a configuração jemalloc_collect_global_profile_samples_in_trace_log. O profiling do jemalloc agora pode ser habilitado independentemente para cada consulta usando a configuração jemalloc_enable_profiler. O armazenamento de amostras em system.trace_log pode ser controlado por consulta usando a configuração jemalloc_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 = 1 e query_plan_optimize_join_order_limit = 10. #86822 (Han Fei).
  • O suporte a alter table ... materialize statistics all permitirá 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 definindo SET query_plan_use_new_logical_join_step = 0 e 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áusula OUTER JOIN ... USING foi 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 como t1.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 SELECT distribuído em lagos de dados. #86783 (scanhex12).
  • Aprimora a otimização de PREWHERE para condições como func(primary_column) = 'xx' e column in (xxx). #85529 (李扬).
  • Implementada a reescrita de JOIN: 1. Converter LEFT ANY JOIN e RIGHT ANY JOIN em JOIN SEMI/ANTI se 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. Converter FULL ALL JOIN em LEFT ALL ou RIGHT ALL JOIN se 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 HashJoin foi ligeiramente otimizado em casos de LEFT/RIGHT join 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 MarkRanges com devector em vez de deque). #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_file e iceberg_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_file e delta_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 por ALTER TABLE MODIFY SETTING). #85995 (Kseniia Sumarokova).
  • Você pode usar parâmetros de consulta após TO ao 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 à deltaLakeAzure para o modo cluster) e a função deltaLakeS3Cluster (alias de deltaLakeCluster). 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_error para discos S3 e a renomeia para a forma mais geral s3_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) em http_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_EXCEEDED ou KEEPER_EXCEPTION) e erros não transitórios. #86202 (Miсhael Stetsyuk).
  • Permite omitir a função identity na 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.channel como um entre syslog/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 REPLICA em 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 (QueriesMemoryUsage e QueriesPeakMemoryUsage). #86669 (Azat Khuzhin).
  • Você pode usar a flag clickhouse-benchmark --precise para 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 nice das 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 sejam EXPLAIN. Foi adicionada a configuração query_plan_max_step_description_length. #86741 (Nikolai Kochetov).
  • Adiciona a possibilidade de ajustar os sinais pendentes na tentativa de contornar CANNOT&#95;CREATE&#95;TIMER (para os profilers de consulta, query_profiler_real_time_period_ns/query_profiler_cpu_time_period_ns). Também coleta SigQ de /proc/self/status para introspecção (se ProcessSignalQueueSize estiver próximo de ProcessSignalQueueLimit, é provável que você receba erros CANNOT_CREATE_TIMER). #86760 (Azat Khuzhin).
  • Melhoria no desempenho da solicitação RemoveRecursive no Keeper. #86789 (Antonio Andelic).
  • Remover espaços em branco extras em PrettyJSONEachRow na saída do tipo JSON. #86819 (Pavel Kruglov).
  • Agora registramos os tamanhos dos blobs de prefix.path quando 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_method não for um codec genérico suportado. #87097 (Robert Schulze).
  • A tabela de sistema system.query_cache agora 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, enquanto system.query_cache retorna os textos das consultas. Isso torna o comportamento da tabela de sistema mais semelhante ao de system.query_log. #87104 (Robert Schulze).
  • Habilitada a avaliação de curto-circuito para a função parseDateTime. #87184 (Pavel Kruglov).
  • Adicionada uma nova coluna statistics em system.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 alter são validados apenas no nó iniciador para bancos de dados replicados e tabelas com replicação interna. Isso corrige situações em que uma consulta alter já 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 servidor background_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).
    1. 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 update de 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 NonZeroUInt64 para logs_to_keep em DatabaseReplicatedSettings. #86142 (Tuan Pham Anh).
  • Uma exceção era gerada por uma consulta FINAL com skip index se a tabela (por exemplo, ReplacingMergeTree) tivesse sido criada com a configuração index_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.xml por 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 resource ao 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 MergesMutationsMemoryTracking causado por tabelas Buffer e corrige query_views_log no streaming a partir de Kafka (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 searchAny e searchAll, quando chamadas com padrões de busca vazios, agora retornam true (ou seja, “correspondem a tudo”). Antes, retornavam false. (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_size ser 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_host para 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 com PARTITION 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_queue nos 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 TTL com WHERE. #86965 (Anton Popov).
  • Corrigido um possível resultado incorreto da função uniqExact com os modificadores ROLLUP e CUBE. #87014 (Nikita Taranov).
  • Corrige a resolução do esquema da tabela com a table function url() quando a configuração parallel_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 EXISTS não correlacionado. O problema ocorria com execute_exists_as_scalar_subquery=1, introduzido em https://github.com/ClickHouse/ClickHouse/pull/85481, e afeta a versão 25.8. Corrige #86415. #87207 (Nikolai Kochetov).
  • Gera um erro se iceberg_metadata_log não estiver configurado, mas o usuário tentar obter informações de depuração sobre os metadados do Iceberg. Corrige o acesso a nullptr. #87250 (Daniil Ivanik).

Melhorias de Compilação/Testes/Empacotamento

Lançamento do ClickHouse 25.8 LTS, 2025-08-28

Alteração incompatível com versões anteriores

  • Inferir Array(Dynamic) em vez de Tuple sem nome para arrays de valores com tipos diferentes em JSON. Para usar o comportamento anterior, desative a configuração input_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 Enum como BYTE_ARRAY com tipo lógico ENUM no formato de saída Parquet por padrão. #84169 (Pavel Kruglov).
  • Habilitar a configuração do MergeTree write_marks_for_substreams_in_compact_parts por 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_scheduler era round_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 torna fair_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, deltaLakeAzure e icebergAzure foram atualizadas para validar corretamente as permissões AZURE. 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ções icebergLocal e deltaLakeLocal agora aplicam verificações da permissão FILE. #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ção promql_table_name='X' e execute consultas como rate(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ções rate, delta e increase sã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 mecanismo Merge), 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 table no 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_version para permitir a leitura de uma versão específica de snapshot no mecanismo de tabela DeltaLake. #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_multiplier foi descontinuada e substituída por uma configuração mais geral: vector_search_index_fetch_multiplier. #85024 (Shankar Iyer).
  • Permite argumentos de chave-valor em s3 ou na função/no mecanismo de tabela s3Cluster, por exemplo s3('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_log para armazenar informações históricas sobre conexões com o ZooKeeper. #79494 (János Benjamin Antal).
  • A configuração do servidor cpu_slot_preemption habilita 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_share e max_burst_cpu_seconds. Mais detalhes: https://clickhouse.com/docs/operations/workload-scheduling#cpu&#95;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 de JSONExtract). #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) retorna 2025-07-29 17:09:37.775725. #84178 (Halersson Paris).
  • Adiciona extra_credentials ao AzureBlobStorage para autenticação com client_id e tenant_id. #84235 (Pablo Marcos).
  • Adicionada a função dateTimeToUUIDv7 para converter um valor do tipo DateTime em um UUIDv7. Exemplo de uso: SELECT dateTimeToUUIDv7(toDateTime('2025-08-15 18:57:56')) retorna 0198af18-8320-7a7d-abd3-358db23b9d5c. #84319 (samradovich).
  • timeSeriesDerivToGrid e timeSeriesPredictLinearToGrid, funções de agregação para reamostrar dados em uma grade temporal definida pelo timestamp inicial, timestamp final e passo especificados; calculam deriv e predict_linear de 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 Hash como 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 Hash retorna e5f9e676db098fdb9530d2059d8c23ef. #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 à ferramenta clickhouse-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_v3 para 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 Curl antigo definindo azure_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).
  • azureBlobStorage table 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 ALL LEFT/INNER serão convertidas automaticamente para RightAny se 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 de max_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 de replaceRegexpAll, replaceRegexpOne e extract para 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_rows fora 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 DISTINCT sejam executadas em tempo linear e corrige um bug em sumDistinct. 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=64 para 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 que column não é do tipo Array. Isso melhora o desempenho dessas consultas, tornando-as tão eficientes quanto o operador IN. #83945 (Doron David).
  • Reduz as chamadas desnecessárias de memcpy em CompressedReadBufferBase::readCompressedData. #83986 (Raúl Marín).
  • Otimize largestTriangleThreeBuckets removendo 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 structureToProtobufSchema e structureToCapnProtoSchema nã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 (como logTrace, demangle, extractURLParameter, toStringCutToZero e encrypt/decrypt). O layout de dicionário regexp_tree não suportava o processamento de strings com bytes zero. A função formatRowNoNewline, quando chamada com o formato Values ou com qualquer outro format sem quebra de linha no fim das linhas, cortava erroneamente o último caractere da saída. A função stem continha 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ção initcap funcionava incorretamente para argumentos FixedString: 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 Apache ORC, que podia levar à exposição de memória não inicializada. O comportamento da função replaceRegexpAll e 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 de byteSize para 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 armazenamento DeltaLake. #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_row no WHERE. Isso permite evitar a leitura de mais partes em consultas com filtros que não foram totalmente enviados para PREWHERE. #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 EXISTS nã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ção execute_exists_as_scalar_subquery=1. #85481 (Nikolai Kochetov).

Aprimoramento

  • Adiciona configurações database_replicated que 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.json compactado por meio da configuração iceberg_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 em system.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_server e max_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 argumento address_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=0 e 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 insert de mv no nível da tabela S3Queue. Foram adicionadas novas configurações no nível de S3Queue: min_insert_block_size_rows_for_materialized_views e min_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 de S3Queue vã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 consulta ALTER UPDATE ou ALTER DELETE. #83978 (Anton Popov).
  • Use informações do cgroup (se aplicável, ou seja, se memory_worker_use_cgroup e 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 Pretty para números Nullable. #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ão logs_to_keep para 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_keys para 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_logging para 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 nomes OS<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_recovery do 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_factor para 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 IN sobre 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_acl ao 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.columns agora disponibiliza column como alias da coluna name existente. #84695 (Yunchi Pang).
  • Nova configuração do MergeTree search_orphaned_parts_drives para limitar o escopo da busca por partes órfãs, por exemplo, a discos com metadados locais. #84710 (Ilya Golshtein).
  • Adiciona o 4LW lgrq ao 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_decrypt agora 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-format para aceitar --highlight como um alias de --hilite. - Atualizado o clickhouse-client para aceitar --hilite como um alias de --highlight. - Atualizada a documentação do clickhouse-format para 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_error para reduzir a pressão sobre o S3 durante tempestades de novas tentativas causadas por erros como SlowDown, 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_threshold e keeper_server.coordination_settings.commit_logs_cache_entry_count_threshold. #84877 (Antonio Andelic).
  • Permite usar simdjson em arquiteturas não compatíveis (antes, isso levava a erros CANNOT_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 editor em path, atualiza para 25.8.1. #85341 (Azat Khuzhin).
  • Adiciona partition_columns_in_data_file que 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 JOIN com 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 parameter a system.grants para determinar o tipo de origem em GRANT READ/WRITE e o engine da tabela em GRANT 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_functions está 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ção use_query_condition_cache). #83445 (LB7666).
  • Historicamente, a função gcs não exigia nenhuma permissão de acesso para ser usada. Agora, ela verificará a permissão GRANT READ ON S3 para 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=1 ou add_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 INSERT inválido. #83842 (Azat Khuzhin).
  • Permite fazer referência a qualquer tabela no argumento view(...) da função de tabela remote com o analisador habilitado. Corrige #78717. Corrige #79377. #83844 (Dmitry Novik).
  • A chamada Onprogress em jsoneachrowwithprogress foi 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 no MergeTreePrefetchedReadPool). #83999 (Azat Khuzhin).
  • Corrige um erro raro em que a consulta MATERIALIZE COLUMN podia resultar em arquivos inesperados em checksums.txt e, eventualmente, em partes de dados desanexadas. #84007 (alesapin).
  • Corrige o erro lógico Expected single dictionary argument for function ao executar JOIN com uma condição de desigualdade quando uma das colunas é LowCardinality e 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_ERROR em 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 set não consideravam colunas Nullable ao 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 DoubleDelta agora só pode ser aplicado a colunas de tipo numérico. Em particular, colunas FixedString não podem mais ser compactadas com DoubleDelta. (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 zoutofmemory como 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_password tenta fazer login após a configuração do servidor allow_no_password ser 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áusulas ORDER BY durante operações ALTER, evitando possível corrupção da tabela. #84536 (xiaohuanlin).
  • Altera o valor anterior à versão 25.5 de allow_experimental_delta_kernel_rs para false por 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 = 0 fazia 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_DATA ao 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 ngram e no_op nã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 ReplacingMergeTree e CollapsingMergeTree. #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 ReplicatedMergeTree criadas em servidores com versão inferior à 25.7. #84933 (Anton Popov).
  • Corrigidas as atualizações leves em tabelas com engine MergeTree não replicado após a execução da consulta ALTER 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 select e 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 parts no ReplicatedMergeTree. 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 as patch parts fosse 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 Set em IN (subquery) dentro da configuração de expressão additional_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ção Shutdown 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_offset em 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_comment ou insert_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 JSONExtract ao 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_ERROR ao usar COMMENT COLUMN IF EXISTS na mesma instrução ALTER após DROP COLUMN. A cláusula IF EXISTS agora 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_depth como indicador da função Cluster estava incorreto e pode levar à duplicação de dados; em vez disso, use client_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 WITH no INSERT SELECT distribuído em paralelo com a tabela de destino Distributed. Antes, a consulta podia gerar o erro Unknown expression identifier. #85811 (Nikolai Kochetov).
  • Mascaramento de credenciais para deltaLakeAzure, deltaLakeCluster, icebergS3Cluster e icebergAzureCluster. #85889 (Julian Maicher).
  • Corrige um erro lógico ao tentar CREATE ... AS (SELECT * FROM s3Cluster(...)) com DatabaseReplicated. #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_FOUND ao restaurar uma tabela Memory vazia. #86012 (Julia Kartseva).
  • Adicionar verificações para sharding&#95;key durante 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 clickhouse passou 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 um quoting_character é encontrado inesperadamente durante a leitura de uma chave ou valor sem aspas. O valor pode ser um destes: invalid, accept ou promote. invalid descartará a chave e retornará ao estado de espera por chave. accept a tratará como parte da chave. promote descartará 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ção count_matches_stop_at_empty_match. #81676 (Elmi Ahmadov).
  • Usa throttlers de todo o servidor para operações locais (max_local_read_bandwidth_for_server e max_local_write_bandwidth_for_server) e remotas (max_remote_read_network_bandwidth_for_server e max_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_server e max_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ão true. Se definida como true, aumenta o desempenho do processamento de arquivos compactados em funções de cluster. Deve ser definida como false por 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 REPLICAS fazia 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: agora SYSTEM RESTART REPLICAS reiniciará apenas as réplicas nos bancos de dados em que você tiver permissão para SHOW 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 definindo lightweight_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.json compactados para o Iceberg. Corrige #70874. #81451 (alesapin).
  • Suporte a TimestampTZ no 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, READ e WRITE, 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ões READ e WRITE para Sources, por exemplo: GRANT READ ON * TO user, GRANT WRITE ON S3 TO user. O recurso é controlado pela configuração access_control_improvements.enable_read_write_grants e 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_queries agora é 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 erro SERVER_OVERLOADED. #81250 (Oleg Doronin).
  • Adicionadas funções financeiras: financialInternalRateOfReturnExtended (XIRR), financialInternalRateOfReturn (IRR), financialNetPresentValueExtended (XNPV), financialNetPresentValue (NPV). #81599 (Joanna Hulboj).
  • Adiciona as funções geoespaciais polygonsIntersectCartesian e polygonsIntersectSpherical para verificar se há interseção entre dois polígonos. #81882 (Paul Lamb).
  • Suporte à coluna virtual _part_granule_offset em 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 colorSRGBToOkLCH e colorOkLCHToSRGB para converter cores entre os espaços de cor sRGB e OkLCH. #83679 (Fgrtue).
  • Permitir o uso de parâmetros em consultas CREATE USER para nomes de usuário. #81387 (Diskein).
  • A tabela system.formats agora 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 searchAny e searchAll, 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 text foi 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_metadata relacionada à 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 StorageKafka2 ao system.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 HashJoin foi 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 de null_map e join_mask também são eliminadas quando são sempre true/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_seek em filterPartsByQueryConditionCache, 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 Redis e KeeperMap. #81833 (Pervakov Grigorii).
  • Adiciona a nova configuração min_joined_block_size_rows (análoga a min_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 PARTITION nã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 JOIN não será gerado se a configuração query_plan_correlated_subqueries_use_substitution estiver 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_map e JoinMask de #82308 foram aplicadas ao caso de JOIN com múltiplas cláusulas disjuntivas. Além disso, a estrutura de dados KnownRowsHolder foi 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 HashJoin usa o modo de saída lazy. 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 ProtobufSingle com 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_error está 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-format e no echo do clickhouse-client, mas agora isso também é feito no prompt de comando. #82871 (Alexey Milovidov).
  • O realce em clickhouse-format e 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_rewritable são permitidos para metadados de banco de dados. Implemente os métodos moveFile e replaceFile em plain_rewritable para dar suporte a ele como disco de banco de dados. #79424 (Tuan Pham Anh).
  • Permitir backups de bancos de dados PostgreSQL, MySQL e DataLake. 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_condition foi 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, MarkCacheEvictedFiles para acompanhar as evicções no cache de marcas. (issue #60989). #80799 (Shivji Kumar Jha).
  • Suporte à gravação de enum do 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 API ExpressionVisitor, 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, esse ExpressionVisitor também permitirá implementar pruning com base em estatísticas e alguns recursos proprietários do DeltaLake. Além disso, o objetivo desta mudança é dar suporte a partition pruning no engine de tabela DeltaLakeCluster (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_users e max_network_bandwidth_for_all_users nunca 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 COLUMN se 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_server e max_local_write_bandwidth_for_server dinamicamente, sem reiniciar o servidor. #82083 (Kai Zhu).
  • Adicionado suporte para limpar todos os avisos da tabela system.warnings usando TRUNCATE 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 reinterpret agora oferece suporte à conversão para Array(T), em que T é 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ção keeper_path do 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-server sem 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 chamar IDatabase::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 chamar IDatabase::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 nan e inf com NumericIndexedVector. Corrige #82239 e mais algumas coisas. #82681 (Raufs Dunamalijevs).
  • Não omita os valores zero nos formatos de cabeçalho X-ClickHouse-Progress e X-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 COLUMN nem DROP COLUMN que envolvam colunas explicitamente listadas para soma no SummingMergeTree. Fecha #81836. #82821 (Alexey Milovidov).
  • Aprimora a precisão da conversão de Decimal para Float32. Implementa a conversão de Decimal para BFloat16. Fecha #82660. #82823 (Alexey Milovidov).
  • As barras de rolagem na interface web terão uma aparência um pouco melhor. #82869 (Alexey Milovidov).
  • clickhouse-server com 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 ProfileEvent quando o Keeper rejeita uma gravação por causa do limite flexível de memória. #82963 (Xander Garbett).
  • Adicionar as colunas commit_time, commit_id em system.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, chamada failed_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/block existir, 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 Time e Time64 como MM:SS, M:SS, SS ou S. #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 que max_replication_lag_to_enqueue. Isso deve ajudar a evitar DDL task is not finished on some hosts quando 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 consulta SYSTEM SYNC DATABASE REPLICA STRICT, que aguarda até que o log de replicação fique abaixo de max_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, getStatus lança uma exceção ErrorCodes::ABORTED. Anteriormente, isso fazia a consulta SELECT falhar. Agora, capturamos as exceções ErrorCodes::ABORTED e as ignoramos intencionalmente. #83435 (Miсhael Stetsyuk).
  • Adiciona métricas de recursos de processo (como UserTimeMicroseconds, SystemTimeMicroseconds, RealTimeMicroseconds) aos eventos de perfil do part&#95;log nas entradas MergeParts. #83460 (Vladimir Cherkasov).
  • Ativa, por padrão, as feature flags create_if_not_exists, check_not_exists e remove_recursive no 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/Date32 como inteiros em formatos de entrada JSON. #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 --reconnect em clickhouse-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, quando ORDER BY é executado como PartialSorting, o contador rows_before_limit_at_least agora 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 loop quando usada com a família de funções remote. Garante que a cláusula LIMIT seja respeitada em loop(remote(...)). #80299 (Julia Kartseva).
  • Corrige o comportamento incorreto das funções to_utc_timestamp e from_utc_timestamp ao 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 fosse WHERE key IN (...). #81255 (Michael Kolupaev).
  • Corrigido um possível travamento no Aggregator em caso de exceção durante o merge. #81450 (Nikita Taranov).
  • Corrigido InterpreterInsertQuery::extendQueryLogElemImpl para 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 IN com transform_null_in=1 quando há NULL no 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 MongoDB podiam incluir um componente de caminho no argumento host: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 engine MongoDB tiver 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 function mongo, assim como a fontes de dicionário e coleções nomeadas. #81942 (Vladimir Cherkasov).
  • Corrigida uma possível falha no Aggregator em 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) de hosts tiver id == DROPPED_MARK e não houver outros elementos no mesmo shard, o primeiro elemento de shards será um vetor vazio, o que leva a std::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 column em consultas com arrayJoin na condição WHERE e IndexSet. #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, numericIndexedVectorPointwiseDivide que 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_s e asynchronous_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 NULL na função CASE. #82436 (Yarik Briukhovetskyi).
  • Corrige condições de corrida no cliente (ao não usar o contexto global) e sobrescritas de session_timezone (antes, se session_timezone fosse definido, por exemplo, em users.xml/nas opções do cliente como não vazio e, no contexto da consulta, como vazio, o valor de users.xml era 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_size seja definido como zero para garantir que as operações do servidor não travem. #82532 (Bharat Nallan).
  • Corrigido LOGICAL_ERROR durante 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 mergeTreeProjection quando enable_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/groupArrayLast no 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 Memory vazia, que fazia a restauração do backup falhar com o erro BACKUP_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_ptr em TransactionLog::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 engine MergeTree / 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 formatDateTime quando 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_request para 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_SUBQUERIES quando 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 prefixo Cache). #83730 (Azat Khuzhin).
  • Corrige um possível abort (devido ao join das threads da tarefa) e, possivelmente, travamentos (em testes unitários) durante o desligamento de BackgroundSchedulePool. #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.ubuntu do 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 busybox e ferramentas de instalação em clickhouse/clickhouse-server e nas imagens oficiais clickhouse. #83735 (Mikhail f. Shiryaev).
  • Adicionado suporte à variável de ambiente CLICKHOUSE_HOST para especificar o host do servidor ClickHouse, alinhando-se às variáveis de ambiente existentes CLICKHOUSE_USER e CLICKHOUSE_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 countMatches interrompia a contagem na primeira correspondência vazia, mesmo que o padrão a aceitasse. Para corrigir esse problema, countMatches agora 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ção count_matches_stop_at_empty_match. #81676 (Elmi Ahmadov).
  • Menor: força as configurações de servidor backup_threads e restore_threads a serem diferentes de zero. #80224 (Raúl Marín).
  • Menor: corrige bitNot para String, 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) e Time64 ([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 existente toTime. A configuração use_legacy_to_time está 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 disk nos motores de banco de dados Atomic e Ordinary, 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 com timestamp inicial, timestamp final e passo especificados - calcular delta, rate, idelta e irate no estilo do PromQL. #80590 (Alexander Gololobov).
  • Adicionar as funções mapContainsValuesLike/mapContainsValues/mapExtractValuesLike para 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_query para 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 JSON em Parquet e à leitura direta de colunas JSON de Parquet. #79649 (Nihal Z. Miaji).
  • Adicionado suporte a MultiPolygon em pointInPolygon. #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 bech32Encode e bech32Decode para 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, arrayLast e arrayLastIndex passarã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 name em vez de USE name. #81307 (Yarik Briukhovetskyi).
  • Adicionada uma nova tabela do sistema system.codecs para inspecionar os codecs disponíveis. (issue #81525). #81600 (Jimmy Aguilar Mena).
  • Suporte às funções de janela lag e lead. Fecha #9887. #82108 (Dmitry Novik).
  • A função tokens agora oferece suporte a um novo tokenizer, chamado split, que é adequado para logs. #80195 (Robert Schulze).
  • Adicionado suporte ao argumento --database no clickhouse-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 Kafka2 usando 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 que all_topic_partitions / active_replicas_count (em que all_topic_partitions é o número total de partições e active_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 tokenizer obrigatório e dois opcionais: max_rows_per_postings_list e ngram_size. #80262 (Elmi Ahmadov).
  • Antes, o armazenamento packed nã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 armazenamento packed, 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 para text. Índices existentes do tipo gin continuam podendo ser carregados, mas lançarão uma exceção (sugerindo índices text em 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 SLRU no 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::merge quando 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 o hash join paralelo. #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 tabelas Kafka). #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 toFixedString quando 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 timeout de conexão próprio; veja a configuração parallel_replicas_connect_timeout_ms. Antes, as configurações connect_timeout_with_failover_ms/connect_timeout_with_failover_secure_ms eram usadas como valores de timeout de 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] IN para a cláusula PREWHERE, quando aplicável. #79996 (Eduard Karacharov).

Aprimoramento

  • EXPLAIN SYNTAX agora usa um novo analisador. Ele retorna a AST construída a partir da árvore de consulta. Foi adicionada a opção query_tree_passes para 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 S3 após o erro AuthenticationRequired. #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 _time aos mecanismos S3Queue e AzureQueue. #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-client e local também aceitam parâmetros de consulta no formato param-<name> (hífen), além de param_<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_error para startup_scripts: quando throw_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_headers a http_handlers de qualquer tipo. #79975 (Andrey Zvonov).
  • A função reverse agora oferece suporte ao tipo de dado Tuple. Fecha #80053. #80083 (flynn).
  • Resolve #75817: permite obter dados de auxiliary_zookeepers na tabela system.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_nulls e any_respect_nulls como SimpleAggregateFunction. #80219 (Diskein).
  • Remover a chamada desnecessária de adjustCreateQueryForBackup para bancos de dados Replicated. #80282 (Vitaly Baranov).
  • Permitir opções adicionais (após --, como em -- --config.value='abc') no clickhouse-local sem 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_rewritable com 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 UNFREEZE nã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 ProfileEvents para observabilidade dos algoritmos de busca de índice: IndexBinarySearchAlgorithm e IndexGenericExclusionSearchAlgorithm. #80679 (Pablo Marcos).
  • Não emitir reclamações sobre MADV_POPULATE_WRITE sem suporte em kernels mais antigos nos logs (para evitar poluição dos logs). #80704 (Robert Schulze).
  • Adicionado suporte a Date32 e DateTime64 em expressões de TTL. #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 EXISTS a SYSTEM 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 EXPLAIN ao 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_alias foi 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_history mostra o histórico de bancos de dados de catálogos, como Glue ou Iceberg REST. Além disso, as colunas table_name e database_name foram renomeadas para table e database em system.iceberg_history por consistência. #80975 (alesapin).
  • Permitir o modo somente leitura para a função de tabela merge, para que o privilégio CREATE TEMPORARY TABLE nã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.metrics em vez do incompleto system.asynchronouse_metrics). Adicionado o tamanho dos caches em memória (em bytes) ao dashboard.html. VectorSimilarityIndexCacheSize/IcebergMetadataFilesCacheSize foram renomeados para VectorSimilarityIndexCacheBytes/IcebergMetadataFilesCacheBytes. #81023 (Azat Khuzhin).
  • Ignora bancos de dados com motores que não podem conter tabelas RocksDB ao ler de system.rocksdb. #81083 (Pervakov Grigorii).
  • Permitir o uso de filesystem_caches e named_collections no arquivo de configuração do clickhouse-local. #81105 (Alexey Milovidov).
  • Corrige o destaque de PARTITION BY nas instruções INSERT. Em versões anteriores, PARTITION BY nã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 MemoryResidentWithoutPageCache informa 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 a MemoryResident. #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_final e use_skip_indexes_if_final_exact_mode agora têm True como valor padrão. Consultas com a cláusula FINAL agora 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 definir use_skip_indexes_if_final_exact_mode como 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_strict nas verificações de monotonicidade das funções de conversão. Atualmente, algumas funções de conversão, como toFloat64(UInt32) e toDate(UInt8), retornam incorretamente false para is_strict, quando deveriam retornar true. #81359 (zoomxi).
  • Ao verificar se uma KeyCondition corresponde a um intervalo contínuo, se a chave estiver envolvida por uma cadeia de funções não estrita, um Constraint::POINT pode precisar ser convertido em Constraint::RANGE. Por exemplo: toDate(event_time) = '2025-06-03' implica um intervalo para event_time: [‘2025-06-03 00:00:00’, ‘2025-06-04 00:00:00’). Este PR corrige esse comportamento. #81400 (zoomxi).
  • Os aliases clickhouse/ch invocarão clickhouse-client em vez de clickhouse-local se --host ou --port forem 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_subqueries está 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 currentDatabase era usada em seções CONSTRAINT de consultas ON 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 tipos Dynamic/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 readonly no armazenamento de objetos azure_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_functions da tabela system.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 DateTime com fuso horário nas tabelas StripeLog. 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_BLOCK causado pela otimização de filter-push-down no sep lógico do JOIN quando a expressão ON nã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 shardNum nas tabelas Distributed com join_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 DICTIONARY falhava com CANNOT_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_COLUMN para consultas distribuídas com IN 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 BY externo. #80777 (Azat Khuzhin).
  • Este PR pode fechar #80742. #80783 (zoomxi).
  • Corrige falha no Kafka porque get_member_id() estava criando std::string a 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ção predicate-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 exist em 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 colunas used_executable_user_defined_functions ou used_sql_user_defined_functions caso a UDF tenha sido usada na requisição. #81101 (Kyamran).
  • Corrigidos erros Too large size ... passed to allocator e possíveis travamentos em inserções via protocolo HTTP com formatos de texto (JSON, Values, …) e campos Enum omitidos. #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 identifier em distributed_product_mode_local=local com 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, icebergCluster etc.): (1) corrige um possível segfault em DataLakeConfiguration ao usar a função Cluster com 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 Aggregator em 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 Npy que ocorria ao gravar em uma tabela com o engine URL. 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 DatabaseReplicated para database_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 part durante ATTACH em ReplicatedMergeTree. #81647 (Azat Khuzhin).
  • As configurações de consulta use_iceberg_partition_pruning nã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_size para garantir que ela não seja zero. #81693 (Bharat Nallan).
  • Corrige problemas no clickhouse-local relacionados a consultas DROP VIEW que ficavam travadas. #81705 (Bharat Nallan).
  • Corrige o join do StorageRedis em alguns casos. #81736 (Pervakov Grigorii).
  • Corrige um travamento em ConcurrentHashJoin com USING () 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 engine MongoDB podiam incluir um componente de caminho no argumento host: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 o engine MongoDB tiver 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 a table function mongo, nem a fontes de dicionário e coleções nomeadas. #81942 (Vladimir Cherkasov).
  • Corrigida uma possível falha no Aggregator em 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 pesos UInt32 e Int32. 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

Lançamento do ClickHouse 25.5, 2025-05-22

Alteração incompatível com versões anteriores

  • A função geoToH3 agora 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ção geotoh3_argument_order = 'lon_lat'. #78852 (Pratima Patel).
  • Adiciona a configuração de cache do sistema de arquivos allow_dynamic_cache_resize, com valor padrão false, 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 annoy e usearch. 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 índices annoy e usearch, 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-rs do armazenamento DeltaLake. #79541 (Kseniia Sumarokova).
  • Se a leitura de um URL envolver vários redirecionamentos, a configuração enable_url_encoding será aplicada corretamente em todos os redirecionamentos da cadeia. #79563 (Shankar Iyer). O valor padrão de enble_url_encoding agora é 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, sparseGramsUTF8 para 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 um FROM table implí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-format não for especificado e ele estiver processando um arquivo comum. #79085 (Alexey Milovidov).
  • Adicionadas as funções stringBytesUniq e stringBytesEntropy para 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 getServerSetting e getMergeTreeSetting. Fecha #78318. #78439 (NamNguyenHoai).
  • Adicionada a nova configuração iceberg_enable_version_hint para usar o arquivo version-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_offset em tabelas da família MergeTree. 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,positiveModuloOrNull para 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 icebergHash e icebergBucket. Suporte ao pruning de arquivos de dados em tabelas Iceberg particionadas com a transformação bucket. #79262 (Daniil Ivanik).

Funcionalidade experimental

  • Novos tipos de dados Time/Time64: Time (HHH:MM:SS) e Time64 (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_text foram renomeados para gin. Isso segue a terminologia mais familiar do PostgreSQL e de outros bancos de dados. Os índices existentes do tipo full_text continuam podendo ser carregados, mas lançarão uma exceção (sugerindo índices gin) 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 tabela ReplacingMergeTree tiver 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/AzureQueue ao permitir INSERTs de dados em paralelo (isso pode ser habilitado com a configuração de queue parallel_inserts=true). Anteriormente, S3Queue/AzureQueue só conseguiam executar em paralelo a primeira parte do pipeline (download e parsing); o INSERT era executado em uma única thread. E os INSERTs quase sempre são o gargalo. Agora, a escalabilidade será quase linear com processing_threads_num. #77671 (Azat Khuzhin). max&#95;processed&#95;files&#95;before&#95;commit mais equilibrado em S3Queue/AzureQueue. #79363 (Azat Khuzhin).
  • Introduzido um limiar (controlado pela configuração parallel_hash_join_threshold) para voltar ao algoritmo hash quando 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 uniqExact na etapa final da agregação distribuída. #78703 (Nikita Taranov).
  • Corrige uma possível degradação de desempenho na mesclagem paralela de estados uniqExact em 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 LogSeriesLimiter faç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_down como 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 ... DELETE para 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_bytes para 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 FiberStack de mmap para aligned_alloc, já que isso divide as VMAs e, sob carga intensa, o limite de vm.max&#95;map&#95;count pode 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 isIPAddressInRange aos tipos de dados String, IPv4, IPv6, Nullable(String), Nullable(IPv4) e Nullable(IPv6). #78364 (YjyJeff).
  • Permite alterar dinamicamente as configurações do pool de conexões do engine PostgreSQL. #78414 (Samay Sharma).
  • Permite especificar _part_offset em 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_query e source) em system.named_collections. Fecha #78179. #78582 (MikhailBurdukov).
  • Adicionado um novo campo condition à tabela de sistema system.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 DateTime64 em 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 Variant no formato Values com uma conversão de valores mais eficiente. #78923 (Pavel Kruglov).
  • A função tokens foi estendida para aceitar um argumento adicional “tokenizer”, além de outros argumentos específicos do tokenizer. #79001 (Elmi Ahmadov).
  • A instrução SHOW CLUSTER agora 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: ParquetReadRowGroups e ParquetPrunedRowGroups para analisar a poda de índice do Parquet. #79180 (flynn).
  • Suporte a ALTER em 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_syntax foi 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 virtual cache. 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_space para o cache do sistema de arquivos. #79460 (Kseniia Sumarokova).
  • No clickhouse-benchmark, reconfigure a opção reconnect para aceitar 0, 1 ou N como valores para reconexão, conforme o caso. #79465 (Sachin Kumar Singh).
  • Permite ALTER TABLE ... MOVE|REPLACE PARTITION para tabelas em discos plain_rewritable diferentes. #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.functions agora 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 campo is_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 modificador EXCEPT. 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 JSON usando 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-benchmark exibirá 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 SELECT durante a criação de VIEW com o analisador habilitado. Fecha #75956. #76356 (Dmitry Novik).
  • Corrigida a aplicação de async_insert pelo servidor (via apply_settings_from_server) (antes, isso levava a erros Unknown packet 11 from server no 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 mismatch no caso de INSERT SELECT em uma função de tabela com inferência de esquema, se o SELECT tiver subconsultas escalares. #78677 (Pervakov Grigorii).
  • Correção no analisador: com prefer_global_in_and_join=1, em uma tabela Distributed, a função in na consulta SELECT deve ser substituída por globalIn. #78749 (Yakov Olkhovskiy).
  • Corrigidos vários tipos de consultas SELECT que leem de tabelas com engine MongoDB ou da função de tabela mongodb: consultas com conversão implícita de valor constante na cláusula WHERE (por exemplo, WHERE datetime = '2025-03-10 00:00:00') ; consultas com LIMIT e GROUP 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 prewhere em 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_cache agora rejeitam os parâmetros block_size e write_buffer_size quando 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 de IN, isso pode levar a resultados incorretos. O suporte adequado a esses tipos em IN é 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 mismatch em 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_requests e allow_experimental_parallel_reading_from_replicas desabilitados. #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&#95;cache&#95;limits configurado incorretamente. #79805 (Bharat Nallan).
  • Corrige o resultado da função SQL formatDateTime se um formatador de tamanho variável (por exemplo, %W, ou seja, o dia da semana Monday Tuesday etc.) for seguido por um formatador composto (um formatador que imprime vários componentes de uma só vez, por exemplo, %D, ou seja, a data americana 05/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 %e na função SQL parseDateTime agora 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ção parsedatetime_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 SELECT em system.workloads. #78743 (Sergei Trifonov).
  • Correção: materialização tardia em consultas distribuídas. #78815 (Igor Nikonov).
  • Corrigida a conversão de Array(Bool) para Array(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 AggregatingSortedAlgorithm e SummingSortedAlgorithm. #79056 (Nikita Taranov).
  • enable_user_name_access_type não deve afetar o tipo de acesso DEFINER. #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

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 MongoDB foi removida. A configuração do servidor use_legacy_mongodb_integration tornou-se obsoleta e não tem mais efeito. #77895 (Robert Schulze).
  • Aprimora a validação de SummingMergeTree para 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-local manterá 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 entre min_os_cpu_wait_time_ratio_to_throw e max_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 tabelas Iceberg em 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 e metadata.json para acelerar as consultas. #77156 (Han Fei).
  • Suporte ao mecanismo de tabela DeltaLake para 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_size e vector_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 MergeTree somente 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 SASL e credenciais ao engine de tabela Kafka. 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_codec para 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, em system.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-256 no protocolo de compatibilidade do PostgreSQL. #76839 (scanhex12).
  • Adicionadas as funções arrayLevenshteinDistance, arrayLevenshteinDistanceWeighted e arraySimilarity. #77187 (Mikhail f. Shiryaev).
  • A configuração parallel_distributed_insert_select passa a surtir efeito em INSERT SELECT para ReplicatedMergeTree (anteriormente, exigia tabelas Distributed). #78041 (Igor Nikonov).
  • Introduz a função toInterval. Essa função aceita 2 argumentos (value e unit) e converte o valor em um tipo Interval específico. #78723 (Andrew Davis).
  • Adiciona várias formas práticas de resolver o arquivo raiz metadata.json em 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 EXISTS na cláusula WHERE. Fecha #72459. #76078 (Dmitry Novik).
  • Adicionadas as funções sparseGrams e sparseGramsHashes, 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 Iceberg com 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 com count() 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_size quando 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 get individuais, que poderiam causar uma carga significativa no Keeper com o aumento do número de réplicas, nos casos em que multiRead está 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 s3Cluster para 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(...)) como countIf se for necessária uma conversão de tipo. Fecha #78564. #78565 (李扬).
  • A função hasAll agora pode aproveitar os índices de skipping de texto completo tokenbf_v1 e ngrambf_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_type para a tabela system.metric_log com 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 a system.asynchronous_metric_log, métricas/eventos são armazenados como linhas, e o mais interessante, transposed_with_wide_view — cria a tabela subjacente com esquema transposed, mas também introduz uma view com esquema wide que traduz consultas para a tabela subjacente. Em transposed_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ção serialize_query_plan. Quando ativada, as consultas da tabela Distributed usarã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 JSON e à 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_ms e max_postpone_time_for_failed_replicated_tasks_ms, que são semelhantes a max_postpone_time_for_failed_mutations_ms. #74576 (MikhailBurdukov).
  • Adiciona query_id ao system.errors. Fecha #75815. #76581 (Vladimir Baikov).
  • Adicionado suporte para conversão de UInt128 em IPv6. Isso permite a operação bitAnd e operações aritméticas com IPv6, além da conversão de volta para IPv6. Fecha #76752. Isso também permite que o resultado da operação bitAnd em IPv6 seja convertido de volta para IPv6. Veja também #57707. #76928 (Muzammil Abdul Rehman).
  • Não faz parse de valores especiais de Bool em formatos de texto dentro do tipo Variant por padrão. Isso pode ser habilitado com a configuração allow_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 do librdkafka (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_pread para habilitar ou desabilitar o pread no HDFS. #77885 (kevinyhzou).
  • Adiciona profile events para o número de solicitações multi de leitura e escrita do ZooKeeper. #77888 (JackyWoo).
  • Permitir a criação de tabelas temporárias e a inserção nelas quando disable_insertion_and_mutation estiver 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 MergeTree será realizada na ordem dos blocos, o que é importante para algoritmos especiais de mesclagem, como ReplacingMergeTree. Isso encerra #71009. #77976 (Alexey Milovidov).
  • As regras de mascaramento de consultas agora podem lançar um LOGICAL_ERROR se houver correspondência. Isso ajudará a verificar se uma senha predefinida está vazando nos logs. #78094 (Nikita Mikhaylov).
  • Adicionada a coluna index_length_column em information_schema.tables para maior compatibilidade com o MySQL. #78119 (Paweł Zakrzewski).
  • Introduz duas novas métricas: TotalMergeFailures e NonAbortedMergeFailures. 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, BlockQueueTime e BlockReadTime (antes da alteração, 1 segundo era reportado incorretamente como 0,001). #78211 (filimonov).
  • Respeita o limite de loading_retries para 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_env e from_zk para discos em runtime. Fecha #78177. #78470 (Kseniia Sumarokova).
  • Adicionado um aviso dinâmico à tabela system.warnings para mutações de longa duração. #78658 (Bharat Nallan).
  • Adicionado o campo condition à system table system.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 IN para BFloat16 (ou seja, SELECT toBFloat16(1) IN [1, 2, 3]; agora retorna 1). Fecha #78754. #78839 (Raufs Dunamalijevs).
  • Não verificar partes em outros discos para MergeTree se disk = ... estiver definido. #78855 (Azat Khuzhin).
  • Passar a registrar os tipos de dados em used_data_type_families de system.query_log com 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) durante DETACH 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_session não surtia efeito, fazendo com que as sessões nomeadas fossem fechadas apenas após session_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 FileLog vazio usando a função de tabela merge, fecha #75575. #77441 (Vladimir Cherkasov).
  • Usa as configurações padrão de formato na serialização Dynamic da 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 NaN em argMin/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 toStartOfInterval usa um argumento de origem igual a zero. #78096 (Yarik Briukhovetskyi).
  • Proibir a especificação de um parâmetro de consulta session_id vazio na interface HTTP. #78098 (Alexey Katsman).
  • Corrige a sobrescrita de metadados no banco de dados Replicated, que poderia ter ocorrido devido a uma consulta RENAME executada logo após uma consulta ALTER. #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_tables após consultas RENAME DATABASE ou DROP TABLE. #78126 (Nikolay Degterinsky).
  • Correção nas verificações de excesso de tabelas com o banco de dados Replicated apó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 de ReplicatedMergeTree ou KeeperMap. #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 erro BAD_ARGUMENTS para o valor 0 do tipo Int no argumento max_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_settings sempre retornava false. #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 mapFromArrays no caso do tipo LowCardinality(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_mutation de uma réplica for true. Uma tarefa é uma forma de inserção; ela falhará se disable_insertion_and_mutation for true. #78277 (Xu Jia).
  • Validar o acesso às tabelas subjacentes do mecanismo Merge. #78339 (Pervakov Grigorii).
  • O modificador FINAL pode ser ignorado ao consultar uma tabela Distributed. #78428 (Yakov Olkhovskiy).
  • bitmapMin retorna 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_efficient estiver 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 -Cluster falhavam 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 DeltaLake com 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 SELECT que leem de tabelas com engine MongoDB ou da função de tabela mongodb: consultas com conversão implícita de um valor constante na cláusula WHERE (por exemplo, WHERE datetime = '2025-03-10 00:00:00') ; consultas com LIMIT e GROUP 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 cast em StorageDistributed ao usar funções de tabela diferentes de view. 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_cache agora rejeitam os parâmetros block_size e write_buffer_size quando 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 DateTime inválidos no formato CSV. #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

Novo recurso

  • O tipo de dado JSON está pronto para uso em produção. Veja https://jsonbench.com/. Os tipos de dado Dynamic e Variant estã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 como round_robin (comportamento anterior) ou fair_round_robin para 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_path da 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, toYearNumSinceEpoch e toMonthNumSinceEpoch. Adiciona suporte à transformação truncate na poda de partições do engine Iceberg. #77403 (alesapin).
  • Suporte ao tipo de dado LowCardinality(Decimal) #72256. #72833 (zhanglistar).
  • Os profile events FilterTransformPassedRows e FilterTransformPassedBytes mostrarã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 de system.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_size quando o cache é usado passivamente, como em merges. #77898 (Kseniia Sumarokova).
  • Aplica o atributo preserve_most em 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 com INTO OUTFILE. Resolve #70323. #77181 (Onkar Deshpande).
  • Não é mais possível usar NaN ou inf como 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 explicitamente parallel_replicas_only_with_analyzer como false. #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.warnings e 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ções DROP devem 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=Kafka não sai mais explicitamente do consumer group quando uma tabela é removida. Em vez disso, o consumer permanece no grupo até ser removido automaticamente após session_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_settings ou settings têm uma coluna de valor default, o que é prático. Adicionadas a merge_tree_settings e replicated_merge_tree_settings. #76942 (Diego Nieto).
  • Adicionado ProfileEvents::QueryPreempted, que tem lógica semelhante à de CurrentMetrics::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_copy agora 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 INSERT distribuído assíncrono (devido, por exemplo, a No 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 toDateTime quando date_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 RENAME e RESTART REPLICA; no caso de RENAME concorrente com SYSTEM RESTART REPLICA, você pode acabar reiniciando a réplica errada e/ou deixando uma das tabelas no estado Table 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_flag no hash paralelo. Pode causar um travamento do servidor. #76580 (Nikita Taranov).
  • Corrigido um erro lógico ao chamar a função defaultProfiles em 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 block apó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_ERROR gerado durante a finalização de alguns formatos de saída, como JSONEachRowWithProgressRowOutputFormat. #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 lgamma para 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, multiIf podia 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 select falhavam. #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 Array e 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 corretamente true (antes retornava false). Isso torna o comportamento consistente com Float32 e Float64. #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 que a é 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_insert com input. #77340 (Azat Khuzhin).
  • Correção: WITH FILL pode 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&#95;cache&#95;log, que funcionava apenas com a configuração enable_filesystem_cache_log. #77650 (Kseniia Sumarokova).
  • Corrige um erro lógico ao chamar a função defaultRoles dentro de uma projeção. Continuação de #76627. #77667 (pufit).
  • Segundos argumentos do tipo Nullable para a função arrayResize não são mais permitidos. Antes, o uso de Nullable como 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

Lançamento do ClickHouse 25.2, 2025-02-27

Alteração incompatível com versões anteriores

  • Habilita totalmente async_load_databases por padrão (mesmo para instalações que não atualizam o config.xml). #74772 (Azat Khuzhin).
  • Adiciona os formatos JSONCompactEachRowWithProgress e JSONCompactStringsEachRowWithProgress. Continuação de #69989. JSONCompactWithNames e JSONCompactWithNamesAndTypes nã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_parentheses para 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_parsing nã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 result significa “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, evitando MEMORY_LIMIT_EXCEEDED. #72728 (lgbo).
  • Faz com que o novo engine de tabela experimental Kafka respeite 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 table e em cerca de 10 vezes em consultas como SELECT data FROM table LIMIT 10. #74827 (Pavel Kruglov).
  • Corrige contenção desnecessária em parallel_hash quando max_rows_in_join = max_bytes_in_join = 0. #75155 (Nikita Taranov).
  • Corrige pré-alocação dupla em ConcurrentHashJoin caso 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_parts em MATERIALIZE 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 > 5 onde data = [1, 2, 4, 5]. #71383 (Arthur Passos).
  • Consultas passadas para o armazenamento Executable nã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 indexHint para PREWHERE. #74987 (Anton Popov).

Aprimoramento

  • Corrigido o cálculo do tamanho em memória para colunas LowCardinality. #74688 (Nikita Taranov).
  • A tabela processors_profile_log agora 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_serve e max_remote_write_network_bandwidth_for_server em 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 ... com KILL QUERY e automaticamente por timeout (max_execution_time). #75016 (Kirill).
  • Adicionado suporte a groupUniqArrayArrayMap como SimpleAggregateFunction. #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, 18446744073709551615 para argumento muito grande e lançam exceção se for nan. #75312 (Vitaly Baranov).
  • Suporte nativo a s3.endpoint a partir da configuração do catálogo em DatabaseIceberg. Fecha #74558. #75375 (Kseniia Sumarokova).
  • Não falhar silenciosamente se um usuário que executa SYSTEM DROP REPLICA nã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 de users.xml e 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_tracker para 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_hash a system.processes. Observação: embora ela possa ser facilmente calculada dinamicamente com a função normalizedQueryHash, isso é necessário para preparar alterações subsequentes. #75756 (Alexey Milovidov).
  • A consulta a system.tables não gerará exceção mesmo que exista uma tabela Merge criada sobre um banco de dados que não existe mais. O método getTotalRows foi removido das tabelas Hive porque 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/handle em funções de tabela PostgreSQL ou MySQL. 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_workload que permite escolher o comportamento de uma consulta com a configuração workload definida com um valor desconhecido: permitir acesso ilimitado (padrão) ou gerar um erro RESOURCE_ACCESS_DENIED. Isso é útil para forçar todas as consultas a usar o agendamento de workload. #75999 (Sergei Trifonov).
  • Não reescreva subcolunas como getSubcolumn em ARRAY 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_rows de 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 em float64). #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 que x é 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 SELECT pela interface PostgreSQL no macOS (problema #72938). #74231 (Artem Yurov).
  • Corrigido o max&#95;log&#95;ptr nã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_privileges e missing_privileges em query_log para 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 ON quando é 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... para database_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, Map e Nullable(..) com a configuração optimize_function_to_subcolumns habilitada. Antes, os índices dessas colunas podiam ser ignorados. #75081 (Anton Popov).
  • Desative flatten_nested ao 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 BFloat16 como 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, icebergAzure e nos motores de tabela. #75378 (Kseniia Sumarokova).
  • A função TRIM com 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 sizes quando 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_errors quando 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 MergeTree após várias consultas RENAME assíncronas (com alter_sync = 0) entre colunas de tipos diferentes. #75693 (Anton Popov).
  • Corrigido o erro Block structure mismatch in QueryPipeline stream em algumas consultas com UNION 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_DATA durante SELECTs após o ALTER MODIFY da coluna usada na PK da projeção. #75720 (Pavel Kruglov).
  • Corrige o resultado incorreto de ARRAY JOIN para 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-bridge permite 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 JSONEachRow do 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 biblioteca Poco::JSON consistente 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ção enable_job_stack_trace nã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 RENAME exigia o privilégio CREATE USER. Fecha #74372. #76241 (pufit).
  • Corrigido o reinterpretAs com FixedString em 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 ALTER com o banco de dados Memory. #76359 (Azat Khuzhin).
  • Corrige erro lógico na análise de índice quando a condição em WHERE contém a função pointInPolygon. #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 --users ao clickhouse-extract-from-config para obter valores do users.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

  • JSONEachRowWithProgress gravará 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 Merge unificarã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, defina merge_table_max_tables_to_look_for_schema_inference como 1 ou defina compatibility como 24.12 ou 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. DateTime passa a ser DateTime64(3) (antes: UInt32); a configuração output_format_parquet_datetime_as_uint32 restaura o comportamento antigo. Date passa a ser Date32 (antes: UInt16). #70950 (Michael Kolupaev).
  • Por padrão, não permitir tipos não comparáveis (como JSON/Object/AggregateFunction) em ORDER BY e nas funções de comparação less/greater/equal/etc. #73276 (Pavel Kruglov).
  • O mecanismo de banco de dados obsoleto MaterializedMySQL foi removido e não está mais disponível. #73879 (Alexey Milovidov).
  • A fonte de dicionário mysql não executa mais a consulta SHOW 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 TABLE agora exigem um privilégio CHECK separado. Nas versões anteriores, bastava ter o privilégio SHOW TABLES para executar essas consultas. Porém, uma consulta CHECK TABLE pode ser pesada, e os limites usuais de complexidade de consulta para consultas SELECT nã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ção h3togeo_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_integration como 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 definindo apply_mutations_on_fly. #74877 (Anton Popov).
  • Implementa o pruning de partições em tabelas Iceberg para 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_FLOAT de Apache Arrow/Parquet/ORC (eles são lidos como Float32). Isso encerra #72960. Tenha em mente que o half float IEEE-754 não é o mesmo que BFloat16. Encerra #73835. #73836 (Alexey Milovidov).
  • A tabela system.trace_log conterá duas novas colunas, symbols e lines, com o stack trace simbolizado. Isso permite coletar e exportar facilmente informações de perfil. Isso é controlado pelo valor de configuração do servidor symbolize em trace_log e 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 queryN para 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_size e skipping_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/nan corretamente. 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) e add_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_number e script_line_number a system.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 valores DateTime64 e também com DateTime. #74482 (Li Yin).

Recursos experimentais

Melhoria de desempenho

  • Função indexHint otimizada. Agora, colunas usadas apenas como argumentos da função indexHint não são lidas da tabela. #74314 (Anton Popov). Se a função indexHint for 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_rows para o algoritmo JOIN parallel_hash. Ajuda a evitar maior consumo de memória em comparação com o algoritmo hash. #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_insert estiver habilitado. Isso permite usar várias otimizações de consultas com FINAL para 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 arrayROCAUC e arrayAUCPR calculem á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 maskedExecute em 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/FileLog para 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 (via ALTER 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é 1000 ré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_partitioning por 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_print para 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-client e clickhouse-local detectarã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_to e output_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 Pretty ainda mais bonitos: compacte os blocos se não tiver passado muito tempo desde a saída do bloco anterior. Isso é controlado pelas novas configurações output_format_pretty_squash_consecutive_ms (50 ms por padrão) e output_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 Vertical quando a saída é enviada para um terminal. Isso pode ser desativado com a configuração output_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 JSONEachRowWithProgress incluirá eventos com metadados, bem como totais e extremos. Ele também inclui rows_before_limit_at_least e rows_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ção interactive_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&#95;filter em colunas com o tipo de dados DateTime64. #66416 (Yutong Xiao).
  • Quando min_age_to_force_merge_seconds e min_age_to_force_merge_on_partition_only estiverem 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 orc com fuso horário personalizado, em vez de sempre usar o fuso horário GMT. #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 name para a coluna metric em system.asynchronous_metrics. #71164 (megao).
  • Historicamente, por algum motivo, a consulta ALTER TABLE MOVE PARTITION TO TABLE verificava as permissões SELECT e ALTER DELETE em vez da permissão específica ALTER_MOVE_PARTITION. Este PR passa a usar esse tipo de acesso. Para compatibilidade, essa permissão também será concedida implicitamente se SELECT e ALTER DELETE forem 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_ROLE de 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_name a system.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_sort dependa 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 que max_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_load e wait_dictionaries_load_at_startup a system.server_settings. #72664 (Christoph Wurm).
  • Adiciona a configuração max_backup_bandwidth à lista de configurações que podem ser especificadas como parte das consultas BACKUP/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ções least e greatest tratam argumentos NULL retornando sempre NULL (se true) ou ignorando-os (se false). #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 ao system.s3queue existente. #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-disks relatados 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_level na saída em Parquet. #73651 (Arthur Passos).
  • Adiciona a leitura de fixed_size_list do Apache Arrow como um Array, 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) e Null (não mantém backups em lugar nenhum), para testes. #73690 (Vitaly Baranov).
  • concurrent_threads_soft_limit_num e concurrent_threads_soft_limit_num_ratio_to_cores passaram 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ções formatReadable. #73765 (Raúl Marín).
  • Suporte a TLS para compatibilidade com o protocolo wire do Postgres. #73812 (scanhex12).
  • A função isIPv4String retornava 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_opearators para validar literais enum em operadores como IN e NOT IN em 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 distributed para EXPLAIN PLAN. Agora, EXPLAIN distributed=1 ... anexa o plano remoto às etapas ReadFromParallelRemote*. #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_engine apó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 = 1 e allow_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-chave FORCE como alternativa à palavra-chave FINAL. #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-shifted agora 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 RESTORE para 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_address está definido — anteriormente, a porta do proxy era usada de forma incorreta. Adicionada a função currentQueryID(). #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_string sejam 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 %f da função formatDateTime agora gera incondicionalmente seis dígitos de fração de segundo. Isso torna o comportamento compatível com a função MySQL DATE_FORMAT. O comportamento anterior pode ser restaurado usando a configuração formatdatetime_f_prints_scale_number_of_digits = 1. #73324 (ollidraese).
  • Corrigida a filtragem pela coluna _etag ao ler do armazenamento s3 e da função de tabela. #73353 (Anton Popov).
  • Corrigido o erro Not-ready Set is passed as the second argument for function 'in' ao usar IN (subquery) na expressão JOIN 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 insert com falha no armazenamento S3(Azure)Queue. Fecha #70951. #73546 (Kseniia Sumarokova).
  • Corrigido erro na função tupleElement que pode ocorrer em alguns casos para tuplas com elementos LowCardinality e com a configuração optimize_functions_to_subcolumns habilitada. #73548 (Anton Popov).
  • Corrige o parsing de enum glob 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 SYNTAX para 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_BLOCK em consultas com FINAL e SAMPLE. Corrigido um resultado incorreto em seleções com FINAL de CollapsingMergeTree e habilitadas as otimizações de FINAL. #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.txt durante 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 criar Map sem 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 any e anyLast com 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 S3Queue de 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 Loop como engine de tabela em CREATE 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) para RESTORE a 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 EXCEPT ou INTERSECT, para preservar o resultado correto da consulta. Corrige #73930. Corrige #66465. #74577 (Dmitry Novik).
  • Corrigidas consultas INSERT SELECT entre tabelas com colunas Tuple, e habilitada a serialização esparsa. #74698 (Anton Popov).
  • A função right funciona 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 hasColumnInTable nã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).
Última modificação em 3 de julho de 2026