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 COLUMN ou DROP COLUMN em colunas explicitamente listadas para soma no SummingMergeTree. Fecha #81836. #82821 (Alexey Milovidov).
Melhorias nas funções
- Introduz um novo argumento
unexpected_quoting_character_strategy na função extractKeyValuePairs, que controla o que acontece quando um quoting_character é encontrado inesperadamente. Para mais detalhes, consulte a documentação de extractKeyValuePairs. #80657 (Arthur Passos).
- Anteriormente, a função
countMatches parava de contar na primeira correspondência vazia, mesmo que o padrão a aceitasse. Para contornar esse problema, countMatches agora 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ção count_matches_stop_at_empty_match. #81676 (Elmi Ahmadov).
Melhorias em tipos de dados
- Melhora a precisão da conversão de
Decimal para Float32. Implementa a conversão de Decimal para BFloat16. 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_server e max_local_write_bandwidth_for_server) e remoto (max_remote_read_network_bandwidth_for_server e max_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_server e max_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 como false por 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_scheduler era round_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 torna fair_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 REPLICAS reiniciará apenas as réplicas nos bancos de dados em que você tiver permissão para SHOW 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, deltaLakeAzure e icebergAzure foram atualizadas para validar corretamente as permissões de AZURE. 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 -Cluster tenham os privilégios apropriados (por exemplo, GRANT S3 ON *.* TO user). Além disso, as funções icebergLocal e deltaLakeLocal agora também aplicam verificações da permissão FILE. #84938 ([Nikita Mikhaylov](https://github.com/nikitamikhaylov
Novos recursos
Tipos de dados
- Adicionados novos tipos de dados:
Time ([H]HH:MM:SS) e Time64 ([H]HH:MM:SS[.fractional]), além de algumas funções básicas de conversão de tipo e funções para interagir com outros tipos de dados. Adicionadas configurações de compatibilidade com a função legada ToTime. #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
polygonIntersectsCartesian e polygonIntersectsSpherical para verificar se dois polígonos se intersectam. #81882 (Paul Lamb).
- Suporte para as funções de janela
lag e lead. Fecha #9887. #82108 (Dmitry Novik).
- Adicionadas as funções
colorSRGBToOkLCH e colorOkLCHToSRGB para 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 de JSONExtract). #83770 (Alistair Evans).
- Adicionada a nova função
nowInBlock64. #84178 (Halersson Paris).
- Adiciona a função
dateTimeToUUIDv7 para converter um valor DateTime em UUIDv7. Exemplo de uso: SELECT dateTimeToUUIDv7(toDateTime('2025-08-15 18:57:56')) retorna 0198af18-8320-7a7d-abd3-358db23b9d5c. #84319 (samradovich).
- Adiciona as funções de agregação
timeSeriesDerivToGrid e timeSeriesPredictLinearToGrid para reamostrar dados em uma grade de tempo definida pelo timestamp inicial, timestamp final e passo especificados; elas calculam deriv e predict_linear no estilo do PromQL, respectivamente. #84328 (Stephen Chi).
- Adicionadas as funções
timeSeriesRange e timeSeriesFromGrid. #85435 (Vitaly Baranov).
Tabelas de sistema
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 TABLE para Iceberg (remoção dos catálogos REST/Glue + remoção dos metadados da tabela). #85395 (scanhex12).
- Suporte a mutações
ALTER DELETE para 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
Float32 e Float64. #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 definindo lightweight_delete_mode = 'lightweight_update'. #82004 (Anton Popov).
- Adicionado suporte à coluna virtual
_part_granule_offset em 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
Recursos de SQL e de consulta
- Adicionada a configuração
format_schema_source, que define a origem de format_schema. #80874 (Tuan Pham Anh).
- Adicionado
Hash como 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 Hash retorna e5f9e676db098fdb9530d2059d8c23ef. #84607 (Robert Schulze).
Configuração do servidor e gerenciamento de workloads
- A configuração do servidor
cpu_slot_preemption habilita 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_share e max_burst_cpu_seconds. #80879 (Sergei Trifonov).
- A configuração de workload
max_waiting_queries agora é 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 erro SERVER_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_credentials ao AzureBlobStorage para autenticação com client_id e tenant_id. #84235 (Pablo Marcos).
Keeper
Recursos experimentais
Motores de tabela e funções de tabela
Melhorias no índice de texto
- Adicionadas as funções
searchAny e searchAll, 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
text foi 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
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
TOTALS agora é multithread. #80331 (UnamedRus).
- Quando a consulta de agregação contém apenas uma função
COUNT() em uma coluna NOT 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
addManyDefaults para combinadores -If. #83870 (Raúl Marín).
Otimizações de JOIN
- Adicionada a nova configuração
min_joined_block_size_rows (análoga a min_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
HashJoin foi 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 de null_map e join_mask são eliminadas quando são sempre true/false. #82308 (Nikita Taranov).
- As otimizações para
null_map e JoinMask de #82308 foram aplicadas ao caso de JOIN com múltiplos disjuntos. Além disso, a estrutura de dados KnownRowsHolder foi otimizada. #83041 (Nikita Taranov).
- Um
std::vector<std::atomic_bool> simples é usado para flags de join, evitando o cálculo de 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
HashJoin usa o modo de saída lazy. 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/INNER serão convertidos automaticamente para RightAny se 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 SELECT distribuído em paralelo fica habilitado por padrão no modo em que o INSERT SELECT é executado em cada shard de forma independente; consulte a configuração parallel_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 SELECT distribuído em paralelo fica habilitado por padrão no modo em que INSERT SELECT é executado em cada shard de forma independente; consulte a configuração parallel_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_seek em filterPartsByQueryConditionCache, 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 que column não é do tipo Array. Isso melhora o desempenho dessas consultas, tornando-as tão eficientes quanto o operador IN. #83945 (Doron David).
- 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
JOIN redundantes com o uso de classes de equivalência. Se houver expressões equivalentes para todas as colunas correlacionadas, CROSS JOIN não será gerado se a configuração query_plan_correlated_subqueries_use_substitution estiver habilitada. #82435 (Dmitry Novik).
- 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
azureBlobStorage agora 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
Curl definindo azure_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 PARTITION nã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 chamar cancel. #84311 (Alexander Tokmakov).
- 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ção input_format_parquet_use_native_reader_v3 para 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
JSON a partir de dados compartilhados no MergeTree com a implementação de novas serializações para dados compartilhados de JSON no 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
Melhorias no logging
Otimizações de funções
- Otimizado
largestTriangleThreeBuckets com 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
byteSize para 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
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,
READ e WRITE, 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ões READ e WRITE para fontes, por exemplo: GRANT READ ON * TO user, GRANT WRITE ON S3 TO user. O recurso é controlado pela configuração access_control_improvements.enable_read_write_grants e fica desabilitado por padrão. #73659 (pufit).
- Permite usar parâmetros em consultas
CREATE USER para nomes de usuário. #81387 (Diskein).
- Exclui dados sensíveis de core dumps. Adiciona dois alocadores:
AwsNodumpMemoryManager, compatível com a biblioteca AWS, e JemallocNodumpSTLAllocator, compatível com STL. Ambos são wrappers do alocador jemalloc. Eles usam os extent hooks do jemalloc e madvise para 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_headers de autenticação externa sem diferenciar maiúsculas de minúsculas. #84737 (ingodwerust).
- Adiciona uma coluna
parameter a system.grants para determinar o tipo de fonte em GRANT READ/WRITE e a engine da tabela em GRANT TABLE ENGINE. #85643 (MikhailBurdukov).
Backup e restauração
Integridade e validação de dados
- Verifica se a parte tem um arquivo
checksum.txt consistente imediatamente antes do commit. #76625 (Sema Checherinda).
- Proíbe iniciar a mutação ALTER
RENAME COLUMN se ela renomear alguma coluna que, no momento, esteja afetada por uma mutação de dados incompleta. #81823 (Mikhail Artemenko).
- 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.json comprimidos 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.json comprimido por meio da configuração iceberg_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 API ExpressionVisitor, 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, esse ExpressionVisitor també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 tabela DeltaLakeCluster (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 armazenamento DeltaLake. #84006 (Kseniia Sumarokova).
- Adiciona uma configuração
delta_lake_enable_expression_visitor_logging para 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_version para permitir a leitura de uma versão específica de snapshot no motor de tabela DeltaLake. #85295 (Kseniia Sumarokova).
- Acelera a listagem de tabelas em catálogos de dados com solicitações assíncronas. #81084 (alesapin).
- Adiciona suporte a
TimestampTZ no Glue catalog. Isso resolve #81654. #83132 (scanhex12).
- Divide
FormatParserGroup em duas structs independentes: a primeira é responsável pelos recursos compartilhados de processamento e E/S, e a segunda pelos recursos compartilhados de filtro (ActionDag de filtro, KeyCondition). Isso permite um uso compartilhado mais flexível dessas estruturas por diferentes threads. #83997 (Daniil Ivanik).
- Adiciona o
partition_columns_in_data_file ausente à configuração do Azure. #85373 (Arthur Passos).
- Adiciona a flag
show_data_lake_catalogs_in_system_tables para controlar a inclusão de tabelas de lago de dados em system.tables, resolvendo #85384. #85411 (Smita Kulkarni).
S3 e armazenamento de objetos
- Implementa os métodos
moveFile e replaceFile em s3_plain_rewritable para 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_server e max_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_error está 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ção keeper_path do 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_time e commit_id a system.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 de S3Queue: min_insert_block_size_rows_for_materialized_views e min_insert_block_size_bytes_for_materialized_views. Por padrão, serão usadas as configurações no nível de profile, e as configurações no nível de S3Queue as substituirão. #83971 (Kseniia Sumarokova).
- Correção no modo ordenado do S3Queue: encerra mais cedo se o desligamento tiver sido acionado. #84463 (Kseniia Sumarokova).
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
ProfileEvent quando 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_recursive no 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_acl ao KeeperClient. #84641 (Antonio Andelic).
- Adiciona o 4LW
lgrq ao 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_decrypt agora 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_threshold e keeper_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 em system.parts_columns. #81091 (Pavel Kruglov).
- Permitido
ALTER UPDATE em colunas JSON e Dynamic. #82419 (Pavel Kruglov).
- Agora você pode usar os tipos
Time e Time64 dentro do tipo JSON. #83784 (Yarik Briukhovetskyi).
- Adicionada a configuração
json_type_escape_dots_in_keys para escapar pontos em chaves JSON durante o parsing do tipo JSON. A configuração fica desabilitada por padrão. #84207 (Pavel Kruglov).
- 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
enum do 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 argumento address_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=0 e relate o problema. #83801 (Vladimir Cherkasov).
Configurações e definições
- Marca a configuração
allow_experimental_join_condition como 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_users e max_network_bandwidth_for_all_users nunca sejam excedidos. #81729 (Sergei Trifonov).
- Introduz a configuração
optimize_rewrite_regexp_functions (habilitada por padrão), que permite ao otimizador reescrever determinadas chamadas de replaceRegexpAll, replaceRegexpOne e extract em 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_server e max_local_write_bandwidth_for_server dinamicamente, 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 existente allow_experimental_vector_similarity_index agora está obsoleta. Ela ainda funciona caso alguém precise usá-la. #83459 (Robert Schulze).
- Adiciona
max_joined_block_size_bytes, além de max_joined_block_size_rows, para limitar o uso de memória de JOINs com colunas 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 subconsultas correlacionadas. #85107 (Dmitry Novik).
- Adiciona as configurações
database_replicated, que definem os valores padrão de DatabaseReplicatedSettings. 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
s3 ou na table engine/function s3Cluster, por exemplo s3('url', CSV, structure = 'a Int32', compression_method = 'gzip'). #85134 (Kseniia Sumarokova).
- Executa
EXISTS nã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ção execute_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 JOIN com o analyzer antigo. Introduz uma nova configuração analyzer_compatibility_allow_compound_identifiers_in_unflatten_nested para manter o comportamento antigo. #85492 (Nikolai Kochetov).
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, MarkCacheEvictedMarks e MarkCacheEvictedFiles para rastrear remoções do mark cache. (issue #60989). #80799 (Shivji Kumar Jha).
- A tabela
system.formats agora 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.warnings usando TRUNCATE 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 de part_log para entradas MergeParts. #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 nomes OS<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.columns agora fornece column como alias da coluna name existente. #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_DATABASE ao 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 exceda max_replication_lag_to_enqueue. Isso ajuda a evitar erros DDL task is not finished on some hosts quando 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 consulta SYSTEM SYNC DATABASE REPLICA STRICT, que espera o log de replicação ficar abaixo de max_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ão logs_to_keep para 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_recovery para 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 REPLICA para 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::executeMetadataAlter para evitar definições incorretas de tabelas quando tabelas são trocadas entre a obtenção do StorageID e a chamada de IDatabase::alterTable. #82666 (Nikolay Degterinsky).
- Remove a lógica experimental
send_metadata relacionada à 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
addressToSymbol e a tabela system.symbols passarã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
Time e Time64 nos formatos MM:SS, M:SS, SS ou S. #83299 (Yarik Briukhovetskyi).
- A função
reinterpret() agora oferece suporte à conversão para Array(T), em que T é um tipo de dados de tamanho fixo (issue #82621). #83399 (Shankar Iyer).
- Corrige as funções
structureToProtobufSchema e structureToCapnProtoSchema para 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 (como logTrace, demangle, extractURLParameter, toStringCutToZero e encrypt/decrypt). Fecha #85062. #85063 (Alexey Milovidov).
- Corrige o layout de dicionário
regexp_tree para 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 formato Values ou 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
stem que poderia causar vazamentos de memória em casos raros. #85063 (Alexey Milovidov).
- Corrige a função
initcap para argumentos FixedString, 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
ORC que poderia expor memória não inicializada. #85063 (Alexey Milovidov).
- Alterado o comportamento de
replaceRegexpAll e seu alias REGEXP_REPLACE para 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
byteSize para 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 #3 de 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_drives para limitar o escopo da busca por partes, por exemplo, por disks com metadados locais. #84710 (Ilya Golshtein).
- Adiciona o suporte ausente de
read_in_order_use_virtual_row para WHERE. Isso permite evitar a leitura de mais partes em queries com filtros que não foram totalmente propagados para PREWHERE. #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 queries SELECT apó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
nan e inf com NumericIndexedVector. 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_multiplier foi 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/block existir, 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
INSERT com visões materializadas que têm instruções SELECT malformadas, e o usuário podia receber uma std::exception obscura 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,
getStatus lança uma exceção ErrorCodes::ABORTED. Antes, isso fazia a consulta SELECT falhar. Agora, capturamos as exceções ErrorCodes::ABORTED e 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).
- Corrige a formatação inconsistente de
CREATE DICTIONARY. Fecha #82105. #82829 (Alexey Milovidov).
- Corrige a formatação inconsistente de
TTL quando contém uma função materialize. Fecha #82828. #82831 (Alexey Milovidov).
- Corrige a formatação inconsistente de
EXPLAIN AST em uma subconsulta quando ela contém opções de saída, como INTO OUTFILE. Fecha #82826. #82840 (Alexey Milovidov).
- Corrige a formatação inconsistente de expressões entre parênteses com aliases 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
simdjson em arquiteturas não suportadas (antes, isso levava a erros CANNOT_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 IN nas 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.symbolize por 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
Correções na execução de consultas
- Para consultas com a combinação
ORDER BY ... LIMIT BY ... LIMIT N, quando ORDER BY é executado como PartialSorting, o contador rows_before_limit_at_least agora reflete o número de linhas consumidas pela cláusula LIMIT, em vez do número de linhas consumidas pela 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
loop quando usada com a família de funções remote. Garante que a cláusula LIMIT seja respeitada em loop(remote(...)). #80299 (Julia Kartseva).
- Corrige o comportamento incorreto das funções
to_utc_timestamp e from_utc_timestamp ao 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
IN com transform_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 column em consultas com arrayJoin na condição WHERE e IndexSet. #82113 (Nikolai Kochetov).
- Corrige a exceção
TOO_DEEP_SUBQUERIES quando a definição de CTE faz referência a outra expressão de tabela de mesmo nome. #83413 (Dmitry Novik).
- Corrige resultado incorreto em consultas com cláusula
WHERE ... IN (<subquery>) e cache de condições de consulta habilitado (configuração use_query_condition_cache). #83445 (LB7666).
INSERT SELECT com UNION ALL poderia levar à desreferenciação de um ponteiro nulo em um caso específico. Isso corrige #83618. #83643 (Alexey Milovidov).
- Corrige o
LOGICAL_ERROR durante 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 Set em IN (subquery) dentro da configuração additional_table_filters expression. #85210 (Nikolai Kochetov).
- Corrige o erro lógico com subconsultas duplicadas quando
optimize_syntax_fuse_functions está 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
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áusulas ORDER BY durante operações ALTER, 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
mergeTreeProjection quando enable_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_offset em 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_ERROR em consultas com réplicas paralelas e múltiplas junções INNER seguidas por uma junção RIGHT. Não use réplicas paralelas 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_password tenta fazer login após a configuração do servidor allow_no_password ser 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, icebergS3Cluster e icebergAzureCluster. #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
Memory vazia, que fazia a restauração do backup falhar com o erro BACKUP_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
Aggregator em caso de exceção durante o merge. #81450 (Nikita Taranov).
- Corrige uma possível falha em
Aggregator em 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).
- Corrige o filtro de Bloom do Parquet, que aplicava incorretamente uma condição como
WHERE function(key) IN (...) como se fosse WHERE key IN (...). #81255 (Michael Kolupaev).
- 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/groupArrayLast no 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 function ao fazer JOIN em uma condição de desigualdade quando uma das colunas é LowCardinality e a outra é uma constante. Fecha #81779. #84019 (Alexey Milovidov).
Correções no banco de dados Replicated
- Corrige
markReplicasActive em DDLWorker e DatabaseReplicatedDDLWorker. #81395 (Tuan Pham Anh).
- Corrige
DatabaseReplicated::getClusterImpl. Se o primeiro elemento (ou elementos) de hosts tiver id == DROPPED_MARK e não houver outros elementos para o mesmo shard, o primeiro elemento de shards será um vetor vazio, resultando em std::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_ptr em TransactionLog::removeOldEntries. #82824 (Tuan Pham Anh).
- Corrige o problema em que, se uma tabela MergeTree for criada com
add_minmax_index_for_numeric_columns=1 ou add_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
ReplacingMergeTree e CollapsingMergeTree. #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
ReplicatedMergeTree criadas em servidores com versão inferior a 25.7. #84933 (Anton Popov).
- Corrige atualizações leves para tabelas com motor
MergeTree não replicado após executar uma consulta ALTER 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_request para 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 = 0 fazia 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 motor MergeTree / 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 motor MergeTree / da distribuição dos dados. Isso já foi resolvido. #82879 (Shankar Iyer).
- Anteriormente, os índices
set não consideravam colunas Nullable ao 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
ngram e no_op não causam mais falhas no índice de texto (experimental) com tokens de entrada vazios. #84849 (Robert Schulze).
Correções em visões materializadas
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
INSERT invá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
zoutofmemory seja 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
INSERT inválido. #83842 (Azat Khuzhin).
- Corrige possível UB (travamentos) em caso de
MEMORY_LIMIT_EXCEEDED durante a desserialização de String. #85440 (Azat Khuzhin).
- Corrige um travamento raro em inserções assíncronas que alteram as configurações
log_comment ou insert_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
formatDateTime quando o formatador %f é usado junto com formatadores de tamanho variável (por exemplo, %M). #83020 (Robert Schulze).
- Corrige um bug relacionado a argumentos
NULL na função CASE. #82436 (Yarik Briukhovetskyi).
- Não usa partes não relacionadas de um dicionário compartilhado na função
lowCardinalityKeys. #83118 (Alexey Milovidov).
- Corrige
colorSRGBToOKLCH/colorOKLCHToSRGB para 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 SELECT distribuído em paralelo com LIMIT era 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
JOIN ou 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_depth como indicador da função *Cluster estava incorreto e podia levar à duplicação de dados; use client_info.collaborate_with_initiator em vez disso. #85734 (Konstantin Bogdanov).
- Oferece suporte a constantes globais da instrução
WITH para o INSERT SELECT distribuído em paralelo com a tabela de destino Distributed. Antes, a consulta podia gerar um erro Unknown expression identifier. #85811 (Nikolai Kochetov).
- Corrige um erro lógico ao tentar
CREATE ... AS (SELECT * FROM s3Cluster(...)) com DatabaseReplicated. #85904 (Konstantin Bogdanov).
- Adiciona verificações para
sharding_key durante o ALTER da tabela Distributed. 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_s e asynchronous_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 prefixo Cache). #83730 (Azat Khuzhin).
- Corrige
LOGICAL_ERROR em QueryMetricLog: Mutex não pode ser NULL. #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
Date para DateTime64. #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
DoubleDelta agora só pode ser aplicado a colunas de tipo numérico. Em particular, colunas FixedString não podem mais ser comprimidas com DoubleDelta. (corrige #80220). #84383 (Jimmy Aguilar Mena).
- Corrigida a perda de precisão em
JSONExtract ao 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_counters não é mais compartilhado entre consultas. #83423 (Azat Khuzhin).
- Corrigidos possíveis erros de
File Cache não inicializado ao usá-lo como armazenamento temporário de dados. #83539 (Bharat Nallan).
filesystem_prefetches_limit agora é sempre aplicado (não apenas em MergeTreePrefetchedReadPool). #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, se session_timezone fosse definido, por exemplo, em users.xml/nas opções do cliente como não vazio e no contexto da consulta como vazio, o valor de users.xml era usado, o que estava incorreto; agora, o contexto da consulta sempre terá prioridade sobre o contexto global). #82444 (Azat Khuzhin).
- Proíbe definir
threadpool_writer_pool_size como 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_format eram simplesmente ignorados ao usar HTTP com multipart. #85570 (Sema Checherinda).
Correções do MongoDB
- Antes, definições do mecanismo de tabela
MongoDB podiam incluir um componente de caminho no argumento host:port, que era ignorado silenciosamente. A integração com MongoDB se recusa a carregar essas tabelas. Com esta correção, permitimos carregar essas tabelas e ignoramos o componente de caminho se o motor MongoDB tiver 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 tabela mongo, 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::extendQueryLogElemImpl para 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 COLUMN podia resultar em arquivos inesperados em checksums.txt e, 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
WITH em caso de conflito de nomes. Corrige #82700. #83797 (Dmitry Novik).
- Permite referenciar qualquer tabela no argumento
view(...) da função de tabela remote com 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_DATA quando colunas lazy são usadas com ordenação externa. #84738 (János Benjamin Antal).
- Remove chamadas desnecessárias de
getStatus() durante consultas SYSTEM DROP REPLICA. Corrige o caso em que uma tabela é removida em segundo plano e a exceção Shutdown 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 REPLACE e RENAME. #85326 (Michael Kolupaev).
- Corrige travamento e corrupção de dados durante
ALTER UPDATE em 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).