Alterações incompatíveis com versões anteriores
Alterações em JSON e formatos de dados
- Desativar, por padrão, a colocação de aspas em inteiros de 64 bits nos formatos JSON. #74079 (Pavel Kruglov).
- Inferir
Array(Dynamic)em vez deTuplesem nome para arrays com valores de tipos diferentes em JSON. Para usar o comportamento anterior, desative a configuraçãoinput_format_json_infer_array_of_dynamic_from_array_of_different_types. #80859 (Pavel Kruglov). - Gravar valores do tipo
EnumcomoBYTE_ARRAYcom tipo lógicoENUMno formato de saída Parquet por padrão. #84169 (Pavel Kruglov).
Armazenamento e particionamento
- Adicionado suporte à gravação no estilo de partição do Hive e refatorada a implementação de leituras (as colunas de partição do Hive não são mais virtuais). #76802 (Arthur Passos).
- Habilita por padrão a configuração do MergeTree
write_marks_for_substreams_in_compact_parts. Isso melhora significativamente o desempenho da leitura de subcolunas em partes Compact recém-criadas. Servidores com versão inferior a 25.5 não conseguirão ler as novas partes Compact. #84171 (Pavel Kruglov). - Proíbe
RENAME COLUMNouDROP COLUMNem colunas explicitamente listadas para soma no SummingMergeTree. Fecha #81836. #82821 (Alexey Milovidov).
Melhorias nas funções
- Introduz um novo argumento
unexpected_quoting_character_strategyna funçãoextractKeyValuePairs, que controla o que acontece quando umquoting_characteré encontrado inesperadamente. Para mais detalhes, consulte a documentação deextractKeyValuePairs. #80657 (Arthur Passos). - Anteriormente, a função
countMatchesparava de contar na primeira correspondência vazia, mesmo que o padrão a aceitasse. Para contornar esse problema,countMatchesagora continua a execução avançando um único caractere quando ocorre uma correspondência vazia. Usuários que quiserem manter o comportamento antigo podem ativar a configuraçãocount_matches_stop_at_empty_match. #81676 (Elmi Ahmadov).
Melhorias em tipos de dados
- Melhora a precisão da conversão de
DecimalparaFloat32. Implementa a conversão deDecimalparaBFloat16. Resolve #82660. #82823 (Alexey Milovidov).
Desempenho e gerenciamento de recursos
- Anteriormente, consultas
BACKUP, merges e mutações não usavam throttlers globais do servidor para tráfego local (max_local_read_bandwidth_for_serveremax_local_write_bandwidth_for_server) e remoto (max_remote_read_network_bandwidth_for_serveremax_remote_write_network_bandwidth_for_server); em vez disso, eram limitadas apenas por configurações dedicadas do servidor (max_backup_bandwidth_for_server,max_mutations_bandwidth_for_serveremax_merges_bandwidth_for_server). Agora, usam os dois tipos de throttlers simultaneamente. #81753 (Sergei Trifonov). - Foi adicionada uma nova configuração
cluster_function_process_archive_on_multiple_nodes, que aumenta o desempenho do processamento de arquivos em funções de cluster quando definida como true (padrão). Ela deve ser definida comofalsepor compatibilidade e para evitar erros durante a atualização para 25.7+ caso você esteja usando funções de cluster com arquivos em versões anteriores. #82355 (Kseniia Sumarokova). - O valor padrão anterior de
concurrent_threads_schedulereraround_robin, o que se mostrou injusto na presença de um grande número de consultas de thread única (por exemplo,INSERTs). Essa alteração tornafair_round_robin, uma alternativa mais segura de scheduler, o novo padrão. #84747 (Sergei Trifonov). - A materialização tardia é habilitada apenas com o analyzer, para evitar a necessidade de manutenção sem o analyzer, o que pode causar alguns problemas (por exemplo, ao usar
indexHint()em condições). #83791 (Igor Nikonov).
Esquema e sintaxe SQL
- Proibir a criação de uma tabela sem colunas nas quais seja possível inserir dados. #81835 (Pervakov Grigorii).
- Exigir backticks em torno de identificadores com pontos em expressões DEFAULT para evitar que sejam interpretados como identificadores compostos. #83162 (Pervakov Grigorii).
- Adicionar suporte à sintaxe Heredoc no estilo do PostgreSQL:
$tag$ string contents... $tag$, também conhecida como literais de string delimitados por cifrões. Em versões anteriores, havia menos restrições para tags: elas podiam conter caracteres arbitrários, incluindo pontuação e espaços em branco. Isso introduz ambiguidade na análise sintática com identificadores que também podem começar com o caractere cifrão. Ao mesmo tempo, o PostgreSQL permite apenas caracteres de palavra em tags. Para resolver o problema, agora restringimos as tags de Heredoc a conter apenas caracteres de palavra. Fecha #84731. #84846 (Alexey Milovidov).
Segurança e permissões
SYSTEM RESTART REPLICASreiniciará apenas as réplicas nos bancos de dados em que você tiver permissão paraSHOW TABLES. Antes, a consulta fazia com que tabelas no banco de dados Lazy fossem ativadas mesmo sem acesso a esse banco de dados, enquanto essas tabelas estavam sendo removidas de forma concorrente. #83321 (Alexey Milovidov).- As funções
azureBlobStorage,deltaLakeAzureeicebergAzureforam atualizadas para validar corretamente as permissões deAZURE. Todas as funções com variante para cluster (funções-Cluster) agora verificam as permissões em relação às correspondentes funções sem cluster. Para evitar erros de permissão, certifique-se de que os usuários que invocam as funções-Clustertenham os privilégios apropriados (por exemplo,GRANT S3 ON *.* TO user). Além disso, as funçõesicebergLocaledeltaLakeLocalagora também aplicam verificações da permissãoFILE. #84938 ([Nikita Mikhaylov](https://github.com/nikitamikhaylov
Novos recursos
Tipos de dados
- Adicionados novos tipos de dados:
Time([H]HH:MM:SS)eTime64([H]HH:MM:SS[.fractional]), além de algumas funções básicas de conversão de tipo e funções para interagir com outros tipos de dados. Adicionadas configurações de compatibilidade com a função legadaToTime. #81217 (Yarik Briukhovetskyi).
Funções
- Adiciona
NumericIndexedVector, uma nova estrutura de dados vetorial com suporte a compressão roaring-bitmap com fatiamento de bits, juntamente com mais de 20 funções para construção, análise e aritmética ponto a ponto. Pode reduzir o armazenamento e acelerar junções, filtros e agregações em dados esparsos. Implementa #70582 e o artigo “Large-Scale Metric Computation in Online Controlled Experiment Platform”, de T. Xiong e Y. Wang, da VLDB 2024. #74193 (FriendLey). - Adiciona funções financeiras:
financialInternalRateOfReturnExtended(XIRR),financialInternalRateOfReturn(IRR),financialNetPresentValueExtended(XNPV),financialNetPresentValue(NPV). #81599 (Joanna Hulboj). - Adicionadas as funções geoespaciais
polygonIntersectsCartesianepolygonIntersectsSphericalpara verificar se dois polígonos se intersectam. #81882 (Paul Lamb). - Suporte para as funções de janela
lagelead. Fecha #9887. #82108 (Dmitry Novik). - Adicionadas as funções
colorSRGBToOkLCHecolorOkLCHToSRGBpara converter cores entre os espaços de cor sRGB e OkLCH. #83679 (Fgrtue). - Agora você pode fazer consultas de chaves JSON sem diferenciar maiúsculas de minúsculas usando
JSONExtractCaseInsensitive(e outras variantes deJSONExtract). #83770 (Alistair Evans). - Adicionada a nova função
nowInBlock64. #84178 (Halersson Paris). - Adiciona a função
dateTimeToUUIDv7para converter um valor DateTime em UUIDv7. Exemplo de uso:SELECT dateTimeToUUIDv7(toDateTime('2025-08-15 18:57:56'))retorna0198af18-8320-7a7d-abd3-358db23b9d5c. #84319 (samradovich). - Adiciona as funções de agregação
timeSeriesDerivToGridetimeSeriesPredictLinearToGridpara reamostrar dados em uma grade de tempo definida pelo timestamp inicial, timestamp final e passo especificados; elas calculamderivepredict_linearno estilo do PromQL, respectivamente. #84328 (Stephen Chi). - Adicionadas as funções
timeSeriesRangeetimeSeriesFromGrid. #85435 (Vitaly Baranov).
Tabelas de sistema
- Adicionada a tabela
system.dead_letter_queuepara reter mensagens de entrada com erro de motores como o Kafka. #68873 (Ilya Golshtein). - Adicionada a tabela de sistema
system.zookeeper_connection_logpara armazenar informações históricas sobre conexões com o ZooKeeper. #79494 (János Benjamin Antal). - Adicionada uma nova tabela de sistema
system.codecspara inspecionar os codecs disponíveis. (issue #81525). #81600 (Jimmy Aguilar Mena). - Introduzida a tabela
system.completions. Fecha #81889. #83833 (|2ustam).
Iceberg e DeltaLake
- Suporte a tipos complexos na evolução de schema do Iceberg. #73714 (scanhex12).
- Introdução de gravações no Iceberg para consultas
insert. #82692 (scanhex12). - Suporte a exclusões posicionais para o motor de tabela Iceberg. #83094 (Daniil Ivanik).
- Leitura de arquivos de dados do Iceberg por IDs de campo. Fecha #83065. #83653 (scanhex12).
- Gravações no Iceberg para CREATE. Fecha #83927. #83983 (scanhex12).
- Gravações para catálogos Glue. #84136 (scanhex12).
- Gravações para catálogos REST do Iceberg. #84684 (scanhex12).
- Mescla de todos os position delete files do Iceberg em arquivos de dados. Isso reduzirá a quantidade e o tamanho dos arquivos Parquet no armazenamento do Iceberg. Syntax:
OPTIMIZE TABLE table_name. #85250 (scanhex12). - Suporte a
DROP TABLEpara Iceberg (remoção dos catálogos REST/Glue + remoção dos metadados da tabela). #85395 (scanhex12). - Suporte a mutações
ALTER DELETEpara Iceberg no formato merge-on-read. #85549 (scanhex12). - Suporte a gravações no DeltaLake. Fecha #79603. #85564 (Kseniia Sumarokova).
- Gravação de mais estatísticas do Iceberg (tamanhos de colunas, limites inferior e superior) nos metadados (manifest entries) para pruning min-max. #85746 (scanhex12).
- Suporte a adicionar/remover/modificar colunas no Iceberg para tipos simples. #85769 (scanhex12).
MergeTree e armazenamento
- Todas as tabelas agora oferecem suporte à coluna virtual
_table, e não apenas as tabelas do tipo Merge. #63665 (Xiaozhe Yu). - Adiciona o SZ3 como um codec de compressão com perdas, mas com erro limitado, para colunas do tipo
Float32eFloat64. #67161 (scanhex12). - Adicionado suporte a atualizações leves para tabelas da família
MergeTree. As atualizações leves podem ser usadas com uma nova sintaxe:UPDATE <table> SET col1 = val1, col2 = val2, ... WHERE <condition>. Também foi adicionada a implementação de exclusões leves por meio de atualizações leves, que podem ser habilitadas definindolightweight_delete_mode = 'lightweight_update'. #82004 (Anton Popov). - Adicionado suporte à coluna virtual
_part_granule_offsetem tabelas da família MergeTree. Essa coluna indica o índice de base zero do grânulo/marca ao qual cada linha pertence dentro de sua parte de dados. Isso resolve #79572. #82341 (Amos Bird).
Suporte a protocolos e clientes
- Implementado suporte ao protocolo ArrowFlight RPC com a adição do motor de tabela
arrowflight. #74184 (zakr600). - Adicionado suporte ao comando
COPYdo protocolo PostgreSQL. #74344 (scanhex12). - Adicionado suporte ao cliente C# para o protocolo MySQL. Fecha #83992. #84397 (scanhex12).
- Passa a exigir conexão segura para
mysql_portepostgresql_port. #82962 (Shaohua Wang).
Recursos de SQL e de consulta
- Suporte a
DESCRIBE SELECT, além deDESCRIBE (SELECT ...). #82947 (Yarik Briukhovetskyi). - Suporte à escrita de
USE DATABASE {name}. #81307 (Yarik Briukhovetskyi). - Foi implementada a leitura de projeções para réplicas paralelas. Uma nova configuração
parallel_replicas_support_projectionfoi adicionada para controlar se o suporte a projeções está habilitado. Para simplificar a implementação, o suporte a projeções só é habilitado quandoparallel_replicas_local_planestá ativo. #82807 (zoomxi).
Formatos
- Adicionada a configuração
format_schema_source, que define a origem deformat_schema. #80874 (Tuan Pham Anh). - Adicionado
Hashcomo novo formato de saída. Ele calcula um único valor de hash para todas as colunas e linhas do resultado. Isso é útil para calcular uma “impressão digital” do resultado, por exemplo, em casos de uso nos quais a transferência de dados é um gargalo. Exemplo:SELECT arrayJoin(['abc', 'def']), 42 FORMAT Hashretornae5f9e676db098fdb9530d2059d8c23ef. #84607 (Robert Schulze).
Configuração do servidor e gerenciamento de workloads
- A configuração do servidor
cpu_slot_preemptionhabilita o agendamento preemptivo de CPU para workloads e garante a alocação max-min justa do tempo de CPU entre workloads. Foram adicionadas novas configurações de workload para limitação de CPU:max_cpus,max_cpu_shareemax_burst_cpu_seconds. #80879 (Sergei Trifonov). - A configuração de workload
max_waiting_queriesagora é compatível. Ela pode ser usada para limitar o tamanho da fila de consultas. Se o limite for atingido, todas as consultas subsequentes serão encerradas com o erroSERVER_OVERLOADED. #81250 (Oleg Doronin). - Encerra a conexão TCP após o número configurado de consultas ou ao atingir o limite de tempo configurado. Resolve #68000. #81472 (Kenny Sun).
armazenamento em Cloud
- Adiciona
extra_credentialsaoAzureBlobStoragepara autenticação comclient_idetenant_id. #84235 (Pablo Marcos).
Keeper
- Adiciona suporte à configuração de watches arbitrários em consultas Multi do Keeper. #84964 (Mikhail Artemenko).
- Adiciona suporte a métricas parcialmente agregadas. #85328 (Mikhail Artemenko).
Recursos experimentais
Motores de tabela e funções de tabela
- Adicionado o motor de tabela Ytsaurus e a função de tabela Ytsaurus. #77606 (MikhailBurdukov).
Melhorias no índice de texto
- Adicionadas as funções
searchAnyesearchAll, que são ferramentas de uso geral para pesquisar índices de texto. #80641 (Elmi Ahmadov). - O índice de texto agora oferece suporte ao tokenizer
string. #81752 (Elmi Ahmadov). - O valor padrão da granularidade dos índices
textfoi alterado para 64. Isso melhora o desempenho esperado da consulta de teste média em benchmarks internos. #82162 (Jimmy Aguilar Mena). - O bitmap de 256 bits armazena em ordem os rótulos de saída de um estado, mas os estados de saída são salvos em disco na ordem em que aparecem na tabela hash. Portanto, um rótulo pode apontar para o próximo estado errado durante a leitura em disco. #82783 (Elmi Ahmadov).
- Atualmente, a árvore FST é salva em disco sem compressão. Isso pode causar desempenho lento ou maior consumo de banda de E/S tanto na gravação quanto na leitura em disco. #83093 (Elmi Ahmadov).
Atualizações na maturidade dos recursos
- O catálogo passou para beta. #85848 (Melvyn Peignon).
- As atualizações leves passaram do status experimental para beta. #85952 (Anton Popov).
Melhorias de desempenho
Execução de consultas e agregação
- Otimização trivial para o combinador de aggregate function
-If. #78454 (李扬). - Adicionada uma nova lógica (controlada pelo setting
enable_producing_buckets_out_of_order_in_aggregation, ativado por padrão) que permite enviar alguns buckets fora de ordem durante a agregação com uso eficiente de memória. Quando alguns buckets de agregação levam significativamente mais tempo para mesclar do que outros, isso melhora o desempenho ao permitir que o iniciador, nesse meio-tempo, mescle buckets com IDs mais altos. A desvantagem é um uso de memória potencialmente maior (não deve ser significativo). #80179 (Nikita Taranov). - O pipeline após a etapa
TOTALSagora é multithread. #80331 (UnamedRus). - Quando a consulta de agregação contém apenas uma função
COUNT()em uma colunaNOT NULL, a lógica de agregação é totalmente incorporada durante a sondagem da tabela hash. Isso evita alocar e manter qualquer estado de agregação, reduzindo significativamente o uso de memória e a sobrecarga de CPU. Isso resolve parcialmente #81982. #82104 (Amos Bird). - Calcular a chave serializada de forma colunar ao agrupar por várias colunas String ou numéricas. #83884 (李扬).
- Implementado
addManyDefaultspara combinadores-If. #83870 (Raúl Marín).
Otimizações de JOIN
- Adicionada a nova configuração
min_joined_block_size_rows(análoga amin_joined_block_size_bytes; o padrão é 65409) para controlar o tamanho mínimo do bloco (em linhas) para os blocos de entrada e saída do JOIN (se o algoritmo de join oferecer suporte a isso). Blocos pequenos serão agrupados. #81886 (Nikita Taranov). - O desempenho de
HashJoinfoi otimizado com a remoção do loop adicional sobre hash maps no caso típico de haver apenas uma coluna de chave; além disso, as verificações denull_mapejoin_masksão eliminadas quando são sempretrue/false. #82308 (Nikita Taranov). - As otimizações para
null_mapeJoinMaskde #82308 foram aplicadas ao caso de JOIN com múltiplos disjuntos. Além disso, a estrutura de dadosKnownRowsHolderfoi otimizada. #83041 (Nikita Taranov). - Um
std::vector<std::atomic_bool>simples é usado para flags de join, evitando o cálculo de hash a cada acesso às flags. #83043 (Nikita Taranov). max_joined_block_rowsé processado fora do loop principal do hash JOIN. Desempenho ligeiramente melhor para ALL JOIN. #83216 (Nikolai Kochetov).- Não pré-alocar memória antecipadamente para as colunas de resultado quando
HashJoinusa o modo de saídalazy. Isso é subótimo, especialmente quando o número de correspondências é baixo. Além disso, como a quantidade exata de correspondências é conhecida após a conclusão da junção, a pré-alocação pode ser feita com mais precisão. #83304 (Nikita Taranov). - Todos os JOINs
LEFT/INNERserão convertidos automaticamente paraRightAnyse o lado direito for funcionalmente determinado pelas colunas da chave de junção (todas as linhas têm valores únicos para a chave de junção). #84010 (Nikita Taranov). - Melhorado o desempenho da aplicação de patch parts no modo
Join. #85040 (Anton Popov).
Melhorias em consultas distribuídas
- Foi adicionada uma opção para transferir a (des)compressão e a (des)serialização de blocos para threads do pipeline, em vez de usar uma única thread associada a uma conexão de rede. Controlada pela configuração
enable_parallel_blocks_marshalling. Isso deve acelerar consultas distribuídas que transferem volumes significativos de dados entre o iniciador e nós remotos. #78694 (Nikita Taranov). - O
INSERT SELECTdistribuído em paralelo fica habilitado por padrão no modo em que oINSERT SELECTé executado em cada shard de forma independente; consulte a configuraçãoparallel_distributed_insert_select. #80425 (Igor Nikonov). - Logs e eventos de perfil passam a ser comprimidos no protocolo nativo. Em clusters com mais de 100 réplicas, eventos de perfil não comprimidos consomem de 1 a 10 MB/s, e a barra de progresso fica lenta em conexões de Internet lentas. Isso fecha #82533. #82535 (Alexey Milovidov).
- O
INSERT SELECTdistribuído em paralelo fica habilitado por padrão no modo em que INSERT SELECT é executado em cada shard de forma independente; consulte a configuraçãoparallel_distributed_insert_select. #83040 (Igor Nikonov). - Corrigido o cálculo do tamanho mínimo da tarefa para réplicas paralelas. #84752 (Nikita Taranov).
Melhorias nos índices
- Consultas de busca vetorial que usam um índice de similaridade vetorial passam a ser concluídas com menor latência, devido à redução das leituras no armazenamento e do uso de CPU. #79103 (Shankar Iyer).
- Passa a respeitar
merge_tree_min_{rows,bytes}_for_seekemfilterPartsByQueryConditionCache, alinhando-o a outros métodos que filtram por índices. #80312 (李扬). - Processa primeiro os índices min-max de maior granularidade. Fecha #75381. #83798 (Maruth Goyal).
- O índice com filtro de Bloom agora é usado para condições como
has([c1, c2, ...], column), em quecolumnnão é do tipoArray. Isso melhora o desempenho dessas consultas, tornando-as tão eficientes quanto o operadorIN. #83945 (Doron David). - Processa os índices em ordem crescente de tamanho de arquivo. A ordenação resultante dos índices prioriza os índices minmax e vetoriais (devido, respectivamente, à simplicidade e à seletividade) e, depois, os índices menores. Entre os índices minmax/vetoriais, os menores também são preferidos. #84094 (Maruth Goyal).
- Anteriormente, os dados do índice de texto eram separados em vários segmentos (o tamanho padrão de cada segmento era 256 MiB). Isso pode reduzir o consumo de memória durante a compilação do índice de texto; no entanto, aumenta o espaço necessário em disco e o tempo de resposta da consulta. #84590 (Elmi Ahmadov).
Otimizações de subconsultas
- Otimize o plano gerado para subconsultas correlacionadas removendo operações
JOINredundantes com o uso de classes de equivalência. Se houver expressões equivalentes para todas as colunas correlacionadas,CROSS JOINnão será gerado se a configuraçãoquery_plan_correlated_subqueries_use_substitutionestiver habilitada. #82435 (Dmitry Novik). - Leia apenas as colunas necessárias na subconsulta correlacionada quando ela for um argumento da função
EXISTS. #82443 (Dmitry Novik).
Melhorias no Azure Blob Storage
- O motor de tabela
azureBlobStorageagora armazena em cache e reutiliza tokens de autenticação de identidade gerenciada sempre que possível para evitar limitação de taxa. #79860 (Nick Blakely). - O cliente HTTP curl foi substituído pelo cliente HTTP Poco para Azure Blob Storage. Foram introduzidas várias configurações para esses clientes, espelhando configurações do S3. Também foram introduzidos timeouts de conexão agressivos tanto para Azure quanto para S3. A introspecção dos profile events e das métricas do Azure foi aprimorada. O novo cliente vem habilitado por padrão e oferece latências muito melhores para consultas a frio sobre o Azure Blob Storage. É possível voltar ao cliente antigo
Curldefinindoazure_sdk_use_native_client=false. #83294 (alesapin).
Melhorias no mecanismo de armazenamento
- Corrige o filtro por chave nos armazenamentos Redis e KeeperMap. #81833 (Pervakov Grigorii).
ATTACH PARTITIONnão faz mais com que todos os caches sejam descartados. #82377 (Alexey Milovidov).- Evita manter o bloqueio durante a criação dos dados de snapshot do armazenamento, para reduzir a contenção de bloqueio sob alta carga concorrente. #83510 (Duc Canh Le).
- A remoção de partes temporárias pode levar algum tempo (especialmente com S3) e, atualmente, isso é feito mantendo um bloqueio global em
MergeTreeBackgroundExecutor. Quando é necessário reiniciar todas as tabelas devido à perda de conexão e aguardar a conclusão das tarefas em segundo plano, as tabelas podem até ficar em modo readonly por uma hora. Mas parece que esse bloqueio não é necessário para chamarcancel. #84311 (Alexander Tokmakov).
Melhorias de formato
- Nova implementação do leitor de Parquet. Em geral, é mais rápida e oferece suporte a pushdown de filtro em nível de página e ao
PREWHERE. Atualmente, está em fase experimental. Use a configuraçãoinput_format_parquet_use_native_reader_v3para habilitá-la. #82789 (Michael Kolupaev). - Desempenho do formato de entrada ProtobufSingle aprimorado com a reutilização do serializador quando não ocorrem erros de parsing. #83613 (Eduard Karacharov).
Otimizações de tipos de dados e serialização
- Melhorou significativamente o desempenho da leitura de subcolunas de
JSONa partir de dados compartilhados no MergeTree com a implementação de novas serializações para dados compartilhados deJSONno MergeTree. #83777 (Pavel Kruglov). - Otimizou a desserialização de strings ao simplificar o código. Fecha #38564. #84561 (Alexey Milovidov).
Melhorias no pipeline e na execução
- Minimizar a cópia de memória nos cabeçalhos de porta durante a construção do pipeline. PR original de heymind. #83381 (Raúl Marín).
- Melhorar o desempenho da construção do pipeline. #83631 (Raúl Marín).
- Otimizar MergeTreeReadersChain::getSampleBlock. #83875 (Raúl Marín).
- Otimizar a materialização de constantes nos casos em que ela é feita apenas para retornar uma única linha. #85071 (Alexey Milovidov).
Otimizações de memória e recursos
- Ajusta algumas configurações do jemalloc para melhorar o desempenho. #81807 (Antonio Andelic).
- Adiciona alinhamento ao Counter de ProfileEvents para reduzir o falso compartilhamento. #82697 (Jiebin Sun).
- Reduz chamadas desnecessárias a memcpy em CompressedReadBufferBase::readCompressedData. #83986 (Raúl Marín).
Planejamento e análise de consultas
- Melhoria de desempenho do QueryTreeHash. #82617 (Nikolai Kochetov).
Melhorias no logging
- Introduz logging assíncrono. #82516 (Raúl Marín).
Otimizações de funções
- Otimizado
largestTriangleThreeBucketscom a remoção de dados temporários. #84479 (Alexey Milovidov). - A implementação de muitas funções de manipulação de string foi otimizada e simplificada. A documentação incorreta de várias funções foi corrigida. Observação: a saída de
byteSizepara colunas String e tipos complexos que contêm colunas String mudou de 9 bytes por string vazia para 8 bytes por string vazia, o que é o comportamento esperado. #85063 (Alexey Milovidov).
Melhorias no Keeper
- Melhoria no Keeper com carregamento inicial do RocksDB. #83390 (Antonio Andelic).
Melhorias no lago de dados
- Melhoria no processamento paralelo de arquivos com o backend delta-kernel-rs. #85642 (Azat Khuzhin).
Melhorias
Controle de acesso e segurança
- Introduz dois novos tipos de acesso,
READeWRITE, para fontes e torna obsoletos todos os tipos de acesso anteriores relacionados a fontes. Antes,GRANT S3 ON *.* TO user; agora:GRANT READ, WRITE ON S3 TO user. Isso também permite separar as permissõesREADeWRITEpara fontes, por exemplo:GRANT READ ON * TO user,GRANT WRITE ON S3 TO user. O recurso é controlado pela configuraçãoaccess_control_improvements.enable_read_write_grantse fica desabilitado por padrão. #73659 (pufit). - Permite usar parâmetros em consultas
CREATE USERpara nomes de usuário. #81387 (Diskein). - Exclui dados sensíveis de core dumps. Adiciona dois alocadores:
AwsNodumpMemoryManager, compatível com a biblioteca AWS, eJemallocNodumpSTLAllocator, compatível com STL. Ambos são wrappers do alocador jemalloc. Eles usam os extent hooks do jemalloc emadvisepara marcar páginas de memória como “don’t dump”. São usados para credenciais do S3, credenciais de usuário e alguns dados de consulta. #82441 (Miсhael Stetsyuk). - Views criadas por usuários efêmeros agora armazenarão uma cópia do usuário real e não serão mais invalidadas após a exclusão do usuário efêmero. #84763 (pufit).
- Passa a fazer a correspondência de
forward_headersde autenticação externa sem diferenciar maiúsculas de minúsculas. #84737 (ingodwerust). - Adiciona uma coluna
parameterasystem.grantspara determinar o tipo de fonte emGRANT READ/WRITEe a engine da tabela emGRANT TABLE ENGINE. #85643 (MikhailBurdukov).
Backup e restauração
- Adiciona suporte a backups para bancos de dados PostgreSQL, MySQL e DataLake. Um backup desse tipo de banco de dados salva apenas a definição, e não os dados nele contidos. #79982 (Nikolay Degterinsky).
- Define como TRACE todas as mensagens de log relacionadas à gravação de arquivos de backup. #82907 (Hans Krutzer).
- Introduz
backup_restore_s3_retry_initial_backoff_ms,backup_restore_s3_retry_max_backoff_msebackup_restore_s3_retry_jitter_factorpara configurar a estratégia de backoff de retry do S3 usada durante operações de backup e restauração. #84421 (Julia Kartseva). - Introduz uma nova configuração
backup_slow_all_threads_after_retryable_s3_errorpara reduzir a pressão sobre o S3 durante tempestades de retries causadas por erros comoSlowDown, desacelerando todas as threads assim que for detectado um único erro passível de retry. #84854 (Julia Kartseva).
Integridade e validação de dados
- Verifica se a parte tem um arquivo
checksum.txtconsistente imediatamente antes do commit. #76625 (Sema Checherinda). - Proíbe iniciar a mutação ALTER
RENAME COLUMNse ela renomear alguma coluna que, no momento, esteja afetada por uma mutação de dados incompleta. #81823 (Mikhail Artemenko). - Agora, o snapshot de mutações será criado a partir do snapshot das partes visíveis. Os contadores de mutação usados no snapshot também serão recalculados com base nas mutações incluídas. #82945 (Mikhail Artemenko).
- Adiciona a capacidade de analisar o prefixo e o sufixo da parte, além de verificar a cobertura de colunas não constantes. #83377 (Mikhail Artemenko).
Motor de tabela Iceberg
- Suporte a exclusões posicionais no motor de tabela Iceberg. #80237 (YanghongZhong).
- Agora o ClickHouse oferece suporte a arquivos
metadata.jsoncomprimidos para Iceberg. Corrige #70874. #81451 (alesapin). - Corrige a leitura do Iceberg por IDs de campo em tipos complexos. #84821 (scanhex12).
- Suporte a gravações em Iceberg para leitura com pyiceberg. #84466 (scanhex12).
- Adiciona versão de snapshot aos motores de tabela de lago de dados. #84659 (Pete Hampton).
- Suporte à gravação de um arquivo version-hint com Iceberg. Isso fecha #85097. #85130 (scanhex12).
- Suporte a arquivo
.metadata.jsoncomprimido por meio da configuraçãoiceberg_metadata_compression_method. Ela oferece suporte a todos os métodos de compressão do ClickHouse. Isso fecha #84895. #85196 (scanhex12). - Uso de memória otimizado para arquivos de exclusão posicional do Iceberg. Em vez de carregar na memória todos os dados dos arquivos de exclusão, apenas o row group atual dos arquivos de exclusão Parquet é mantido na RAM. Isso reduz significativamente o consumo de memória ao trabalhar com arquivos grandes de exclusão posicional. #85329 (scanhex12).
- Permite iterar de forma assíncrona pelos objetos de uma tabela Iceberg sem armazenar explicitamente objetos para cada arquivo de dados. #85369 (Daniil Ivanik).
- Suporte a exclusões por igualdade no Iceberg. #85843 (Han Fei).
Motor de tabela DeltaLake
- Melhora no motor de tabela
DeltaLake: o delta-kernel-rs tem a APIExpressionVisitor, que foi implementada neste PR e aplicada à transformação de expressões de colunas de partição (ela substituirá a abordagem antiga e obsoleta do delta-kernel-rs usada anteriormente no nosso código). No futuro, esseExpressionVisitortambém permitirá implementar poda com base em estatísticas e alguns recursos proprietários do delta-lake. Além disso, o objetivo dessa mudança é oferecer suporte à poda de partições no motor de tabelaDeltaLakeCluster(o resultado de uma expressão analisada — ActionsDAG — será serializado e enviado pelo nó iniciador junto com o caminho dos dados, porque esse tipo de informação, necessária para a poda, só está disponível como metadado na listagem de arquivos de dados, que é feita apenas pelo nó iniciador, mas precisa ser aplicada aos dados em cada servidor de leitura). #81136 (Kseniia Sumarokova). - Corrige a poda de partições em funções de cluster de lago de dados. #82131 (Kseniia Sumarokova).
- Corrige a leitura de dados particionados na table function DeltaLakeCluster. Neste PR, a versão do protocolo das funções de cluster foi aumentada, permitindo enviar informações extras do nó iniciador para as réplicas. Essas informações extras contêm a expressão de transformação do delta-kernel, necessária para analisar colunas de partição (e futuramente também outras coisas, como generated columns etc.). #82132 (Kseniia Sumarokova).
- Agora o banco de dados Datalake gera uma exceção mais útil. Corrige #81211. #82304 (alesapin).
- Implementa a filtragem interna do
delta-kernel-rs(estatísticas e poda de partições) no armazenamentoDeltaLake. #84006 (Kseniia Sumarokova). - Adiciona uma configuração
delta_lake_enable_expression_visitor_loggingpara desativar os logs do expression visitor, já que eles podem ser verbosos demais até mesmo para o nível de log de teste ao depurar algo. #84315 (Kseniia Sumarokova). - Adiciona a configuração
delta_lake_snapshot_versionpara permitir a leitura de uma versão específica de snapshot no motor de tabelaDeltaLake. #85295 (Kseniia Sumarokova).
Integração com lago de dados
- Acelera a listagem de tabelas em catálogos de dados com solicitações assíncronas. #81084 (alesapin).
- Adiciona suporte a
TimestampTZno Glue catalog. Isso resolve #81654. #83132 (scanhex12). - Divide
FormatParserGroupem duas structs independentes: a primeira é responsável pelos recursos compartilhados de processamento e E/S, e a segunda pelos recursos compartilhados de filtro (ActionDagde filtro,KeyCondition). Isso permite um uso compartilhado mais flexível dessas estruturas por diferentes threads. #83997 (Daniil Ivanik). - Adiciona o
partition_columns_in_data_fileausente à configuração do Azure. #85373 (Arthur Passos). - Adiciona a flag
show_data_lake_catalogs_in_system_tablespara controlar a inclusão de tabelas de lago de dados emsystem.tables, resolvendo #85384. #85411 (Smita Kulkarni).
S3 e armazenamento de objetos
- Implementa os métodos
moveFileereplaceFileems3_plain_rewritablepara dar suporte ao uso como disco de banco de dados. #79424 (Tuan Pham Anh). - As solicitações de leitura e gravação do S3 passam a ser limitadas no nível do socket HTTP (em vez de no nível das solicitações inteiras ao S3) para evitar problemas com o throttling de
max_remote_read_network_bandwidth_for_serveremax_remote_write_network_bandwidth_for_server. #81837 (Sergei Trifonov). - Este PR introduz jitter no mecanismo de retry do S3 quando a configuração
s3_slow_all_threads_after_network_errorestá habilitada. #81849 (zoomxi). - Implementa autenticação do AWS S3 com um IAM role fornecido explicitamente. Implementa OAuth para GCS. Esses recursos até pouco tempo atrás estavam disponíveis apenas no ClickHouse Cloud e agora foram disponibilizados como código aberto. Sincroniza algumas interfaces, como a serialização dos parâmetros de conexão para armazenamento de objetos. #84011 (Alexey Milovidov).
- Permite usar qualquer política de armazenamento (ou seja, armazenamento de objetos, como S3) para agregação/ordenação externas. #84734 (Azat Khuzhin).
- Coleta todos os objetos removidos para executar uma única operação de remoção no armazenamento de objetos. #85316 (Mikhail Artemenko).
motor de tabela S3Queue
- Macros como
{uuid}agora podem ser usadas na configuraçãokeeper_pathdo motor de tabela S3Queue. #82463 (Nikolay Degterinsky). - Adicionada uma nova configuração do servidor,
s3queue_disable_streaming, que desabilita o streaming em tabelas com o motor de tabela S3Queue. Essa configuração pode ser alterada sem reiniciar o servidor. #82515 (Kseniia Sumarokova). - Adicionadas as colunas
commit_timeecommit_idasystem.s3queue_log. #83016 (Kseniia Sumarokova). - Adicionados logs para o processo de desligamento do S3Queue. #83163 (Kseniia Sumarokova).
- O streaming do S3(Azure/etc)Queue agora é encerrado antes do desligamento de quaisquer tabelas durante o desligamento do servidor. #83530 (Kseniia Sumarokova).
- Agora é possível alterar as configurações de insert de mv no nível da tabela
S3Queue. Foram adicionadas novas configurações no nível deS3Queue:min_insert_block_size_rows_for_materialized_viewsemin_insert_block_size_bytes_for_materialized_views. Por padrão, serão usadas as configurações no nível de profile, e as configurações no nível deS3Queueas substituirão. #83971 (Kseniia Sumarokova). - Correção no modo ordenado do S3Queue: encerra mais cedo se o desligamento tiver sido acionado. #84463 (Kseniia Sumarokova).
Integração com Kafka
- Contar manualmente as mensagens consumidas para evitar depender do offset confirmado anteriormente no StorageKafka2. #81662 (János Benjamin Antal).
- Integrar o
StorageKafka2aosystem.kafka_consumers. #82652 (János Benjamin Antal).
Melhorias do ClickHouse Keeper
- Melhoria no Keeper: mover arquivos de changelog entre discos em uma thread em segundo plano. Antes, mover o changelog para um disco diferente bloqueava o Keeper globalmente até que a movimentação fosse concluída. Isso levava à degradação de desempenho se a movimentação fosse uma operação demorada (por exemplo, para um disco S3). #82485 (Antonio Andelic).
- Melhoria no Keeper: adicionar a nova config
keeper_server.cleanup_old_and_ignore_new_acl. Se habilitada, todos os nós terão suas ACLs limpas, enquanto a ACL de novas solicitações será ignorada. Se o objetivo for remover completamente as ACLs dos nós, é importante manter a config habilitada até que um novo snapshot seja criado. #82496 (Antonio Andelic). - Melhoria no Keeper: oferecer suporte a permissões específicas para a ACL
world:anyone. #82755 (Antonio Andelic). - Adiciona suporte para especificar ACLs extras do Keeper para caminhos na config. Se você quiser adicionar uma ACL extra para um caminho específico, defina-a na config em
zookeeper.path_acls. #82898 (Antonio Andelic). - Adiciona
ProfileEventquando o Keeper rejeita uma gravação devido ao limite flexível de memória. #82963 (Xander Garbett). - Habilita os feature flags
create_if_not_exists,check_not_exists,remove_recursiveno Keeper por padrão, o que habilita novos tipos de solicitações. #83488 (Antonio Andelic). - Adiciona suporte para aplicar ACL extra em nós específicos do Keeper usando a config
apply_to_children. #84137 (Antonio Andelic). - Adiciona o comando
get_aclao KeeperClient. #84641 (Antonio Andelic). - Adiciona o 4LW
lgrqao Keeper para alternar o registro em log das solicitações recebidas. #84719 (Antonio Andelic). - Reduz a contenção na trava de armazenamento no Keeper. #84732 (Antonio Andelic).
- A ferramenta
encrypt_decryptagora oferece suporte a conexões criptografadas do ZooKeeper. #84764 (Roman Vasin). - Limita o tamanho do cache de entradas de log do Keeper pelo número de entradas usando
keeper_server.coordination_settings.latest_logs_cache_entry_count_thresholdekeeper_server.coordination_settings.commit_logs_cache_entry_count_threshold. #84877 (Antonio Andelic).
Tipos JSON e Dynamic
- Adicionado o arquivo
columns_substreams.txtà parte Wide para rastrear todos os substreams armazenados nela. Isso ajuda a rastrear streams dinâmicos nos tipos JSON e Dynamic e, assim, evita a leitura de uma amostra dessas colunas para obter a lista de streams dinâmicos (por exemplo, para calcular o tamanho das colunas). Além disso, agora todos os streams dinâmicos são refletidos emsystem.parts_columns. #81091 (Pavel Kruglov). - Permitido
ALTER UPDATEem colunas JSON e Dynamic. #82419 (Pavel Kruglov). - Agora você pode usar os tipos
TimeeTime64dentro do tipo JSON. #83784 (Yarik Briukhovetskyi). - Adicionada a configuração
json_type_escape_dots_in_keyspara escapar pontos em chaves JSON durante o parsing do tipo JSON. A configuração fica desabilitada por padrão. #84207 (Pavel Kruglov).
Formatos Parquet e ORC
- Introduz configurações para definir o tamanho do bloco de compressão do ORC e atualiza o valor padrão de 64KB para 256KB, para manter a consistência com o Spark e o Hive. #80602 (李扬).
- Adiciona suporte para gravar
enumdo Parquet como array de bytes, conforme determina a especificação. Escreverei mais informações depois. #81090 (Arthur Passos). - Adiciona suporte para gravar geoparquets como formato de saída. #81784 (scanhex12).
Consultas distribuídas e réplicas paralelas
- Uma nova configuração, enable_add_distinct_to_in_subqueries, foi introduzida. Quando habilitada, o ClickHouse adicionará automaticamente DISTINCT às subconsultas em cláusulas IN para consultas distribuídas. Isso pode reduzir significativamente o tamanho das tabelas temporárias transferidas entre shards e melhorar a eficiência da rede. Observação: isso envolve um trade-off — embora a transferência de dados pela rede seja reduzida, é necessário trabalho adicional de mesclagem (desduplicação) em cada nó. Habilite essa configuração quando a transferência pela rede for um gargalo e o custo da mesclagem for aceitável. #81908 (fhw12345).
- Adicionado suporte a funções de tabela
remote-()com réplicas paralelas se um cluster for fornecido no argumentoaddress_expression. Além disso, corrige #73295. #82904 (Igor Nikonov). - Junções com réplicas paralelas agora usam a etapa lógica de join. Em caso de problemas com consultas de join que usam réplicas paralelas, tente
SET query_plan_use_new_logical_join_step=0e relate o problema. #83801 (Vladimir Cherkasov).
Configurações e definições
- Marca a configuração
allow_experimental_join_conditioncomo obsoleta. #80566 (Vladimir Cherkasov). - Os throttlers de rede global e por usuário nunca são redefinidos, o que garante que os limites de
max_network_bandwidth_for_all_usersemax_network_bandwidth_for_all_usersnunca sejam excedidos. #81729 (Sergei Trifonov). - Introduz a configuração
optimize_rewrite_regexp_functions(habilitada por padrão), que permite ao otimizador reescrever determinadas chamadas dereplaceRegexpAll,replaceRegexpOneeextractem formas mais simples e eficientes quando certos padrões de expressão regular são detectados. (issue #81981). #81992 (Amos Bird). - Ajusta a fila dos servidores TCP (64 por padrão) com base em
listen_backlog(4096 por padrão). #82045 (Azat Khuzhin). - Adiciona a capacidade de recarregar
max_local_read_bandwidth_for_serveremax_local_write_bandwidth_for_serverdinamicamente, sem reiniciar o servidor. #82083 (Kai Zhu). - Introduz a configuração
enable_vector_similarity_index, que deve ser habilitada para usar o índice de similaridade vetorial. A configuração existenteallow_experimental_vector_similarity_indexagora está obsoleta. Ela ainda funciona caso alguém precise usá-la. #83459 (Robert Schulze). - Adiciona
max_joined_block_size_bytes, além demax_joined_block_size_rows, para limitar o uso de memória de JOINs com colunas pesadas. #83869 (Nikolai Kochetov). - Corrige a compatibilidade de
cluster_function_process_archive_on_multiple_nodes. #83968 (Kseniia Sumarokova). - Habilita, por padrão, o suporte a subqueries correlacionadas. #85107 (Dmitry Novik).
- Adiciona as configurações
database_replicated, que definem os valores padrão deDatabaseReplicatedSettings. Se a configuração não estiver presente na consulta CREATE do DB Replicated, será usado o valor dessa configuração. #85127 (Tuan Pham Anh). - Permite argumentos de chave-valor em
s3ou na table engine/functions3Cluster, por exemplos3('url', CSV, structure = 'a Int32', compression_method = 'gzip'). #85134 (Kseniia Sumarokova). - Executa
EXISTSnão correlacionado como uma subquery escalar. Isso permite usar um cache de subquery escalar e fazer o constant folding do resultado, o que é útil para índices. Para compatibilidade, foi adicionada a nova configuraçãoexecute_exists_as_scalar_subquery=1. #85481 (Nikolai Kochetov). - Passa a oferecer suporte à resolução de mais casos de identificadores compostos. Em particular, isso melhora a compatibilidade de
ARRAY JOINcom o analyzer antigo. Introduz uma nova configuraçãoanalyzer_compatibility_allow_compound_identifiers_in_unflatten_nestedpara manter o comportamento antigo. #85492 (Nikolai Kochetov).
Tabelas de sistema e observabilidade
- Adiciona métricas de pressão às métricas assíncronas do ClickHouse. #80779 (Xander Garbett).
- Adiciona as métricas
MarkCacheEvictedBytes,MarkCacheEvictedMarkseMarkCacheEvictedFilespara rastrear remoções do mark cache. (issue #60989). #80799 (Shivji Kumar Jha). - A tabela
system.formatsagora contém informações estendidas sobre formatos, como o tipo de conteúdo HTTP, os recursos de inferência de esquema etc. #81505 (Alexey Milovidov). - Adiciona suporte para limpar todos os avisos da tabela
system.warningsusandoTRUNCATE TABLE system.warnings. #82087 (Vladimir Cherkasov). - Lista as licenças de crates Rust em
system.licenses. #82440 (Raúl Marín). - Estima cnf/dnf complexos, por exemplo,
(a < 1 and a > 0) or b = 3, com base em estatísticas. #82663 (Han Fei). - Em alguns casos, precisamos ter múltiplas dimensões em nossas métricas. Por exemplo, contar merges ou mutações com falha por código de erro, em vez de ter um único contador. #83030 (Miсhael Stetsyuk).
- Adiciona métricas de resource de processo (como
UserTimeMicroseconds,SystemTimeMicroseconds,RealTimeMicroseconds) aos profile events depart_logpara entradasMergeParts. #83460 (Vladimir Cherkasov). - Métricas no nível de cgroup e métricas de sistema agora são reportadas em conjunto. As métricas no nível de cgroup têm nomes
CGroup<Metric>e as métricas no nível do SO (coletadas do procfs) têm nomesOS<Metric>. #84317 (Nikita Taranov). - Adiciona métricas dimensionais para monitorar o tamanho de filas limitadas concorrentes, rotuladas por tipo de fila e instance ID, para melhor observabilidade. #84675 (Miсhael Stetsyuk).
- A tabela
system.columnsagora fornececolumncomo alias da colunanameexistente. #84695 (Yunchi Pang). - Adiciona a coluna format string a
system.errors. Essa coluna é necessária para agrupar o mesmo tipo de erro em regras de alerta. #84776 (Miсhael Stetsyuk). - Torna os limites ajustáveis para Async Log e adiciona introspecção. #85105 (Raúl Marín).
- Ignora
UNKNOWN_DATABASEao obter os tamanhos das colunas da tabela em system.columns. #85632 (Azat Khuzhin).
Motores de banco de dados
Melhorias no sistema e internas
- Corrige a operação de anexar bancos de dados com discos remotos somente para leitura, adicionando manualmente os UUIDs das tabelas ao DatabaseCatalog. #82670 (Tuan Pham Anh).
- Melhora o tratamento de tarefas DDL quando
distributed_ddl_output_mode='*_only_active', deixando de esperar por novas réplicas ou réplicas recuperadas cuja defasagem de replicação excedamax_replication_lag_to_enqueue. Isso ajuda a evitar errosDDL task is not finished on some hostsquando uma nova réplica se torna ativa após a inicialização ou recuperação, mas acumulou um grande log de replicação. Também foi implementada a consultaSYSTEM SYNC DATABASE REPLICA STRICT, que espera o log de replicação ficar abaixo demax_replication_lag_to_enqueue. #83302 (Alexander Tokmakov). - Altera a ordem de desligamento do SystemLogs para que ocorra após as tabelas comuns (e antes das tabelas de sistema, em vez de antes das tabelas comuns). #83134 (Kseniia Sumarokova).
- Adiciona a configuração de servidor
logs_to_keepàs configurações de bancos de dados Replicated, permitindo configurar o parâmetro padrãologs_to_keeppara bancos de dados Replicated. Valores menores reduzem o número de nós no ZooKeeper (especialmente útil quando há muitos bancos de dados), enquanto valores maiores permitem que réplicas ausentes se atualizem após períodos mais longos de indisponibilidade. #84183 (Alexey Khatskevich). - Altera o valor padrão da configuração do banco de dados Replicated
max_retries_before_automatic_recoverypara 10, permitindo uma recuperação mais rápida em alguns casos. #84369 (Alexander Tokmakov). - Otimiza operações DDL de view materializada atualizável que não usam append em bancos de dados Replicated, ignorando a criação e a renomeação de tabelas temporárias antigas. #84858 (Tuan Pham Anh).
Replicação e sincronização
Melhorias no sistema e internas
- Melhora
SYSTEM RESTART REPLICApara tentar novamente criar a tabela quando ocorrerem problemas de conexão com o ZooKeeper, evitando que tabelas sejam esquecidas. #82616 (Nikolay Degterinsky). - Adiciona validação de UUID em
ReplicatedMergeTree::executeMetadataAlterpara evitar definições incorretas de tabelas quando tabelas são trocadas entre a obtenção do StorageID e a chamada deIDatabase::alterTable. #82666 (Nikolay Degterinsky). - Remove a lógica experimental
send_metadatarelacionada à replicação zero-copy experimental. Esse código nunca foi usado, não era suportado e provavelmente estava com falhas, sem testes para verificar seu funcionamento. #82508 (alesapin). - Adiciona suporte à expansão de macro em
remote_fs_zero_copy_zookeeper_path. #85437 (Mikhail Koviazin).
Funções e expressões
- A função
addressToSymbole a tabelasystem.symbolspassarão a usar deslocamentos no arquivo em vez de endereços de memória virtual. #81896 (Alexey Milovidov). - Tente preservar os nomes dos elementos ao derivar supertipos para tuplas nomeadas. #81345 (lgbo).
- Permite combinar diferentes collations para a mesma coluna em janelas diferentes. #82877 (Yakov Olkhovskiy).
- Adicionar função para gravar tipos em formato
wkb. #82935 (scanhex12). - Adicionada a capacidade de analisar
TimeeTime64nos formatos MM:SS, M:SS, SS ou S. #83299 (Yarik Briukhovetskyi). - A função
reinterpret()agora oferece suporte à conversão paraArray(T), em queTé um tipo de dados de tamanho fixo (issue #82621). #83399 (Shankar Iyer). - Corrige as funções
structureToProtobufSchemaestructureToCapnProtoSchemapara adicionar corretamente um byte nulo de terminação em vez de usar uma quebra de linha, evitando a ausência de quebras de linha na saída e possíveis estouros de buffer em funções que dependem do byte nulo (comologTrace,demangle,extractURLParameter,toStringCutToZeroeencrypt/decrypt). Fecha #85062. #85063 (Alexey Milovidov). - Corrige o layout de dicionário
regexp_treepara oferecer suporte ao processamento de strings com bytes nulos. #85063 (Alexey Milovidov). - Corrige a função
formatRowNoNewline, que estava cortando por engano o último caractere da saída quando chamada com o formatoValuesou qualquer formato sem quebra de linha no final das linhas. #85063 (Alexey Milovidov). - Corrige um erro de segurança contra exceções na função
stemque poderia causar vazamentos de memória em casos raros. #85063 (Alexey Milovidov). - Corrige a função
initcappara argumentosFixedString, para que reconheça corretamente o início de palavras no começo de strings quando a string anterior em um bloco terminava com um caractere de palavra. #85063 (Alexey Milovidov). - Corrige uma vulnerabilidade de segurança no formato Apache
ORCque poderia expor memória não inicializada. #85063 (Alexey Milovidov). - Alterado o comportamento de
replaceRegexpAlle seu aliasREGEXP_REPLACEpara permitir correspondências vazias no final das strings, mesmo quando a correspondência anterior já tiver processado a string inteira (por exemplo,^a*|a*$ou^|.*), alinhando-se à semântica de JavaScript, Perl, Python, PHP e Ruby, mas diferindo da do PostgreSQL. #85063 (Alexey Milovidov). - Otimizou e simplificou a implementação de muitas funções de manipulação de strings. Corrigiu a documentação incorreta de várias funções. Observação: o resultado de
byteSizepara colunas String e tipos complexos que contêm colunas String mudou de 9 bytes por string vazia para 8 bytes por string vazia, o que é o comportamento esperado. #85063 (Alexey Milovidov). - Permitir passo zero nas funções
timeSeries*ToGrid()Esta é a parte#3de https://github.com/ClickHouse/ClickHouse/pull/75036. #85390 (Vitaly Baranov). - Suporte a arrays internos na função
nested. #85719 (Nikolai Kochetov).
Melhorias no MergeTree
- Desabilita de forma mais granular os índices de skipping que dependem de colunas atualizadas on-the-fly ou por patch parts. Agora, os índices de skipping deixam de ser usados apenas nas partes afetadas por mutações on-the-fly ou patch parts; antes, esses índices eram desabilitados em todas as partes. #84241 (Anton Popov).
- Adiciona a configuração do MergeTree
search_orphaned_parts_drivespara limitar o escopo da busca por partes, por exemplo, pordiskscom metadados locais. #84710 (Ilya Golshtein). - Adiciona o suporte ausente de
read_in_order_use_virtual_rowparaWHERE. Isso permite evitar a leitura de mais partes em queries com filtros que não foram totalmente propagados paraPREWHERE. #84835 (Nikolai Kochetov). - Corrige o uso da serialização dos discriminadores Variant “compact” no MergeTree. Anteriormente, ela não era usada em alguns casos em que poderia ser aplicada. #84141 (Pavel Kruglov).
- Adiciona um limite (configuração da tabela
max_uncompressed_bytes_in_patches) para o total de bytes não comprimidos em patch parts. Isso evita lentidões significativas em queriesSELECTapós atualizações leves e também previne possíveis usos indevidos desse recurso. #85641 (Anton Popov).
Gerenciamento de cache e memória
- Corrigido um erro lógico no cache do sistema de arquivos: “Having zero bytes but range is not finished”. #81868 (Kseniia Sumarokova).
- Adicionado hash rendezvous para melhorar a localidade do cache. #82511 (Anton Ivashkin).
- Refatorado o recurso de redimensionamento dinâmico do cache do sistema de arquivos. Mais logs foram adicionados para introspecção. #82556 (Kseniia Sumarokova).
- Reduzida a sobrecarga do rastreamento de memória de consultas para funções executáveis definidas pelo usuário. #83929 (Eduard Karacharov).
- Todas as alocações feitas por bibliotecas externas agora estão visíveis para o memory tracker do ClickHouse e são contabilizadas corretamente. Isso pode resultar em um uso de memória relatado “maior” para determinadas consultas ou em falhas com
MEMORY_LIMIT_EXCEEDED. #84082 (Nikita Mikhaylov). - Alocada a quantidade mínima de memória necessária para encrypted_buffer em coleções nomeadas criptografadas. #84432 (Pablo Marcos).
Índice de similaridade vetorial
- Impede que o usuário use
naneinfcomNumericIndexedVector. Corrige #82239 e mais alguns casos. #82681 (Raufs Dunamalijevs). - O índice de similaridade vetorial agora oferece suporte à quantização binária. A quantização binária reduz significativamente o consumo de memória e acelera o processo de construção de um índice vetorial (devido ao cálculo de distância mais rápido). Além disso, a configuração existente
vector_search_postfilter_multiplierfoi descontinuada e substituída por uma configuração mais geral:vector_search_index_fetch_multiplier. #85024 (Shankar Iyer). - A busca vetorial aproximada com índices de similaridade vetorial agora está em disponibilidade geral (GA). #85888 (Robert Schulze).
Tratamento de erros e mensagens
- O cabeçalho Connection agora é enviado no final dos cabeçalhos, quando já se sabe se a conexão deve ser mantida. #81951 (Sema Checherinda).
- Em versões anteriores, a multiplicação do estado de função agregada com IPv4 produzia um erro lógico em vez de um código de erro adequado. Fecha #82817. #82818 (Alexey Milovidov).
- Melhor tratamento de erros em
AsynchronousMetrics. Se o diretório/sys/blockexistir, mas não estiver acessível, o servidor será iniciado sem monitorar os dispositivos de bloco. Fecha #79229. #83115 (Alexey Milovidov). - Havia uma verificação incorreta de dependência para
INSERTcom visões materializadas que têm instruções SELECT malformadas, e o usuário podia receber umastd::exceptionobscura em vez de um erro significativo com uma explicação clara. Isso já foi corrigido. Corrige: #82889. #83190 (Nikita Mikhaylov). - Não exiba descrições muito longas de ações de expressão em mensagens de exceção. Fecha #83164. #83350 (Alexey Milovidov).
- Quando o armazenamento está sendo desligado,
getStatuslança uma exceçãoErrorCodes::ABORTED. Antes, isso fazia a consulta SELECT falhar. Agora, capturamos as exceçõesErrorCodes::ABORTEDe as ignoramos intencionalmente. #83435 (Miсhael Stetsyuk). - As mensagens de exceção para determinadas situações ao carregar e adicionar projeções ficaram mais fáceis de ler. #83728 (Robert Schulze).
- Verifica se a conexão foi cancelada antes de verificar EOF para evitar leitura em uma conexão fechada. Corrige #83893. #84227 (Raufs Dunamalijevs).
- Tratamento aprimorado do desligamento do servidor para conexões de cliente, com simplificação das verificações internas. #84312 (Raufs Dunamalijevs).
- Erros de baixo nível durante a execução de UDF agora passam a falhar com o código de erro
UDF_EXECUTION_FAILED, enquanto antes podiam retornar códigos de erro diferentes. #84547 (Xu Jia).
Melhorias na formatação de SQL
- Corrige a formatação inconsistente de
CREATE DICTIONARY. Fecha #82105. #82829 (Alexey Milovidov). - Corrige a formatação inconsistente de
TTLquando contém uma funçãomaterialize. Fecha #82828. #82831 (Alexey Milovidov). - Corrige a formatação inconsistente de
EXPLAIN ASTem uma subconsulta quando ela contém opções de saída, como INTO OUTFILE. Fecha #82826. #82840 (Alexey Milovidov). - Corrige a formatação inconsistente de expressões entre parênteses com aliases em contextos nos quais aliases não são permitidos. Fecha #82836. Fecha #82837. #82867 (Alexey Milovidov).
- Corrige a formatação de CREATE USER com parâmetros de consulta (isto é,
CREATE USER {username:Identifier} IDENTIFIED WITH no_password). #84376 (Azat Khuzhin). - Corrige o parsing de uma vírgula final na lista de colunas da consulta CREATE DICTIONARY após uma coluna com parâmetros, por exemplo, Decimal(8). Fecha #85586. #85653 (Nikolay Degterinsky).
Integrações externas
- Unificar os nomes dos parâmetros em ODBC e JDBC ao usar coleções nomeadas. #83410 (Andrey Zvonov).
- MongoDB: conversão implícita de strings para tipos numéricos. Anteriormente, se um valor em string fosse recebido de uma fonte do MongoDB para uma coluna numérica em uma tabela do ClickHouse, uma exceção era lançada. Agora, o mecanismo tenta converter automaticamente o valor numérico da string. Corrige #81167. #84069 (Kirill Nikiforov).
- Permitir o uso de
simdjsonem arquiteturas não suportadas (antes, isso levava a errosCANNOT_ALLOCATE_MEMORY). #84966 (Azat Khuzhin).
Melhorias diversas
- Adiciona o engine de tabela e a função de tabela Ytsaurus. #77606 (MikhailBurdukov).
- Melhora
HashJoin::needUsedFlagsForPerRightTableRow, que passa a retornar false para cross join. #82379 (lgbo). - Permite gravar/ler colunas map como array de tuplas. #82408 (MikhailBurdukov).
- Este PR foi revertido. #82884 (Mithun p).
- Logs assíncronos: limita o número máximo de entradas mantidas na fila. #83214 (Raúl Marín).
- Habilita Date/Date32 como inteiros em formatos de entrada JSON. #83597 (MikhailBurdukov).
- Aprimora o suporte a índices de filtro de Bloom (regular, ngram e token) para que sejam utilizados quando o primeiro argumento for um array constante (o conjunto) e o segundo for a coluna indexada (o subconjunto), permitindo uma execução de consulta mais eficiente. #84700 (Doron David).
- Permite a conversão de tipo de valores Set ao aplicar pushdown de filtros
IN/GLOBAL INnas chaves primárias do armazenamento KeyValue (por exemplo, EmbeddedRocksDB, KeeperMap). #84515 (Eduard Karacharov). - Elimina varreduras completas nos casos em que a análise de índice resulta em intervalos vazios para leitura com réplicas paralelas. #84971 (Eduard Karacharov).
- Corrige uma série de problemas que podem ocorrer ao tentar executar testes de integração em um host local. #82135 (Oleg Doronin).
- Habilita
trace_log.symbolizepor padrão para implantações antigas. #85456 (Azat Khuzhin).
Correções de bugs (comportamento incorreto perceptível ao usuário em um lançamento estável oficial)
Otimizações de desempenho
- Corrige a degradação de desempenho no SummingMergeTree introduzida na versão 25.5 em https://github.com/ClickHouse/ClickHouse/pull/79051. #82130 (Pavel Kruglov).
- Corrige a degradação de desempenho com o analyzer habilitado, quando consultas secundárias sempre leem todas as colunas das VIEWs. Corrige #81718. #83036 (Dmitry Novik).
- Não verifica dependências cíclicas ao executar CREATE TABLE sem dependências. Isso corrige a degradação de desempenho em casos de uso com a criação de milhares de tabelas, introduzida em https://github.com/ClickHouse/ClickHouse/pull/65405. #83077 (Pavel Kruglov).
- Faz com que agregações de janela
DISTINCTsejam executadas em tempo linear e corrige um bug emsumDistinct. Fecha #79792. Fecha #52253. #79859 (Nihal Z. Miaji).
Correções na execução de consultas
- Para consultas com a combinação
ORDER BY ... LIMIT BY ... LIMIT N, quandoORDER BYé executado como PartialSorting, o contadorrows_before_limit_at_leastagora reflete o número de linhas consumidas pela cláusula LIMIT, em vez do número de linhas consumidas pela transformação de ordenação. #78999 (Eduard Karacharov). - Corrige erro lógico no operador
<=>e no armazenamento Join; agora a consulta retorna o código de erro correto. #80165 (Vladimir Cherkasov). - Corrige uma falha na função
loopquando usada com a família de funçõesremote. Garante que a cláusula LIMIT seja respeitada emloop(remote(...)). #80299 (Julia Kartseva). - Corrige o comportamento incorreto das funções
to_utc_timestampefrom_utc_timestampao lidar com datas anteriores à epoch Unix (1970-01-01) e posteriores à data máxima (2106-02-07 06:28:15). Agora, essas funções limitam corretamente os valores ao início da epoch e à data máxima, respectivamente. #80498 (Surya Kant Ranjan). - Corrige a execução de
INcomtransform_null_in=1, com NULL no argumento à esquerda e resultado não anulável da subconsulta. #81584 (Pavel Kruglov). - Corrige o problema em que as colunas obrigatórias não são lidas durante o processamento de subconsulta escalar correlacionada. Corrige #81716. #81805 (Dmitry Novik).
- Corrige a análise de filtro quando a consulta usa apenas uma coluna com alias constante. Corrige #79448. #82037 (Dmitry Novik).
- Corrige o erro
Not found columnem consultas comarrayJoinna condiçãoWHEREeIndexSet. #82113 (Nikolai Kochetov). - Corrige a exceção
TOO_DEEP_SUBQUERIESquando a definição de CTE faz referência a outra expressão de tabela de mesmo nome. #83413 (Dmitry Novik). - Corrige resultado incorreto em consultas com cláusula
WHERE ... IN (<subquery>)e cache de condições de consulta habilitado (configuraçãouse_query_condition_cache). #83445 (LB7666). INSERT SELECTcomUNION ALLpoderia levar à desreferenciação de um ponteiro nulo em um caso específico. Isso corrige #83618. #83643 (Alexey Milovidov).- Corrige o
LOGICAL_ERRORdurante a análise da expressão de política de linha em colunas correlacionadas. #82618 (Dmitry Novik). - Foram corrigidos resultados incorretos quando o cache de condições de consulta é usado em conjunto com CTEs recursivas (problema #81506). #84026 (zhongyuankai).
- Corrige a análise recursiva infinita de definições inválidas de
WINDOW. Corrige #83131. #84242 (Dmitry Novik). - Corrigido
Not-ready SetemIN (subquery)dentro da configuraçãoadditional_table_filters expression. #85210 (Nikolai Kochetov). - Corrige o erro lógico com subconsultas duplicadas quando
optimize_syntax_fuse_functionsestá habilitado, fecha #75511. #83300 (Vladimir Cherkasov).
Correções no Iceberg e no DataLake
- Corrige a resolução de metadados ao consultar tabelas Iceberg por meio do catálogo REST. … #80562 (Saurabh Kumar Ojha).
- Corrige condições de corrida no Iceberg. #82088 (Azat Khuzhin).
- Corrige o erro “Context has expired” no Iceberg. #82146 (Azat Khuzhin).
- Agora o ClickHouse pode ler tabelas Iceberg do catálogo Glue após a evolução do esquema. Corrige #81272. #82301 (alesapin).
- Corrige condições de corrida no Iceberg. #82841 (Azat Khuzhin).
- Desabilita a poda de arquivos com base em limites para elementos de Array do Iceberg e values de map do Iceberg, incluindo todos os subcampos aninhados. #83520 (Daniil Ivanik).
- Corrige gravações no Iceberg para tipos complexos. #85330 (scanhex12).
- A gravação de limites inferior e superior não é compatível com tipos complexos. #85332 (scanhex12).
- Corrige a nulabilidade de campos no Iceberg. #85977 (scanhex12).
- Não cria mais arquivos position delete file vazios no Iceberg. #86061 (scanhex12).
- Atualiza o timestamp dos metadados nas gravações no Iceberg. #85711 (scanhex12).
- Corrige um problema em que o Spark não conseguia ler position delete files. #85762 (scanhex12).
- Deixa de obter o esquema de arquivos de manifesto, mas armazena os esquemas relevantes de cada snapshot de forma independente. Infere o esquema relevante de cada arquivo de dados a partir do snapshot correspondente. O comportamento anterior violava a especificação do Iceberg para entradas de arquivos de manifesto com status existente. #84588 (Daniil Ivanik).
- Agora o Iceberg não tenta mais armazenar em cache a versão relevante do snapshot entre consultas SELECT e sempre tenta resolver o snapshot corretamente. A tentativa anterior de armazenar em cache snapshots do Iceberg causava problemas ao usar uma Iceberg table com time travel. #85038 (Daniil Ivanik).
- Corrige a resolução de metadados ao consultar tabelas Iceberg por meio do catálogo REST. … #85531 (Saurabh Kumar Ojha).
- Corrige o mascaramento de secrets nas table functions icebergS3Cluster e icebergAzureCluster. #85658 (MikhailBurdukov).
Correções do DeltaLake
- Corrige a poda de colunas com delta-kernel no storage
DeltaLake. Fecha #84543. #84745 (Kseniia Sumarokova). - Atualiza as credenciais do delta-kernel no storage DeltaLake. #84751 (Kseniia Sumarokova).
- Corrige um segfault na implementação do delta-kernel. #85160 (Kseniia Sumarokova).
- Corrige uma condição de corrida na implementação do delta-kernel do mecanismo
DeltaLake. #85221 (Kseniia Sumarokova). - Corrige a leitura de dados particionados com delta-kernel desabilitado no mecanismo
DeltaLake. Isso deixou de funcionar na versão 25.7 (https://github.com/ClickHouse/ClickHouse/pull/81136). #85223 (Kseniia Sumarokova). - Altera o valor anterior à versão 25.5 de
allow_experimental_delta_kernel_rsparafalse, por compatibilidade. #84587 (Kseniia Sumarokova). - Corrige a leitura da contagem no cache para Delta Lake. #85704 (Kseniia Sumarokova).
Correções de TTL e MergeTree
- Recalcula o índice min-max quando o TTL reduz as linhas, para garantir a correção dos algoritmos que dependem dele, como
minmax_count_projection. Isso resolve #77091. #77166 (Amos Bird). - Corrige o recálculo incorreto de TTL em TTL GROUP BY ao atualizar o TTL. #81222 (Evgeniy Ulasik).
- Corrige “Context has expired” durante merges quando
dicté usado na expressão de TTL. #81690 (Azat Khuzhin). - Corrige LOGICAL_ERROR e a falha subsequente ao usar a mesma coluna no TTL para GROUP BY e SET. #82054 (Pablo Marcos).
- O MergeTree agora não executa nenhuma ação relacionada a TTL se todos os TTLs forem removidos da tabela. #84441 (alesapin).
- Corrige
ALTER MODIFY ORDER BY, que não validava colunas de TTL em chaves de ordenação. As colunas de TTL agora são corretamente rejeitadas quando usadas em cláusulasORDER BYdurante operaçõesALTER, evitando uma possível corrupção da tabela. #84536 (xiaohuanlin).
Correções em projeções
- Corrige um erro lógico durante a materialização da projeção quando o tipo da coluna foi alterado para Nullable. #80741 (Pavel Kruglov).
- Corrige o uso incorreto dos metadados da tabela pai na função de tabela
mergeTreeProjectionquandoenable_shared_storage_snapshot_in_query = 1. Relacionado à #82634. #82638 (Amos Bird). - Corrige uma falha rara do ClickHouse quando a tabela tem projeção,
lightweight_mutation_projection_mode = 'rebuild'e o usuário executa um lightweight delete que remove TODAS as linhas de qualquer bloco da tabela. #84158 (alesapin). - Corrige o backup de partes com projeções corrompidas. #85362 (Antonio Andelic).
- Proíbe o uso da coluna
_part_offsetem projeções nos lançamentos até que ela seja estabilizada. #85372 (Sema Checherinda).
Correções em réplicas paralelas
- Para algumas consultas executadas com réplicas paralelas, as otimizações de leitura em ordem podiam ser aplicadas no nó iniciador, mas não nos nós remotos. Isso fazia com que o coordenador de réplicas paralelas (no iniciador) e os nós remotos usassem modos de leitura diferentes, o que é um erro lógico. #80652 (Igor Nikonov).
- Desabilita réplicas paralelas quando uma subconsulta contém
FINAL#81401. #83455 (zoomxi). - Corrige
LOGICAL_ERRORem consultas com réplicas paralelas e múltiplas junções INNER seguidas por uma junção RIGHT. Não use réplicas paralelas para essas consultas. #84299 (Vladimir Cherkasov). - Consultas com réplicas paralelas que usam a otimização de leitura reversa em ordem podem produzir resultados incorretos. #85406 (Igor Nikonov).
Autenticação e segurança
- Corrige a ocultação dos valores de named collection em logs/
query_log. Fecha #82405. #82510 (Kseniia Sumarokova). - Define o salt para dados de autenticação ao fazer parsing da AST com o tipo SCRAM_SHA256_PASSWORD. #82888 (Tuan Pham Anh).
- Oculta os detalhes de autenticação do schema registry do Avro para que não fiquem visíveis ao usuário nem nos logs. #83713 (János Benjamin Antal).
- Corrige o comportamento incorreto em que a execução de
REVOKE S3 ON system.*revoga permissões de S3 para*.*. Isso corrige #83417. #83420 (pufit). - Corrige a falha do servidor quando um usuário criado com
no_passwordtenta fazer login após a configuração do servidorallow_no_passwordser alterada para 0. #84426 (Shankar Iyer). - Melhora a mensagem de erro ao tentar criar um usuário identificado com JWT. #85072 (Konstantin Bogdanov).
- Oculta as credenciais de
deltaLakeAzure,deltaLakeCluster,icebergS3ClustereicebergAzureCluster. #85889 (Julian Maicher). - Corrige um bug introduzido em #79963. Ao inserir em uma visão materializada com definidor, a verificação de permissões deve usar os grants do definidor. Corrige #79951. #83502 (pufit).
Correções de backup e restauração
- Corrige o backup de uma tabela
Memoryvazia, que fazia a restauração do backup falhar com o erroBACKUP_ENTRY_NOT_FOUND. #82791 (Julia Kartseva). - Corrige uma mensagem de erro enganosa ao restaurar um backup em um disco somente leitura. #83051 (Julia Kartseva).
- Corrige o acionamento de backups internos desnecessários após problemas de conexão. #84755 (Vitaly Baranov).
Funções de janela e de agregação
- Corrige uma possível falha em
Aggregatorem caso de exceção durante o merge. #81450 (Nikita Taranov). - Corrige uma possível falha em
Aggregatorem caso de exceção durante o merge. #82022 (Nikita Taranov). - Corrige um erro de copiar e colar em arraySimilarity, impedindo o uso de pesos UInt32 e Int32. Atualiza os testes e a documentação. #82103 (Mikhail f. Shiryaev).
- Corrige overflow nas funções
numericIndexedVectorPointwiseAdd,numericIndexedVectorPointwiseSubtract,numericIndexedVectorPointwiseMultiply,numericIndexedVectorPointwiseDivide, que ocorria quando eram aplicadas a números grandes. #82165 (Raufs Dunamalijevs).
Correções no Parquet e no formato de arquivo
- Corrige o filtro de Bloom do Parquet, que aplicava incorretamente uma condição como
WHERE function(key) IN (...)como se fosseWHERE key IN (...). #81255 (Michael Kolupaev). - Corrige o gravador do Parquet, que gerava estatísticas incorretas (mín./máx.) para tipos Decimal. #83754 (Michael Kolupaev).
- Corrige a desserialização de
groupArraySample/groupArrayLastno caso de elementos vazios (a desserialização podia pular parte dos dados binários se a entrada estivesse vazia, o que pode levar à corrupção durante a leitura dos dados e a UNKNOWN_PACKET_FROM_SERVER no protocolo TCP). Isso não afeta números nem tipos de data e hora. #82763 (Pedro Ferreira). - Corrige a gravação de caminhos JSON com valores NULL no formato RowBinary. #83923 (Pavel Kruglov).
Correções de JOIN
- Corrige a modificação de filtros em consultas com uma expressão JOIN sobre uma tabela com armazenamento
Merge. Corrige #82092. #82950 (Dmitry Novik). - Corrige a falha quando um armazenamento chave-valor é associado usando uma chave com conversão de tipo. #82497 (Pervakov Grigorii).
- Corrige o erro lógico ao resolver o matcher em uma consulta com múltiplas junções, fechando #81969. #82421 (Vladimir Cherkasov).
- Corrige a mesclagem de filtros na condição de JOIN nos casos em que os operandos de igualdade têm tipos diferentes ou fazem referência a constantes. Corrige #83432. #84145 (Dmitry Novik).
- Corrige o erro lógico
Expected single dictionary argument for functionao fazer JOIN em uma condição de desigualdade quando uma das colunas éLowCardinalitye a outra é uma constante. Fecha #81779. #84019 (Alexey Milovidov).
Correções no banco de dados Replicated
- Corrige
markReplicasActiveemDDLWorkereDatabaseReplicatedDDLWorker. #81395 (Tuan Pham Anh). - Corrige
DatabaseReplicated::getClusterImpl. Se o primeiro elemento (ou elementos) dehoststiverid == DROPPED_MARKe não houver outros elementos para o mesmo shard, o primeiro elemento deshardsserá um vetor vazio, resultando emstd::out_of_range. #82093 (Miсhael Stetsyuk). - Passa a acompanhar o número de jobs assíncronos de carregamento de tabelas. Se houver jobs em execução, não atualize
tail_ptremTransactionLog::removeOldEntries. #82824 (Tuan Pham Anh). - Corrige o problema em que, se uma tabela MergeTree for criada com
add_minmax_index_for_numeric_columns=1ouadd_minmax_index_for_string_columns=1, o índice é posteriormente materializado durante uma operação ALTER, o que impede que o banco de dados Replicated seja inicializado corretamente em uma nova réplica. #83751 (Nikolay Degterinsky). - Corrige a criação de RMV em uma nova réplica do banco de dados Replicated caso o DEFINER tenha sido removido. #85327 (Nikolay Degterinsky).
- Corrige a recuperação de bancos de dados replicados quando a movimentação do arquivo de metadados demora muito. #85177 (Tuan Pham Anh).
- Recupera o banco de dados Replicated de forma forçada após restaurar os metadados do banco de dados no Keeper. #85960 (Tuan Pham Anh).
- Corrige um bug na recuperação do banco de dados
Replicated: se o nome de uma tabela contiver o símbolo%, ela poderá ser recriada com um nome diferente durante a recuperação. #85987 (Alexander Tokmakov). - Agora, o worker de DDL remove hosts desatualizados do conjunto de réplicas. Isso reduzirá a quantidade de metadados armazenados no ZooKeeper. #88154 (alesapin).
Correções em atualizações leves
- Corrige atualizações leves para tabelas com os motores
ReplacingMergeTreeeCollapsingMergeTree. #84851 (Anton Popov). - Corrige um erro lógico em atualizações leves que atualizam todas as colunas da tabela. #84380 (Anton Popov).
- Corrige atualizações leves para tabelas com o motor
ReplicatedMergeTreecriadas em servidores com versão inferior a 25.7. #84933 (Anton Popov). - Corrige atualizações leves para tabelas com motor
MergeTreenão replicado após executar uma consultaALTER TABLE ... REPLACE PARTITION. #84941 (Anton Popov). - Corrige a limpeza de patch parts no
ReplicatedMergeTree. Antes, o resultado de uma atualização leve podia temporariamente não estar visível na réplica até que a parte mesclada ou alterada que materializa as patch parts fosse baixada de outra réplica. #85121 (Anton Popov).
Correções de S3 e armazenamento de objetos
- Corrige a validação de argumentos da função de tabela S3 no mascaramento de segredos, evitando um possível
LOGICAL_ERROR; fecha #80620. #82056 (Vladimir Cherkasov). - Corrige um possível deadlock em consultas remotas quando o servidor está sob pressão de memória. #82160 (Kirill).
- Adiciona expiração ao token do AWS ECS para que ele possa ser recarregado. #82422 (Konstantin Bogdanov).
- Corrige a desativação do alinhamento de limites para buffer em cache em motores de tabela externos. Isso parou de funcionar em https://github.com/ClickHouse/ClickHouse/pull/81868. #82493 (Kseniia Sumarokova).
- Corrige
no_sign_requestpara o cliente S3. Ele pode ser usado para evitar explicitamente a assinatura de requisições S3. Também pode ser definido para endpoints específicos usando configurações baseadas em endpoint. #83379 (Antonio Andelic). - Ignora nós indisponíveis durante INSERT SELECT de s3Cluster() em um MergeTree replicado. #83676 (Igor Nikonov).
- Corrige a condição de retorno antecipado para desaceleração da taxa de requisições S3: exige que s3_slow_all_threads_after_network_error ou backup_slow_all_threads_after_retryable_s3_error seja true para habilitar o comportamento de desaceleração quando todas as threads estiverem pausadas devido a um erro que permite nova tentativa, em vez de exigir ambos. #85505 (Julia Kartseva).
- Corrige erro lógico ao ler de funções de armazenamento de objetos por meio de uma tabela distribuída ou da função de tabela remote. Corrige: #84658, #85173, #52022. #85359 (alesapin).
- Corrige o erro lógico do S3Queue “Table is already registered”. Fecha #84433. Isso parou de funcionar após https://github.com/ClickHouse/ClickHouse/pull/83530. #84677 (Kseniia Sumarokova).
- Corrige valores grandes de configuração que quebravam tabelas S3Queue e a reinicialização de réplicas. #86074 (Nikolay Degterinsky).
Correções de Dynamic e Variant
- Corrige a reversão da coluna Dynamic em caso de falha de parsing. #82169 (Pavel Kruglov).
- Corrige uma possível falha no tipo Variant em UNION. #83295 (Pavel Kruglov).
- Corrige a leitura da coluna Variant com lazy materialization. #84400 (Pavel Kruglov).
- Não valida tipos experimentais/suspeitos durante a execução da expressão default/materialize ao ler de uma tabela existente. #81618 (Pavel Kruglov).
Correções do Keeper
- Correção no Keeper: atualizar corretamente a contagem total de watches quando nós efêmeros são excluídos ao encerrar a sessão. #83583 (Antonio Andelic).
- Corrige gravações fora de ordem no changelog do Keeper. Antes, podíamos ter gravações em andamento no changelog, mas um rollback podia causar uma alteração concorrente no arquivo de destino. Isso levava a logs inconsistentes e a possível perda de dados. #84434 (Antonio Andelic).
- Corrige vazamentos de memória no Keeper com armazenamento RocksDB (os iteradores não eram destruídos). #84523 (Azat Khuzhin).
- Corrige um problema em que a configuração do Keeper
rotate_log_storage_interval = 0fazia o ClickHouse travar. (problema #83975). #84637 (George Larionov). - Corrige a contagem total de watches retornada pelo Keeper. #84890 (Antonio Andelic).
- Bloqueia o ‘mutex’ ao obter o ZooKeeper da ‘view’ em RefreshTask. #84699 (Tuan Pham Anh).
Correções de indexação
- Corrigido o skipping excessivo de grânulos na filtragem com índices token/ngram em regexp que contêm alternância e cuja primeira alternativa não é literal. #79373 (Eduard Karacharov).
- A implementação da configuração
use_skip_indexes_if_final_exact_mode(introduzida na 25.6) podia deixar de selecionar um intervalo candidato relevante, dependendo das configurações do motorMergeTree/ da distribuição dos dados. Isso já foi resolvido. #82667 (Shankar Iyer). - A otimização da configuração
use_skip_indexes_if_final_exact_mode(introduzida na 25.6) podia deixar de selecionar um intervalo candidato relevante, dependendo das configurações do motorMergeTree/ da distribuição dos dados. Isso já foi resolvido. #82879 (Shankar Iyer). - Anteriormente, os índices
setnão consideravam colunasNullableao verificar se os grânulos satisfaziam o filtro (problema #75485). #84305 (Elmi Ahmadov). - A comparação com o valor NaN não estava usando os intervalos corretos durante a avaliação do índice
MinMax. #84386 (Elmi Ahmadov). - Os tokenizers
ngrameno_opnão causam mais falhas no índice de texto (experimental) com tokens de entrada vazios. #84849 (Robert Schulze).
Correções em visões materializadas
- Corrigido um bug nas dependências de tabelas que fazia com que visões materializadas deixassem de processar consultas INSERT. #82222 (Nikolay Degterinsky).
- Após https://github.com/ClickHouse/ClickHouse/pull/79963, o uso de subcolunas em visões materializadas deixou de funcionar, e o usuário pode ter recebido o erro
Not found column X in block. Esse comportamento foi corrigido. Corrige: #82784. #83221 (Nikita Mikhaylov). - Corrigido
illegal_type_of_argumentem mv quando os tipos diferem. #85135 (Sema Checherinda).
Correções no Azure e no armazenamento em nuvem
- No AzureBlobStorage, na cópia nativa, comparamos os métodos de autenticação; se ocorrer uma exceção nesse processo, o código passa a fazer fallback para leitura e cópia (ou seja, cópia não nativa). #82693 (Smita Kulkarni).
- Correção de double-free em
AzureIteratorAsync. #85064 (Nikita Taranov).
Correções de travamentos e estabilidade
- Corrige um possível travamento no logging ao encerrar uma sessão, pois o user_id às vezes pode estar vazio. #82513 (Bharat Nallan).
- Corrige um travamento no cliente devido à conexão permanecer em estado desconectado após um
INSERTinválido. #83253 (Azat Khuzhin). - Corrige um travamento ao calcular o tamanho de um bloco com colunas vazias. #83271 (Raúl Marín).
- Corrige um travamento que pode ocorrer em uma consulta com a configuração ‘max_threads=1’ quando executada sob carga com agendamento de CPU habilitado. #83387 (Fan Ziqi).
- Faz com que
zoutofmemoryseja tratado como erro de hardware; caso contrário, ele gerará um erro lógico. Veja https://github.com/clickhouse/clickhouse-core-incidents/issues/877. #84420 (Han Fei). - Corrige um possível abort (devido ao join de threads da tarefa) e, possivelmente, travamentos (em testes unitários) durante o desligamento de
BackgroundSchedulePool. #83769 (Azat Khuzhin). - Corrige um deadlock causado pela thread de verificação de cancelamento em segundo plano. #84203 (Antonio Andelic).
- Corrige um deadlock no desligamento devido ao bloqueio recursivo de contexto durante a limpeza da library bridge. #83824 (Azat Khuzhin).
- Corrige um travamento no cliente devido à conexão permanecer em estado desconectado após um
INSERTinválido. #83842 (Azat Khuzhin). - Corrige possível UB (travamentos) em caso de
MEMORY_LIMIT_EXCEEDEDdurante a desserialização de String. #85440 (Azat Khuzhin). - Corrige um travamento raro em inserções assíncronas que alteram as configurações
log_commentouinsert_deduplication_token. #85540 (Anton Popov).
Correções no Glue e no catalog
- Corrigido um bug na integração com o Glue catalog. Agora o ClickHouse pode ler tabelas com tipos de dados aninhados em que algumas subcolunas contêm decimais, por exemplo:
map<string, decimal(9, 2)>. Corrige #81301. #82114 (alesapin). - O ClickHouse agora lê tabelas do Glue Catalog em que o tipo da tabela é especificado em minúsculas. #84316 (alesapin).
- O Unity Catalog agora ignora schemas com tipos de dados incomuns no caso de tabelas que não são Delta. Corrige #85699. #85950 (alesapin).
Correções de funções
- As funções
trim{Left,Right,Both}agora oferecem suporte a strings de entrada do tipo “FixedString(N)”. Por exemplo,SELECT trimBoth(toFixedString('abc', 3), 'ac')agora funciona. #82691 (Robert Schulze). - A função
trim, quando chamada com todas as entradas constantes, agora produz uma string de saída constante. (Bug #78796). #82900 (Robert Schulze). - Corrige a saída incorreta da função
formatDateTimequando o formatador%fé usado junto com formatadores de tamanho variável (por exemplo,%M). #83020 (Robert Schulze). - Corrige um bug relacionado a argumentos
NULLna funçãoCASE. #82436 (Yarik Briukhovetskyi). - Não usa partes não relacionadas de um dicionário compartilhado na função
lowCardinalityKeys. #83118 (Alexey Milovidov). - Corrige
colorSRGBToOKLCH/colorOKLCHToSRGBpara uma combinação de argumentos constantes e não constantes. #83906 (Azat Khuzhin). - Corrige a construção incorreta de tuplas vazias na função
array(). Isso corrige #84202. #84297 (Amos Bird). - Corrige um bug que causava codificação e decodificação Bech32 incorretas. O bug não foi detectado originalmente porque uma implementação online do algoritmo usada nos testes tinha o mesmo problema. #84257 (George Larionov).
Correções em consultas distribuídas
- O
INSERT SELECTdistribuído em paralelo comLIMITera permitido indevidamente, o que levava à duplicação de dados na tabela de destino. #84477 (Igor Nikonov). - Não tente substituir funções de tabela por sua alternativa para cluster na presença de um
JOINou de uma subconsulta. #84335 (Konstantin Bogdanov). - Adiciona uma verificação para o uso de subconsulta correlacionada em um contexto distribuído, evitando uma falha. Corrige #82205. #85030 (Dmitry Novik).
- Usar
distributed_depthcomo indicador da função*Clusterestava incorreto e podia levar à duplicação de dados; useclient_info.collaborate_with_initiatorem vez disso. #85734 (Konstantin Bogdanov). - Oferece suporte a constantes globais da instrução
WITHpara oINSERT SELECTdistribuído em paralelo com a tabela de destinoDistributed. Antes, a consulta podia gerar um erroUnknown expression identifier. #85811 (Nikolai Kochetov). - Corrige um erro lógico ao tentar
CREATE ... AS (SELECT * FROM s3Cluster(...))comDatabaseReplicated. #85904 (Konstantin Bogdanov). - Adiciona verificações para
sharding_keydurante o ALTER da tabelaDistributed. Antes, um ALTER incorreto quebrava a definição da tabela e impedia a reinicialização do servidor. #86015 (Nikolay Degterinsky).
Correções de métricas e monitoramento
- Corrige a validação das configurações de métricas assíncronas
asynchronous_metrics_update_period_seasynchronous_heavy_metrics_update_period_s. #82310 (Bharat Nallan). - Corrige as métricas
IndexUncompressedCacheBytes/IndexUncompressedCacheCells/IndexMarkCacheBytes/IndexMarkCacheFiles(anteriormente, elas eram incluídas em uma métrica sem o prefixoCache). #83730 (Azat Khuzhin). - Corrige
LOGICAL_ERRORem QueryMetricLog: Mutex não pode serNULL. #82979 (Pablo Marcos). - Corrige as métricas incorretas KafkaAssignedPartitions e KafkaConsumersWithAssignment. #85494 (Ilya Golshtein).
- Corrige a subestimação da estatística de bytes processados quando
PREWHERE(explícito ou automático) é usado. #85495 (Michael Kolupaev). - Corrige o descompasso no rastreamento de memória causado pelo background schedule pool e pelo executor. #84946 (Azat Khuzhin).
Correções de tipo de dado e conversão
- Corrigidos casos em que o parsing de Time podia causar problemas de msan. Corrige: #82477. #82514 (Yarik Briukhovetskyi).
- Corrigida a ordenação de valores NaN no tipo
LowCardinality(Float32|Float64|BFloat16). #83786 (Pervakov Grigorii). - Corrigido o overflow de valores grandes (>2106-02-07) ao converter de
DateparaDateTime64. #83982 (Yarik Briukhovetskyi). - Corrigido um problema com a leitura implícita de valores Time negativos na tabela, e a documentação ficou mais clara. #83091 (Yarik Briukhovetskyi).
- O codec
DoubleDeltaagora só pode ser aplicado a colunas de tipo numérico. Em particular, colunasFixedStringnão podem mais ser comprimidas comDoubleDelta. (corrige #80220). #84383 (Jimmy Aguilar Mena). - Corrigida a perda de precisão em
JSONExtractao converter números JSON para tipos Decimal. Agora, valores numéricos em JSON preservam sua representação decimal exata, evitando erros de arredondamento de ponto flutuante. #85665 (ssive7b).
Gerenciamento de memória e recursos
- Corrigido o uso incorreto de memória relacionado a
max_untracked_memory. #83607 (Azat Khuzhin). async_read_countersnão é mais compartilhado entre consultas. #83423 (Azat Khuzhin).- Corrigidos possíveis erros de
File Cachenão inicializado ao usá-lo como armazenamento temporário de dados. #83539 (Bharat Nallan). filesystem_prefetches_limitagora é sempre aplicado (não apenas emMergeTreePrefetchedReadPool). #83999 (Azat Khuzhin).
Correções de configuração e ajustes
- Ao passar configurações via URI, considera-se o último valor. #82137 (Sema Checherinda).
- Corrige condições de corrida no cliente (ao não usar contexto global) e substituições de
session_timezone(anteriormente, sesession_timezonefosse definido, por exemplo, emusers.xml/nas opções do cliente como não vazio e no contexto da consulta como vazio, o valor deusers.xmlera usado, o que estava incorreto; agora, o contexto da consulta sempre terá prioridade sobre o contexto global). #82444 (Azat Khuzhin). - Proíbe definir
threadpool_writer_pool_sizecomo zero para garantir que as operações do servidor não fiquem travadas. #82532 (Bharat Nallan). - Corrige um pequeno overflow de inteiro na configuração de
role_cache_expiration_time_seconds(problema #83374). #83461 (wushap). - Proíbe o valor zero para max_insert_block_size, pois isso poderia causar erro lógico. #83688 (Bharat Nallan).
- Corrige um loop infinito em
estimateCompressionRatio()com block_size_bytes=0. #83704 (Azat Khuzhin). - Parâmetros como
date_time_input_formateram simplesmente ignorados ao usar HTTP com multipart. #85570 (Sema Checherinda).
Correções do MongoDB
- Antes, definições do mecanismo de tabela
MongoDBpodiam incluir um componente de caminho no argumentohost:port, que era ignorado silenciosamente. A integração com MongoDB se recusa a carregar essas tabelas. Com esta correção, permitimos carregar essas tabelas e ignoramos o componente de caminho se o motorMongoDBtiver cinco argumentos, usando o nome do banco de dados informado nos argumentos. Observação: A correção não é aplicada a tabelas recém-criadas nem a consultas com a função de tabelamongo, nem a fontes de dicionário e coleções nomeadas. #81942 (Vladimir Cherkasov).
Correções diversas
- Em versões anteriores, o servidor retornava conteúdo em excesso em solicitações para
/js. Isso resolve #61890. #81895 (Alexey Milovidov). - Corrige
InterpreterInsertQuery::extendQueryLogElemImplpara adicionar crases aos nomes de banco de dados e tabela quando necessário (por exemplo, quando os nomes contêm caracteres especiais como-). #81528 (Ilia Shvyrialkin). - Corrige uma possível corrida de dados entre a thread de sugestões e a thread principal do cliente. #82233 (Azat Khuzhin).
- Corrige a segurança no tratamento de exceções na reescrita de
union/intersect/except_default_mode. Fecha #82664. #82820 (Alexey Milovidov). - Ao usar uma implementação de Database sem cache, os metadados da tabela correspondente são excluídos após o retorno das colunas, e a referência é invalidada. #82939 (buyval01).
- A chamada Onprogress no JSONEachRowWithProgress é sincronizada com a finalização. #83879 (Sema Checherinda).
- Corrige um bug raro em que a consulta
MATERIALIZE COLUMNpodia resultar em arquivos inesperados emchecksums.txte, por fim, em partes de dados desanexadas. #84007 (alesapin). - Trate adequadamente as exceções na atualização periódica das partes. #84083 (Azat Khuzhin).
- Corrige a geração de nomes de colunas para literais booleanos, passando a usar “true”/“false” em vez de “1”/“0”, evitando conflitos entre nomes de colunas de literais booleanos e inteiros em consultas. #84945 (xiaohuanlin).
- Corrige possíveis problemas de ordenação incorreta no mecanismo de tabela Merge. #85025 (Xiaozhe Yu).
- Implementar as APIs ausentes para DiskEncrypted. #85028 (Azat Khuzhin).
- Adiciona uma configuração de retrocompatibilidade para permitir que o novo analisador referencie um alias externo na cláusula
WITHem caso de conflito de nomes. Corrige #82700. #83797 (Dmitry Novik). - Permite referenciar qualquer tabela no argumento
view(...)da função de tabelaremotecom o analisador habilitado. Corrige #78717. Corrige #79377. #83844 (Dmitry Novik). - Corrigida a escrita com append (no MergeTree usado para transações experimentais) com os tipos de metadados
plain_rewritable/plain, que antes eram simplesmente ignorados. #83695 (Tuan Pham Anh). - Corrigido o uso do logger em
IAccessStorage. #84365 (Konstantin Bogdanov). - Corrige a poda de arquivos com base em coluna virtual em lagos de dados. #84520 (Kseniia Sumarokova).
- Corrige um problema em que, ao consultar uma fonte remota com atraso, podia ocorrer um acesso a vetor fora dos limites. #84820 (George Larionov).
- Armazena corretamente todas as configurações nos metadados da tabela do mecanismo de fila de objetos. #84860 (Antonio Andelic).
- Corrigido o erro
CORRUPTED_DATAquando colunas lazy são usadas com ordenação externa. #84738 (János Benjamin Antal). - Remove chamadas desnecessárias de
getStatus()durante consultasSYSTEM DROP REPLICA. Corrige o caso em que uma tabela é removida em segundo plano e a exceçãoShutdown for storage is calledé lançada. #85220 (Nikolay Degterinsky). - Adicionar as verificações ausentes para o comprimento do nome da tabela nas consultas
CREATE OR REPLACEeRENAME. #85326 (Michael Kolupaev). - Corrige travamento e corrupção de dados durante
ALTER UPDATEem JSON. #85383 (Pavel Kruglov). - Corrige segfault na coalescing merge tree com strings grandes. Fecha #84582. #85709 (scanhex12).
- Correção de send_logs_source_regexp (após a refatoração do logging assíncrono em #85105). #85797 (Azat Khuzhin).
- Corrige uma possível inconsistência em dicionários com update_field em erros
MEMORY_LIMIT_EXCEEDED. #85807 (Azat Khuzhin). - Corrige as requisições HTTP feitas pela função de tabela
url()para incluir corretamente os números de porta no cabeçalho Host ao acessar portas não padrão. Isso resolve falhas de autenticação ao usar URLs pré-assinadas com serviços compatíveis com S3, como o MinIO, executado em portas personalizadas, algo comum em ambientes de desenvolvimento. (Corrige #85898). #85921 (Tom Quist).