Alteração incompatível com versões anteriores
- Retrabalhado o processamento paralelo no modo
Ordereddo armazenamentoS3Queue. Este PR é incompatível com versões anteriores no modo Ordered se você usava as configuraçõess3queue_processing_threads_numous3queue_total_shards_num. A configuraçãos3queue_total_shards_numfoi removida; antes, seu uso só era permitido coms3queue_allow_experimental_sharded_mode, que agora está descontinuada. Foi adicionada uma nova configuração:s3queue_buckets. #64349 (Kseniia Sumarokova). - Foram adicionadas as novas funções
snowflakeIDToDateTime,snowflakeIDToDateTime64,dateTimeToSnowflakeIDedateTime64ToSnowflakeID. Diferentemente das funções existentessnowflakeToDateTime,snowflakeToDateTime64,dateTimeToSnowflakeedateTime64ToSnowflake, as novas funções são compatíveis com a funçãogenerateSnowflakeID, ou seja, aceitam os IDs Snowflake gerados porgenerateSnowflakeIDe produzem IDs Snowflake do mesmo tipo quegenerateSnowflakeID(isto é,UInt64). Além disso, as novas funções usam por padrão o epoch UNIX (isto é, 1970-01-01), assim comogenerateSnowflakeID. Se necessário, é possível informar um epoch diferente, por exemplo, o epoch do Twitter/X de 2010-11-04, também conhecido como 1288834974657 ms desde o epoch UNIX. As antigas funções de conversão estão descontinuadas e serão removidas após um período de transição: para continuar usando-as, habilite a configuraçãoallow_deprecated_snowflake_conversion_functions. #64948 (Robert Schulze).
Novo recurso
- Suporte a tuplas vazias. #55061 (Amos Bird).
- Adicionadas funções de codificação e decodificação da Curva de Hilbert. #60156 (Artem Mustafin).
- Adicionado suporte à análise de índice em
hilbertEncode. #64662 (Artem Mustafin). - Adicionado suporte à leitura da geometria
LINESTRINGno formato WKT usando a funçãoreadWKTLineString. #62519 (Nikita Mikhaylov). - Adicionada a nova função SQL
generateSnowflakeIDpara gerar IDs Snowflake no estilo do Twitter. #63577 (Danila Puzov). - Adicionado suporte à comparação entre os tipos
IPv4eIPv6usando o operador=. #64292 (Francisco J. Jurado Moreno). - Suporte a argumentos decimais em funções matemáticas binárias (pow, atan2, max2, min2, hypot). #64582 (Mikhail Gorshkov).
- Adicionadas funções SQL
parseReadableSize(junto com as variantesOrNulleOrZero). #64742 (Francisco J. Jurado Moreno). - Adicionada a coluna virtual
_timea armazenamentos do tipo arquivo (s3/file/hdfs/url/azureBlobStorage). #64947 (Ilya Golshtein). - Introduzidas as novas funções
base64URLEncode,base64URLDecodeetryBase64URLDecode. #64991 (Mikhail Gorshkov). - Adicionada a nova função
editDistanceUTF8, que calcula a distância de edição entre duas strings UTF-8. #65269 (LiuNeng). - Adicionada a configuração
http_response_headerspara dar suporte a cabeçalhos de resposta personalizados em handlers HTTP personalizados. #63562 (Grigorii). - Adicionada uma nova função de tabela
looppara permitir o retorno de resultados de consulta em loop infinito. #63452 (Sariel). Isso é útil para testes. - Introduzidas duas colunas adicionais em
system.query_log:used_privilegesemissing_privileges.used_privilegesé preenchida com os privilégios verificados durante a execução da consulta, emissing_privilegescontém os privilégios obrigatórios ausentes. #64597 (Alexey Katsman). - Adicionada a configuração
output_format_pretty_display_footer_column_names, que, quando habilitada, exibe os nomes das colunas no final da tabela em tabelas longas (50 linhas por padrão), com o valor limite do número mínimo de linhas controlado poroutput_format_pretty_display_footer_column_names_min_rows. #65144 (Shaun Struwig).
Melhoria de desempenho
- Corrige regressão de desempenho no
cross joinintroduzida em #60459 (24.5). #65243 (Nikita Taranov). - Melhora a visibilidade dos reenvios do io_uring. Renomeia o evento de perfil IOUringSQEsResubmits -> IOUringSQEsResubmitsAsync e adiciona um novo, IOUringSQEsResubmitsSync. #63699 (Tomer Shafir).
- Introduz asserções para verificar se todas as funções são chamadas com colunas do tamanho correto. #63723 (Raúl Marín).
- Adiciona a possibilidade de reorganizar as linhas durante a inserção para otimizar o tamanho sem violar a ordem definida pela
PRIMARY KEY. Isso é controlado pela configuraçãooptimize_row_order(desativada por padrão). #63578 (Igor Markelov). - Adiciona um leitor nativo de Parquet, capaz de ler dados binários em Parquet diretamente para colunas do ClickHouse. Isso é controlado pela configuração
input_format_parquet_use_native_reader(desabilitada por padrão). #60361 (ZhiHong Zhang). - Suporte à otimização parcial de contagem trivial quando o filtro da consulta consegue selecionar intervalos exatos em tabelas MergeTree. #60463 (Amos Bird).
- Reduz o pico de uso de memória de
INSERTs com múltiplas threads ao reunir fragmentos de várias threads em uma única transformação. #61047 (Yarik Briukhovetskyi). - Reduza o uso de memória ao usar o armazenamento de objetos do Azure com alocação fixa de memória, evitando a alocação de um buffer extra. #63160 (SmitaRKulkarni).
- Redução do número de chamadas de função virtual em
ColumnNullable::size. #60556 (HappenLee). - Acelera o
splitByRegexpquando o argumento de expressão regular é um único caractere. #62696 (Robert Schulze). - Acelera a agregação por chaves de 8 bits e 16 bits ao rastrear as chaves mínima e máxima usadas. Isso permite reduzir o número de células que precisam ser verificadas. #62746 (Jiebin Sun).
- Otimize o operador IN quando o lado esquerdo for
LowCardinalitye o lado direito for um conjunto de constantes. #64060 (Zhiguo Zhou). - Use um pool de threads para inicializar e destruir tabelas hash no
ConcurrentHashJoin. #64241 (Nikita Taranov). - Mesclagens verticais otimizadas em tabelas com colunas esparsas. #64311 (Anton Popov).
- Habilitada a pré-busca de dados do sistema de arquivos remoto durante mesclagens verticais. Isso melhora a latência das mesclagens verticais em tabelas com dados armazenados em sistema de arquivos remoto. #64314 (Anton Popov).
- Reduz chamadas redundantes para
isDefaultdeColumnSparse::filterpara melhorar o desempenho. #64426 (Jiebin Sun). - Acelera os comandos
find_super_nodesefind_big_familydo keeper-client fazendo várias solicitações assíncronas de getChildren. #64628 (Alexander Gololobov). - Melhoria da função
least/greatestpara argumentos do tipo numérico Nullable. #64668 (KevinyhZou). - Permite mesclar duas etapas consecutivas de filtragem em um plano de consulta. Isso melhora a otimização de
filter-push-downse a condição de filtro puder ser propagada da etapa pai para etapas inferiores. #64760 (Nikolai Kochetov). - Remova a otimização inadequada na implementação vertical do FINAL e reative o algoritmo vertical do FINAL por padrão. #64783 (Duc Canh Le).
- Remova os nós ALIAS da expressão de filtro. Isso melhora ligeiramente o desempenho de consultas com
PREWHERE(com o novo analisador). #64793 (Nikolai Kochetov). - Reabilite o cache de sessão do OpenSSL. #65111 (Robert Schulze).
- Adicionadas configurações para desativar a materialização de índices de salto e estatísticas durante inserções (
materialize_skip_indexes_on_insertematerialize_statistics_on_insert). #64391 (Anton Popov). - Use a quantidade de memória alocada para calcular o tamanho do grupo de linhas e reduzir o pico de memória do escritor Parquet no modo de execução com uma única thread. #64424 (LiuNeng).
- Melhora o iterador da coluna esparsa para reduzir as chamadas a
size. #64497 (Jiebin Sun). - Atualiza a condição para usar cópia no servidor para backups no Azure blob storage. #64518 (SmitaRKulkarni).
- Uso de memória das mesclagens verticais otimizado para tabelas com um grande número de skip indexes. #64580 (Anton Popov).
Melhoria
- Restaurou a forma como o ClickHouse funciona e interpreta Tuples no formato CSV. Essa alteração efetivamente reverte ClickHouse/ClickHouse#60994 e o disponibiliza apenas sob algumas configurações: output_format_csv_serialize_tuple_into_separate_columns, input_format_csv_deserialize_separate_columns_into_tuple e input_format_csv_try_infer_strings_from_quoted_tuples. #65170 (Nikita Mikhaylov).
SHOW CREATE TABLEexecutado em tabelas do sistema agora mostrará o comentário, muito útil e exclusivo de cada tabela, que explicará por que essa tabela é necessária. #63788 (Nikita Mikhaylov).- O segundo argumento (escala) das funções
round(),roundBankers(),floor(),ceil()etrunc()agora pode não ser constante. #64798 (Mikhail Gorshkov). - Evita um possível deadlock durante a análise de índice do MergeTree ao agendar threads em um serviço saturado. #59427 (Sean Haynes).
- Várias pequenas correções em casos de borda no suporte a proxy S3 & no tunelamento. #63427 (Arthur Passos).
- Adicionadas métricas para acompanhar o número de diretórios criados e removidos pelo armazenamento de metadados
plain_rewritablee o número de entradas no map em memória de local para remoto. #64175 (Julia Kartseva). - O cache de consultas agora trata consultas idênticas com configurações diferentes como distintas. Isso aumenta a robustez nos casos em que configurações diferentes (por exemplo,
limitouadditional_table_filters) afetam o resultado da consulta. #64205 (Robert Schulze). - Oferece suporte ao código de erro não padrão
QpsLimitExceededno armazenamento de objetos como um erro que permite nova tentativa. #64225 (Sema Checherinda). - Adicionada uma nova configuração
input_format_parquet_prefer_block_bytespara controlar a média de bytes dos blocos de saída, e o valor padrão deinput_format_parquet_max_block_sizefoi alterado para 65409. #64427 (LiuNeng). - As configurações da config do usuário não afetam merges nem mutações do
MergeTreeem armazenamento de objetos. #64456 (alesapin). - Adiciona suporte ao código de erro não padrão
TotalQpsLimitExceededno armazenamento de objetos como um erro que permite nova tentativa. #64520 (Sema Checherinda). - Dashboard Avançado atualizado nas versões open-source e ClickHouse Cloud para incluir um gráfico de ‘Número máximo de conexões de rede simultâneas’. #64610 (Thom O’Connor).
- Melhora o relatório de progresso de
zeros_mtegenerateRandom. #64804 (Raúl Marín). - Adicione uma métrica assíncrona
jemalloc.profile.activepara indicar se a amostragem está ativa no momento. Este é um mecanismo de ativação adicional além de prof.active; ambos devem estar ativos para que a thread que faz a chamada realize a amostragem. #64842 (Unalian). - Removida a marcação de
allow_experimental_join_conditioncomo importante. Essa marcação pode ter impedido a execução bem-sucedida de consultas distribuídas em um cluster com versões mistas. #65008 (Nikita Mikhaylov). - Adicionadas métricas assíncronas do servidor
DiskGetObjectThrottler*eDiskGetObjectThrottler*, que refletem o limite de taxa de solicitações por segundo definido pelas configurações de discos3_max_get_rpses3_max_put_rps, bem como o número atual de solicitações que podem ser enviadas sem atingir o limite de throttling no disco. As métricas são definidas para cada disco que tenha um limite configurado. #65050 (Sergei Trifonov). - Adicionada uma validação ao criar um usuário com
bcrypt_hash. #65242 (Raúl Marín). - Adiciona profile events referentes ao número de linhas lidas durante/após
PREWHERE. #64198 (Nikita Taranov). - Exibe a consulta no
EXPLAIN PLANcom réplicas paralelas. #64298 (vdimir). - Renomeado
allow_deprecated_functionsparaallow_deprecated_error_prone_window_functions. #64358 (Raúl Marín). - Respeita a configuração
max_read_buffer_sizetambém para descritores de arquivo na table functionfile. #64532 (Azat Khuzhin). - Desabilita transações para armazenamentos sem suporte, inclusive para visões materializadas. #64918 (alesapin).
- Proibir a cláusula
QUALIFYno analisador antigo. O analisador antigo ignoravaQUALIFY, o que podia levar à remoção inesperada de dados em mutações. #65356 (Dmitry Novik).
Correção de bug (comportamento incorreto perceptível ao usuário em uma versão estável oficial)
- Corrigido o problema em que o skip index ‘set’ não funcionava com IN e indexHint(). #62083 (Michael Kolupaev).
- Corrige consultas com FINAL que retornam resultados incorretos quando a tabela não usa granularidade adaptativa. #62432 (Duc Canh Le).
- Suporte à execução de função durante a atribuição de valor em view parametrizada. #63502 (SmitaRKulkarni).
- Corrigido o rastreamento de uso de memória do Parquet. #63584 (Michael Kolupaev).
- Corrigido um caso raro de ausência de dados no resultado de uma consulta distribuída. #63691 (vdimir).
- Corrigida a leitura de colunas do tipo Tuple(Map(LowCardinality(String), String), …). #63956 (Anton Popov).
- Corrige a resolução do matcher
COLUMNSsem qualificação. Preserva a ordem das colunas de entrada e proíbe o uso de identificadores desconhecidos. #63962 (Dmitry Novik). - Corrige um erro de aliases cíclicos envolvendo aliases cíclicos de tipos diferentes (expressão e função). #63993 (Nikolai Kochetov).
- Essa correção usará um contexto redefinido apropriado com o definidor correto para cada view no pipeline de consulta. #64079 (pufit).
- Correção no analyzer: o erro “coluna não encontrada” ao usar INTERPOLATE foi corrigido. #64096 (Yakov Olkhovskiy).
- Evita o LOGICAL_ERROR ao executar CREATE TABLE como MaterializedView. #64174 (Raúl Marín).
- O cache de consultas agora considera duas consultas idênticas em bancos de dados diferentes como distintas. O comportamento anterior podia ser usado para contornar a falta de privilégios para ler uma tabela. #64199 (Robert Schulze).
- Corrige um possível encerramento abrupto causado por uma exceção não capturada em ~WriteBufferFromFileDescriptor no StatusFile. #64206 (Kruglov Pavel).
- Corrige o erro de alias duplicado em consultas distribuídas com ARRAY JOIN. #64226 (Nikolai Kochetov).
- Corrige
accurateCastinesperado ao converter de string para inteiro. #64255 (wudidapaopao). - Corrigida a simplificação de CNF, caso algum grupo OR contenha átomos mutuamente exclusivos. #64256 (Eduard Karacharov).
- Corrige a validação de tamanho da Query Tree. #64377 (Dmitry Novik).
- Corrigido erro lógico: conversão inválida na tabela Buffer com PREWHERE. #64388 (Nikolai Kochetov).
- Corrigidas as consultas CREATE TABLE AS em tabelas com expressões padrão. #64455 (Anton Popov).
- Corrigido o comportamento do optimize_read_in_order para ORDER BY … NULLS FIRST / LAST em tabelas com chaves Nullable. #64483 (Eduard Karacharov).
- Corrige os erros Expression nodes list expected 1 projection names e Unknown expression or identifier em consultas com aliases para GLOBAL IN.. #64517 (Nikolai Kochetov).
- Corrigido o erro Cannot find column em consultas distribuídas com CTE constante na chave do GROUP BY. #64519 (Nikolai Kochetov).
- Corrige a saída da função formatDateTimeInJodaSyntax quando um formatador gera um número ímpar de caracteres e o último caractere é 0. Por exemplo, SELECT formatDateTimeInJodaSyntax(toDate(‘2012-05-29’), ‘D’) agora retorna corretamente 150, em vez de 15, como retornava antes. #64614 (LiuNeng).
- Não reescreva a agregação se o combinador -If já estiver sendo usado. #64638 (Dmitry Novik).
- Corrige a inferência de tipo de float (em caso de buffer pequeno, isto é, —max_read_buffer_size 1). #64641 (Azat Khuzhin).
- Corrige um bug que poderia fazer com que TTLs com expressões deixassem de funcionar. #64694 (alesapin).
- Correção da remoção das expressões WHERE e PREWHERE que são sempre true (no novo analisador). #64695 (Nikolai Kochetov).
- Corrigida a eliminação excessiva de partes por índices de texto baseados em tokens (ngrambf , full_text) ao filtrar com base no resultado de startsWith, endsWith, match, multiSearchAny. #64720 (Eduard Karacharov).
- Corrige o comportamento incorreto no escape ANSI CSI na função UTF8::computeWidth. #64756 (Shaun Struwig).
- Corrige um caso de remoção incorreta de ORDER BY / LIMIT BY em subconsultas aninhadas. #64766 (Raúl Marín).
- Corrige o join por desigualdade (experimental) com subconsultas para Sets que estão nas condições mistas de join. #64775 (lgbo).
- Corrige travamento em um cache local sobre disco plain_rewritable. #64778 (Julia Kartseva).
- Corrigido o erro “Cannot find column” em consulta distribuída com ARRAY JOIN em coluna Nested. Corrige #64755. #64801 (Nikolai Kochetov).
- Corrigido vazamento de memória na política de cache slru. #64803 (Kseniia Sumarokova).
- Corrigido um possível rastreamento incorreto de memória em vários tipos de consultas: consultas que leem dados do S3, consultas via protocolo HTTP, inserts assíncronos. #64844 (Anton Popov).
- Corrige o erro de incompatibilidade na estrutura do Block em consultas que usam PREWHERE ao ler da visão materializada quando a visão materializada tem colunas de tipos diferentes da tabela de origem. Corrige #64611. #64855 (Nikolai Kochetov).
- Corrige uma falha rara quando a tabela tem TTL com subconsulta + banco de dados replicado + réplicas paralelas + analyzer. É realmente raro, mas, por favor, não use TTL com subconsultas. #64858 (alesapin).
- Corrigida a consulta ALTER MODIFY COMMENT que estava quebrada para VIEWs parametrizadas em ClickHouse/ClickHouse#54211. #65031 (Nikolay Degterinsky).
- Corrige
host_idem DatabaseReplicated quando o parâmetrocluster_secure_connectionestá habilitado. Antes, todas as conexões no cluster criadas por DatabaseReplicated não eram seguras, mesmo com o parâmetro habilitado. #65054 (Nikolay Degterinsky). - Correção do erro Not-ready Set após a otimização PREWHERE para o StorageMerge. #65057 (Nikolai Kochetov).
- Evita gravar em um buffer finalizado em armazenamentos do tipo File. #65063 (Kruglov Pavel).
- Corrige a duração potencialmente infinita da consulta em caso de aliases cíclicos. Corrige #64849. #65081 (Nikolai Kochetov).
- Corrige o erro de identificador de expressão desconhecido em consultas remotas com INTERPOLATE (alias) (novo analisador). Corrige #64636. #65090 (Nikolai Kochetov).
- Corrige o problema ao mover operações aritméticas para fora da agregação. No novo analisador, a otimização era aplicada apenas uma vez. #65104 (Dmitry Novik).
- Corrige a reescrita dos nomes de funções de agregação no novo analisador. #65110 (Dmitry Novik).
- Retornar 5xx em vez de 200 OK em caso de timeout de recebimento ao ler o corpo da requisição (ou partes dele) do socket do cliente. #65118 (Julian Maicher).
- Corrige possível falha em requisições hedged. #65206 (Azat Khuzhin).
- Corrige o bug na avaliação de curto-circuito dos dicionários Hashed e Hashed_Array, que podia ler um número não inicializado, causando vários erros. #65256 (jsc0218).
- Este PR garante que o tipo da constante(segundo parâmetro do operador IN) permaneça sempre visível durante o processo de conversão de tipo do operador IN. Caso contrário, a perda de informações de tipo pode fazer com que algumas conversões falhem, como a conversão de DateTime para Date. correção (#64487). #65315 (pn).