Pular para o conteúdo principal

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

Alterações em consultas e sintaxe

  • Corrigida a formatação inconsistente de consultas causada pela substituição incorreta de alias. Observação: quando o analisador está desabilitado, certas consultas CREATE VIEW que usam IN com referência a um alias podem deixar de ser processadas. Para evitar isso, certifique-se de que o analisador esteja habilitado (ele está habilitado por padrão desde a versão 24.3). #82838 (Alexey Milovidov).
  • Uma lista vazia de colunas em JOIN USING () agora é um erro de sintaxe. Antes, isso era relatado como INVALID_JOIN_ON_EXPRESSION no momento da execução da consulta e, em alguns casos (como em junções com o mecanismo de armazenamento Join), podia causar um LOGICAL_ERROR. #92371 (Vladimir Cherkasov).
  • Subconsultas não são mais permitidas em ORDER BY e em outras expressões-chave de tabela. #96847 (Alexey Milovidov).

Alterações em tipos de dados

  • Adicionado suporte a Nullable(Tuple). Para habilitá-lo, defina allow_experimental_nullable_tuple_type = 1. #89643 (Nihal Z. Miaji).
  • Os dados compartilhados avançados para o tipo JSON agora vêm habilitados por padrão. Não será possível fazer downgrade para versões anteriores à 25.8, pois versões mais antigas não conseguem ler partes de dados gravadas com o novo formato JSON. Para fazer upgrades com segurança, defina a configuração compatibility para a versão anterior ou ajuste as configurações do MergeTree dynamic_serialization_version='v2' e object_serialization_version='v2'. #92511 (Pavel Kruglov).
  • SKIP REGEXP no tipo JSON agora usa correspondência parcial por padrão. #92847 (Pavel Kruglov).
  • Corrigido um erro lógico que ocorria em caso de incompatibilidade de tipo Variant. #95811 (Bharat Nallan).
  • As colunas DATE do PostgreSQL agora são inferidas como Date32 no ClickHouse (antes, eram inferidas como Date, o que podia causar overflow para valores fora da sua faixa limitada). Agora também há suporte para inserir valores Date32 de volta no PostgreSQL. #95999 (Alexey Milovidov).

Alterações de armazenamento e de índices

  • O layout de armazenamento do índice de texto invertido foi aprimorado para tornar mais eficientes as leituras no armazenamento de objetos, além de melhorar o desempenho das mesclagens em tabelas com índices de texto invertido. Se você usou o índice de texto experimental antes da versão 25.12, deverá remover o índice antes de atualizar e recriá-lo na nova versão. #91518 (Anton Popov).
  • O formato de armazenamento das estatísticas mudou — agora, todas as estatísticas são armazenadas em um único arquivo. #93414 (Anton Popov).
  • Os nomes de arquivo dos índices agora são escapados para evitar partes corrompidas. O ClickHouse não conseguirá carregar índices com caracteres não ASCII no nome que tenham sido criados por versões anteriores. Para lidar com isso, use a configuração de MergeTree escape_index_filenames. #94079 (Raúl Marín).

Funcionalidades removidas

  • Os codecs DEFLATE_QPL e ZSTD_QAT foram removidos. Converta todos os dados existentes comprimidos com esses codecs para outro codec antes de atualizar. Observe que, anteriormente, o uso desses codecs exigia habilitar enable_deflate_qpl_codec ou enable_zstd_qat_codec. #92150 (Robert Schulze).
  • INSERT em colunas ALIAS simples não é mais suportado (revertendo #84154). Essa funcionalidade não funcionava com formatos personalizados e não era protegida por uma configuração. #92849 (Azat Khuzhin).
  • O mecanismo de banco de dados Lazy foi removido e não está mais disponível. #93627 (Alexey Milovidov).
  • O modo transposed_with_wide_view de metric_log foi removido devido a um bug que o tornava inutilizável. Não é mais possível definir system.metric_log com esse modo. #93867 (Alexey Milovidov).

Alterações em Settings e na configuração

  • Uma nova configuração agora gera um erro se um catálogo do lago de dados não tiver acesso ao armazenamento de objetos. #93606 (Konstantin Vedernikov).
  • O agendamento de CPU para workloads agora é preemptivo por padrão. Consulte a configuração do servidor cpu_slot_preemption. #94060 (Sergei Trifonov).
  • As configurações exact_rows_before_limit, rows_before_aggregation, cross_to_inner_join_rewrite, regexp_dict_allow_hyperscan, regexp_dict_flag_case_insensitive, regexp_dict_flag_dotall e dictionary_use_async_executor foram reclassificadas de configurações de formato para configurações regulares. Trata-se principalmente de uma alteração interna, sem efeitos colaterais visíveis para o usuário, a menos que você tenha especificado alguma delas em uma definição de motor de tabela Iceberg, DeltaLake, Kafka, S3, S3Queue, Azure, Hive, RabbitMQ, Set, FileLog ou NATS — nesse caso, essas definições agora gerarão um erro em vez de serem ignoradas silenciosamente. #94106 (Robert Schulze).
  • A semântica de do_not_merge_across_partitions_select_final foi simplificada. Antes, a funcionalidade podia ser ativada automaticamente mesmo sem ser definida explicitamente, o que causava confusão e problemas em produção. Agora: defini-la como 1 ativa a funcionalidade incondicionalmente, e defini-la como 0 faz com que ela siga a nova configuração enable_automatic_decision_for_merging_across_partitions_for_final (padrão 1). #96110 (Nikita Taranov).
  • Adicionada validação de esquema do S3. #96194 (Konstantin Vedernikov).
  • A configuração apply_row_policy_after_final agora está habilitada por padrão, garantindo que ROW POLICY respeite FINAL, como fazia originalmente. Se você antes dependia de optimize_move_to_prewhere_if_final=1 para aplicar políticas de linha antes de FINAL, use apply_row_policy_after_final=0 em vez disso. #97279 (Nikolai Kochetov).

Mudanças de segurança e controle de acesso

  • joinGet/joinGetOrNull agora exigem privilégios SELECT na tabela Join subjacente. Executar joinGet('db.table', 'column', key) requer o privilégio SELECT tanto nas colunas-chave quanto na coluna de atributo recuperada. Consultas sem esses privilégios falharão com ACCESS_DENIED. Para migrar, conceda as permissões usando GRANT SELECT ON db.join_table TO user para acesso completo à tabela, ou GRANT SELECT(key_col, attr_col) ON db.join_table TO user para acesso no nível da coluna. #94307 (Vladimir Cherkasov).
  • As consultas CREATE TABLE ... AS ... agora exigem o privilégio SHOW COLUMNS em vez de SHOW TABLES, que anteriormente era verificado de forma incorreta. #94556 (pufit).

Alterações em inserções e desduplicação

  • A desduplicação agora vem ativada por padrão para todas as inserções. Antes, ela ficava desativada para async inserts e visões materializadas, mas ativada para inserções síncronas. Para preservar o comportamento anterior, defina explicitamente deduplicate_insert='backward_compatible_choice' (e, de forma semelhante, deduplicate_blocks_in_dependent_materialized_views). #95970 (Sema Checherinda).

Mudanças nas tabelas de sistema

  • Os metadados em memória de S3Queue e AzureQueue agora são limitados. As tabelas de sistema foram renomeadas: system.s3queue agora se chama system.s3queue_metadata_cache, e system.azure_queue agora se chama system.azure_queue_metadata_cache. #95809 (Kseniia Sumarokova).

Outras mudanças incompatíveis

  • Corrigidas funções de índice H3 que podiam falhar ou travar quando chamadas com entradas inválidas. #93657 (Michael Kolupaev).

Novos recursos

Autenticação

  • Adicionado suporte à senha de uso único baseada em tempo (TOTP) como método de autenticação. #71273 (Vladimir Cherkasov).

Funções

  • Adicionada a função reverseBySeparator, que inverte a ordem das substrings de uma string separadas por um delimitador especificado. #91780 (Xuewei Wang).
  • Adicionadas as funções colorOKLABToSRGB e colorSRGBToOKLAB para converter entre os espaços de cor sRGB e OKLAB. #93361 (Pranav Tiwari).
  • Adicionada a função cosineDistanceTransposed, que aproxima a distância de cosseno entre dois pontos. #93621 (Raufs Dunamalijevs).
  • Adicionada a função de hash xxh3_128. #96055 (Raúl Marín).
  • Adicionada a função mergeTreeAnalyzeIndex() para analisar o uso de índices no MergeTree. #92954 (Azat Khuzhin).
  • As funções agora oferecem suporte ao tipo Variant por meio do novo FunctionVariantAdaptor. #90900 (Bharat Nallan).
  • Certas funções agora podem ser chamadas sem parênteses em SQL. #94678 (Aly Kafoury).

Tabelas de sistema

  • Adicionada a tabela system.user_defined_functions para monitorar o status de carregamento e a configuração de UDFs. #90340 (Xu Jia).
  • Adicionada a tabela system.zookeeper_info. #90809 (Smita Kulkarni).
  • Adicionada a tabela system.primes e a função de tabela primes, contendo números primos em ordem crescente. #92776 (Nihal Z. Miaji).
  • Adicionada a coluna files à system.parts, mostrando o número de arquivos em cada parte de dados. #94337 (Match).
  • Adicionada a tabela system.fail_points para inspecionar os failpoints existentes e verificar se estão habilitados. #96762 (Pedro Ferreira).

Motores de tabela e armazenamento

  • Adicionado suporte a índice de texto para colunas Array. #89895 (Jimmy Aguilar Mena).
  • Adicionado suporte ao catálogo REST do Paimon. #92011 (JIaQi Tang).
  • Adicionada a função de tabela icebergLocalCluster. #93323 (Anton Ivashkin).
  • Adicionada a configuração de banco de dados lazy_load_tables. Quando habilitada, as tabelas não são carregadas durante a inicialização do banco de dados — em vez disso, um StorageTableProxy leve é criado, e o motor de tabela real é materializado no primeiro acesso. #96283 (xiaohuanlin).
  • Adicionado suporte a ZooKeeper auxiliar para DatabaseReplicated. #91683 (RinChanNOW).
  • Dados e arquivos de sistema no cache agora podem ser divididos em segmentos separados. #87834 (MikhailBurdukov).
  • Adicionado um novo cache SLRU para metadados do Parquet para melhorar o desempenho de leitura, evitando downloads redundantes de arquivos. O cache pode ser removido com SYSTEM DROP PARQUET METADATA CACHE. #89750 (Grant Holly).
  • Tabelas de lago de dados agora oferecem suporte a PREWHERE e a PREWHERE em múltiplos estágios no leitor de Parquet v3. #93542 (Konstantin Vedernikov).
  • Adicionada análise distribuída de índices em múltiplas réplicas, benéfica para armazenamento compartilhado e grandes volumes de dados. #86786 (Azat Khuzhin).

Inserção e desduplicação

  • A desduplicação de async insert agora funciona com visões materializadas dependentes. Quando ocorre uma colisão de block_id, o bloco original é filtrado para remover as linhas associadas ao block_id em colisão, e as linhas restantes são transformadas por todas as consultas relevantes das visões materializadas. #89140 (Sema Checherinda).
  • Async inserts agora oferecem suporte a quorum paralelo — os dados inseridos são replicados para o quorum e, se forem encontradas duplicatas, a consulta aguarda até que os dados inseridos anteriormente também sejam replicados. #93356 (Sema Checherinda).
  • Adicionada a configuração no servidor insert_deduplication_version para habilitar a migração para um hash de desduplicação unificado. #95409 (Sema Checherinda).
  • Iniciada a migração dos hashes de desduplicação. #97562 (Sema Checherinda).

Recursos de SQL e consultas

  • Adicionada a sintaxe SYSTEM CLEAR [...] CACHE como uma alternativa mais clara à sintaxe existente SYSTEM DROP [...] CACHE. A sintaxe antiga continua disponível. #93727 (Pranav Tiwari).
  • Adicionada a consulta OPTIMIZE <table> DRY RUN PARTS <part names> para simular merges sem fazer commit da parte resultante. Útil para verificar a correção do merge, reproduzir bugs relacionados a merge e fazer benchmarking do desempenho de merge. #96122 (Anton Popov).
  • Consultas DDL com ON CLUSTER agora podem ser executadas para bancos de dados Replicated quando a configuração ignore_on_cluster_for_replicated_database estiver habilitada. O nome do cluster será ignorado. #92872 (Kirill).
  • Introduzida uma nova sintaxe e um novo framework para simplificar e ampliar a funcionalidade de índice de projeção. #91844 (Amos Bird).

Configurações e opções de configuração

  • Adicionada a configuração max_insert_block_size_bytes para um controle mais refinado sobre a formação dos blocos inseridos. #92833 (Kirill Kopnev).
  • Adicionada a configuração use_primary_key. Defina-a como false para desativar a poda de grânulos com base na chave primária. #93319 (Nihal Z. Miaji).
  • Adicionada a configuração default_dictionary_database, que permite ao ClickHouse resolver dicionários externos referenciados sem qualificador de banco de dados em um banco de dados padrão especificado. Isso simplifica a migração de dicionários globais definidos em XML para dicionários definidos em SQL por banco de dados. #91412 (Dmitrii Plotnikov).
  • Adicionada a configuração check_named_collection_dependencies (habilitada por padrão) para impedir a exclusão de coleções nomeadas usadas por tabelas. #96181 (Pablo Marcos).
  • Adicionado um scheduler max-min fair para controle de concorrência, proporcionando mais equidade em cenários de alta sobresubscrição, quando muitas consultas competem por slots de CPU limitados. A configuração do servidor concurrent_threads_scheduler agora usa max_min_fair por padrão em vez de fair_round_robin, de modo que consultas de curta duração não sejam mais penalizadas por consultas de longa duração. #94732 #95300 (Sergei Trifonov).
  • Adicionadas as opções de configuração logger.startup_console_level e logger.shutdown_console_level para sobrescrever o nível de log do console durante a inicialização e o desligamento do ClickHouse, respectivamente. #95919 (Garrett Thomas).

Monitoramento

  • Foi adicionada uma métrica ClickHouse_Info ao endpoint Prometheus /metrics com informações de versão, tornando possível criar gráficos que acompanham informações detalhadas de versão ao longo do tempo. #91125 (Christoph Wurm).

Recursos experimentais

  • A busca vetorial agora pode distribuir a carga entre réplicas em um cluster, permitindo o suporte a grandes índices vetoriais que excedem a capacidade de memória de uma única VM. #95876 (Shankar Iyer).
  • Foi adicionado um AST fuzzer no servidor, controlado pelas configurações ast_fuzzer_runs e ast_fuzzer_any_query. Quando habilitado, o servidor executa mutações aleatórias de cada consulta após sua execução normal, descartando os resultados. #97568 (Alexey Milovidov).

Melhorias

Consultas e SQL

  • Subconsultas correlacionadas agora oferecem suporte a mais motores de tabela e mais tipos de fonte de dados. #90175 (Dmitry Novik).
  • Agora há suporte a IN não constante para escalares (por exemplo, val1 NOT IN if(cond, val2, val3)). #93495 (Yarik Briukhovetskyi).
  • Adicionado suporte a aliases de tabela estendidos para JOINs (por exemplo, SELECT * FROM (SELECT 1) AS t(a) JOIN (SELECT 1) AS u(b) ON a = b). #95331 (Yarik Briukhovetskyi).
  • EXPLAIN indices = 1 agora é aceito como alias de EXPLAIN indexes = 1. #92774 (Pranav Tiwari).
  • Melhoria no pushdown de filtros para as funções de tabela numbers e primes — o ClickHouse agora pode inferir limites conservadores de valores a partir de condições WHERE para restringir a geração de sequências, evitando varreduras ilimitadas. #96115 (Nihal Z. Miaji).
  • A otimização de conjuntos equivalentes agora funciona em várias operações consecutivas de INNER JOIN, de modo que os filtros aplicados a qualquer tabela no encadeamento são automaticamente propagados para todas as tabelas relacionadas. #96596 (Vladimir Cherkasov).
  • Funções de tabela de cluster automáticas agora são usadas em subconsultas individuais no FROM. #96332 (phulv94).
  • O índice de chave primária agora é usado na filtragem com startsWithUTF8 se o prefixo contiver apenas caracteres ASCII. #97055 (vkcku).
  • assumeNotNull, coalesce e ifNull agora permitem a poda da chave primária e do skip index para predicados de intervalo quando as colunas da chave são encapsuladas nessas funções. #94754 (Nihal Z. Miaji).
  • Colunas não utilizadas agora também são removidas da etapa de leitura ao ler a partir do MergeTree, o que é especialmente útil quando um filtro é levado para PREWHERE. #89982 (János Benjamin Antal).
  • A otimização use_join_disjunctions_push_down agora vem ativada por padrão. #89313 (Alexey Milovidov).
  • A otimização enable_join_runtime_filters agora está ativada por padrão. #89314 (Alexey Milovidov).
  • A sobrecarga do filtro de tempo de execução de JOIN foi reduzida ao desabilitar automaticamente os filtros quando bits demais são ativados no filtro de Bloom ou quando poucas linhas são filtradas. #91578 (Alexander Gololobov).
  • Adicionada a configuração use_hash_table_stats_for_join_reordering (habilitada por padrão) para controlar se as estatísticas do tamanho da tabela hash em runtime são usadas para reordenar joins. #93912 (Vladimir Cherkasov).
  • A análise de índices agora é feita apenas uma vez, independentemente de a consulta ser executada localmente ou com réplicas paralelas. #94854 (Nikita Taranov).
  • Se um skip index em uma consulta FINAL estiver em uma coluna que faz parte da chave primária, a verificação adicional de interseção da chave primária nas outras partes agora é omitida. #93899 (Shankar Iyer).
  • DROP DATABASE agora remove as tabelas na ordem inversa das dependências, aumentando a segurança contra falhas quando o banco de dados contém tabelas com dependências de carregamento. #97057 (Alexey Milovidov).
  • A espera síncrona por mutações agora respeita o cancelamento de consultas e os limites de tempo. #96756 (Alexey Milovidov).
  • Foi evitado o ressurgimento de dados removidos se ADD COLUMN for executado rapidamente após uma mutação DROP COLUMN. #96713 (Alexey Milovidov).
  • Expressões ALTER conflitantes com UPDATE e RENAME COLUMN agora lançam uma exceção apropriada em vez de um erro lógico. #96022 (Alexey Milovidov).
  • As estatísticas de contagem total estimada de linhas e de NDV (número de valores distintos) agora são coletadas para as colunas-chave de agregação. #92812 (Alexander Gololobov).
  • Todas as réplicas agora podem assumir intervalos órfãos em paralelo durante a leitura com réplicas paralelas, melhorando o balanceamento de carga e reduzindo a latência na cauda longa. #91374 (zoomxi).
  • Maior precisão na estimativa para réplicas paralelas automáticas com filtros PREWHERE altamente seletivos. #97231 (Nikita Taranov).
  • joinGet agora oferece suporte a tabelas temporárias. #92973 (Eduard Karacharov).
  • A agregação externa, a ordenação e o join agora respeitam a configuração da consulta temporary_files_codec em todos os contextos. #92388 (Vladimir Cherkasov).
  • As otimizações no plano de busca vetorial por similaridade agora são aplicadas apenas quando existe um índice para a coluna de busca. #94998 (Eduard Karacharov).

Motores de tabela e armazenamento

  • StorageEmbeddedRocksDB agora oferece suporte a várias colunas como chave primária. #33917 (usurai).
  • Adicionada a sintaxe ALTER TABLE <table> ATTACH PART <part_name> FROM <directory_name>, permitindo anexar partes de subdiretórios arbitrários de detached/ (por exemplo, partes com os prefixos broken-on-start ou unexpected) sem precisar renomeá-las manualmente no sistema de arquivos. #74816 (Anton Popov).
  • min_free_disk_bytes_to_perform_insert agora funciona corretamente com volumes JBOD. #90878 (Aleksandr Musorin).
  • max_parts_to_merge_at_once agora é respeitado durante as mesclagens de remoção de partes por TTL. #95315 (Kseniia Sumarokova).
  • As operações em segundo plano (mutate, merge) agora podem ser configuradas de forma independente por meio de um perfil background, em vez de compartilharem configurações com consultas regulares por meio do perfil default. #93905 (Arsen Muk).
  • Melhorada a leitura de subcolunas com cálculo correto do tamanho, reduzindo o uso de memória e aumentando a velocidade. #96251 (Pavel Kruglov).
  • O número de streams do pipeline gerados com split_intersecting_parts_ranges_into_layers foi limitado para evitar consumo excessivo de memória. #96478 (Nikita Taranov).
  • O text index agora é GA. #96794 (Robert Schulze).
  • QBit agora é GA. #95358 (Raufs Dunamalijevs).
  • QBit agora pode ser comparado por igualdade. #94078 (Raufs Dunamalijevs).
  • Ao salvar o esquema da tabela com enable_positional_arguments_for_projections, as expressões agora são substituídas no lugar dos argumentos posicionais, permitindo reiniciar o servidor com a configuração desativada. #96372 (Alexey Milovidov).
  • Em bancos de dados Replicated, o cluster em cache não é mais atualizado a cada consulta fictícia. #96897 (Tuan Pham Anh).
  • Adicionada a consulta SYSTEM RESET DDL WORKER [ON CLUSTER] para redefinir o estado do DDLWorker, útil para atualizar a atividade da réplica quando os IDs de host são atualizados. #93780 (Tuan Pham Anh).

Lagos de dados

  • Adicionado suporte a vetores de exclusão no DeltaLake. #93852 (Kseniia Sumarokova).
  • Vetores de exclusão agora também são compatíveis com deltaLakeCluster. #94365 (Kseniia Sumarokova).
  • DeltaLake agora está disponível no macOS. #95985 (Alexey Milovidov).
  • O DeltaLake agora usa resultados de count() dos metadados e mostra estatísticas corretas da tabela (total de bytes/linhas) em system.tables. #96190 (Kseniia Sumarokova).
  • Leituras de armazenamento de objetos passaram a ser ignoradas ao consultar tabelas DeltaLake em system.tables. #95899 (Antonio Andelic).
  • Adicionado o comando SYSTEM RELOAD DELTA KERNEL TRACING <level> para depuração do logging do delta-kernel. #96763 (Kseniia Sumarokova).
  • A localização dos metadados da tabela Iceberg agora é deduzida automaticamente se metadata_location não for especificado nos metadados do Glue. #91994 (Andrey Zvonov).
  • As entradas do arquivo de manifesto do Iceberg agora analisam os limites inferior e superior dos nomes dos arquivos de exclusão por posição, melhorando a seleção de arquivos de dados. #93980 (Daniil Ivanik).
  • Otimização PREWHERE habilitada para tabelas Iceberg. #95476 (Konstantin Vedernikov).
  • Limites de threads e de memória agora são compartilhados entre leitores de arquivos de dados e arquivos de exclusão por posição em tabelas Iceberg. #94701 (Yang Jiang).
  • Adicionado suporte a ALTER TABLE RENAME COLUMN para tabelas Iceberg. #97455 (murphy-4o).
  • Adicionado suporte ao Google Cloud Storage para lagos de dados. #93866 (Konstantin Vedernikov).
  • Tokens de acesso do S3 agora são atualizados dinamicamente durante consultas longas com Unity Catalog. #95069 (Konstantin Vedernikov).
  • Adicionado acesso baseado em função ao Glue catalog por meio das configurações aws_role_arn e aws_role_session_name. #90825 (Antonio Andelic).

S3Queue

  • O S3Queue agora rastreia o particionamento Hive no modo ordenado. #81040 (Anton Ivashkin).
  • Refatoração do processamento do modo ordenado do S3Queue com buckets, reduzindo o número de solicitações ao Keeper e melhorando o desempenho. #92889 (Kseniia Sumarokova).
  • Adicionado suporte mais genérico a particionamento no modo ordenado do S3Queue. #94321 (Bharat Nallan).
  • Adicionado bucketing com base na chave de partição para o S3Queue no modo ordenado. #94698 (Bharat Nallan).
  • Suporte a ZooKeeper auxiliar no S3Queue por meio da configuração keeper_path. #95203 (Diego Nieto).
  • O modo ordenado do S3(Azure)Queue agora limpa nós com falha ao rastrear limites. #94412 (Kseniia Sumarokova).

S3 e armazenamento de objetos

  • Os headers S3 x-amz-server-side-encryption não são mais propagados para as requisições HeadObject, UploadPart e CompleteMultipartUpload. #64577 (Francisco J. Jurado Moreno).
  • Agora, storage_class_name pode ser especificado em coleções nomeadas para o motor de tabela S3 e a função de tabela s3. #91926 (János Benjamin Antal).
  • Corrigido o throttling do endpoint de metadados da instância EC2 ao executar muitas consultas S3 concorrentes com credenciais do perfil da instância — o provedor de credenciais agora fica em cache e é compartilhado entre todas as consultas. #92891 (Sav).
  • Adicionado suporte de compatibilidade com MinIO ao AWS S3 C++ SDK, com mapeamento de códigos de erro para erros específicos do MinIO, melhorando a confiabilidade de clusters MinIO auto-hospedados. #93082 (XiaoBinMu).
  • Mensagens de erro de autenticação do S3 foram aprimoradas com dicas para verificar as credenciais. #95648 (Gerald Latkovic).
  • O Azure Blob Storage agora usa cópia com leitura e gravação como fallback quando a cópia nativa falha com qualquer erro (antes, apenas em Unauthorized). #92888 (Smita Kulkarni).

Funções

  • avg() agora oferece suporte a valores Date, DateTime e Time como argumentos. #87845 (Yarik Briukhovetskyi).
  • mapContainsKeyLike e mapContainsValueLike agora podem usar um índice de texto em mapKeys() ou mapValues(). #93049 (Michael Jarrett).
  • flipCoordinates agora oferece suporte ao tipo Geometry. #93303 (Bharat Nallan).
  • Foi removido o limite de 64 tokens para as funções hasAnyTokens e hasAllTokens. #95152 (Elmi Ahmadov).
  • Adicionado distanceCosine como alias de cosineDistance, em linha com outras funções de distância. #96065 (Raufs Dunamalijevs).
  • Adicionada a função iif ao ClickHouse KQL. #94790 (happyso).
  • use_variant_as_common_type agora é habilitado por padrão, permitindo tipos incompatíveis em Array, consultas UNION e ramos de if/multiIf/case. #90677 (Alexey Milovidov).

Ajustes e configuração

  • use_skip_indexes_on_data_read agora está ativado por padrão. #93407 (Shankar Iyer).
  • Adicionada a configuração add_minmax_index_for_time_columns — quando ativada, cria automaticamente índices minmax para todas as colunas Date, Date32, Time, Time64, DateTime e DateTime64. #93355 (Michael Jarrett).
  • Adicionada a configuração materialize_statistics_on_merge (ativada por padrão) para controlar se as estatísticas são materializadas durante as operações de merge. #93379 (Han Fei).
  • Adicionada a configuração input_format_binary_max_type_complexity para limitar o número total de nós de tipo que podem ser decodificados no formato binário, evitando payloads maliciosos. #92519 (Raufs Dunamalijevs).
  • Adicionada a configuração trace_profile_events_list para limitar o rastreamento com trace_profile_event a eventos com nomes específicos. #92298 (Alexey Milovidov).
  • Adicionada a configuração type_json_allow_duplicated_key_with_literal_and_nested_object para permitir paths duplicados em JSON em que um é um literal e o outro é um objeto aninhado, por compatibilidade retroativa com dados criados antes de a desduplicação de paths ser aplicada. #93604 (Pavel Kruglov).
  • Foram adicionadas a configuração do MergeTree merge_max_dynamic_subcolumns_in_compact_part e a configuração no nível de consulta max_dynamic_subcolumns_in_json_type_parsing para limitar as subcolunas dinâmicas em colunas JSON durante a mesclagem e o parsing. #94184 (Pavel Kruglov).
  • Adicionado use_statistics como alias de allow_statistics_optimize, em linha com use_primary_key e use_skip_indexes. #94366 (Robert Schulze).
  • Habilitada input_format_numbers_enum_on_conversion_error na conversão de números para Enum para verificar a existência do elemento. #94384 (Elmi Ahmadov).
  • Foi adicionada uma configuração para gerar uma exceção quando uma tabela tiver políticas de linha, mas nenhuma se aplicar ao usuário atual, ajudando a detectar possíveis erros de configuração. #95014 (Vitaly Baranov).
  • enable_max_bytes_limit_for_min_age_to_force_merge agora vem habilitado por padrão na versão de compatibilidade 26.2 e posteriores. #95917 (Christoph Wurm).
  • core_dump.size_limit agora aceita recarga a quente sem reiniciar o servidor. #96524 (Miсhael Stetsyuk).
  • As substituições via linha de comando agora são respeitadas ao recarregar a configuração. #80295 (Alexey Milovidov).
  • Adicionada estratégia de rotação composta (tamanho + tempo) para logs do servidor. #87620 (Jianmei Zhang).
  • A análise distribuída de índices agora pode ser ativada com base no número de partes (distributed_index_analysis_min_parts_to_activate) e no tamanho dos índices (distributed_index_analysis_min_indexes_size_to_activate). #95216 (Azat Khuzhin).
  • O cache de estatísticas agora vem ativado por padrão, com um intervalo de atualização de 300 segundos. #95841 (Han Fei).
  • O parâmetro de configuração path agora é resolvido em relação ao diretório de trabalho durante a inicialização, evitando que diretórios de dados sejam criados em locais incomuns. #96305 (Alexey Milovidov).

Tabelas de sistema e monitoramento

  • Adicionada a coluna parts_postpone_reasons a system.mutations para melhorar o diagnóstico. #92206 (Shaohua Wang).
  • Adicionada a coluna creation (implícita/explícita) a system.data_skipping_indices. #92378 (Raúl Marín).
  • As tarefas em execução agora são refletidas em system.background_schedule_pool e na tabela de log correspondente. #92587 (Azat Khuzhin).
  • Adicionada a métrica QueryNonInternal para rastrear o número de consultas não internas em execução, ajudando a monitorar a concorrência em relação ao limite max_concurrent_queries. #94284 (Ashwath Singh).
  • Adicionada uma métrica assíncrona para o maior tempo decorrido de um merge em execução. #94825 (Raúl Marín).
  • Adicionados connection_address e connection_port a query_log para refletir a conexão física (útil quando a conexão passa por um proxy). #95471 (Yakov Olkhovskiy).
  • Adicionadas mais informações a system.crash_log. #94112 (Miсhael Stetsyuk).
  • Adicionado o nome do componente a system.aggregated_zookeeper_log. #95882 (Antonio Andelic).
  • Adicionada a tabela system.tokenizers, que mostra todos os tokenizers disponíveis. #96753 (Robert Schulze).
  • Adicionadas a tabela system.jemalloc_stats e o endpoint HTTP /jemalloc.html para visualização interativa das estatísticas do allocator de memória jemalloc. #97077 (Antonio Andelic).
  • Adicionada a tabela system.jemalloc_profile_text para ler e analisar heap profiles do jemalloc, com suporte a formatos de saída brutos, simbolizados e colapsados. #97218 (Antonio Andelic).
  • Adicionados mutation_ids a system.part_log para os eventos MUTATE_PART e MUTATE_PART_START. #93811 (Shaohua Wang).
  • As configurações globais aninhadas do servidor (por exemplo, logger.level) agora estão parcialmente visíveis em system.server_settings. #94001 (Hechem Selmi).
  • view_duration_ms agora mostra por quanto tempo um grupo ficou ativo, em vez da soma das durações das threads. #94966 (Sema Checherinda).
  • system.blob_storage_log agora está disponível para Azure Blob Storage, Local e HDFS. Adicionada a coluna error_code. #93105 (Alexey Milovidov).
  • Tarefas em segundo plano mais lentas que a média agora são registradas em log com um limite configurável (background_schedule_pool_log.duration_threshold_milliseconds, padrão de 30 ms). #92965 (Azat Khuzhin).
  • Senhas do armazenamento por URL não são mais exibidas no log de consultas. #93245 (Konstantin Vedernikov).

ClickHouse Keeper

  • Lida corretamente com lacunas nas entradas de log do Keeper quando os logs estão antes do último índice confirmado. #90403 (Antonio Andelic).
  • Adicionado suporte a tracing com OpenTelemetry para requisições do Keeper. #91332 (Miсhael Stetsyuk).
  • Adicionadas novas métricas do Keeper: KeeperChangelogWrittenBytes, KeeperChangelogFileSyncMicroseconds, KeeperSnapshotWrittenBytes, KeeperSnapshotFileSyncMicroseconds, KeeperBatchSizeElements e KeeperBatchSizeBytes. #92149 (Miсhael Stetsyuk).
  • As extensões CHECK_STAT e TRY_REMOVE do Keeper agora estão habilitadas por padrão. #93886 (Mikhail Artemenko).
  • O Keeper agora lança uma exceção em vez de abortar quando detecta um snapshot corrompido ou changelogs inconsistentes, exigindo intervenção manual para uma recuperação mais segura. #94168 (Antonio Andelic).
  • Adicionadas as extensões with_data e with_stat às requisições getChildren do Keeper, permitindo obter os filhos junto com seus dados e estatísticas em uma única operação. #94826 (Nikolay Degterinsky).
  • Adicionada uma verificação para configuração incorreta do Keeper que poderia levar a falhas na formação do cluster. #94682 (Konstantin Bogdanov).
  • Adicionado suporte à extensão with_data do Keeper para melhorar a busca de tabelas no Database Replicated. #96090 (Nikolay Degterinsky).
  • Agora é possível inserir dados no ZooKeeper auxiliar via system.zookeeper. #92092 (RinChanNOW).

Gerenciamento de memória

  • Otimizada a reserva de espaço do cache do sistema de arquivos — os candidatos à remoção agora são coletados sem manter um bloqueio exclusivo. #82764 (Kseniia Sumarokova).
  • Habilitadas leituras paralelizadas no buffer de leitura do cache do sistema de arquivos para motores de tabela/funções remotos. #71781 (Kseniia Sumarokova).
  • Reduzido o uso de memória em sistemas que não são Linux ao habilitar a limpeza imediata de páginas sujas do jemalloc. #93360 (Eduard Karacharov).
  • A limpeza de páginas sujas do jemalloc agora é executada em uma thread separada da thread principal MemoryWorker. Adicionada a config memory_worker_purge_total_memory_threshold_ratio para limpeza com base na proporção do uso total de memória. #94902 (Antonio Andelic).
  • O decaimento de páginas sujas do jemalloc agora é desabilitado dinamicamente quando o ClickHouse está sob pressão de memória contínua. #95145 (Antonio Andelic).
  • Adicionada uma verificação explícita de consumo de memória antes da leitura de dados do MergeTree, com tamanhos menores para as filas do pool de threads com base na experiência em produção. #94692 (Nikita Mikhaylov).
  • O limite total de memória agora é verificado antes da autenticação do usuário, gerando memory limit exceeded se esse limite for ultrapassado. #95003 (Nikolai Kochetov).
  • Corrigida a contabilização incorreta de memória no cache de condições da consulta. #95478 (Nikita Mikhaylov).
  • Tornada mais robusta a detecção de uso de memória da consulta para gravação em disco durante agregação/ordenação. #92500 (Azat Khuzhin).
  • O scheduler agora prioriza a thread MemoryWorker em situações de escassez de CPU para proteger o processo. #94864 (Nikita Mikhaylov).
  • Corrigido um problema em que o ClickHouse não respeitava os limites de memória em alguns casos ao ler dados de uma tabela. #93715 (Nikita Mikhaylov).

Formatos de dados

  • O Parquet reader agora permite ler colunas Tuple ou Map como JSON. #92864 (Michael Kolupaev).
  • O Parquet reader agora oferece suporte a Tuples vazias. #92868 (Michael Kolupaev).
  • O tipo Date agora é serializado como o tipo nativo date32 do Arrow nos formatos Arrow/ArrowStream (antes, uint16). O comportamento anterior pode ser restaurado com a configuração output_format_arrow_date_as_uint16. #96860 (Alexey Milovidov).
  • O output format Hash agora é independente dos tamanhos de bloco. #94503 (Alexey Milovidov).
  • Tipos simples no formato Pretty JSON não são mais exibidos em linhas separadas. #93836 (Pavel Kruglov).
  • A inferência de esquema agora respeita allow_experimental_nullable_tuple_type — quando habilitada, objetos aninhados ausentes podem se tornar NULL em vez de uma tuple de elementos NULL. #95525 (Nihal Z. Miaji).
  • O Formatter de SQL agora gera COMMENT antes de AS SELECT, em vez de colocar SELECT entre parênteses. #96293 (Alexey Milovidov).
  • Compressão da lista de postings otimizada com simdcomp. #92871 (Peng Jian).

Backup e restauração

  • Adicionada a configuração de backup backup_data_from_refreshable_materialized_view_targets para controlar se os dados de views materializadas atualizáveis serão incluídos no backup. Os destinos de RMVs com estratégia de atualização APPEND sempre são incluídos no backup. #93658 (Julia Kartseva).
  • Adicionado suporte a coleções nomeadas definidas em SQL em BACKUP/RESTORE para S3 e Azure Blob Storage. #94605 (Pablo Marcos).

Coleções nomeadas e dicionários

  • Sobrescritas de parâmetros em coleções nomeadas agora são permitidas na função de tabela do MongoDB. #89616 (vanchaklar).
  • Coleções nomeadas passaram a ser suportadas para dicionários e tabelas do YTsaurus. #94582 (MikhailBurdukov).
  • Descrições de colunas agora podem ser informadas para fontes de dicionário de tabelas dinâmicas do YTsaurus. #92391 (MikhailBurdukov).
  • O esquema da view parametrizada agora é exibido quando especificado explicitamente. #90220 (Grigorii Sokolik).

Desduplicação

  • A configuração insert_select_deduplicate foi reformulada para adicionar opções de compatibilidade com versões anteriores. #92951 (Sema Checherinda).
  • A desduplicação com inserções assíncronas agora é permitida quando há visões materializadas envolvidas. #93957 (Sema Checherinda).

Outras melhorias

  • Melhorada a UX de SYSTEM INSTRUMENT ADD/REMOVE: literais de string agora são usados para nomes de funções, todas as funções correspondentes são corrigidas, e function_name agora é aceito em REMOVE. #93345 (Pablo Marcos).
  • Adicionado SYSTEM NOTIFY FAILPOINT para failpoints pausáveis e SYSTEM WAIT FAILPOINT para PAUSE/RESUME. #92368 (Shaohua Wang).
  • Os nomes de funções C++ em system.trace_log, system.symbols e na função demangle agora são exibidos corretamente. #93075 (Alexey Milovidov).
  • Perfis do jemalloc agora são gravados com símbolos, eliminando a necessidade de um binário durante a geração do heap profile. #93099 (Azat Khuzhin).
  • Corrigido um travamento ao anexar uma tabela a um banco de dados MaterializedPostgreSQL se dropReplicationSlot lançar uma exceção durante o desenrolamento da pilha. #96871 (Alexey Milovidov).
  • Corrigida a possibilidade de deixar resíduos quando CREATE TABLE falha. #94174 (Azat Khuzhin).
  • Corrigido o acesso a memória não inicializada quando uma chave TLS protegida por senha é usada. #94182 (Konstantin Bogdanov).
  • Quando alter table ... modify setting ... atinge o timeout ao adquirir um bloqueio, agora retorna um erro de timeout em vez de um erro lógico. #93856 (Han Fei).
  • Melhorada a interoperabilidade do profiler de CPU e em tempo real com timeouts de socket. #96601 (Sergei Trifonov).
  • Ativado o endurecimento rápido do libcxx para compilações de lançamento (principalmente verificações de acesso fora dos limites), sem impacto perceptível no desempenho. #94757 (Miсhael Stetsyuk).

Melhorias de desempenho

Desempenho de JOIN

  • Algumas operações de hash join foram aceleradas com a implementação de despacho dinâmico para ColumnVector::replicate. #79573 (Raúl Marín).
  • Agora, mais filtros são aplicados com pushdown em junções. #85556 (Nikita Taranov).
  • O pushdown de filtros a partir de condições ON de JOIN foi estendido para junções ANY, SEMI e ANTI quando o filtro usa entradas de apenas um dos lados. #92584 (Dmitry Novik).
  • Conjuntos equivalentes agora podem ser usados para fazer pushdown de filtros em SEMI JOIN. #92837 (Dmitry Novik).
  • O processamento de linhas não unidas em ParallelHashJoin para predicados complexos foi paralelizado, controlado pela configuração parallel_non_joined_rows_processing (habilitada por padrão). #92068 (Yarik Briukhovetskyi).
  • O hash join agora deixa de ler completamente o lado esquerdo quando o lado direito está vazio, evitando trabalho desnecessário em casos de filtragem pesada ou agregação. #94062 (Alexander Gololobov).
  • JOIN runtime filters agora são compatíveis com junções RIGHT OUTER. #96183 (Hechem Selmi).
  • A PREWHERE optimization agora é adiada até depois da otimização de JOIN runtime filter, permitindo que runtime filters também sejam aplicados a PREWHERE por pushdown. #95838 (Alexander Gololobov).

Otimização de consultas

  • A otimização da ordenação para funções de janela foi desabilitada quando a chave de partição corresponde à chave de ordenação ou é um prefixo dela, melhorando o desempenho da execução paralela. #87299 (Nikita Taranov).
  • Filtros externos agora são propagados para views, permitindo que PREWHERE seja aplicado tanto em nós locais quanto remotos. #88316 (Igor Nikonov).
  • O desempenho e o uso de memória para LIMIT e OFFSET fracionários foram otimizados. #91167 (Ahmed Gouda).
  • Filtros constantes em colunas virtuais não são mais avaliados de forma redundante. #91588 (c-end).
  • Agora, qualquer expressão determinística na chave primária (por exemplo, ORDER BY cityHash64(user_id)) pode ser usada para ignorar dados. O ClickHouse aplica a expressão às constantes da consulta e usa o resultado para buscas no índice da chave primária com =, IN e has. Para expressões injetivas, formas negadas (!=, NOT IN, NOT has) também são suportadas. #92952 (Nihal Z. Miaji).
  • A otimização de leitura em ordem agora reconhece quando as colunas de ORDER BY são constantes devido a condições em WHERE, permitindo leituras eficientes em ordem reversa. Isso beneficia consultas multitenant como WHERE tenant='42' ORDER BY tenant, event_time DESC. #94103 (matanper).
  • Para consultas FINAL que usam uma condição de chave primária seguida por índices de salto, a etapa PrimaryKeyExpand agora verifica apenas os intervalos da chave primária inicialmente pré-selecionados. #94903 (Shankar Iyer).
  • A otimização de lazy materialization agora é aplicada a todos os branches de uma consulta UNION ALL, e não apenas ao primeiro, reduzindo a E/S em consultas que combinam várias leituras ordenadas e limitadas de diferentes tabelas MergeTree. #96832 (Federico Ginosa).

Desempenho de funções e agregações

  • A compilação JIT agora abrange mais funções. #88770 (Alexey Milovidov).
  • A função de agregação distinctJSONPaths foi otimizada para ler apenas os caminhos JSON das partes de dados, em vez de ler a coluna JSON inteira. #92196 (Pavel Kruglov).
  • uniqExact foi otimizada para casos em que elementos idênticos costumam aparecer em sequência. #93268 (Alexey Milovidov).
  • isValidASCII foi otimizada para valores de entrada compostos apenas por caracteres ASCII. #93347 (Robert Schulze).
  • uniq em tipos numéricos foi acelerada ao agrupar inserções em lote quando possível (não nulo, sem -If, sem GROUP BY, sem IPv6 nem String). #95904 (Raúl Marín).

Desempenho de armazenamento e E/S

  • Corrigido o Parquet Reader V3 Prefetcher para usar uma lógica mais rápida de leitura aleatória. #91435 (Arsen Muk).
  • Melhorado o desempenho de icebergCluster. #91537 (Yang Jiang).
  • Reduzido o uso de memória de INSERT e merge em tabelas muito largas com partes Wide por meio da habilitação de buffers de gravação adaptativos. Também foi adicionado suporte a buffers de gravação adaptativos para disks criptografados. #92250 (Azat Khuzhin).
  • Melhorado o desempenho da busca de texto completo com o índice de texto e o tokenizer sparseGrams, reduzindo o número de tokens pesquisados. #93078 (Anton Popov).
  • Acelerada a compressão com o codec T64 usando despacho dinâmico em x86. #95881 (Raúl Marín).
  • Acelerada a descompressão LZ4 de blocos de 32 bytes em x86. #96778 (Raúl Marín).
  • A otimização de leitura direta do índice de texto agora funciona parcialmente — partes com um índice de texto materializado o utilizarão, enquanto partes sem ele recorrerão à expressão de filtro original. #96411 (Anton Popov).
  • Otimizado o cálculo do skip index minmax durante INSERT ao remover uma cópia de dados desnecessária e habilitar o cálculo vetorizado de mínimo/máximo para colunas numéricas. #97392 (Raúl Marín).
  • Adicionados índices secundários minmax em colunas de tempo e índices bloom_filter nas colunas query_id/initial_query_id às tabelas de log do sistema para acelerar a filtragem. #96712 (Alexey Milovidov).
  • Evitada a regressão no uso de memória em INSERT quando a desduplicação não está habilitada. #96503 (Alexey Milovidov).

Otimização de memória

  • Reduziu o uso de memória de ASTLiteral ao remover campos não utilizados quando o realce e a análise de VALUES não estão ativos. #93974 (Ilya Yatsishin).
  • Introduziu uma classe especializada de AST para Enum que armazena parâmetros de valor como pares string/inteiro em vez de nós filhos ASTLiteral genéricos, reduzindo o consumo de memória. #94178 (Ilya Yatsishin).
  • Otimizou o consumo de memória de objetos AST de tupla nomeada ao armazenar nomes de coluna diretamente como strings, em vez de nós literais AST genéricos. #94704 (Ilya Yatsishin).
  • Reduziu o tamanho da estrutura CachedOnDiskReadBufferFromFile em cerca de 50 vezes. #96098 (Azat Khuzhin).
  • HashTable::resize não copia mais dados antigos quando a tabela está vazia. #96180 (Raúl Marín).

Otimizações internas

  • Adotado o método “fastrange” (Daniel Lemire) para particionar dados no pipeline da consulta, melhorando a ordenação paralela e as junções. #93080 (Alexey Milovidov).
  • Melhorada a desvirtualização com opções adicionais do linker. #94737 (Nikita Taranov).
  • Melhorado o desempenho da clonagem de réplicas em tabelas ReplicatedMergeTree com muitas partes por meio do agrupamento de solicitações ao ZooKeeper. #94847 (c-end).
  • Reduzido em mais de 20% o consumo de CPU da thread de recebimento do ZooKeeper em observeOperations ao trocar por hashing mais rápido e contadores sem bloqueio. #95962 (Miсhael Stetsyuk).

Correção de bugs

Correções de JOIN

  • Corrigido o erro INCOMPATIBLE_TYPE_OF_JOIN no storage Join quando a otimização de join de outer para inner foi aplicada. #84292 (Vladimir Cherkasov).
  • Corrigido erro lógico em consultas com várias junções usando a cláusula USING e join_use_nulls. #92251 (Vladimir Cherkasov).
  • Corrigido erro lógico durante a reordenação do join com join_use_nulls. #92289 (Vladimir Cherkasov).
  • Corrigida uma possível queda com a configuração join_on_disk_max_files_to_merge. #92335 (Bharat Nallan).
  • Corrigido o LOGICAL_ERROR causado por uma modificação indesejada no plano de consulta ao converter uma junção externa em junção interna. Também foram flexibilizados os requisitos de otimização para que se apliquem quando funções injetivas são usadas em chaves de agregação durante junções. #92503 (János Benjamin Antal).
  • Corrigido erro lógico em múltiplas junções com condição constante e join_use_nulls. #92892 (Vladimir Cherkasov).
  • Corrigido o caso NULL != NULL no full_sorting_join para colunas LowCardinality(Nullable(T)). #92924 (Vladimir Cherkasov).
  • Corrigidos os resultados de junção quando a chave de junção do lado direito era uma coluna esparsa. #93038 (Amos Bird).
  • Corrigido o problema em que os runtime filters funcionavam incorretamente quando LEFT ANTI JOIN tinha uma pós-condição extra. #91824 (Alexander Gololobov).
  • Corrigido um erro lógico ao usar filtros de runtime em uma consulta com totais para a tabela da direita. #93330 (Alexander Gololobov).
  • Corrigido um erro lógico que, em alguns casos, era acionado quando filtros de runtime de join eram adicionados ao plano de consulta, devido ao retorno incorreto de colunas const duplicadas. #93144 (Alexander Gololobov).
  • Corrigida a função __applyFilter, usada por filtros de runtime de JOIN, que retornava ILLEGAL_TYPE_OF_ARGUMENT em alguns casos válidos. #93187 (Alexander Gololobov).
  • Corrigidos os filtros em tempo de execução que não estavam sendo adicionados ao fazer JOIN com uma tabela à direita já preenchida. #93211 (Alexander Gololobov).
  • Corrigido o erro NOT_FOUND_COLUMN_IN_BLOCK quando o filtro em tempo de execução estava habilitado e as tabelas em JOIN retornavam a mesma coluna várias vezes. #93526 (Alexander Gololobov).
  • Corrigido FilterStep, que não era adicionado corretamente quando o filtro de runtime de join era aplicado na tabela Merge. #94021 (Alexander Gololobov).
  • Corrigida a conversão de tipo para supertipo durante a operação de JOIN do storage Join com a cláusula USING. #94000 (Dmitry Novik).
  • Corrigidas consultas com réplicas paralelas e JOIN com tabela que não é MergeTree. #93902 (Igor Nikonov).
  • Corrigida uma condição de corrida na coluna de join do tipo Nullable em filtros de runtime. #95775 (Hechem Selmi).
  • Corrigido o caso em que a string vazia se tornava NULL na tabela Join com chave Nullable(String). #96002 (Alexey Milovidov).
  • Corrigido o erro NOT_SUPPORTED ao usar o algoritmo de join direct com uma tabela MergeTree vazia. #95935 (Vladimir Cherkasov).
  • Corrigidos resultados incorretos de consultas envolvendo junções externas combinadas com vários INNER JOINs devido à reordenação ilegal de junções, quando a condição ON de uma junção externa fazia referência a colunas de várias tabelas já unidas anteriormente. #96193 (Vladimir Cherkasov).
  • Corrigida a exceção do filtro em tempo de execução para colunas Tuple com subcampos Nullable. #96509 (Alexey Milovidov).
  • Corrigidas consultas com CROSS JOINs e réplicas paralelas habilitadas que retornavam resultados incorretos. #96848 (Igor Nikonov).
  • Corrigido um problema em que arrayJoin produzia linhas duplicadas quando usado com INNER JOIN e cláusula WHERE, devido ao push-down parcial de predicados, que empurrava incorretamente filtros contendo arrayJoin para abaixo de um JOIN. #96989 (Alexey Milovidov).
  • Corrigido LOGICAL_ERROR quando arrayJoin na cláusula WHERE fazia referência a colunas de ambos os lados de um JOIN. #97239 (Alexey Milovidov).
  • Corrigido erro lógico ao usar um curinga (*) dentro de uma função lambda em uma cláusula VALUES em um JOIN com USING. #95661 (Vladimir Cherkasov).
  • Corrigido um possível erro lógico com o matcher (*, table.*) e analyzer_compatibility_join_using_top_level_identifier quando a coluna USING tinha tipos diferentes. #95808 (Vladimir Cherkasov).
  • Corrigido um erro lógico com analyzer_compatibility_join_using_top_level_identifier e colunas ALIAS. #97297 (Vladimir Cherkasov).
  • Corrigido travamento no analisador antigo ao usar JOIN com aliases duplicados. #96405 (Ilya Golshtein).

Correções de consulta e do analyzer

  • Corrigido um bug em que handlers de consultas predefinidas interpretavam espaços em branco no final como dados durante inserções. #83604 (Fabian Ponce).
  • Corrigida a agregação com projeção que gerava uma exceção após ALTERs apenas de metadados, como a extensão de elementos Enum. #84143 (Alexey Milovidov).
  • Corrigida a etapa count_distinct_optimization para funções de janela e múltiplos argumentos. #92376 (Raúl Marín).
  • Corrigida a inconsistência na formatação da AST de arrayElement com literal negado. #92293 (Pavel Kruglov).
  • Corrigido o NOT IN com argumentos de array não constantes, que retornava valores incorretos. #93314 (Yarik Briukhovetskyi).
  • Corrigido um erro na comparação null-safe envolvendo o tipo Nothing. #91884 (Yarik Briukhovetskyi).
  • Corrigido o erro Not found column na otimização use_top_k_dynamic_filtering. #93316 (Nikolai Kochetov).
  • Foi corrigida a remoção de colunas não utilizadas em subconsultas na presença de uma subconsulta escalar correlacionada. #93273 (Dmitry Novik).
  • Corrigido o problema em que optimize_inverse_dictionary_lookup não funcionava com consultas distribuídas quando a chave era de um tipo inteiro com sinal. #93848 (Nihal Z. Miaji).
  • Corrigido o problema em que lag/lead não funcionavam com consultas remote() distribuídas. #93858 (Nihal Z. Miaji).
  • Corrigido bug na lógica de data skipping quando not match(...) era usado em WHERE, o que causava resultados incorretos. #92726 (Nihal Z. Miaji).
  • Corrigido um bug na lógica de skipping de dados quando not materialize(...) ou not CAST(...) era usado em WHERE, o que causava resultados incorretos. #93017 (Nihal Z. Miaji).
  • Corrigido um erro lógico durante a análise de índice quando um array vazio foi usado na função has. #92995 (Nihal Z. Miaji).
  • Corrigido um erro lógico em um caso raro em que uma tupla vazia era usada com uma coluna Map. #93814 (Nihal Z. Miaji).
  • Corrigidas consultas que usavam sharding por PK e falhavam com uma condição falsa. #92815 (Yarik Briukhovetskyi).
  • Corrigido o planejamento de consultas do mecanismo de tabela Merge, que gerava ILLEGAL_COLUMN para hostName() ao combinar tabelas locais e remotas/Distributed. #93286 (Jinlin).
  • Corrigido erro NO_SUCH_COLUMN_IN_TABLE no mecanismo Merge em tabelas com aliases. #92910 (Pavel Kruglov).
  • Corrigida a consulta SELECT com predicado em várias colunas usando índices de omissão com filtro de Bloom e condições OR e NOT, que retornava resultados inconsistentes. #94026 (Shankar Iyer).
  • Corrigida a aplicação da projeção quando o filtro continha subcolunas. #93141 (Pavel Kruglov).
  • Corrigida a corrupção de _part_offset quando as projeções eram reconstruídas durante os merges, e otimizado o processamento de projeções ao evitar leituras desnecessárias. #93827 (Amos Bird).
  • Evitou que diferentes colunas interpoladas se fundissem na mesma coluna em um bloco quando eram, na prática, aliases da mesma coluna. #93197 (Yakov Olkhovskiy).
  • Removidas colunas não utilizadas quando a projeção foi reconstruída durante o merge, reduzindo o uso de memória e criando menos partes temporárias. #93233 (Nikolai Kochetov).
  • Corrigido um erro lógico em alguns casos em que LIMIT/OFFSET negativo era usado em consultas distribuídas. #95357 (Nihal Z. Miaji).
  • Foi corrigido um erro lógico em alguns casos em que LIMIT/OFFSET fracionário era usado em consultas distribuídas. #96475 (Nihal Z. Miaji).
  • Corrigido o problema em que a função IN retornava resultados incorretos com valores NULL quando transform_null_in estava ativado. #95674 (Nihal Z. Miaji).
  • Corrigido o problema em que IN (col) com uma única referência de coluna falhava com o erro UNSUPPORTED_METHOD. #97646 (Alexey Milovidov).
  • Corrigida, em optimize_syntax_fuse_functions, a reescrita de sum/count/avg para sumCount() quando o argumento agregado era LowCardinality(Nullable). #96239 (Nihal Z. Miaji).
  • Corrigida a poda incorreta de partições para as funções not IN e not has. #96241 (Nihal Z. Miaji).
  • Corrigido erro no filtro prewhere causado por expressões lambda no prewhere. #95395 (Xiaozhe Yu).
  • Corrigido o LOGICAL_ERROR no analisador de consultas quando uma expressão lambda era passada onde se esperava um valor concreto. #96892 (Alexey Milovidov).
  • Corrigida a desreferência de ponteiro nulo em determinadas expressões com funções lambda. #96479 (Alexey Milovidov).
  • Corrigido o problema em que SETTINGS por subconsulta não era aplicado a funções de tabela como file em CTEs e subconsultas. #96882 (Alexey Milovidov).
  • Corrigida a colisão de hash no cache de condições de consulta para constantes de CTE otimizadas por constant folding, o que poderia levar a resultados incorretos em consultas. #96172 (Alexey Milovidov).
  • Corrigido o erro BAD_ARGUMENTS ao consultar tabelas com expressões lambda em colunas ALIAS por meio da função de tabela merge() com o analisador ativado. #97551 (Alexey Milovidov).
  • Corrigido o problema em que EXCEPT ALL e INTERSECT ALL ignoravam a multiplicidade das linhas e se comportavam como suas contrapartes DISTINCT. #96876 (Alexey Milovidov).
  • Corrigida falha de asserção em WindowTransform com um valor alto de deslocamento PRECEDING. #96026 (Alexey Milovidov).
  • Corrigida a exceção ao usar funções de janela com group_by_use_nulls = 1 e CUBE/ROLLUP/GROUPING SETS. #96878 (Alexey Milovidov).
  • Corrigida a interação de GROUPING SETS, group_by_use_nulls e Tuple com LowCardinality, que produzia uma estrutura de bloco inesperada. #96358 (Alexey Milovidov).
  • Erro lógico corrigido durante GROUP BY ... WITH ROLLUP/CUBE quando as chaves incluíam LowCardinality(Nullable(...)) dentro de Nullable(Tuple(...)). #97647 (Alexey Milovidov).
  • Falha de asserção corrigida em IfTransformStringsToEnumPass quando if ou transform retornava Nullable(String). #97002 (Alexey Milovidov).
  • Corrigido ACCESS_DENIED para usuários sem a permissão CREATE TEMPORARY TABLE quando optimize_inverse_dictionary_lookup reescreveu os predicados dictGet(...). #97484 (Nihal Z. Miaji).
  • Corrigida a incompatibilidade de tipo da função if entre UInt64 e Int32 em um caso incomum de consultas distribuídas com PREWHERE e inferência de tipos. #96012 (Alexey Milovidov).
  • Corrigidas consultas compiladas com JIT envolvendo tipos Bool. #96013 (Alexey Milovidov).
  • Corrigidos resultados incorretos gerados quando expressões compiladas por JIT convertiam DateTime em DateTime64 (por exemplo, em CASE/if/multiIf com tipos DateTime mistos). #96879 (Alexey Milovidov).
  • Corrigido o uso de um valor não inicializado em formatDateTime com formatadores de largura não fixa. #96133 (Alexey Milovidov).
  • Corrigido std::terminate no indexOfAssumeSorted ao ser chamado com tipos incompatíveis. #96877 (Alexey Milovidov).
  • As funções de geometria agora aceitam subtipos de geometria individuais, além do tipo Variant Geometry. #97571 (Alexey Milovidov).
  • Corrigidos casos em que os índices afetavam os resultados de consultas com row policy/PREWHERE e FINAL. #97076 (Yarik Briukhovetskyi).
  • Permitiu o uso de políticas de linha pela otimização read-in-order. #97538 (Janos Benjamin Antal).
  • Corrigido LOGICAL_ERROR ao usar colunas com índice de texto com a cláusula QUALIFY. #97313 (Alexey Milovidov).
  • Corrigido um possível travamento quando a cláusula WHERE tinha mais de 32 expressões com AND/OR. #97698 (Shankar Iyer).
  • Corrigida incompatibilidade na estrutura do bloco na otimização removeUnusedColumns ao usar indexHint com expansão de estrela em tabelas com FINAL. #97622 (Alexey Milovidov).
  • Corrigida a inconsistência de round-trip na formatação da AST para literais de tupla com alias entre parênteses. #97418 (Alexey Milovidov).
  • Corrigida a inconsistência na formatação da AST para NOT (1, 1, 1). #97653 (Alexey Milovidov).

Correções de MergeTree e armazenamento

  • Os nomes de arquivo no MergeTree agora são sempre substituídos por hashes se o sistema de arquivos não diferencia maiúsculas de minúsculas. Antes, no macOS, isso podia levar à corrupção de dados quando os nomes de coluna/subcoluna diferiam apenas no uso de maiúsculas e minúsculas. #86559 (Pavel Kruglov).
  • As visões materializadas agora usam como contexto de execução o banco de dados em que foram criadas, permitindo omitir a qualificação explícita do banco de dados na consulta SELECT da visão. #88193 (Dmitry Kovalev).
  • Adicionada verificação completa das permissões na etapa de criação para a consulta subjacente em uma visão materializada. #89180 (pufit).
  • Corrigido um erro lógico em que uma mutação sem transação alterava partes de uma transação ativa que foi revertida. #90469 (Shaohua Wang).
  • Corrigido o problema em que system.warnings não era atualizado corretamente após um banco de dados Ordinary ser convertido em um banco de dados Atomic. #90473 (sdk2).
  • Corrigido o LOGICAL_ERROR: Storage does not support transaction durante ATTACH AS REPLICATED. #91772 (Shaohua Wang).
  • Corrigido um possível erro FILE_DOESNT_EXIST após a mutação de uma coluna esparsa com ratio_of_defaults_for_sparse_serialization=0.0. #92860 (Pavel Kruglov).
  • Corrigido um possível erro FILE_DOESNT_EXIST após uma mutação em coluna esparsa quando ratio_of_defaults_for_sparse_serialization foi alterado para 1.0 por meio de ALTER. #93016 (Pavel Kruglov).
  • Corrigido um possível uso de partes desatualizadas devido a uma condição de corrida TOCTOU em partes compartilhadas. #93022 (Azat Khuzhin).
  • As configurações das informações de serialização da parte de origem passaram a ser herdadas durante a mutação no MergeTree, corrigindo possíveis resultados incorretos de consultas em partes alteradas após mudanças na serialização do tipo de dado. #92419 (Pavel Kruglov).
  • Corrigido um possível conflito entre uma coluna e uma subcoluna com o mesmo nome, que levava à serialização incorreta e a falhas nas consultas. #92453 (Pavel Kruglov).
  • Corrigido NOT_FOUND_COLUMN_IN_BLOCK ao inserir em uma tabela com subcoluna na expressão de partição. #92905 (Pavel Kruglov).
  • Corrigida uma possível ausência de subcoluna na MV durante a alteração da tabela de origem. #93276 (Pavel Kruglov).
  • Corrigido LOGICAL_ERROR ao restaurar ReplicatedMergeTree com condição de corrida na desduplicação. #93612 (Pablo Marcos).
  • Corrigido o uso de coluna esparsa na atualização de TTL durante a desserialização direta, evitando o erro Unexpected type of result TTL column. #93619 (Pavel Kruglov).
  • Restaurados os wrappers LowCardinality nos resultados das expressões SET, quando necessário, durante a agregação TTL. #92971 (Seva Potapov).
  • Corrigido o erro Cannot add action to empty ExpressionActionsChain em ALTER TABLE REWRITE PARTS. #92754 (Azat Khuzhin).
  • Corrigida a substituição de parâmetro de consulta nos métodos de autenticação de CREATE USER quando usado com ON CLUSTER. #92777 (xiaohuanlin).
  • Não tenta mais excluir diretórios temporários durante a inicialização caso uma tabela MergeTree esteja em um disco somente leitura. #92748 (Alexey Milovidov).
  • Corrigida a materialização de skip indexes criados com base em subcolunas. #93708 (Anton Popov).
  • Corrigido o CLEAR COLUMN com índices dependentes. #94057 (Raúl Marín).
  • Corrigida a anexação de bancos de dados Replicated quando o host interserver era alterado após a reinicialização. #93779 (Tuan Pham Anh).
  • Corrigido um erro lógico em CREATE TABLE ... AS urlCluster() e no mecanismo de banco de dados Replicated. #92418 (Kseniia Sumarokova).
  • Corrigida uma race condition entre REPLACE PARTITION e mutações em segundo plano que podia resultar na visibilidade simultânea de dados antigos e novos. #96955 (Alexey Milovidov).
  • Corrigida a condição de corrida que ainda existia entre REPLACE PARTITION e mutações em segundo plano, que poderia fazer dados antigos reaparecerem. #97105 (Alexey Milovidov).
  • Corrigidas mutações travadas quando PartCheckThread reenfileirava um GET_PART para uma parte já modificada por mutação. #97162 (Alexey Milovidov).
  • Corrigido o problema em que ALTER TABLE DROP COLUMN falhava após uma atualização leve ter sido executada anteriormente na mesma coluna. #96861 (Anton Popov).
  • Corrigida a desreferenciação de ponteiro nulo ao aplicar patch parts durante atualizações leves. #97583 (Alexey Milovidov).
  • Partes com projeções desconhecidas não são mais marcadas permanentemente como perdidas. #95952 (Mikhail Artemenko).
  • Corrigido o problema em que CREATE TABLE ... CLONE AS ... ignorava o nome totalmente qualificado da tabela de origem. #96415 (Hasyimi Bahrudin).
  • Corrigida a regeneração implícita de índices em tabelas replicadas durante alterações nos metadados. #96600 (Raúl Marín).
  • Corrigidos os índices implícitos com colunas alias e adicionada a validação completa antes de criá-los. #97115 (Raúl Marín).
  • Corrigido o retorno de min(timestamp) para epoch (1970-01-01) via _minmax_count_projection após a merge de TTL, quando todas as linhas eram filtradas. #96703 (Raquel Barbadillo).
  • Corrigida a combinação de use_const_adaptive_granularity e index_granularity_bytes (granularidade não adaptativa), que causava cálculo incorreto. #96143 (Alexey Milovidov).
  • Corrigida a exceção Number of rows in lazy chunk does not match number of offsets ao ler tabelas com granularidade de índice não adaptativa usando ORDER BY ... LIMIT. #97270 (Alexey Milovidov).
  • Corrigida uma regressão na zero-copy replication em que partes compartilhadas podiam ser excluídas antes de outras réplicas terminarem de obtê-las. #95597 (filimonov).
  • Corrigido SYSTEM RESTART REPLICA, que fazia a tabela desaparecer do banco de dados quando a recriação da tabela falhava com uma exceção não relacionada ao ZooKeeper, causando incompatibilidades no hash dos metadados em DatabaseReplicated. #97276 (Alexey Milovidov).
  • Corrigida a exceção assert_cast ao gerar estatísticas de coluna após ALTER TABLE MODIFY COLUMN alterar o tipo da coluna. #97027 (Alexey Milovidov).
  • Quando uma tabela não tem estatísticas definidas, o ClickHouse deixa de tentar carregá-las, evitando sobrecarga desnecessária. #96233 (Han Fei).
  • Corrigido o erro lógico There was an error: Cannot obtain error message ao aguardar um DDL distribuído e remover simultaneamente o banco de dados Replicated. #95664 (Alexander Tokmakov).
  • Corrigido um erro lógico em KeyCondition quando uma tabela tinha uma chave primária Nullable e a consulta usava coalesce com o primeiro argumento constante. #96340 (Alexey Milovidov).

Correções de tipo de dados e serialização

  • Corrigido um possível erro durante a leitura da subcoluna size dos tipos Dynamic/JSON. #95573 (Pavel Kruglov).
  • Corrigida falha ao aplicar tupleElement a arrays de JSON. #95647 (Pavel Kruglov).
  • Corrigida a execução de tupleElement em JSON com caminhos aninhados, que retornava resultados incorretos. #95907 (Pavel Kruglov).
  • Corrigido o problema em que tupleElement gerava uma exceção com JSON para caminhos com dicas de tipo. #97728 (Pavel Kruglov).
  • Corrigido o comportamento de ignorar caminhos no tipo de dados JSON — anteriormente, JSON(SKIP path) ignorava todas as chaves com o prefixo path (inclusive chaves como pathpath), o que podia levar à perda de dados. Agora, apenas a chave exata é ignorada. #95948 (Pavel Kruglov).
  • Corrigida a aplicação de type_json_allow_duplicated_key_with_literal_and_nested_object a caminhos tipados no JSON. #97422 (Pavel Kruglov).
  • Corrigida a verificação de caminhos tipados incompatíveis no tipo JSON. #92539 (Pavel Kruglov).
  • Corrigida a criação de type hint para o caminho ‘skip’ em JSON. #92842 (Pavel Kruglov).
  • Corrigida a resolução de subcolunas dinâmicas em aliases de coluna no analisador. #92583 (Pavel Kruglov).
  • Corrigido o erro Nested columns sizes are inconsistent with local_discriminators causado por uma otimização incorreta de filtragem in-place para colunas Variant. #96410 (Alexey Milovidov).
  • Corrigido um travamento em ifNull com argumento Variant usado em GROUP BY. #96790 (Alexey Milovidov).
  • Corrigido um erro lógico em FunctionVariantAdaptor com funções que exigem argumentos constantes, como arrayROCAUC. #97116 (Bharat Nallan).
  • Corrigido LOGICAL_ERROR em FunctionVariantAdaptor quando uma função retornava o tipo Nothing. #97213 (Alexey Milovidov).
  • Corrigida uma exceção lógica ao comparar NULL com uma coluna Variant contendo tipos LowCardinality. #97379 (Alexey Milovidov).
  • Corrigido LOGICAL_ERROR em concat quando um argumento continha o tipo Variant com LowCardinality internamente. #97654 (Alexey Milovidov).
  • Corrigidos resultados incorretos ao converter colunas LowCardinality para Nullable. #96483 (Nihal Z. Miaji).
  • Tipos LowCardinality Nullable passaram a ser tratados corretamente em CAST quando cast_keep_nullable estava habilitado. #95747 (Alexey Milovidov).
  • Corrigida a exceção ColumnNullable is not compatible with original ao aplicar CAST a tipos aninhados complexos. #96924 (Alexey Milovidov).
  • Corrigido LOGICAL_ERROR ao usar isNull/isNotNull nas subcolunas de tipos Nullable(Tuple(... Nullable(T) ...)). #97582 (Alexey Milovidov).
  • Corrigido o LOGICAL_ERROR na conversão de Array para QBit. #97413 (Alexey Milovidov).
  • Corrigido LOGICAL_ERROR ao ler em conjunto a coluna esparsa e sua subcoluna. #97515 (Pavel Kruglov).
  • Corrigido o LOGICAL_ERROR ao ler a subcoluna .size de um Nullable(String) esparso em uma Tuple com PREWHERE. #97264 (Alexey Milovidov).
  • Corrigida uma falha de asserção em Set e MergeTreeIndexSet ao processar colunas com subcolunas internas esparsas. #97493 (Alexey Milovidov).
  • Corrigido um possível erro SIZES_OF_COLUMNS_DOESNT_MATCH durante a ordenação de uma coluna de tupla vazia. #92520 (Pavel Kruglov).
  • Corrigidos bugs na decodificação de DELTA_BYTE_ARRAY no leitor nativo de Parquet que afetavam dados de texto altamente repetitivos. #91929 (Daniel Muino).
  • Corrigida uma falha de asserção ao ler um arquivo Parquet quando parte de uma expressão prewhere era usada em outro lugar na consulta. #90635 (Max Kainov).
  • Corrigido LOGICAL_ERROR no leitor nativo do Parquet V3 quando a coluna de filtro PREWHERE continha valores UInt8 não booleanos. #96594 (Alexey Milovidov).
  • Foi corrigida a inferência de esquema do Parquet no leitor antigo quando uma coluna JSON vinha depois de uma coluna Tuple. #92867 (Michael Kolupaev).
  • Corrigido o armazenamento em cache do esquema para todos os arquivos, em vez de apenas para o arquivo inferido, durante a inferência de esquema com glob. #92006 (Pavel Kruglov).
  • Corrigida a leitura do formato ProtobufList em arquivos vazios, que gerava registros fantasma em tabelas vazias. #96007 (Alexey Milovidov).
  • Corrigida uma regressão com o codec Gorilla quando um tamanho especificado explicitamente não correspondia ao tamanho do tipo de dado. #96118 (Alexey Milovidov).
  • O engine PostgreSQL agora pode ler BOOLEAN[] corretamente. #96006 (Alexey Milovidov).
  • Corrigido erro lógico ao ler uma coluna UUID de uma coluna TEXT do SQLite. #96016 (Alexey Milovidov).
  • Corrigida a conversão de tipos no engine SQLite para DateTime, Date, UUID e outros tipos. #96017 (Alexey Milovidov).
  • Corrigido o escape incorreto de valores FixedString em consultas ao SQLite e ao PostgreSQL. #96019 (Alexey Milovidov).
  • Adicionada a configuração input_format_numbers_enum_on_conversion_error para conversão de números em enums. #56240 (Nikolay Degterinsky).

Correções de text index e skip index

  • A criação e a materialização de índices de texto em tabelas com partes com mais de 4.294.967.295 linhas estão temporariamente desativadas para evitar resultados incorretos de consulta. #92644 (Anton Popov).
  • Corrigidas várias falhas durante as mesclagens de índices de texto em tabelas MergeTree. #92925 (Anton Popov).
  • Corrigidos os merges de índices de texto criados sobre expressões complexas (como concat(col1, col2)). #93073 (Anton Popov).
  • Corrigida a análise do índice de texto em colunas do tipo Array quando o índice não continha tokens. #93457 (Anton Popov).
  • Corrigida a reconstrução de índices de texto criados com base em subcolunas. #93326 (Anton Popov).
  • Corrigida a leitura direta do índice de texto em consultas de busca duplicadas. #93516 (Anton Popov).
  • Corrigidas inconsistências na análise de índice de texto das funções has, mapContainsKey e mapContainsValue, que poderiam retornar resultados diferentes dependendo do uso de um índice de texto. #93578 (Anton Popov).
  • Corrigido o cálculo dos tamanhos não comprimidos dos índices de texto em system.parts. #92832 (Anton Popov).
  • Corrigidos os índices ngrambf_v1 com comprimento de ngram > 8 que geravam uma exceção. #92672 (Robert Schulze).
  • Corrigido o índice ngram_bf em dados não UTF-8, que levava à leitura de memória não inicializada. #93663 (Alexey Milovidov).
  • Corrigido o problema stack-use-after-scope no índice de similaridade vetorial. #96259 (Alexey Milovidov).
  • Corrigido erro lógico quando uma expressão de skip index produzia uma coluna constante. #96880 (Alexey Milovidov).
  • Corrigido um problema na criação de uma tabela com uma expressão vazia () como índice, que levava a um acesso inválido à memória. #96363 (Alexey Milovidov).
  • Corrigido o uso de memória após liberação na análise de índice com use_primary_key desabilitado e um número muito grande de disjunções. #96112 (Alexey Milovidov).
  • Corrigido o uso do índice primário em atualizações leves com subconsultas usando a cláusula IN no WHERE. #92838 (Anton Popov).
  • Uso do código de erro correto ao validar o índice hypothesis. #92559 (Raúl Marín).

Correções no lago de dados

Correções de S3/Azure/armazenamento de objetos

  • Corrigido o cache da chave de partição no engine de tabela S3 quando havia funções não determinísticas. #92844 (Miсhael Stetsyuk).
  • Corrigido um erro de assert em ReadBufferFromS3 que ocorria quando o cache estava habilitado. #93809 (Kseniia Sumarokova).
  • Corrigido um possível erro na thread de limpeza do DiskObjectStorage. #87411 (Kseniia Sumarokova).
  • Corrigidos possíveis deadlocks no DiskObjectStorageTransaction. #93810 (Kseniia Sumarokova).
  • Corrigidas possíveis falhas da thread de limpeza do DiskObjectStorage quando ocorriam muitos erros. #94048 (Kseniia Sumarokova).
  • Corrigida a condição de corrida de dados em copyS3File para multipart_tags. #97227 (Azat Khuzhin).
  • A execução de uma mutação ALTER UPDATE inválida em tabelas semelhantes a arquivos no armazenamento de objetos (S3, Azure) deixou de causar um desreferenciamento de nullptr. #96162 (Alexey Milovidov).

Correções no S3Queue

Correções de segurança e controle de acesso

  • Corrigida a ausência de verificação de acesso em SYSTEM SYNC FILE CACHE. #92372 (Kseniia Sumarokova).
  • Corrigida a lógica incorreta nas verificações de privilégios de acesso com caractere curinga, que era restritiva demais. #92725 (pufit).
  • Impediu que usuários obtivessem a lista de colunas de uma tabela sem a permissão SHOW COLUMNS ao usar o mecanismo de tabela merge. #93695 (János Benjamin Antal).
  • Corrigida uma vulnerabilidade de overflow de inteiro na desserialização do estado de groupConcat, que poderia causar problemas de segurança da memória. #93426 (Raufs Dunamalijevs).
  • O tamanho validado do buffer descomprimido está conforme o esperado. #93690 (Raúl Marín).
  • Corrigido um problema ao revogar roles padrão. #96103 (Vitaly Baranov).
  • Corrigido o AccessRights::contains, que retornava resultados incorretos com revogações parciais. #96170 (pufit).
  • Corrigida a atualização das políticas de acesso por linha atribuídas ao usuário inicial em consultas distribuídas. #95469 (Vitaly Baranov).
  • O argumento de senha da função de tabela redis agora é mascarado nos logs e nas tabelas do sistema. #95325 (Janos Benjamin Antal).
  • Corrigido o vazamento de memória em objetos BIO durante a leitura de certificados X509. #96885 (Alexey Milovidov).
  • Validada a versão witness no bech32 para evitar overflow de buffer. #96671 (Raúl Marín).
  • Corrigida a lentidão ao consultar tabelas do sistema com um usuário que tinha permissões limitadas em muitos bancos de dados. #95874 (pufit).

Correções de backup e restauração

  • Corrigido o erro Couldn't pack tar archive: Failed to write all bytes, causado por um cabeçalho incorreto com o tamanho da entrada no arquivo. #92122 (Julia Kartseva).
  • Corrigida falha do servidor quando muitos backups concorrentes entravam em conflito pelos mesmos arquivos. #93659 (Alexey Milovidov).
  • Corrigido o estouro de pilha ao criar backups em formato de arquivo (.zip, .tzst) em um disco de armazenamento de objetos plain_rewritable. #96872 (Alexey Milovidov).
  • Corrigido o travamento do servidor quando o backup falhava devido a disco cheio ou a outros erros de E/S. #96873 (Alexey Milovidov).
  • Corrigido segfault no backup de StorageKeeperMap devido a um use-after-free. #97336 (Alexey Milovidov).

Correções de travamentos e estabilidade

  • Corrigido travamento causado pela leitura de uma Connection desconectada. #92807 (Raufs Dunamalijevs).
  • Corrigido um possível travamento com a função tokens() quando o segundo argumento é nulo. #92586 (Raúl Marín).
  • Corrigida uma falha no servidor que ocorria quando tokens era chamada com parâmetros de tokenizer não constantes. #93383 (Robert Schulze).
  • Corrigido um possível travamento causado pela mutação in-place das colunas const PREWHERE subjacentes durante a redução concorrente de colunas ou a filtragem. #92588 (Arsen Muk).
  • Corrigido um possível travamento ao encerrar o pool de agendamento em segundo plano, que poderia fazer o servidor travar durante o desligamento. #93008 (Azat Khuzhin).
  • Corrigido o problema que deixava as conexões em um estado inconsistente após o cancelamento preliminar de consultas distribuídas. #93029 (Azat Khuzhin).
  • Corrigido um possível Cannot finalize buffer after cancellation em estimateCompressionRatio(). #93068 (Azat Khuzhin).
  • Foi garantido que o ZooKeeper seja finalizado durante o desligamento para corrigir possíveis travamentos. #93602 (Azat Khuzhin).
  • Corrigida uma exceção não tratada durante a recarga em segundo plano de coleções nomeadas com armazenamento do ZooKeeper. #92717 (Kseniia Sumarokova).
  • Corrigido o uso de um valor não inicializado em ReadWriteBufferFromHTTP. #94058 (Alexey Milovidov).
  • Corrigido o fato de o tamanho do buffer de TraceSender não estar sendo atualizado, o que causava flushes intercalados de threads diferentes. #93966 (Miсhael Stetsyuk).
  • Foram armazenados ponteiros compartilhados no QueryPipeline para garantir que os objetos IStorage não sejam destruídos enquanto o PipelineExecutor estiver ativo. #93746 (Miсhael Stetsyuk).
  • Corrigida uma possível falha nas consultas distribuídas em caso de cancelamento. #95466 (Aleksandr Musorin).
  • Corrigida uma falha em DROP WORKLOAD quando executado concorrentemente com consultas. #95856 (Alexey Milovidov).
  • Corrigida uma condição de corrida no DROP WORKLOAD. #96614 (Sergei Trifonov).
  • Corrigidos vários bugs críticos relacionados ao uso de ThreadPoolCallbackRunnerLocal. #95818 (Raúl Marín).
  • Corrigido um possível deadlock em ProcessList causado por inversão de bloqueio quando o rastreador de overcommit de memória era acionado. #96182 (Antonio Andelic).
  • Corrigido um livelock no thread de verificação de cancelamento para consultas com max_execution_time alto. #96450 (Sergei Trifonov).
  • Corrigido um problema em que a thread de limpeza do MemoryWorker ficava travada devido a uma condição de corrida. #96819 (Antonio Andelic).
  • Corrigido travamento em clearCaches causado pela destruição prematura de snapshots em cache do armazenamento. #96995 (Alexey Milovidov).
  • Corrigido o heap-use-after-free em CREATE TABLE com restrições. #96669 (Nikita Taranov).
  • Corrigido um possível use-after-free em StorageKafka2. #97520 (Bharat Nallan).
  • Corrigida uma corrida de dados em shutdown_called no DatabaseMaterializedPostgreSQL. #97554 (Alexey Milovidov).
  • Corrigida uma condição de corrida no carregamento paralelo de um dicionário HASHED com shards, que poderia fazer com que algumas linhas não fossem carregadas. #96953 (Alexey Milovidov).
  • Corrigido um deadlock em dicionários quando um dicionário referenciava uma tabela Merge que fazia referência a ele recursivamente. #96120 (Alexey Milovidov).
  • Corrigido um acesso fora dos limites em BaseSettings::readBinary quando um servidor mais recente enviava uma configuração desconhecida durante a desserialização do plano de consulta. #97585 (Michael Stetsyuk).
  • Corrigida uma falha ao anexar uma tabela a um banco de dados MaterializedPostgreSQL se dropReplicationSlot lançasse uma exceção durante o desempilhamento da pilha. #96871 (Alexey Milovidov).
  • Liberado o fluxo da requisição em insert select para evitar o fechamento da conexão HTTP. #92175 (Sema Checherinda).
  • Corrigido um deadlock no SHOW CREATE DATABASE para o banco de dados Backup. #92541 (Azat Khuzhin).

Outras correções de bugs

  • Corrigido o tratamento de array vazio em handleAllTokens nas funções hasAllTokens e hasAnyTokens. #93328 (Anton Popov).
  • Corrigido o período dos profilers globais — era usado um valor truncado em vez do valor configurado, causando despertares mais frequentes. #96048 (Antonio Andelic).
  • Corrigido event_date em system.asynchronous_metric_log. #95947 (Raúl Marín).
  • Corrigido system.functions, que mostrava uma string vazia em vez de categories = 'Internal' para funções internas. #97315 (Robert Schulze).
  • Corrigido um possível erro de lógica no dicionário ip_trie quando o tipo da chave não era String. #97555 (Bharat Nallan).
  • Corrigida a depuração de UDF com a habilitação da captura de stderr em system.query_log.exception. #92209 (Xu Jia).
  • Corrigido filterPartsByVirtualColumns para predicados que sempre retornam falso. #97620 (Bharat Nallan).
  • Corrigido o problema em que ColumnConst não era materializado antes do squashing. #97019 (Hasyimi Bahrudin).
Última modificação em 10 de junho de 2026