Pular para o conteúdo principal

Alterações incompatíveis com versões anteriores

Alterações nos tipos de dados

  • Introduz o tipo Geometry. Passa a oferecer suporte à leitura dos formatos WKB e WKT. Em versões anteriores, o tipo Geometry era um alias de String, mas agora é um tipo completo. #83344 (Konstantin Vedernikov).
  • Remove o tipo Object obsoleto. #85718 (Pavel Kruglov).
  • Escapa os nomes de arquivo criados para 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 escaping pode ser desativado alterando a configuração do MergeTree escape_variant_subcolumn_filenames (para manter a compatibilidade, desative essa configuração na config do MergeTree ou defina a configuração compatibility para a versão anterior antes da atualização). Resolve #69590. #87300 (Pavel Kruglov).

Alterações em consultas e funções

  • ALTER MODIFY COLUMN agora exige 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 valores NULL são substituídos pela expressão padrão da coluna. Resolve #5985. #84770 (Vladimir Cherkasov).
  • Remove 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 resultados inesperados. Resolve #90028. #90527 (Pavel Kruglov).
  • Corrige 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).
  • O tokenizer ngram não retornará mais ngrams menores que o comprimento N com o qual foi configurado. A busca de texto não retornará linhas quando os tokens de busca estiverem vazios. #89757 (George Larionov).

Alterações de armazenamento e índice

  • Removido o recurso obsoleto LIVE VIEW. Se você usa LIVE VIEW, não será possível atualizar para a nova versão. #88706 (Alexey Milovidov).
  • Agora é proibido criar múltiplos disks plain-rewritable sobre o caminho compartilhado de armazenamento de objetos, pois isso pode levar a comportamento indefinido em caso de colisões entre diferentes transações de armazenamento de metadados. #89038 (Mikhail Artemenko).
  • Agora é proibido criar tabelas especiais MergeTree (como ReplacingMergeTree, CollapsingMergeTree etc.) com uma chave ORDER BY vazia, pois o comportamento de merge nessas tabelas é indefinido. Se você ainda precisar criar uma tabela desse tipo, habilite a configuração allow_suspicious_primary_key. #91569 (Anton Popov).
  • 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 mais antigo. #91429 (Raúl Marín).

Alterações em Settings e configuração

  • Suporte à marcação de exceções em respostas de resultados HTTP, permitindo que os clientes analisem exceções com mais confiabilidade. Resolve #75175. A configuração http_write_exception_in_output_format é desabilitada por padrão para manter a consistência entre os formatos. #88818 (Kaviraj Kanagaraj).
  • Corrige a precedência das configurações SASL do 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 vindas dos arquivos de configuração. #89401 (János Benjamin Antal).
  • Renomeia os parâmetros de configuração do ACME de refresh_certificates_task_interval para refresh_certificates_task_interval_seconds e refresh_certificates_before to refresh_certificates_before_seconds. O parâmetro refresh_certificates_task_interval_seconds agora espera um valor em segundos. #92211 (Konstantin Bogdanov).
  • Marca a desativação de argumentos posicionais nas projeções como uma alteração incompatível com versões anteriores. Além disso, introduz a configuração enable_positional_arguments_for_projections para permitir uma atualização segura do ClickHouse cluster quando houver argumentos posicionais nas projeções. #92007 (Dmitry Novik).

Alterações no cliente

  • Atualização do clickhouse-client para retornar um código de saída diferente de zero (159 - TIMEOUT_EXCEEDED) quando uma consulta expira devido a receive_timeout. Anteriormente, timeouts retornavam o código de saída 0 (sucesso), o que dificultava a detecção de falhas por timeout em scripts e automações. #91432 (Sav).

Alterações no formato das estatísticas

  • Ao alterar uma coluna de String para Nullable(String), não faremos mutação nos dados. Porém, a função de agregação uniq usa uma estrutura de dados diferente: para uma coluna Nullable, ela usará AggregateFunctionNull com um agregador uniq aninhado. AggregateFunctionNull serializará um sinalizador bool adicional. Isso tornará o arquivo de estatísticas incompatível. O formato das estatísticas mudou; o servidor falhará se houver estatísticas no formato antigo. Para evitar exceção, execute ALTER TABLE [db.]table MATERIALIZE STATISTICS ALL para regenerar as estatísticas. #90311 (Han Fei).

Outras alterações incompatíveis

  • Corrige Fatal ao compactar dados com tamanho que não é múltiplo do tamanho do elemento (no codec T64). Resolve #89282. #89432 (yanglongwei).

Novos recursos

Funções

  • Adicionada a nova instrução SQL EXECUTE AS para oferecer suporte à impersonação de usuários. Resolve #39048. #70775 (Shankar).
  • Adicionada a função flipCoordinates, que remove o aninhamento do número necessário de dimensões em um array e troca ponteiros dentro da coluna Tuple. Resolve #79469. #79634 (Sachin Kumar Singh).
  • 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)). #87581 (yanglongwei).
  • Adicionado suporte à window function cume_dist. Corrige #86920. #88102 (Manuel).
  • Funções para calcular área e perímetro para o tipo Geometry. #89047 (Konstantin Vedernikov).
  • Implementada a função dictGetKeys, que retorna as chaves 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).
  • Adicionado suporte a arrayRemove(arr, elem) para remover do array arr todos os elementos iguais a elem. Resolve #52099. #89585 (tiwarysaurav).
  • Introduz a função escalar midpoint, que calcula a média. Resolve #89029. #89679 (simonmichal).
  • Agora é possível recuperar tanto o argumento quanto seu valor mínimo ou máximo correspondente usando as novas funções argAndMin e argAndMax. #89884 (AbdAlRahman Gad).
  • Adicionada a função SQL HMAC(algorithm, message, key) como parte de #73900 e #38775. #90837 (Mikhail f. Shiryaev).
  • Adicionado suporte para que a função has() use a chave primária e data skipping indexes quando o primeiro argumento for um array constante. Fecha #90980. #91023 (Nihal Z. Miaji).

Tabelas de sistema

  • Adicionada a tabela system.unicode, que contém uma lista de caracteres Unicode e suas propriedades. Fecha #80055. #80857 (wxybear).
  • Adicionada uma nova tabela de sistema shared_merge_tree_condemned_parts, semelhante à shared_merge_tree_outdated_parts, que lista as partes condenadas prestes a serem eliminadas pela PartsKillerThread. (Smita Kulkarni).

Motores de tabela e armazenamento

  • Suporte a parte da Prometheus HTTP Query API. Para habilitá-la, adicione uma regra do 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).
  • Agora, os usuários podem configurar tabelas S3/Azure Queue para mover ou marcar arquivos processados, além das opções anteriores de manter ou remover arquivos. Resolve #72944. #86907 (Murat Khairulin).
  • Adiciona uma nova configuração do MergeTree, merge_max_dynamic_subcolumns_in_wide_part, para limitar o número de subcolunas dinâmicas na parte Wide após o merge, independentemente dos parâmetros especificados no tipo de dados. #87646 (Pavel Kruglov).
  • Integração com o catálogo Microsoft OneLake. #89366 (Konstantin Vedernikov).
  • Suporte à sintaxe CREATE OR REPLACE para tabelas temporárias. Fecha #35888. #89450 (Aleksandr Musorin).
  • Suporte a join direct (nested loop) para tabelas MergeTree. Para usá-lo, especifique-o como a única opção na configuração: join_algorithm = 'direct'. #89920 (Vladimir Cherkasov).
  • Este PR introduz configurações no nível de projeção, expostas por meio da nova cláusula WITH SETTINGS em ALTER TABLE ... ADD PROJECTION. Essas configurações permitem que as projeções sobrescrevam determinados parâmetros de armazenamento do MergeTree (por exemplo, index_granularity, index_granularity_bytes) individualmente. #90158 (Amos Bird).

Iceberg e lagos de dados

Recursos de SQL e consultas

  • Adiciona 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 do usuário com atualizações de página (A->A->B) ou navegação de retorno (A->B->A->C) sem subestimar as taxas de conversão. #86916 (Lee ChaeRok).
  • O usuário agora pode adicionar um novo argumento preprocessor na construção de um índice de texto. O argumento é uma expressão arbitrária que transforma cada documento antes da tokenização. #88272 (Jimmy Aguilar Mena).
  • Adiciona suporte a LIMIT e OFFSET fracionários para selecionar uma fração de uma tabela. Fecha #81892. #88755 (Ahmed Gouda).
  • Adiciona a configuração into_outfile_create_parent_directories para criar automaticamente diretórios pai para INTO OUTFILE, evitando erros quando os caminhos de saída não existirem. Resolve #88610. #88795 (Saksham).
  • 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 para caminhos tipados explícitos no tipo JSON. Nesse caso, usa o valor null/zero do caminho tipado. Fecha #86917. #89886 (Max Justus Spransy).

Recursos do cliente e da CLI

  • O cliente de CLI agora pode suprimir a mensagem ‘ClickHouse server version is older than ClickHouse client. It may indicate that the server is out of date and can be upgraded.’ ao especificar --no-server-client-version-message ou false. #87784 (Larry Snizek).
  • Acesse instâncias do ClickHouse Cloud usando credenciais da Cloud com —login. #89261 (Krishna Mannem).
  • A interface web agora oferece um botão de download. Ele baixa o resultado completo, mesmo que a UI exiba apenas parte dele. #89768 (Alexey Milovidov).

Configuração do servidor e monitoramento

  • Adiciona um campo memory_usage a X-ClickHouse-Progress e X-ClickHouse-Summary. Isso pode ser usado para coletar, em tempo real no cliente, o uso de memória das consultas. #88393 (Christoph Wurm).
  • Adicionada a configuração send_profile_events, que permite aos clientes reduzir o tráfego de rede quando os eventos de perfil não estiverem em uso. #89588 (Kaviraj Kanagaraj).

Keeper

Formatos de entrada/saída

  • Implementado o novo formato de entrada/saída Buffers. Esse formato é semelhante ao Native; no entanto, ao contrário de Native, ele não armazena nomes nem tipos de colunas, nem metadados adicionais. Fecha #84017. #91156 (Nihal Z. Miaji).
  • Adicionada 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. Corrige #89523. #89826 (Shreyas Ganesh).
  • Adicionada a configuração kafka_schema_registry_skip_bytes ao mecanismo de tabela Kafka para ignorar bytes de cabeçalho do envelope (por exemplo, o prefixo de 19 bytes do AWS Glue Schema Registry) antes de fazer o parsing do payload da mensagem. #89621 (Taras Polishchuk).

Outros novos recursos

  • Adiciona a configuração max_streams_for_files_processing_in_cluster_functions para controlar o número de streams na leitura paralela de arquivos em funções de tabela cluster. Fecha #90223. #91323 (Pavel Kruglov).
  • Permite desabilitar, por consulta, o download em segundo plano de dados de partes próximas. Corrige #89524. #89668 (tanner-bruce).
  • Adiciona suporte experimental ao e2k (Elbrus-2000) como nova plataforma para o ClickHouse. #90159 (Ramil Sattarov).

Recursos experimentais

  • Suporte à obtenção de certificados TLS de provedores ACME, RFC 8555. #66315 (Konstantin Bogdanov).
  • Foi introduzida uma nova lógica para executar consultas automaticamente com réplicas paralelas, controlada pela configuração automatic_parallel_replicas_mode. #87541 (Nikita Taranov).
  • A busca de texto completo agora está em prévia privada (antes, estava em fase experimental). #88928 (Robert Schulze).
  • Alias passou a ser experimental e pode ser habilitado com allow_experimental_alias_table_engine=1. #89712 (Kai Zhu).

Melhorias de desempenho

Execução e otimização de consultas

  • Falha imediatamente quando as consultas atingem os limites de linhas. Resolve #61872. #62804 (Sean Haynes).
  • Adiciona uma otimização para remover colunas não utilizadas em planos de consulta. Resolve #75152. #76487 (János Benjamin Antal).
  • Otimização para valores grandes em ConstantNode. Fecha #72880. #81104 (Yakov Olkhovskiy).
  • Faz prefetch de chaves durante a iteração da tabela hash para minimizar falhas de cache. #84708 (lgbo).
  • Melhora a velocidade da descompressão LZ4 simplificando o código e ajustando o algoritmo de seleção. #88360 (Raúl Marín).
  • Implementa replicação lazy de colunas em JOIN e ARRAY JOIN. Evita converter representações especiais de colunas, como Sparse e Replicated, em representações completas em alguns formatos de saída. Isso evita cópias desnecessárias de dados na memória. #88752 (Pavel Kruglov).
  • 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 de funções JIT ao evitar inicializar desnecessariamente a coluna de resultado com zero. #90449 (Raúl Marín).
  • Acelera a descompressão T64 por meio de despacho dinâmico. #90610 (Raúl Marín).
  • Acelera a conversão de colunas para bool (em cláusulas WHERE) por meio de despacho dinâmico. #91203 (Raúl Marín).
  • Acelera a ordenação de um único bloco numérico por meio de despacho dinâmico. #91213 (Raúl Marín).

Otimizações de JOIN

  • 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 RIGHTeFULL JOIN` em até 2 vezes. Resolve #78027. #78462 (Yarik Briukhovetskyi).
  • Permite reescrever ANY LEFT JOIN ou ANY RIGHT JOIN como ALL INNER JOIN em alguns casos. #89403 (Dmitry Novik).
  • Adiciona suporte a filtros de runtime de JOIN para junções ANTI. Além disso, refatora a implementação dos filtros de runtime para reduzir a contenção de locks. #89710 (Dmitry Novik).
  • Adiciona suporte à manutenção da leitura em ordem da tabela à esquerda em operações LEFT/INNER JOIN, o que pode ser aproveitado por etapas subsequentes. #89815 (Vladimir Cherkasov).

Otimizações do MergeTree e de armazenamento

  • Consultas SELECT até 8x mais rápidas com partition pruning intensivo em tabelas com mais de 10 mil partes. #85535 (James Morrison).
  • Quando uma consulta usa um fixed hash map para o estado de aggregation (group by por um inteiro pequeno), o ClickHouse passa a mesclar o estado de aggregation em paralelo para acelerar a consulta. Resolve #63666. #87366 (Jianfei Hu).
  • O Parquet reader v3 vem habilitado por padrão. #88827 (Michael Kolupaev).
  • As consultas agora podem se beneficiar simultaneamente de optimize_read_in_order e query_plan_optimize_lazy_materialization. Resolve #88767. #88866 (Manuel).
  • Usa aggregate projection para consultas com DISTINCT. Fecha #86925. #88894 (Nihal Z. Miaji).
  • Executa a transformação LIMIT BY em streaming nos casos em que a ordenação de entrada corresponde às chaves de LIMIT BY. #88969 (Eduard Karacharov).
  • Adicionado suporte a serialização esparsa para colunas do tipo Nullable. #88999 (Amos Bird).
  • Otimiza a filtragem in-place no leitor do MergeTree. Resolve #87119. #90630 (Xiaozhe Yu).
  • Introduz uma heurística adicional para reduzir a largura das opções de merge selecionadas. #91163 (Mikhail Artemenko).

Otimizações de índices e de busca textual

  • O ClickHouse agora usa skip indexes para realizar análise de índice em cláusulas WHERE com condições de filtro conectadas por uma combinação de AND e OR. Antes, a cláusula WHERE precisava ser uma conjunção (AND) de condições de filtro para usar skip indexes. Uma nova setting use_skip_indexes_for_disjunctions (padrão: ativada) controla esse recurso. #87781 (Shankar Iyer).
  • Desempenho de filtragem aprimorado para predicados com funções como like, equals, has e outras, aproveitando um filtro preliminar adicional construído a partir do índice de texto. Essa otimização é habilitada pela setting query_plan_text_index_add_hint. #88550 (Anton Popov).
  • Desempenho do índice de texto aprimorado com caching de blocos de Dicionário e uso de tabelas hash para lookups de token em vez de binary search. #88786 (Elmi Ahmadov).
  • Como as posting lists são as maiores em termos de volume de dados, colocá-las em cache melhora o desempenho em execuções consecutivas. #88912 (Elmi Ahmadov).
  • Otimiza lookups repetidos em dicionário inverso fazendo lookups mais rápidos em um conjunto pré-computado de possíveis valores de chave. Fecha #7968. #88971 (Nihal Z. Miaji).
  • Otimiza consultas ORDER BY...LIMIT N usando skip index e um filtro de limite dinâmico para reduzir significativamente o número de linhas processadas. #89835 (Shankar Iyer).
  • Os usuários devem perceber menor latência na análise de índice quando houver grandes índices minmax (milhões de grânulos). #90428 (Shankar Iyer).

Otimizações de agregação

  • Otimizado o AggregateFunctionHistogram ao ordenar apenas a cauda do array de pontos e dispensar a ordenação para entradas monotônicas, obtendo um ganho de desempenho de ~10%. #85760 (MakarDev).
  • Algumas operações de countDistinct foram ligeiramente aceleradas com a redução da sobrecarga de HashSetTable::merge. #89727 (Raúl Marín).
  • Melhorados o desempenho e o comportamento do topK. #90091 (Raúl Marín).
  • Melhorado o desempenho das operações de comparação de Decimal. Resolve #28192. #90153 (Konstantin Bogdanov).

Otimizações de S3 e backup

  • O S3 particiona objetos internamente com base em prefixos de chave e escala automaticamente para 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 são nomeados com base em um hash do seu conteúdo. #88418 (Julia Kartseva).
  • Melhora o desempenho de consultas em tabelas S3 criadas com glob pattern ao fazer pushdown dos valores de filtro de _path, o que evita operações de listagem no S3. Controlado pela configuração s3_path_filter_limit. #91165 (Eduard Karacharov).

Otimizações para lago de dados

Melhorias

Otimização e execução de consultas

  • Permitir FETCH PARTITION quando houver discos corrompidos em tabelas replicadas MergeTree. #58663 (Duc Canh Le).
  • Adiciona a função h3PolygonToCells, que pode preencher uma geometria com hexágonos H3. Resolve #33991. #66262 (Zacharias Knudsen).
  • Todas as consultas DDL ON CLUSTER agora são executadas com o contexto do usuário da consulta original para melhor validação de acesso. #71334 (pufit).
  • Adicionado paralelismo às consultas ALTER TABLE ... FREEZE. #71743 (Kirill).
  • Permite usar segundos argumentos não constantes em IN. Também oferece suporte a uma tupla como segundo argumento. #77906 (Yarik Briukhovetskyi).
  • Este PR permite usar projeções normais como índice secundário. Quando habilitado, certos predicados da consulta podem ser usados para ler a partir de partes de projeção e gerar bitmaps para filtrar linhas com eficiência durante o estágio PREWHERE. #81021 (Amos Bird).
  • Habilita enable_shared_storage_snapshot_in_query por padrão para oferecer melhores garantias de consistência. #82634 (Alexey Milovidov).
  • UNION deve unificar os tipos com Variant, se necessário. Resolve #82772. #83246 (Mithun p).
  • 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).
  • Permite INSERT em colunas ALIAS (colunas que simplesmente se referem a uma coluna física, sem nenhuma expressão). Fecha #80060. #84154 (Shaurya Mohan).
  • Você pode ver uma barra de progresso, logs e estatísticas de desempenho de consultas CREATE OR REPLACE TABLE com SELECT no clickhouse-client. Corrige #38416. #87247 (Diskein).
  • Suporte a tipos JSON e Dynamic em funções de hash. Resolve #87734. #87791 (Pavel Kruglov).
  • O valor padrão de query_plan_optimize_join_order_limit foi alterado para 10. #89312 (Alexey Milovidov).
  • 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).
  • Ative a configuração allow_statistics_optimize por padrão, para que o otimizador de JOINs use estatísticas de colunas. #89332 (Alexey Milovidov).
  • Ative create_table_empty_primary_key_by_default por padrão. Isso melhora a usabilidade. #89333 (Alexey Milovidov).
  • A configuração enable_time_time64_type agora vem habilitada por padrão. #89345 (Yarik Briukhovetskyi).
  • A configuração allow_special_serialization_kinds_in_output_formats agora é habilitada por padrão. #89402 (Pavel Kruglov).
  • Ignorar ON CLUSTER em consultas executadas por meio do Shared Catalog. (Nikolay Degterinsky).
  • Adicionar suporte ao ALTER DATABASE MODIFY COMMENT no Shared Catalog. (Nikolay Degterinsky).
  • Suporte a CREATE OR REPLACE para SharedSet/SharedJoin em bancos de dados Shared. (Tuan Pham Anh).
  • Evite aguardar outras consultas ao executar SYNC REPLICA em SharedMergeTree. (Raúl Marín).

Melhorias em armazenamento e MergeTree

  • Adiciona uma nova coluna virtual _tags (Map(String, String)) com todas as tags associadas ao blob no S3. Resolve #72945. #77773 (Zicong Qu).
  • Adiciona uma mensagem de erro informando que a parte foi deduplicada. #80264 (Aleksandr Musorin).
  • Passa a usar OpenSSL 3.5.4. #81389 (Konstantin Bogdanov).
  • Adiciona cache para autenticação bcrypt. #87115 (Nikolay Degterinsky).
  • Timestamps do Parquet sem fuso horário (isAdjustedToUTC=false) agora são lidos como DateTime64(…, ‘UTC’) em vez de DateTime64(…). #87872 (Michael Kolupaev).
  • Roles definidas em SQL agora podem ser concedidas a usuários definidos em users.xml. #88139 (c-end).
  • Se um skip index usado em uma consulta 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).
  • Permite inserções em tabelas remotas e de lago de dados quando disable_insertion_and_mutation está habilitado. #88549 (Alexander Tokmakov).
  • Armazena em cache estatísticas no nível da tabela e adiciona duas configurações: a configuração do MergeTree refresh_statistics_interval e a configuração de sessão use_statistics_cache. #88670 (Han Fei).
  • Adiciona uma configuração do MergeTree alter_column_secondary_index_mode para controlar o que fazer com índices durante mutações. Valores possíveis: throw, drop, rebuild e compatibility. Fecha #77797. #89335 (Raúl Marín).
  • Introduz 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).

Tabelas de sistema e monitoramento

  • Adiciona várias métricas de histograma para o servidor e o Keeper, para instrumentar a duração dos estágios de execução das requisições ao Keeper. #88158 (Miсhael Stetsyuk).
  • Adiciona uma nova coluna statistics em system.columns, indicando os tipos de estatísticas criadas nessa tabela. #89086 (Han Fei).
  • A interface HTTP passará a fornecer os headers Age e Expires quando o cache de resultados de consulta for usado. Introduz novos eventos de perfil: QueryCacheAgeSeconds, QueryCacheReadRows, QueryCacheReadBytes, QueryCacheWrittenRows, QueryCacheWrittenBytes. #89759 (Alexey Milovidov).
  • Exibe propriedades da tabela na interface web. Clicar no número de linhas ou bytes abrirá uma consulta de system.tables. #89771 (Alexey Milovidov).
  • Adiciona os campos last_error_time, last_error_message, last_error_query_id e last_error_trace à tabela system.error_log. #89879 (Narasimha Pakeer).
  • Armazena IDs de blocos de desduplicação em system.part_logs. #89928 (Sema Checherinda).
  • Altera o valor padrão da configuração check_query_single_value_result de true para false. Isso faz com que CHECK TABLE retorne resultados detalhados por parte, em vez de um resultado agregado. #90150 (Robert Schulze).
  • Adiciona uma nova coluna parts_in_progress_names a system.mutations para melhorar o diagnóstico. #90155 (Shaohua Wang).
  • Introduz system.background_schedule_pool{,_log} para melhorar a introspecção de jobs em segundo plano. #91157 (Azat Khuzhin).
  • Adiciona os eventos de perfil FailedInitialQuery e FailedInitialSelectQuery. #91172 (RinChanNOW).
  • Adiciona três colunas em system.tables para métricas de partes órfãs. (Han Fei).
  • Expõe o valor de distributed_cache_client.connection_pool_size como uma métrica. (Francesco Ciocchetti).

Melhorias no cliente e na UI

  • Agora o usuário pode cancelar a consulta pressionando Ctrl-C quando o pager estiver ativo. Resolve #80778. #88935 (Grigorii Sokolik).
  • A interface web agora exibirá barras na tabela mesmo quando os valores forem negativos. #89016 (Alexey Milovidov).
  • Consultas iniciadas com espaços em branco não são mais salvas no histórico. #89116 (Konstantin Bogdanov).
  • clickhouse-client e clickhouse-local, no modo interativo, destacarão na linha de comando identificadores com o mesmo nome do identificador atual sob o cursor. #89689 (Alexey Milovidov).
  • O redimensionador da área de texto da consulta na interface web agora ocupa toda a largura. #89457 (Alexey Milovidov).
  • As dicas de tipo na interface web não invadem mais o cabeçalho da tabela. #89753 (Alexey Milovidov).
  • Agora você pode comentar ou descomentar rapidamente as linhas selecionadas no editor de consultas da interface web usando Ctrl+/ (ou Cmd+/ no Mac). #91160 (Samuel K.).
  • Adicionado suporte para carregar a configuração do ClickHouse Client a partir dos caminhos do XDG Base Directory. Resolve #89882. #90306 (Wujun Jiang).

Melhorias em S3 e armazenamento em nuvem

  • Passa a permitir automaticamente o uso de regiões opt-in da AWS para S3 quando a região não é especificada no endpoint. #88930 (Andrey Zvonov).
  • Define s3_retry_attempts como 500 por padrão na versão 25.6 para garantir que os backups sejam concluídos com sucesso quando houver um reparticionamento no S3. #89051 (Nikita Mikhaylov).
  • Armazena em cache as credenciais do S3 usadas na interação com o endpoint STS para que possam ser reutilizadas em diferentes chamadas de função. #89734 (Antonio Andelic).
  • Agora, URLs pré-assinadas funcionam com S3. Fecha #65032. #90827 (Yarik Briukhovetskyi).

Melhorias em lagos de dados

  • Suporte à leitura de CDF do DeltaLake por meio da table function deltaLake, com as configurações delta_lake_snapshot_start_version e delta_lake_snapshot_end_version. #90431 (Kseniia Sumarokova).
  • Suporte a configurações de armazenamento em insert into table function, para manter consistência com select. Fecha #89386. #91707 (Kseniia Sumarokova).
  • Gerar um erro “not implemented” para consultas TRUNCATE em lagos de dados, em vez de simplesmente não fazer nada. Fecha #86604. #91713 (Kseniia Sumarokova).

Melhorias no Kafka

  • As configurações kafka_compression_codec e kafka_compression_level agora podem ser usadas para especificar a compressão dos produtores Kafka. #89073 (János Benjamin Antal).
  • Adiciona kafka_consumer_reschedule_ms como uma configuração ajustável do engine de tabela Kafka. Resolve #89204. #90112 (Jeremy Aguilon).

Melhorias no Keeper

  • Adiciona um 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 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. #90016 (Miсhael Stetsyuk).
  • Usa um limite de nós mais baixo para a solicitação RemoveRecursive do Keeper durante a limpeza do S3Queue. #90201 (Antonio Andelic).

Melhorias no formato de entrada/saída

  • Adicionado suporte a UUID no Parquet quando ele é representado por FixedString(16) com o tipo lógico UUID. #74484 (alekseev-maksim).
  • Adicionado suporte a array de strings como entrada para as funções hasAnyTokens ou hasAllTokens. #89124 (Elmi Ahmadov).
  • No formato Pretty, tuplas nomeadas agora são exibidas como Pretty JSON. Isso fecha #65022. #91779 (Mostafa Mohamed Salah).
  • Adicionado um limite para o tamanho das mensagens do CapnProto. Ele pode ser alterado com format_capn_proto_max_message_size. #91888 (Antonio Andelic).

Melhorias no índice de texto

  • O índice de texto agora funciona com tabelas ReplacingMergeTree. #90908 (Elmi Ahmadov).
  • Agora é possível usar índice invertido em PREWHERE. Resolve #89975. #89977 (Peng Jian).
  • O tokenizador de ngrams agora pode ser criado com ngram_length = 1. #91529 (George Larionov).
  • Foi adicionado um cache para o cabeçalho desserializado do índice de texto para reduzir E/S e melhorar o desempenho da consulta. #89513 (Elmi Ahmadov).

Outras melhorias

  • Corrige 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 ao validar limites de tamanho. #88744 (Raufs Dunamalijevs).
  • Se a memória do sistema for inferior a 5GB, não faz mlock do executável por padrão. #89751 (Alexey Milovidov).
  • Reduz o uso de memória durante merges na tabela system.metric_log, definindo min_bytes_for_wide_part e vertical_merge_algorithm_min_bytes_to_activate como 128MB. #89811 (filimonov).
  • Tenta novamente em caso de erros de rede quando a biblioteca S3 analisa a resposta XML. #90216 (Sema Checherinda).
  • Atualiza as mensagens de aviso ao se aproximar dos limites de guardrails: exibe os valores atuais e de throw. #90438 (Nikita Fomichev).
  • Faz streaming de fragmentos na tabela system.filesystem_cache em vez de criar um único fragmento com todo o estado do cache. #90508 (Kseniia Sumarokova).
  • 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. #90750 (Shankar Iyer).
  • Evita expor a versão do servidor ClickHouse em respostas de erro HTTP retornadas antes da autenticação. #91003 (filimonov).
  • Adiciona as novas configurações apply_row_policy_after_final e apply_prewhere_after_final para permitir aplicar row policies e condições PREWHERE após o processamento de FINAL. Corrige #90986. #91065 (Yarik Briukhovetskyi).
  • Adiciona suporte ao tipo JSON em tupleElement. Fecha #81630. #91327 (Pavel Kruglov).
  • Adiciona suporte a índices negativos para acessar elementos de tupla (por exemplo, tuple.-1). #91665 (Amos Bird).
  • Permite conversão implícita de tipo ao converter Array em QBit. #91846 (Raufs Dunamalijevs).
  • Adiciona uma nova coluna, elapsed_time_microseconds, a system.blob_storage_log. #92322 (Alexey Milovidov).
  • Adiciona uma nova configuração, database_shared_drop_table_delay_seconds, que permite aos usuários controlar o atraso para exclusão de tabelas no Shared database. (Nikolay Degterinsky).
  • Carrega sob demanda chaves criptografadas para coleções nomeadas. (Pablo Marcos).
  • Permite desabilitar o cache de clientes por buffer no distributed cache. (Kseniia Sumarokova).
  • Adiciona um limite compartilhado para conexões do distributed cache. (Kseniia Sumarokova).

Correções de bugs

Esta seção contém uma seleção de correções de bugs importantes. Para ver a lista completa de todas as correções de bugs deste lançamento, consulte o changelog completo

Correções na execução de consultas

  • Corrige rows_before_limit_at_least incorreto quando há múltiplos shards remotos envolvidos em uma agregação distribuída com mesclagem. #63511 (Amos Bird).
  • Corrige a exibição de 0 rows in set após a consulta INSERT INTO ... SELECT. Fecha #47800. #79462 (Engel Danila).
  • Corrige multiIf com argumentos constantes e avaliação de curto-circuito. Fecha #72714. #84546 (Yakov Olkhovskiy).
  • Corrige LogicalError ao selecionar de uma tabela com uma restrição de subconsulta. Resolve #84190. #85575 (Pervakov Grigorii).
  • Corrige um erro lógico na reordenação de cross join quando query_plan_optimize_join_order_limit > 1. Fecha #89409. #88286 (Vladimir Cherkasov).
  • Corrige resultados incorretos de JOIN ao usar condições OR com chaves únicas na tabela da direita. Resolve #89391. #89512 (Vladimir Cherkasov).
  • Corrige um erro lógico em full_sorting_merge join com colunas duplicadas. Resolve #86957. #89495 (Vladimir Cherkasov).
  • Corrige o possível erro ‘Invalid number of rows in Chunk’ em JOIN com colunas duplicadas. Resolve #89411. #90053 (Vladimir Cherkasov).
  • Corrige o problema de dados duplicados em RIGHT JOIN com tabela distribuída quando as réplicas paralelas estão ativadas. #90806 (zoomxi).
  • Corrige um erro lógico com join_use_nulls e múltiplas junções junto com cross join. #91853 (Vladimir Cherkasov).

Correções em tipos de dados e JSON

  • Corrige, em alguns casos, a leitura de subcolunas de uma coluna com ponto no nome. Resolve #81261, #82058, #88169. #87205 (Pavel Kruglov).
  • Corrige a leitura de um array misto de Floats e Bool em JSON. Antes, a inserção desses dados levava a uma exceção. #88008 (Pavel Kruglov).
  • Corrige a conversão de LowCardinality(Nullable(T)) para Dynamic. #86365 (Pavel Kruglov).
  • Corrige um possível erro lógico durante a leitura de caminhos e suas subcolunas na serialização avançada de dados compartilhados em JSON. Fecha #89805. #89819 (Pavel Kruglov).
  • Corrige um possível overflow de pilha na desserialização binária de tipos de dados. Fecha #88710. #89822 (Pavel Kruglov).
  • 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).
  • Corrige a mesclagem de colunas JSON em Summing/Aggregating/Coalescing MergeTree. #91151 (Pavel Kruglov).

Correções no MergeTree e no armazenamento

  • Corrigidos vários problemas causados pela remoção antecipada de colunas no TTL. Resolve #88002. #88860 (Amos Bird).
  • Corrige resultado incorreto de min(PK)/max(PK) quando a PK está em ordem reversa. Corrige #83619. #88796 (Amos Bird).
  • Corrigido sharding incorreto na otimização de JOIN quando a chave primária está ordenada em ordem decrescente. Resolve #88512. #88794 (Amos Bird).
  • Corrige uma condição de corrida no caminho de leitura do índice de projeção. Resolve #89497. #89762 (Peng Jian).
  • Corrigido o tratamento incorreto do merge de partes esvaziadas por TTL com projeções não vazias ao usar deduplicate_merge_projection_mode='ignore'. Resolve #89430. #89458 (Amos Bird).
  • Corrige o erro TOO_MANY_MARKS, que poderia ocorrer após algumas consultas ALTER para partes compactas. #91980 (alesapin).

Correções de Parquet e de formato

  • Corrige uma falha de segmentação no leitor de Parquet quando input_format_parquet_local_file_min_bytes_for_seek é definido como 0. Resolve #78456. #88784 (Animesh).
  • No gravador de Parquet, emite a string created_by no formato correto. #87735 (Michael Kolupaev).
  • Corrige a gravação em Parquet que não preservava a ordem original ao usar gravação com uma única thread no gravador nativo. #90126 (Arthur Passos).
  • Corrige um bug no leitor de ORC ao ler colunas do tipo String codificadas com DICTIONARY_V2 e que contêm apenas valores NULL. #91889 (Peng Jian).
  • Corrige um estouro ao ler no formato ORC os tipos Date e DateTime64. Fecha #70976. #91572 (Yarik Briukhovetskyi).

Correções de Iceberg e lago de dados

  • Corrige o protocolo do icebergS3Cluster. Passa a oferecer suporte à evolução de esquema, exclusões posicionais e por igualdade na função de cluster do Iceberg. Resolve #88287. #88919 (Yang Jiang).
  • Corrige JSON Exception em tabela Iceberg com coluna timestamp ao usar o Glue catalog. Resolve #90210. #90209 (Alsu Giliazova).
  • Agora, o ClickHouse não usará a otimização de leitura em ordem para o Iceberg se a ordem de classificação não estiver especificada nos arquivos de manifesto. Corrige #89178. #90304 (alesapin).

Correções em funções

  • Corrige um bug na função reverseUTF8. Em versões anteriores, ela invertia incorretamente os bytes de pontos de código UTF-8 de 4 bytes. Fecha #88913. #88914 (Alexey Milovidov).
  • Corrige o cálculo de phi-quadrado, que causava resultados incorretos em cramersV, cramersVBiasCorrected, theilsU e contingency. #87831 (Nihal Z. Miaji).
  • Corrige top_k para respeitar o parâmetro de limiar quando chamado com um único argumento. Fecha #88757. #88867 (Manuel).
  • Corrige o truncamento de argumentos de countIf(*). Fecha #89372. #89373 (Manuel).
  • Corrige as funções trim, ltrim e rtrim, que não funcionavam com dois argumentos. Fecha #90170. #90305 (Nihal Z. Miaji).
  • Corrige a função arrayFilter, que não funcionava ao usar um array vazio e a função isNull. Fecha #73849. #91105 (Nihal Z. Miaji).

Correções de memória e travamentos

  • Corrige um possível travamento 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).
  • Corrige um travamento durante o desligamento limpo do servidor devido à ordem incorreta de destruição. Resolve #82420. #90076 (Nikita Mikhaylov).
  • Corrige um travamento caso o estado de uma função de agregação contenha um valor serializado de uma coluna LowCardinality(String). #89550 (Pavel Kruglov).
  • Corrige um travamento no StorageDistributed ao analisar nomes de diretório de shard malformados. #90243 (Aleksandr Musorin).
  • Corrige erros espúrios de limite de memória quando o userspace page cache está habilitado. #91361 (Michael Kolupaev).
  • Corrige um possível travamento em funções de agregação após MEMORY_LIMIT_EXCEEDED. #92390 (Azat Khuzhin).
  • Melhora o rastreamento de memória na geração de resultados de hash joins. #89560 (Azat Khuzhin).

Correções de segurança e acesso

  • Corrige o erro ACCESS_ENTITY_NOT_FOUND ao tentar executar clusterAllReplicas a partir de um usuário com uma role inexistente. Resolve #87670. #89068 (pufit).
  • Corrige a validação de acesso para consultas ALTER UPDATE quando uma função de tabela remote é usada com localhost como host de destino. #90761 (pufit).
  • Corrige a verificação de grants com curinga para revogação parcial. #90922 (pufit).
  • Corrige o tratamento de grants globais com revogações com curinga. #90928 (pufit).

Correções no banco de dados Replicated

  • Após a recuperação, uma réplica de banco de dados Replicated pode ficar presa por muito tempo exibindo mensagens como Failed to marked query-0004647339 as finished; isso foi corrigido. #88671 (Alexander Tokmakov).
  • Corrigido use-after-free em Distributed devido a uma condição de corrida entre o desligamento e INSERTs em segundo plano. Resolve #88640. #89136 (Azat Khuzhin).
  • View materializada atualizável: corrigida uma falha rara do servidor caso a tabela de origem fosse completamente removida durante uma atualização. #89203 (Michael Kolupaev).

Correções no Keeper

  • Corrigida a leitura dos changelogs durante a inicialização do Keeper nos casos em que um changelog não foi renomeado corretamente durante a rotação. #89496 (Antonio Andelic).

Outras correções relevantes

  • Corrigida a degradação de desempenho na análise de índices de salto de dados. #89004 (Anton Popov).
  • Corrige a incompatibilidade de particionamento do Hive que impedia uma atualização sem problemas para a 25.8. #90202 (Kseniia Sumarokova).
  • Corrige consulta WITH FILL com loop infinito ao usar nan/inf. Resolve #69261. #90255 (Konstantin Bogdanov).
  • Time e Time64 agora devem respeitar corretamente os fusos horários ao serem convertidos de DateTime e DateTime64. Fecha #89896. #90310 (Yarik Briukhovetskyi).
  • Corrigidos possíveis resultados incorretos após atualizações leves em consultas SELECT com o cache de condições de consulta habilitado. Corrige #90176. #90204 (Anton Popov).
  • Correção da compatibilidade da serialização em memória do estado de agregação String. #90880 (Antonio Andelic).
  • Corrige a agregação do SummingMergeTree para colunas Nested LowCardinality. #90927 (Ivan Babrou).
  • Corrigido system.view_refreshes, que falhava com o erro No macro 'replica' in config. #92203 (Michael Kolupaev).
  • Corrige a replicação de um comando ALTER que adiciona indiretamente uma coluna à MV com Shared Catalog. (Nikolay Degterinsky).
  • Corrige um commit de MV com falha que travava a aplicação de estado do Shared Catalog. (Nikolay Degterinsky).
  • Corrige a verificação das restrições de configuração em ALTERs nas réplicas secundárias com Shared Catalog. (Nikolay Degterinsky).
  • Preserva o comentário de banco de dados na migração do SharedCatalog. (Alexander Tokmakov).
  • Corrige a substituição de visões materializadas em réplicas secundárias no Shared Catalog. (Nikolay Degterinsky).
  • Corrige os contadores de system.distributed_cache_usage. (Kseniia Sumarokova).
  • Corrige o DROP travado de uma tabela cuja criação falhou com uma exceção ILLEGAL_COLUMN no Shared Catalog. (Nikolay Degterinsky).
  • Desabilitar CREATE OR REPLACE para SharedSet/SharedJoin em bancos de dados Replicated. (Tuan Pham Anh).
  • Corrige exceções UNFINISHED em refreshes de RMV com o Shared database. (Nikolay Degterinsky).
  • Corrige travamento com TABLE_ALREADY_EXISTS em bancos de dados Shared. (Nikolay Degterinsky).
  • Corrige a migração de tabelas com consultas CREATE inválidas no Shared Catalog. (Nikolay Degterinsky).
  • Sempre use partes virtuais na memória em getStatus. (Mikhail Artemenko).
  • Adiciona tentativas de repetição à aplicação do estado do Shared Catalog durante a inicialização. (Nikolay Degterinsky).
  • Correção para o DROP DATABASE ficar travado após uma exceção durante a criação de tabela. (Nikolay Degterinsky).
  • Corrigido erro lógico no distributed cache. (Kseniia Sumarokova).
  • Corrige erro incorreto do distributed cache. (Kseniia Sumarokova).
  • Corrigido LOGICAL_ERROR em ~TemporaryLockForUUIDDirectory no Shared Catalog. (Nikolay Degterinsky).
  • Corrige o cache de metadados, que retornava dependências incorretas após renomear um banco de dados. (Nikolay Degterinsky).
  • Shared Catalog: corrige um caso de DROP de tabelas grandes em réplicas secundárias. (Raúl Marín).
  • Correção de erro lógico no Distributed Cache em processWriteRequest. (Kseniia Sumarokova).
  • Remover verificações para ALTERs de MV nas réplicas secundárias. (Nikolay Degterinsky).
Última modificação em 10 de junho de 2026