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 VIEWque usamINcom 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 comoINVALID_JOIN_ON_EXPRESSIONno momento da execução da consulta e, em alguns casos (como em junções com o mecanismo de armazenamentoJoin), podia causar umLOGICAL_ERROR. #92371 (Vladimir Cherkasov). - Subconsultas não são mais permitidas em
ORDER BYe em outras expressões-chave de tabela. #96847 (Alexey Milovidov).
Alterações em tipos de dados
- Adicionado suporte a
Nullable(Tuple). Para habilitá-lo, definaallow_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
compatibilitypara a versão anterior ou ajuste as configurações do MergeTreedynamic_serialization_version='v2'eobject_serialization_version='v2'. #92511 (Pavel Kruglov). SKIP REGEXPno 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
DATEdo PostgreSQL agora são inferidas comoDate32no ClickHouse (antes, eram inferidas comoDate, o que podia causar overflow para valores fora da sua faixa limitada). Agora também há suporte para inserir valoresDate32de 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_QPLeZSTD_QATforam removidos. Converta todos os dados existentes comprimidos com esses codecs para outro codec antes de atualizar. Observe que, anteriormente, o uso desses codecs exigia habilitarenable_deflate_qpl_codecouenable_zstd_qat_codec. #92150 (Robert Schulze). INSERTem colunasALIASsimples 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
Lazyfoi removido e não está mais disponível. #93627 (Alexey Milovidov). - O modo
transposed_with_wide_viewdemetric_logfoi removido devido a um bug que o tornava inutilizável. Não é mais possível definirsystem.metric_logcom 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_dotalledictionary_use_async_executorforam 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_finalfoi 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 como1ativa a funcionalidade incondicionalmente, e defini-la como0faz com que ela siga a nova configuraçãoenable_automatic_decision_for_merging_across_partitions_for_final(padrão1). #96110 (Nikita Taranov). - Adicionada validação de esquema do S3. #96194 (Konstantin Vedernikov).
- A configuração
apply_row_policy_after_finalagora está habilitada por padrão, garantindo queROW POLICYrespeiteFINAL, como fazia originalmente. Se você antes dependia deoptimize_move_to_prewhere_if_final=1para aplicar políticas de linha antes deFINAL, useapply_row_policy_after_final=0em vez disso. #97279 (Nikolai Kochetov).
Mudanças de segurança e controle de acesso
joinGet/joinGetOrNullagora exigem privilégiosSELECTna tabela Join subjacente. ExecutarjoinGet('db.table', 'column', key)requer o privilégioSELECTtanto nas colunas-chave quanto na coluna de atributo recuperada. Consultas sem esses privilégios falharão comACCESS_DENIED. Para migrar, conceda as permissões usandoGRANT SELECT ON db.join_table TO userpara acesso completo à tabela, ouGRANT SELECT(key_col, attr_col) ON db.join_table TO userpara acesso no nível da coluna. #94307 (Vladimir Cherkasov).- As consultas
CREATE TABLE ... AS ...agora exigem o privilégioSHOW COLUMNSem vez deSHOW 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.s3queueagora se chamasystem.s3queue_metadata_cache, esystem.azure_queueagora se chamasystem.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
colorOKLABToSRGBecolorSRGBToOKLABpara 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
Variantpor meio do novoFunctionVariantAdaptor. #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_functionspara 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.primese a função de tabelaprimes, 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_pointspara 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, umStorageTableProxyleve é 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
PREWHEREe aPREWHEREem 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 aoblock_idem 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_versionpara 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 [...] CACHEcomo uma alternativa mais clara à sintaxe existenteSYSTEM 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 CLUSTERagora podem ser executadas para bancos de dados Replicated quando a configuraçãoignore_on_cluster_for_replicated_databaseestiver 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_bytespara um controle mais refinado sobre a formação dos blocos inseridos. #92833 (Kirill Kopnev). - Adicionada a configuração
use_primary_key. Defina-a comofalsepara 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_scheduleragora usamax_min_fairpor padrão em vez defair_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_levelelogger.shutdown_console_levelpara 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_Infoao endpoint Prometheus/metricscom 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_runseast_fuzzer_any_query. Quando habilitado, o servidor executa mutações aleatórias de cada consulta após sua execução normal, descartando os resultados. #97568 (Alexey Milovidov).
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
INnã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 = 1agora é aceito como alias deEXPLAIN indexes = 1. #92774 (Pranav Tiwari).- Melhoria no pushdown de filtros para as funções de tabela
numberseprimes— o ClickHouse agora pode inferir limites conservadores de valores a partir de condiçõesWHEREpara 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
startsWithUTF8se o prefixo contiver apenas caracteres ASCII. #97055 (vkcku). assumeNotNull,coalesceeifNullagora 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_downagora vem ativada por padrão. #89313 (Alexey Milovidov). - A otimização
enable_join_runtime_filtersagora 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
FINALestiver 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 DATABASEagora remove as tabelas na ordem inversa das dependências, aumentando a segurança contra falhas quando o banco de dados contém tabelas com dependências de carregamento. #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 COLUMNfor executado rapidamente após uma mutaçãoDROP COLUMN. #96713 (Alexey Milovidov). - Expressões
ALTERconflitantes comUPDATEeRENAME COLUMNagora 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
PREWHEREaltamente seletivos. #97231 (Nikita Taranov). joinGetagora 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_codecem 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
StorageEmbeddedRocksDBagora 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 dedetached/(por exemplo, partes com os prefixosbroken-on-startouunexpected) sem precisar renomeá-las manualmente no sistema de arquivos. #74816 (Anton Popov). min_free_disk_bytes_to_perform_insertagora funciona corretamente com volumes JBOD. #90878 (Aleksandr Musorin).max_parts_to_merge_at_onceagora é 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 perfildefault. #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_layersfoi limitado para evitar consumo excessivo de memória. #96478 (Nikita Taranov). - O text index agora é GA. #96794 (Robert Schulze).
QBitagora é GA. #95358 (Raufs Dunamalijevs).QBitagora 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) emsystem.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_locationnã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
PREWHEREhabilitada 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 COLUMNpara 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_arneaws_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-encryptionnão são mais propagados para as requisiçõesHeadObject,UploadParteCompleteMultipartUpload. #64577 (Francisco J. Jurado Moreno). - Agora,
storage_class_namepode ser especificado em coleções nomeadas para o motor de tabela S3 e a função de tabelas3. #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 valoresDate,DateTimeeTimecomo argumentos. #87845 (Yarik Briukhovetskyi).mapContainsKeyLikeemapContainsValueLikeagora podem usar um índice de texto emmapKeys()oumapValues(). #93049 (Michael Jarrett).flipCoordinatesagora oferece suporte ao tipoGeometry. #93303 (Bharat Nallan).- Foi removido o limite de 64 tokens para as funções
hasAnyTokensehasAllTokens. #95152 (Elmi Ahmadov). - Adicionado
distanceCosinecomo alias decosineDistance, em linha com outras funções de distância. #96065 (Raufs Dunamalijevs). - Adicionada a função
iifao ClickHouse KQL. #94790 (happyso). use_variant_as_common_typeagora é habilitado por padrão, permitindo tipos incompatíveis emArray, consultasUNIONe ramos deif/multiIf/case. #90677 (Alexey Milovidov).
Ajustes e configuração
use_skip_indexes_on_data_readagora 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 colunasDate,Date32,Time,Time64,DateTimeeDateTime64. #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_complexitypara 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_listpara limitar o rastreamento comtrace_profile_eventa eventos com nomes específicos. #92298 (Alexey Milovidov). - Adicionada a configuração
type_json_allow_duplicated_key_with_literal_and_nested_objectpara 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_parte a configuração no nível de consultamax_dynamic_subcolumns_in_json_type_parsingpara limitar as subcolunas dinâmicas em colunas JSON durante a mesclagem e o parsing. #94184 (Pavel Kruglov). - Adicionado
use_statisticscomo alias deallow_statistics_optimize, em linha comuse_primary_keyeuse_skip_indexes. #94366 (Robert Schulze). - Habilitada
input_format_numbers_enum_on_conversion_errorna 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_mergeagora vem habilitado por padrão na versão de compatibilidade 26.2 e posteriores. #95917 (Christoph Wurm).core_dump.size_limitagora 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
pathagora é 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_reasonsasystem.mutationspara melhorar o diagnóstico. #92206 (Shaohua Wang). - Adicionada a coluna
creation(implícita/explícita) asystem.data_skipping_indices. #92378 (Raúl Marín). - As tarefas em execução agora são refletidas em
system.background_schedule_poole na tabela de log correspondente. #92587 (Azat Khuzhin). - Adicionada a métrica
QueryNonInternalpara rastrear o número de consultas não internas em execução, ajudando a monitorar a concorrência em relação ao limitemax_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_addresseconnection_portaquery_logpara 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_statse o endpoint HTTP/jemalloc.htmlpara visualização interativa das estatísticas do allocator de memória jemalloc. #97077 (Antonio Andelic). - Adicionada a tabela
system.jemalloc_profile_textpara ler e analisar heap profiles do jemalloc, com suporte a formatos de saída brutos, simbolizados e colapsados. #97218 (Antonio Andelic). - Adicionados
mutation_idsasystem.part_logpara os eventosMUTATE_PARTeMUTATE_PART_START. #93811 (Shaohua Wang). - As configurações globais aninhadas do servidor (por exemplo,
logger.level) agora estão parcialmente visíveis emsystem.server_settings. #94001 (Hechem Selmi). view_duration_msagora mostra por quanto tempo um grupo ficou ativo, em vez da soma das durações das threads. #94966 (Sema Checherinda).system.blob_storage_logagora está disponível para Azure Blob Storage, Local e HDFS. Adicionada a colunaerror_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,KeeperBatchSizeElementseKeeperBatchSizeBytes. #92149 (Miсhael Stetsyuk). - As extensões
CHECK_STATeTRY_REMOVEdo 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_dataewith_statàs requisiçõesgetChildrendo 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_datado 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 configmemory_worker_purge_total_memory_threshold_ratiopara 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 exceededse 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
MemoryWorkerem 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
TupleouMapcomo JSON. #92864 (Michael Kolupaev). - O Parquet reader agora oferece suporte a Tuples vazias. #92868 (Michael Kolupaev).
- O tipo
Dateagora é serializado como o tipo nativodate32do Arrow nos formatos Arrow/ArrowStream (antes,uint16). O comportamento anterior pode ser restaurado com a configuraçãooutput_format_arrow_date_as_uint16. #96860 (Alexey Milovidov). - O output format
Hashagora é 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 tornarNULLem vez de uma tuple de elementosNULL. #95525 (Nihal Z. Miaji). - O Formatter de SQL agora gera
COMMENTantes deAS SELECT, em vez de colocarSELECTentre 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_targetspara controlar se os dados de views materializadas atualizáveis serão incluídos no backup. Os destinos de RMVs com estratégia de atualizaçãoAPPENDsempre são incluídos no backup. #93658 (Julia Kartseva). - Adicionado suporte a coleções nomeadas definidas em SQL em
BACKUP/RESTOREpara 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_deduplicatefoi 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, efunction_nameagora é aceito emREMOVE. #93345 (Pablo Marcos). - Adicionado
SYSTEM NOTIFY FAILPOINTpara failpoints pausáveis eSYSTEM WAIT FAILPOINTpara PAUSE/RESUME. #92368 (Shaohua Wang). - Os nomes de funções C++ em
system.trace_log,system.symbolse na funçãodemangleagora 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
MaterializedPostgreSQLsedropReplicationSlotlançar uma exceção durante o desenrolamento da pilha. #96871 (Alexey Milovidov). - Corrigida a possibilidade de deixar resíduos quando
CREATE TABLEfalha. #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
ONde JOIN foi estendido para junçõesANY,SEMIeANTIquando 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
ParallelHashJoinpara predicados complexos foi paralelizado, controlado pela configuraçãoparallel_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
PREWHEREseja aplicado tanto em nós locais quanto remotos. #88316 (Igor Nikonov). - O desempenho e o uso de memória para
LIMITeOFFSETfracioná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=,INehas. 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 BYsão constantes devido a condições emWHERE, permitindo leituras eficientes em ordem reversa. Isso beneficia consultas multitenant comoWHERE tenant='42' ORDER BY tenant, event_time DESC. #94103 (matanper). - Para consultas
FINALque usam uma condição de chave primária seguida por índices de salto, a etapaPrimaryKeyExpandagora 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
distinctJSONPathsfoi otimizada para ler apenas os caminhos JSON das partes de dados, em vez de ler a coluna JSON inteira. #92196 (Pavel Kruglov). uniqExactfoi otimizada para casos em que elementos idênticos costumam aparecer em sequência. #93268 (Alexey Milovidov).isValidASCIIfoi otimizada para valores de entrada compostos apenas por caracteres ASCII. #93347 (Robert Schulze).uniqem tipos numéricos foi acelerada ao agrupar inserções em lote quando possível (não nulo, sem-If, semGROUP BY, semIPv6nemString). #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
INSERTe 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
INSERTao 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
minmaxem colunas de tempo e índicesbloom_filternas colunasquery_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
INSERTquando a desduplicação não está habilitada. #96503 (Alexey Milovidov).
Otimização de memória
- Reduziu o uso de memória de
ASTLiteralao remover campos não utilizados quando o realce e a análise deVALUESnã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
ASTLiteralgené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
CachedOnDiskReadBufferFromFileem cerca de 50 vezes. #96098 (Azat Khuzhin). HashTable::resizenã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
ReplicatedMergeTreecom 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
observeOperationsao trocar por hashing mais rápido e contadores sem bloqueio. #95962 (Miсhael Stetsyuk).
Correção de bugs
Todas as correções de bugs (clique para expandir)
Todas as correções de bugs (clique para expandir)
Correções de JOIN
- Corrigido o erro
INCOMPATIBLE_TYPE_OF_JOINno 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
USINGejoin_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_ERRORcausado 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 != NULLnofull_sorting_joinpara colunasLowCardinality(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 JOINtinha 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 retornavaILLEGAL_TYPE_OF_ARGUMENTem 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_BLOCKquando 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 tabelaMerge. #94021 (Alexander Gololobov). - Corrigida a conversão de tipo para supertipo durante a operação de JOIN do storage
Joincom a cláusulaUSING. #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
NULLna tabelaJoincom chaveNullable(String). #96002 (Alexey Milovidov). - Corrigido o erro
NOT_SUPPORTEDao usar o algoritmo de joindirectcom 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
ONde 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
arrayJoinproduzia linhas duplicadas quando usado com INNER JOIN e cláusula WHERE, devido ao push-down parcial de predicados, que empurrava incorretamente filtros contendoarrayJoinpara abaixo de um JOIN. #96989 (Alexey Milovidov). - Corrigido
LOGICAL_ERRORquandoarrayJoinna cláusulaWHEREfazia 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.*) eanalyzer_compatibility_join_using_top_level_identifierquando a colunaUSINGtinha tipos diferentes. #95808 (Vladimir Cherkasov). - Corrigido um erro lógico com
analyzer_compatibility_join_using_top_level_identifiere 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_optimizationpara funções de janela e múltiplos argumentos. #92376 (Raúl Marín). - Corrigida a inconsistência na formatação da AST de
arrayElementcom literal negado. #92293 (Pavel Kruglov). - Corrigido o
NOT INcom 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 columnna otimizaçãouse_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_lookupnã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/leadnão funcionavam com consultasremote()distribuídas. #93858 (Nihal Z. Miaji). - Corrigido bug na lógica de data skipping quando
not match(...)era usado emWHERE, o que causava resultados incorretos. #92726 (Nihal Z. Miaji). - Corrigido um bug na lógica de skipping de dados quando
not materialize(...)ounot CAST(...)era usado emWHERE, 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 geravaILLEGAL_COLUMNparahostName()ao combinar tabelas locais e remotas/Distributed. #93286 (Jinlin). - Corrigido erro
NO_SUCH_COLUMN_IN_TABLEno mecanismoMergeem tabelas com aliases. #92910 (Pavel Kruglov). - Corrigida a consulta
SELECTcom predicado em várias colunas usando índices de omissão com filtro de Bloom e condiçõesOReNOT, 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_offsetquando 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/OFFSETnegativo era usado em consultas distribuídas. #95357 (Nihal Z. Miaji). - Foi corrigido um erro lógico em alguns casos em que
LIMIT/OFFSETfracionário era usado em consultas distribuídas. #96475 (Nihal Z. Miaji). - Corrigido o problema em que a função
INretornava resultados incorretos com valoresNULLquandotransform_null_inestava ativado. #95674 (Nihal Z. Miaji). - Corrigido o problema em que
IN (col)com uma única referência de coluna falhava com o erroUNSUPPORTED_METHOD. #97646 (Alexey Milovidov). - Corrigida, em
optimize_syntax_fuse_functions, a reescrita desum/count/avgparasumCount()quando o argumento agregado eraLowCardinality(Nullable). #96239 (Nihal Z. Miaji). - Corrigida a poda incorreta de partições para as funções
not INenot has. #96241 (Nihal Z. Miaji). - Corrigido erro no filtro prewhere causado por expressões lambda no prewhere. #95395 (Xiaozhe Yu).
- Corrigido o
LOGICAL_ERRORno 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
SETTINGSpor subconsulta não era aplicado a funções de tabela comofileem 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_ARGUMENTSao consultar tabelas com expressões lambda em colunas ALIAS por meio da função de tabelamerge()com o analisador ativado. #97551 (Alexey Milovidov). - Corrigido o problema em que
EXCEPT ALLeINTERSECT ALLignoravam a multiplicidade das linhas e se comportavam como suas contrapartesDISTINCT. #96876 (Alexey Milovidov). - Corrigida falha de asserção em
WindowTransformcom um valor alto de deslocamentoPRECEDING. #96026 (Alexey Milovidov). - Corrigida a exceção ao usar funções de janela com
group_by_use_nulls = 1eCUBE/ROLLUP/GROUPING SETS. #96878 (Alexey Milovidov). - Corrigida a interação de
GROUPING SETS,group_by_use_nullseTuplecomLowCardinality, que produzia uma estrutura de bloco inesperada. #96358 (Alexey Milovidov). - Erro lógico corrigido durante
GROUP BY ... WITH ROLLUP/CUBEquando as chaves incluíamLowCardinality(Nullable(...))dentro deNullable(Tuple(...)). #97647 (Alexey Milovidov). - Falha de asserção corrigida em
IfTransformStringsToEnumPassquandoifoutransformretornavaNullable(String). #97002 (Alexey Milovidov). - Corrigido
ACCESS_DENIEDpara usuários sem a permissãoCREATE TEMPORARY TABLEquandooptimize_inverse_dictionary_lookupreescreveu os predicadosdictGet(...). #97484 (Nihal Z. Miaji). - Corrigida a incompatibilidade de tipo da função
ifentreUInt64eInt32em 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
DateTimeemDateTime64(por exemplo, emCASE/if/multiIfcom tiposDateTimemistos). #96879 (Alexey Milovidov). - Corrigido o uso de um valor não inicializado em
formatDateTimecom formatadores de largura não fixa. #96133 (Alexey Milovidov). - Corrigido
std::terminatenoindexOfAssumeSortedao 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_ERRORao usar colunas com índice de texto com a cláusulaQUALIFY. #97313 (Alexey Milovidov). - Corrigido um possível travamento quando a cláusula
WHEREtinha mais de 32 expressões comAND/OR. #97698 (Shankar Iyer). - Corrigida incompatibilidade na estrutura do bloco na otimização
removeUnusedColumnsao usarindexHintcom expansão de estrela em tabelas comFINAL. #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.warningsnã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 transactionduranteATTACH AS REPLICATED. #91772 (Shaohua Wang). - Corrigido um possível erro
FILE_DOESNT_EXISTapós a mutação de uma coluna esparsa comratio_of_defaults_for_sparse_serialization=0.0. #92860 (Pavel Kruglov). - Corrigido um possível erro
FILE_DOESNT_EXISTapós uma mutação em coluna esparsa quandoratio_of_defaults_for_sparse_serializationfoi alterado para1.0por 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_BLOCKao 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_ERRORao restaurarReplicatedMergeTreecom 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
LowCardinalitynos resultados das expressões SET, quando necessário, durante a agregação TTL. #92971 (Seva Potapov). - Corrigido o erro
Cannot add action to empty ExpressionActionsChainemALTER TABLE REWRITE PARTS. #92754 (Azat Khuzhin). - Corrigida a substituição de parâmetro de consulta nos métodos de autenticação de
CREATE USERquando usado comON 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 COLUMNcom í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 dadosReplicated. #92418 (Kseniia Sumarokova). - Corrigida uma race condition entre
REPLACE PARTITIONe 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 PARTITIONe mutações em segundo plano, que poderia fazer dados antigos reaparecerem. #97105 (Alexey Milovidov). - Corrigidas mutações travadas quando
PartCheckThreadreenfileirava umGET_PARTpara uma parte já modificada por mutação. #97162 (Alexey Milovidov). - Corrigido o problema em que
ALTER TABLE DROP COLUMNfalhava 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_projectionapós a merge de TTL, quando todas as linhas eram filtradas. #96703 (Raquel Barbadillo). - Corrigida a combinação de
use_const_adaptive_granularityeindex_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 offsetsao ler tabelas com granularidade de índice não adaptativa usandoORDER 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 emDatabaseReplicated. #97276 (Alexey Milovidov). - Corrigida a exceção
assert_castao gerar estatísticas de coluna apósALTER TABLE MODIFY COLUMNalterar 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 messageao aguardar um DDL distribuído e remover simultaneamente o banco de dados Replicated. #95664 (Alexander Tokmakov). - Corrigido um erro lógico em
KeyConditionquando uma tabela tinha uma chave primária Nullable e a consulta usavacoalescecom 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
tupleElementa arrays de JSON. #95647 (Pavel Kruglov). - Corrigida a execução de
tupleElementem JSON com caminhos aninhados, que retornava resultados incorretos. #95907 (Pavel Kruglov). - Corrigido o problema em que
tupleElementgerava 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 prefixopath(inclusive chaves comopathpath), 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_objecta 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_discriminatorscausado por uma otimização incorreta de filtragem in-place para colunas Variant. #96410 (Alexey Milovidov). - Corrigido um travamento em
ifNullcom argumentoVariantusado emGROUP BY. #96790 (Alexey Milovidov). - Corrigido um erro lógico em
FunctionVariantAdaptorcom funções que exigem argumentos constantes, comoarrayROCAUC. #97116 (Bharat Nallan). - Corrigido
LOGICAL_ERRORemFunctionVariantAdaptorquando uma função retornava o tipoNothing. #97213 (Alexey Milovidov). - Corrigida uma exceção lógica ao comparar NULL com uma coluna Variant contendo tipos LowCardinality. #97379 (Alexey Milovidov).
- Corrigido
LOGICAL_ERRORemconcatquando um argumento continha o tipoVariantcomLowCardinalityinternamente. #97654 (Alexey Milovidov). - Corrigidos resultados incorretos ao converter colunas
LowCardinalityparaNullable. #96483 (Nihal Z. Miaji). - Tipos
LowCardinality Nullablepassaram a ser tratados corretamente emCASTquandocast_keep_nullableestava habilitado. #95747 (Alexey Milovidov). - Corrigida a exceção
ColumnNullable is not compatible with originalao aplicar CAST a tipos aninhados complexos. #96924 (Alexey Milovidov). - Corrigido
LOGICAL_ERRORao usarisNull/isNotNullnas subcolunas de tiposNullable(Tuple(... Nullable(T) ...)). #97582 (Alexey Milovidov). - Corrigido o
LOGICAL_ERRORna conversão de Array paraQBit. #97413 (Alexey Milovidov). - Corrigido
LOGICAL_ERRORao ler em conjunto a coluna esparsa e sua subcoluna. #97515 (Pavel Kruglov). - Corrigido o
LOGICAL_ERRORao ler a subcoluna.sizede umNullable(String)esparso em uma Tuple com PREWHERE. #97264 (Alexey Milovidov). - Corrigida uma falha de asserção em
SeteMergeTreeIndexSetao processar colunas com subcolunas internas esparsas. #97493 (Alexey Milovidov). - Corrigido um possível erro
SIZES_OF_COLUMNS_DOESNT_MATCHdurante a ordenação de uma coluna de tupla vazia. #92520 (Pavel Kruglov). - Corrigidos bugs na decodificação de
DELTA_BYTE_ARRAYno 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
prewhereera usada em outro lugar na consulta. #90635 (Max Kainov). - Corrigido
LOGICAL_ERRORno 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
ProtobufListem arquivos vazios, que gerava registros fantasma em tabelas vazias. #96007 (Alexey Milovidov). - Corrigida uma regressão com o codec
Gorillaquando 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,UUIDe outros tipos. #96017 (Alexey Milovidov). - Corrigido o escape incorreto de valores
FixedStringem consultas ao SQLite e ao PostgreSQL. #96019 (Alexey Milovidov). - Adicionada a configuração
input_format_numbers_enum_on_conversion_errorpara 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,mapContainsKeyemapContainsValue, 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_v1com comprimento de ngram > 8 que geravam uma exceção. #92672 (Robert Schulze). - Corrigido o índice
ngram_bfem dados não UTF-8, que levava à leitura de memória não inicializada. #93663 (Alexey Milovidov). - Corrigido o problema
stack-use-after-scopeno í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_keydesabilitado 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
INnoWHERE. #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
- Corrigido travamento em cluster de nó único ao ler do Iceberg no modo split-by-buckets. #91553 (Konstantin Vedernikov).
- Corrigida a tupla de ORDER BY no Iceberg. #93225 (Konstantin Vedernikov).
- Corrigido o suporte a credenciais fornecidas pelo Azure ADLS Gen2 no DataLakeCatalog — fazer o parsing das chaves
adls.sas-token.*de catálogos REST do Iceberg e corrigir o parsing de URLs ABFSS. #93477 (Karun Anantharaman). - Substituído
DateporDate32no Iceberg. #95322 (Konstantin Vedernikov). - Corrigido travamento em ORDER BY no Iceberg. #96484 (Konstantin Vedernikov).
- Corrigido o particionamento do Iceberg. #96620 (Konstantin Vedernikov).
- Corrigidos limites incorretos para arquivos de dados quando a referência de exclusão por posição era NULL nas entradas do manifesto do Iceberg. #96061 (Daniil Ivanik).
- Foram adicionadas mais verificações para validar a configuração do arquivo de metadados raiz no Iceberg. #96754 (Daniil Ivanik).
- As credenciais não são mais registradas em logs nos catálogos Iceberg. #96831 (Konstantin Vedernikov).
- Corrigida a compactação de dados particionados do Delta Lake. #95773 (Kseniia Sumarokova).
- Corrigido problema no catálogo de datalake RESTful com
auth_headerinválido, que faziasystem.tablesfalhar. #96680 (Han Fei).
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
ReadBufferFromS3que 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
copyS3Filepara multipart_tags. #97227 (Azat Khuzhin). - A execução de uma mutação
ALTER UPDATEinvá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
- Corrigido o erro
Failed to set file processing within 100 retriesno modo ordenado do S3Queue (agora é apenas um aviso). #92814 (Kseniia Sumarokova). - Corrigido um bug na configuração do S3Queue
s3queue_migrate_old_metadata_to_buckets. #93232 (Kseniia Sumarokova). - Metadados dos motores S3Queue/AzureQueue corrigidos. #90498 (Kseniia Sumarokova).
- Corrigida uma condição de corrida no armazenamento S3Queue/AzureQueue. #95385 (Kseniia Sumarokova).
- Corrigida a desduplicação no streaming do engine S3Queue/AzureQueue. #95467 (Kseniia Sumarokova).
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 COLUMNSao usar o mecanismo de tabelamerge. #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
redisagora é 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 objetosplain_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
StorageKeeperMapdevido a um use-after-free. #97336 (Alexey Milovidov).
Correções de travamentos e estabilidade
- Corrigido travamento causado pela leitura de uma
Connectiondesconectada. #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
tokensera 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 cancellationemestimateCompressionRatio(). #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
TraceSendernão estar sendo atualizado, o que causava flushes intercalados de threads diferentes. #93966 (Miсhael Stetsyuk). - Foram armazenados ponteiros compartilhados no
QueryPipelinepara garantir que os objetosIStoragenão sejam destruídos enquanto oPipelineExecutorestiver 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 WORKLOADquando 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
ProcessListcausado 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_timealto. #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
clearCachescausado pela destruição prematura de snapshots em cache do armazenamento. #96995 (Alexey Milovidov). - Corrigido o
heap-use-after-freeemCREATE TABLEcom restrições. #96669 (Nikita Taranov). - Corrigido um possível use-after-free em
StorageKafka2. #97520 (Bharat Nallan). - Corrigida uma corrida de dados em
shutdown_callednoDatabaseMaterializedPostgreSQL. #97554 (Alexey Milovidov). - Corrigida uma condição de corrida no carregamento paralelo de um dicionário
HASHEDcom 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::readBinaryquando 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
MaterializedPostgreSQLsedropReplicationSlotlanç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 DATABASEpara o banco de dados Backup. #92541 (Azat Khuzhin).
Outras correções de bugs
- Corrigido o tratamento de array vazio em
handleAllTokensnas funçõeshasAllTokensehasAnyTokens. #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_dateemsystem.asynchronous_metric_log. #95947 (Raúl Marín). - Corrigido
system.functions, que mostrava uma string vazia em vez decategories = 'Internal'para funções internas. #97315 (Robert Schulze). - Corrigido um possível erro de lógica no dicionário
ip_triequando 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
filterPartsByVirtualColumnspara predicados que sempre retornam falso. #97620 (Bharat Nallan). - Corrigido o problema em que
ColumnConstnão era materializado antes do squashing. #97019 (Hasyimi Bahrudin).