Pular para o conteúdo principal
Alterações relevantes para os serviços do ClickHouse Cloud com base no lançamento v24.6.

Alteração incompatível com versões anteriores

  • Retrabalhado o processamento paralelo no modo Ordered do armazenamento S3Queue. Este PR é incompatível com versões anteriores no modo Ordered se você usava as configurações s3queue_processing_threads_num ou s3queue_total_shards_num. A configuração s3queue_total_shards_num foi removida; antes, seu uso só era permitido com s3queue_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, dateTimeToSnowflakeID e dateTime64ToSnowflakeID. Diferentemente das funções existentes snowflakeToDateTime, snowflakeToDateTime64, dateTimeToSnowflake e dateTime64ToSnowflake, as novas funções são compatíveis com a função generateSnowflakeID, ou seja, aceitam os IDs Snowflake gerados por generateSnowflakeID e produzem IDs Snowflake do mesmo tipo que generateSnowflakeID (isto é, UInt64). Além disso, as novas funções usam por padrão o epoch UNIX (isto é, 1970-01-01), assim como generateSnowflakeID. 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ção allow_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 LINESTRING no formato WKT usando a função readWKTLineString. #62519 (Nikita Mikhaylov).
  • Adicionada a nova função SQL generateSnowflakeID para gerar IDs Snowflake no estilo do Twitter. #63577 (Danila Puzov).
  • Adicionado suporte à comparação entre os tipos IPv4 e IPv6 usando 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 variantes OrNull e OrZero). #64742 (Francisco J. Jurado Moreno).
  • Adicionada a coluna virtual _time a armazenamentos do tipo arquivo (s3/file/hdfs/url/azureBlobStorage). #64947 (Ilya Golshtein).
  • Introduzidas as novas funções base64URLEncode, base64URLDecode e tryBase64URLDecode. #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_headers para dar suporte a cabeçalhos de resposta personalizados em handlers HTTP personalizados. #63562 (Grigorii).
  • Adicionada uma nova função de tabela loop para 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_privileges e missing_privileges. used_privileges é preenchida com os privilégios verificados durante a execução da consulta, e missing_privileges conté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 por output_format_pretty_display_footer_column_names_min_rows. #65144 (Shaun Struwig).

Melhoria de desempenho

  • Corrige regressão de desempenho no cross join introduzida 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ção optimize_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 splitByRegexp quando 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 LowCardinality e 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 isDefault de ColumnSparse::filter para melhorar o desempenho. #64426 (Jiebin Sun).
  • Acelera os comandos find_super_nodes e find_big_family do keeper-client fazendo várias solicitações assíncronas de getChildren. #64628 (Alexander Gololobov).
  • Melhoria da função least/greatest para 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-down se 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_insert e materialize_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 TABLE executado 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() e trunc() 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_rewritable e 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, limit ou additional_table_filters) afetam o resultado da consulta. #64205 (Robert Schulze).
  • Oferece suporte ao código de erro não padrão QpsLimitExceeded no armazenamento de objetos como um erro que permite nova tentativa. #64225 (Sema Checherinda).
  • Adicionada uma nova configuração input_format_parquet_prefer_block_bytes para controlar a média de bytes dos blocos de saída, e o valor padrão de input_format_parquet_max_block_size foi alterado para 65409. #64427 (LiuNeng).
  • As configurações da config do usuário não afetam merges nem mutações do MergeTree em armazenamento de objetos. #64456 (alesapin).
  • Adiciona suporte ao código de erro não padrão TotalQpsLimitExceeded no 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_mt e generateRandom. #64804 (Raúl Marín).
  • Adicione uma métrica assíncrona jemalloc.profile.active para 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_condition como 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* e DiskGetObjectThrottler*, que refletem o limite de taxa de solicitações por segundo definido pelas configurações de disco s3_max_get_rps e s3_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 PLAN com réplicas paralelas. #64298 (vdimir).
  • Renomeado allow_deprecated_functions para allow_deprecated_error_prone_window_functions. #64358 (Raúl Marín).
  • Respeita a configuração max_read_buffer_size também para descritores de arquivo na table function file. #64532 (Azat Khuzhin).
  • Desabilita transações para armazenamentos sem suporte, inclusive para visões materializadas. #64918 (alesapin).
  • Proibir a cláusula QUALIFY no analisador antigo. O analisador antigo ignorava QUALIFY, 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 COLUMNS sem 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 accurateCast inesperado 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_id em DatabaseReplicated quando o parâmetro cluster_secure_connection está 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).
Última modificação em 10 de junho de 2026