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

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

  • Agora é permitido escrever SETTINGS antes de FORMAT em uma cadeia de consultas com UNION quando as subconsultas estão entre parênteses. Isso fecha #39712. A alteração muda o comportamento quando uma consulta tem a cláusula SETTINGS especificada duas vezes em sequência. A cláusula SETTINGS mais próxima terá preferência para a subconsulta correspondente. Nas versões anteriores, a cláusula SETTINGS mais externa podia ter preferência sobre a interna. #60197#68614 (Alexey Milovidov).
  • Reimplementa o tipo Dynamic. Agora, quando o limite de tipos de dados dinâmicos é atingido, novos tipos não são convertidos em String, mas armazenados em uma estrutura de dados especial em formato binário, com o tipo de dado codificado em binário. Agora, qualquer tipo já inserido em uma coluna Dynamic pode ser lido dela como subcoluna. #68132 (Pavel Kruglov).
  • Expressões como a[b].c agora têm suporte para tuplas nomeadas, assim como subscritos nomeados em expressões arbitrárias, por exemplo, expr().name. Isso é útil para processar JSON. Isso fecha #54965. Nas versões anteriores, uma expressão na forma expr().name era analisada como tupleElement(expr(), name), e o analisador de consultas procurava uma coluna name em vez do elemento de tupla correspondente; já na nova versão, isso foi alterado para tupleElement(expr(), 'name'). Na maioria dos casos, a versão anterior não funcionava, mas é possível imaginar um cenário muito incomum em que essa mudança poderia levar a incompatibilidade: se você armazenasse nomes de elementos de tupla em uma coluna ou alias com nome diferente do nome do elemento da tupla: SELECT 'b' AS a, CAST([tuple(123)] AS 'Array(Tuple(b UInt8))') AS t, t[1].a. É muito improvável que você tenha usado consultas assim, mas ainda assim precisamos marcar essa alteração como potencialmente incompatível com versões anteriores. #68435 (Alexey Milovidov).
  • Quando a configuração print_pretty_type_names está habilitada, ela passará a exibir o tipo de dado Tuple em formato Pretty nas instruções SHOW CREATE TABLE, na função formatQuery e no modo interativo em clickhouse-client e clickhouse-local. Nas versões anteriores, essa configuração era aplicada apenas a consultas DESCRIBE e a toTypeName. Isso fecha #65753. #68492 (Alexey Milovidov).
  • A reordenação das condições de filtro da cláusula [PRE]WHERE agora é permitida por padrão. Isso pode ser desabilitado definindo allow_reorder_prewhere_conditions como false. #70657 (Nikita Taranov).
  • Corrige a otimização optimize_functions_to_subcolumns (antes, ela podia levar ao erro Invalid column type for ColumnUnique::insertRangeFrom. Expected String, got LowCardinality(String)), preservando o tipo LowCardinality em mapKeys/mapValues. #70716 (Azat Khuzhin).

Novo recurso

  • Views materializadas atualizáveis estão prontas para produção. #70550 (Michael Kolupaev). Views materializadas atualizáveis agora têm suporte em bancos de dados Replicated. #60669 (Michael Kolupaev).
  • A função toStartOfInterval() agora tem uma nova sobrecarga que emula a função time_bucket() do TimescaleDB e, de forma equivalente, a função date_bin() do PostgreSQL. (#55619). Ela permite alinhar valores de data ou timestamp a múltiplos de um determinado intervalo a partir de uma origem arbitrária (em vez de usar 0000-01-01 00:00:00.000 como origem fixa). Por exemplo, SELECT toStartOfInterval(toDateTime('2023-01-01 14:45:00'), INTERVAL 1 MINUTE, toDateTime('2023-01-01 14:35:30')); retorna 2023-01-01 14:44:30, que corresponde a um múltiplo de intervalos de 1 minuto, a partir da origem 2023-01-01 14:35:30. #56738 (Yarik Briukhovetskyi).
  • Integração com MongoDB refatorada: migração para o novo driver mongocxx em substituição ao obsoleto Poco::MongoDB, remoção do suporte ao protocolo antigo obsoleto, suporte à conexão por URI, suporte a todos os tipos do MongoDB, suporte a instruções WHERE e ORDER BY no MongoDB, restrição para expressões não suportadas pelo MongoDB. #63279 (Kirill Nikiforov).
  • Uma nova opção --progress-table no clickhouse-client exibe uma tabela com métricas que variam durante a execução da consulta; a nova opção --enable-progress-table-toggle está associada à opção --progress-table e alterna a exibição da tabela de progresso ao pressionar a tecla de controle (Espaço). #63689 (Maria Khristenko).
  • Isso permite conceder acesso a prefixos com curinga. GRANT SELECT ON db.table_pefix_* TO user. #65311 (pufit).
  • Introduzido o formato JSONCompactWithProgress, no qual o ClickHouse retorna cada linha como um objeto JSON delimitado por quebras de linha, incluindo metadados, dados, progresso, totais e estatísticas. #66205 (Alexey Korepanov).
  • Adiciona system.query_metric_log, que contém o histórico de valores de memória e métricas da tabela system.events para consultas individuais, gravado periodicamente em disco. #66532 (Pablo Marcos).
  • Adiciona a configuração input_format_json_empty_as_default, que, quando habilitada, trata campos vazios em entradas JSON como valores padrão. Fecha #59339. #66782 (Alexis Arnaud).
  • Foram adicionadas as funções overlay e overlayUTF8, que substituem partes de uma string por outra. Exemplo: SELECT overlay('Hello New York', 'Jersey', 11) retorna Hello New Jersey. #66933 (李扬).
  • Adicionado novo comando: exclusão leve em partição DELETE FROM [db.]table [ON CLUSTER cluster] [IN PARTITION partition_expr] WHERE expr; ``` VM-114-29-tos :) select * from ads_app_poster_ip_source_channel_di_replicated_local;. #67805 (sunny).
  • Implementada a comparação de valores do tipo de dados Interval, de modo que agora eles são convertidos para o supertipo comum mínimo. #68057 (Yarik Briukhovetskyi).
  • Adiciona a configuração create_if_not_exists para usar por padrão o comportamento IF NOT EXISTS durante instruções CREATE. #68164 (Peter Nguyen).
  • Permite ler tabelas Iceberg no Azure e localmente. #68210 (Daniil Ivanik).
  • Adicionadas as funções de agregação distinctDynamicTypes/distinctJSONPaths/distinctJSONPathsAndTypes para uma melhor introspecção do conteúdo do tipo de coluna JSON. #68463 (Pavel Kruglov).
  • As entradas do cache de consultas agora podem ser removidas por tag. Por exemplo, a entrada do cache de consultas criada por SELECT 1 SETTINGS use_query_cache = true, query_cache_tag = 'abc' agora pode ser removida com SYSTEM DROP QUERY CACHE TAG 'abc' (ou, claro, simplesmente com SYSTEM DROP QUERY CACHE, que limpará todo o cache de consultas). #68477 (Michał Tabaszewski).
  • Uma consulta SELECT simples pode ser escrita com SELECT implícito para permitir expressões no estilo de calculadora, por exemplo, ch "1 + 2". Isso é controlado por uma nova configuração, implicit_select. #68502 (Alexey Milovidov).
  • Adicionar suporte ao modo —copy no clickhouse local como atalho para conversão de formato #68503. #68583 (Denis Hananein).
  • Adicionada a função ripeMD160, que calcula o hash criptográfico RIPEMD-160 de uma cadeia de caracteres. Exemplo: SELECT hex(ripeMD160('The quick brown fox jumps over the lazy dog')) retorna 37F332F68DB77BD9D7EDD4969571AD671CF9DD3B. #68639 (Dergousov Maxim).
  • Adiciona a coluna virtual _headers ao mecanismo de tabela URL. Fecha #65026. #68867 (flynn).
  • Adicionada a tabela system.projections para acompanhar as projeções disponíveis. #68901 (Jordi Villar).
  • Adicionado suporte à função arrayUnion. #68989 (Peter Nguyen).
  • Adicionar a nova função arrayZipUnaligned para garantir compatibilidade com o Spark(arrays_zip), permitindo arrays não alinhados com base na arrayZip original. ``` sql SELECT arrayZipUnaligned([1], [1, 2, 3]). #69030 (李扬).
  • Suporte à função de agregação quantileExactWeightedInterpolated, que é uma versão interpolada baseada em quantileExactWeighted. Algumas pessoas podem se perguntar por que precisamos de uma nova quantileExactWeightedInterpolated, já que já temos quantileExactInterpolatedWeighted. O motivo é que a nova é mais precisa do que a antiga. Além disso, ela serve para compatibilidade com o Spark no Apache Gluten. #69619 (李扬).
  • Suporte à função arrayElementOrNull. Ela retorna null se o índice do array estiver fora do intervalo ou se a chave do map não for encontrada. #69646 (李扬).
  • Suporte ao tipo Dynamic na maioria das funções, executando-as sobre os tipos internos do Dynamic. #69691 (Pavel Kruglov).
  • Adiciona o argumento scale (padrão: true) à função arrayAUC, permitindo pular a etapa de normalização (issue #69609). #69717 (gabrielmcg44).
  • A função RIPEMD160 foi adicionada novamente e calcula o hash criptográfico RIPEMD-160 de uma string. Exemplo: SELECT HEX(RIPEMD160('The quick brown fox jumps over the lazy dog')) retorna 37F332F68DB77BD9D7EDD4969571AD671CF9DD3B. #70087 (Dergousov Maxim).
  • Permite armazenar em cache os arquivos lidos para motores de tabela com armazenamento de objetos e lagos de dados, usando o hash do ETag + caminho do arquivo como chave de cache. #70135 (Kseniia Sumarokova).
  • Suporte à leitura de tabelas Iceberg no HDFS. #70268 (flynn).
  • Permitir ler/gravar o tipo JSON como string binária no formato RowBinary com as configurações input_format_binary_read_json_as_string/output_format_binary_write_json_as_string. #70288 (Pavel Kruglov).
  • Permite serializar/desserializar uma coluna JSON como uma única coluna String no formato Native. Na saída, use a configuração output_format_native_write_json_as_string. Na entrada, use a versão de serialização 1 antes dos dados da coluna. #70312 (Pavel Kruglov).
  • Adiciona suporte a CTE padrão, with insert, já que antes havia suporte apenas a insert ... with .... #70593 (Shichao Jin).
Última modificação em 10 de junho de 2026