Alterações incompatíveis com versões anteriores
Alterações nos tipos de dados
- Introduz o tipo
Geometry. Passa a oferecer suporte à leitura dos formatosWKBeWKT. Em versões anteriores, o tipoGeometryera um alias deString, mas agora é um tipo completo. #83344 (Konstantin Vedernikov). - Remove o tipo
Objectobsoleto. #85718 (Pavel Kruglov). - Escapa os nomes de arquivo criados para subcolunas do tipo Variant em data parts Wide de tabelas MergeTree. Essa alteração quebra a compatibilidade com tabelas antigas com tipos de dados Variant/Dynamic/JSON. Ela corrige o armazenamento de tipos com símbolos especiais dentro de Variant (como DateTime com um timezone específico que contém
\). O escaping pode ser desativado alterando a configuração do MergeTreeescape_variant_subcolumn_filenames(para manter a compatibilidade, desative essa configuração na config do MergeTree ou defina a configuraçãocompatibilitypara a versão anterior antes da atualização). Resolve #69590. #87300 (Pavel Kruglov).
Alterações em consultas e funções
- ALTER MODIFY COLUMN agora exige
DEFAULTexplícito ao converter colunas Nullable em tipos não anuláveis. Antes, esses ALTERs podiam travar com erros de cannot convert null to not null; agora, os valores NULL são substituídos pela expressão padrão da coluna. Resolve #5985. #84770 (Vladimir Cherkasov). - Remove as configurações
allow_not_comparable_types_in_order_by/allow_not_comparable_types_in_comparison_functions. Permitir tipos não comparáveis em ORDER BY ou em funções de comparação pode levar a erros lógicos e resultados inesperados. Resolve #90028. #90527 (Pavel Kruglov). - Corrige as funções bitShiftLeft e bitShiftRight para retornarem 0 ou um valor vazio quando o deslocamento for exatamente do tamanho do tipo. #91943 (Pablo Marcos).
- O tokenizer ngram não retornará mais ngrams menores que o comprimento N com o qual foi configurado. A busca de texto não retornará linhas quando os tokens de busca estiverem vazios. #89757 (George Larionov).
Alterações de armazenamento e índice
- Removido o recurso obsoleto
LIVE VIEW. Se você usaLIVE VIEW, não será possível atualizar para a nova versão. #88706 (Alexey Milovidov). - Agora é proibido criar múltiplos disks
plain-rewritablesobre o caminho compartilhado de armazenamento de objetos, pois isso pode levar a comportamento indefinido em caso de colisões entre diferentes transações de armazenamento de metadados. #89038 (Mikhail Artemenko). - Agora é proibido criar tabelas especiais
MergeTree(comoReplacingMergeTree,CollapsingMergeTreeetc.) com uma chaveORDER BYvazia, pois o comportamento de merge nessas tabelas é indefinido. Se você ainda precisar criar uma tabela desse tipo, habilite a configuraçãoallow_suspicious_primary_key. #91569 (Anton Popov). - Várias correções relacionadas a índices implícitos. O esquema exibido ou armazenado (metadados do Keeper) não incluirá índices implícitos, como os criados pelas configurações
add_minmax_index_for_numeric_columnsouadd_minmax_index_for_string_columns. Isso pode causar erros de metadados quando uma tabela ReplicatedMergeTree é criada ou atualizada em uma versão mais recente, enquanto há uma réplica em um lançamento mais antigo. #91429 (Raúl Marín).
Alterações em Settings e configuração
- Suporte à marcação de exceções em respostas de resultados HTTP, permitindo que os clientes analisem exceções com mais confiabilidade. Resolve #75175. A configuração
http_write_exception_in_output_formaté desabilitada por padrão para manter a consistência entre os formatos. #88818 (Kaviraj Kanagaraj). - Corrige a precedência das configurações SASL do Kafka. As configurações SASL no nível da tabela especificadas em consultas CREATE TABLE agora substituem corretamente as configurações específicas de consumer/producer vindas dos arquivos de configuração. #89401 (János Benjamin Antal).
- Renomeia os parâmetros de configuração do ACME de
refresh_certificates_task_intervalpararefresh_certificates_task_interval_secondserefresh_certificates_before to refresh_certificates_before_seconds. O parâmetrorefresh_certificates_task_interval_secondsagora espera um valor em segundos. #92211 (Konstantin Bogdanov). - Marca a desativação de argumentos posicionais nas projeções como uma alteração incompatível com versões anteriores. Além disso, introduz a configuração
enable_positional_arguments_for_projectionspara permitir uma atualização segura do ClickHouse cluster quando houver argumentos posicionais nas projeções. #92007 (Dmitry Novik).
Alterações no cliente
- Atualização do clickhouse-client para retornar um código de saída diferente de zero (159 - TIMEOUT_EXCEEDED) quando uma consulta expira devido a
receive_timeout. Anteriormente, timeouts retornavam o código de saída 0 (sucesso), o que dificultava a detecção de falhas por timeout em scripts e automações. #91432 (Sav).
Alterações no formato das estatísticas
- Ao alterar uma coluna de
StringparaNullable(String), não faremos mutação nos dados. Porém, a função de agregaçãouniqusa uma estrutura de dados diferente: para uma coluna Nullable, ela usaráAggregateFunctionNullcom um agregadoruniqaninhado.AggregateFunctionNullserializará um sinalizador bool adicional. Isso tornará o arquivo de estatísticas incompatível. O formato das estatísticas mudou; o servidor falhará se houver estatísticas no formato antigo. Para evitar exceção, executeALTER TABLE [db.]table MATERIALIZE STATISTICS ALLpara regenerar as estatísticas. #90311 (Han Fei).
Outras alterações incompatíveis
- Corrige
Fatalao compactar dados com tamanho que não é múltiplo do tamanho do elemento (no codec T64). Resolve #89282. #89432 (yanglongwei).
Novos recursos
Funções
- Adicionada a nova instrução SQL EXECUTE AS para oferecer suporte à impersonação de usuários. Resolve #39048. #70775 (Shankar).
- Adicionada a função
flipCoordinates, que remove o aninhamento do número necessário de dimensões em um array e troca ponteiros dentro da coluna Tuple. Resolve #79469. #79634 (Sachin Kumar Singh). - Operador
IS NOT DISTINCT FROM(<=>) aprimorado: adicionado suporte ao inversoIS DISTINCT FROMe a operandos numéricos compatíveis de tipos diferentes (por exemplo,Nullable(UInt32)eNullable(Int64)). #87581 (yanglongwei). - Adicionado suporte à window function
cume_dist. Corrige #86920. #88102 (Manuel). - Funções para calcular área e perímetro para o tipo Geometry. #89047 (Konstantin Vedernikov).
- Implementada a função
dictGetKeys, que retorna as chaves do dicionário cujo atributo é igual ao valor especificado. Ela usa um cache de lookup reverso por consulta, ajustado pela configuraçãomax_reverse_dictionary_lookup_cache_size_bytes, para acelerar lookups repetidos. #89197 (Nihal Z. Miaji). - Adicionado suporte a
arrayRemove(arr, elem)para remover do arrayarrtodos os elementos iguais aelem. Resolve #52099. #89585 (tiwarysaurav). - Introduz a função escalar
midpoint, que calcula a média. Resolve #89029. #89679 (simonmichal). - Agora é possível recuperar tanto o argumento quanto seu valor mínimo ou máximo correspondente usando as novas funções
argAndMineargAndMax. #89884 (AbdAlRahman Gad). - Adicionada a função SQL
HMAC(algorithm, message, key)como parte de #73900 e #38775. #90837 (Mikhail f. Shiryaev). - Adicionado suporte para que a função
has()use a chave primária e data skipping indexes quando o primeiro argumento for um array constante. Fecha #90980. #91023 (Nihal Z. Miaji).
Tabelas de sistema
- Adicionada a tabela
system.unicode, que contém uma lista de caracteres Unicode e suas propriedades. Fecha #80055. #80857 (wxybear). - Adicionada uma nova tabela de sistema
shared_merge_tree_condemned_parts, semelhante àshared_merge_tree_outdated_parts, que lista as partes condenadas prestes a serem eliminadas pela PartsKillerThread. (Smita Kulkarni).
Motores de tabela e armazenamento
- Suporte a parte da Prometheus HTTP Query API. Para habilitá-la, adicione uma regra do tipo
query_apina seção<prometheus>do arquivo de configuração. Os handlers compatíveis são/api/v1/query_rangee/api/v1/query. #86132 (Nikita Mikhaylov). - Agora, os usuários podem configurar tabelas S3/Azure Queue para mover ou marcar arquivos processados, além das opções anteriores de manter ou remover arquivos. Resolve #72944. #86907 (Murat Khairulin).
- Adiciona uma nova configuração do MergeTree,
merge_max_dynamic_subcolumns_in_wide_part, para limitar o número de subcolunas dinâmicas na parte Wide após o merge, independentemente dos parâmetros especificados no tipo de dados. #87646 (Pavel Kruglov). - Integração com o catálogo Microsoft OneLake. #89366 (Konstantin Vedernikov).
- Suporte à sintaxe
CREATE OR REPLACEpara tabelas temporárias. Fecha #35888. #89450 (Aleksandr Musorin). - Suporte a join
direct(nested loop) para tabelas MergeTree. Para usá-lo, especifique-o como a única opção na configuração:join_algorithm = 'direct'. #89920 (Vladimir Cherkasov). - Este PR introduz configurações no nível de projeção, expostas por meio da nova cláusula
WITH SETTINGSemALTER TABLE ... ADD PROJECTION. Essas configurações permitem que as projeções sobrescrevam determinados parâmetros de armazenamento do MergeTree (por exemplo, index_granularity, index_granularity_bytes) individualmente. #90158 (Amos Bird).
Iceberg e lagos de dados
- Suporte a
ORDER BYna operaçãoCREATEpara Iceberg + ordenação noINSERT. Resolve #89916. #90141 (Konstantin Vedernikov).
Recursos de SQL e consultas
- Adiciona a opção
allow_reentryà função agregadorawindowFunnel. Quando habilitada com strict_order, ela ignora eventos que violam a ordem em vez de interromper a análise do funil. Isso permite lidar com jornadas do usuário com atualizações de página (A->A->B) ou navegação de retorno (A->B->A->C) sem subestimar as taxas de conversão. #86916 (Lee ChaeRok). - O usuário agora pode adicionar um novo argumento
preprocessorna construção de um índice de texto. O argumento é uma expressão arbitrária que transforma cada documento antes da tokenização. #88272 (Jimmy Aguilar Mena). - Adiciona suporte a
LIMITeOFFSETfracionários para selecionar uma fração de uma tabela. Fecha #81892. #88755 (Ahmed Gouda). - Adiciona a configuração
into_outfile_create_parent_directoriespara criar automaticamente diretórios pai para INTO OUTFILE, evitando erros quando os caminhos de saída não existirem. Resolve #88610. #88795 (Saksham). - Adiciona a configuração
type_json_skip_invalid_typed_pathspara desabilitar exceções em inserções/conversões de tipo para o tipo JSON quando o JSON de entrada não puder ser convertido para caminhos tipados explícitos no tipo JSON. Nesse caso, usa o valor null/zero do caminho tipado. Fecha #86917. #89886 (Max Justus Spransy).
Recursos do cliente e da CLI
- O cliente de CLI agora pode suprimir a mensagem ‘ClickHouse server version is older than ClickHouse client. It may indicate that the server is out of date and can be upgraded.’ ao especificar
--no-server-client-version-messageoufalse. #87784 (Larry Snizek). - Acesse instâncias do ClickHouse Cloud usando credenciais da Cloud com —login. #89261 (Krishna Mannem).
- A interface web agora oferece um botão de download. Ele baixa o resultado completo, mesmo que a UI exiba apenas parte dele. #89768 (Alexey Milovidov).
Configuração do servidor e monitoramento
- Adiciona um campo
memory_usageaX-ClickHouse-ProgresseX-ClickHouse-Summary. Isso pode ser usado para coletar, em tempo real no cliente, o uso de memória das consultas. #88393 (Christoph Wurm). - Adicionada a configuração
send_profile_events, que permite aos clientes reduzir o tráfego de rede quando os eventos de perfil não estiverem em uso. #89588 (Kaviraj Kanagaraj).
Keeper
- Compatibilidade do Keeper com o ZooKeeper: CREATE com STATISTICS. #88797 (Konstantin Vedernikov).
- Suporte a watches persistentes do ZooKeeper no ClickHouse Keeper. #88813 (Konstantin Vedernikov).
Formatos de entrada/saída
- Implementado o novo formato de entrada/saída
Buffers. Esse formato é semelhante aoNative; no entanto, ao contrário deNative, ele não armazena nomes nem tipos de colunas, nem metadados adicionais. Fecha #84017. #91156 (Nihal Z. Miaji). - Adicionada a configuração
arrow_flight_request_descriptor_typepara oferecer suporte ao Dremio e a outros servidores Arrow Flight que exigem descritores no formato de comando. Corrige #89523. #89826 (Shreyas Ganesh). - Adicionada a configuração
kafka_schema_registry_skip_bytesao mecanismo de tabela Kafka para ignorar bytes de cabeçalho do envelope (por exemplo, o prefixo de 19 bytes do AWS Glue Schema Registry) antes de fazer o parsing do payload da mensagem. #89621 (Taras Polishchuk).
Outros novos recursos
- Adiciona a configuração
max_streams_for_files_processing_in_cluster_functionspara controlar o número de streams na leitura paralela de arquivos em funções de tabela cluster. Fecha #90223. #91323 (Pavel Kruglov). - Permite desabilitar, por consulta, o download em segundo plano de dados de partes próximas. Corrige #89524. #89668 (tanner-bruce).
- Adiciona suporte experimental ao e2k (Elbrus-2000) como nova plataforma para o ClickHouse. #90159 (Ramil Sattarov).
Recursos experimentais
- Suporte à obtenção de certificados TLS de provedores ACME, RFC 8555. #66315 (Konstantin Bogdanov).
- Foi introduzida uma nova lógica para executar consultas automaticamente com réplicas paralelas, controlada pela configuração
automatic_parallel_replicas_mode. #87541 (Nikita Taranov). - A busca de texto completo agora está em prévia privada (antes, estava em fase experimental). #88928 (Robert Schulze).
Aliaspassou a ser experimental e pode ser habilitado comallow_experimental_alias_table_engine=1. #89712 (Kai Zhu).
Melhorias de desempenho
Execução e otimização de consultas
- Falha imediatamente quando as consultas atingem os limites de linhas. Resolve #61872. #62804 (Sean Haynes).
- Adiciona uma otimização para remover colunas não utilizadas em planos de consulta. Resolve #75152. #76487 (János Benjamin Antal).
- Otimização para valores grandes em ConstantNode. Fecha #72880. #81104 (Yakov Olkhovskiy).
- Faz prefetch de chaves durante a iteração da tabela hash para minimizar falhas de cache. #84708 (lgbo).
- Melhora a velocidade da descompressão LZ4 simplificando o código e ajustando o algoritmo de seleção. #88360 (Raúl Marín).
- Implementa replicação lazy de colunas em JOIN e ARRAY JOIN. Evita converter representações especiais de colunas, como Sparse e Replicated, em representações completas em alguns formatos de saída. Isso evita cópias desnecessárias de dados na memória. #88752 (Pavel Kruglov).
- Usa operações SIMD avançadas para funções lógicas por meio de despacho dinâmico. #90432 (Raúl Marín).
- Melhora o desempenho de funções JIT ao evitar inicializar desnecessariamente a coluna de resultado com zero. #90449 (Raúl Marín).
- Acelera a descompressão T64 por meio de despacho dinâmico. #90610 (Raúl Marín).
- Acelera a conversão de colunas para bool (em cláusulas
WHERE) por meio de despacho dinâmico. #91203 (Raúl Marín). - Acelera a ordenação de um único bloco numérico por meio de despacho dinâmico. #91213 (Raúl Marín).
Otimizações de JOIN
RIGHTeFULL JOINs agora usam ConcurrentHashJoin; isso significa que esses tipos de junção agora são executados com um grau mais alto de paralelismo. Melhora diversos casos deRIGHTeFULL JOIN` em até 2 vezes. Resolve #78027. #78462 (Yarik Briukhovetskyi).- Permite reescrever
ANY LEFT JOINouANY RIGHT JOINcomoALL INNER JOINem alguns casos. #89403 (Dmitry Novik). - Adiciona suporte a filtros de runtime de
JOINpara junçõesANTI. Além disso, refatora a implementação dos filtros de runtime para reduzir a contenção de locks. #89710 (Dmitry Novik). - Adiciona suporte à manutenção da leitura em ordem da tabela à esquerda em operações
LEFT/INNER JOIN, o que pode ser aproveitado por etapas subsequentes. #89815 (Vladimir Cherkasov).
Otimizações do MergeTree e de armazenamento
- Consultas
SELECTaté 8x mais rápidas com partition pruning intensivo em tabelas com mais de 10 mil partes. #85535 (James Morrison). - Quando uma consulta usa um fixed hash map para o estado de aggregation (group by por um inteiro pequeno), o ClickHouse passa a mesclar o estado de aggregation em paralelo para acelerar a consulta. Resolve #63666. #87366 (Jianfei Hu).
- O Parquet reader v3 vem habilitado por padrão. #88827 (Michael Kolupaev).
- As consultas agora podem se beneficiar simultaneamente de optimize_read_in_order e query_plan_optimize_lazy_materialization. Resolve #88767. #88866 (Manuel).
- Usa aggregate projection para consultas com
DISTINCT. Fecha #86925. #88894 (Nihal Z. Miaji). - Executa a transformação
LIMIT BYem streaming nos casos em que a ordenação de entrada corresponde às chaves de LIMIT BY. #88969 (Eduard Karacharov). - Adicionado suporte a serialização esparsa para colunas do tipo Nullable. #88999 (Amos Bird).
- Otimiza a filtragem in-place no leitor do MergeTree. Resolve #87119. #90630 (Xiaozhe Yu).
- Introduz uma heurística adicional para reduzir a largura das opções de merge selecionadas. #91163 (Mikhail Artemenko).
Otimizações de índices e de busca textual
- O ClickHouse agora usa skip indexes para realizar análise de índice em cláusulas
WHEREcom condições de filtro conectadas por uma combinação deANDeOR. Antes, a cláusula WHERE precisava ser uma conjunção (AND) de condições de filtro para usar skip indexes. Uma nova settinguse_skip_indexes_for_disjunctions(padrão: ativada) controla esse recurso. #87781 (Shankar Iyer). - Desempenho de filtragem aprimorado para predicados com funções como
like,equals,hase outras, aproveitando um filtro preliminar adicional construído a partir do índice de texto. Essa otimização é habilitada pela settingquery_plan_text_index_add_hint. #88550 (Anton Popov). - Desempenho do índice de texto aprimorado com caching de blocos de Dicionário e uso de tabelas hash para lookups de token em vez de binary search. #88786 (Elmi Ahmadov).
- Como as posting lists são as maiores em termos de volume de dados, colocá-las em cache melhora o desempenho em execuções consecutivas. #88912 (Elmi Ahmadov).
- Otimiza lookups repetidos em dicionário inverso fazendo lookups mais rápidos em um conjunto pré-computado de possíveis valores de chave. Fecha #7968. #88971 (Nihal Z. Miaji).
- Otimiza consultas
ORDER BY...LIMIT Nusando skip index e um filtro de limite dinâmico para reduzir significativamente o número de linhas processadas. #89835 (Shankar Iyer). - Os usuários devem perceber menor latência na análise de índice quando houver grandes índices
minmax(milhões de grânulos). #90428 (Shankar Iyer).
Otimizações de agregação
- Otimizado o
AggregateFunctionHistogramao ordenar apenas a cauda do array de pontos e dispensar a ordenação para entradas monotônicas, obtendo um ganho de desempenho de ~10%. #85760 (MakarDev). - Algumas operações de countDistinct foram ligeiramente aceleradas com a redução da sobrecarga de HashSetTable::merge. #89727 (Raúl Marín).
- Melhorados o desempenho e o comportamento do topK. #90091 (Raúl Marín).
- Melhorado o desempenho das operações de comparação de Decimal. Resolve #28192. #90153 (Konstantin Bogdanov).
Otimizações de S3 e backup
- O S3 particiona objetos internamente com base em prefixos de chave e escala automaticamente para altas taxas de requisições por partição. Essa mudança introduz duas novas configurações de BACKUP: data_file_name_generator e data_file_name_prefix_length. Quando data_file_name_generator=checksum, os arquivos de dados do backup são nomeados com base em um hash do seu conteúdo. #88418 (Julia Kartseva).
- Melhora o desempenho de consultas em tabelas S3 criadas com glob pattern ao fazer pushdown dos valores de filtro de
_path, o que evita operações de listagem no S3. Controlado pela configuraçãos3_path_filter_limit. #91165 (Eduard Karacharov).
Otimizações para lago de dados
- Execução distribuída: melhor divisão das tarefas por IDs de row groups, e não por arquivos. #87508 (Konstantin Vedernikov).
- Suporte a poda de partições para funções do Paimon. #90253 (JIaQi Tang).
Melhorias
Otimização e execução de consultas
- Permitir
FETCH PARTITIONquando houver discos corrompidos em tabelas replicadas MergeTree. #58663 (Duc Canh Le). - Adiciona a função
h3PolygonToCells, que pode preencher uma geometria com hexágonos H3. Resolve #33991. #66262 (Zacharias Knudsen). - Todas as consultas DDL
ON CLUSTERagora são executadas com o contexto do usuário da consulta original para melhor validação de acesso. #71334 (pufit). - Adicionado paralelismo às consultas
ALTER TABLE ... FREEZE. #71743 (Kirill). - Permite usar segundos argumentos não constantes em
IN. Também oferece suporte a uma tupla como segundo argumento. #77906 (Yarik Briukhovetskyi). - Este PR permite usar projeções normais como índice secundário. Quando habilitado, certos predicados da consulta podem ser usados para ler a partir de partes de projeção e gerar bitmaps para filtrar linhas com eficiência durante o estágio PREWHERE. #81021 (Amos Bird).
- Habilita
enable_shared_storage_snapshot_in_querypor padrão para oferecer melhores garantias de consistência. #82634 (Alexey Milovidov). - UNION deve unificar os tipos com Variant, se necessário. Resolve #82772. #83246 (Mithun p).
- Registrar consultas internas (como as executadas internamente por dicionários, views materializadas atualizáveis etc.) e adicionar a nova coluna
is_internalasystem.query_log. #83277 (Miсhael Stetsyuk). - Permite
INSERTem colunasALIAS(colunas que simplesmente se referem a uma coluna física, sem nenhuma expressão). Fecha #80060. #84154 (Shaurya Mohan). - Você pode ver uma barra de progresso, logs e estatísticas de desempenho de consultas
CREATE OR REPLACE TABLEcomSELECTno clickhouse-client. Corrige #38416. #87247 (Diskein). - Suporte a tipos JSON e Dynamic em funções de hash. Resolve #87734. #87791 (Pavel Kruglov).
- O valor padrão de
query_plan_optimize_join_order_limitfoi alterado para 10. #89312 (Alexey Milovidov). - A otimização enable_lazy_columns_replication agora é o padrão, o que reduzirá o uso de memória em junções. #89316 (Alexey Milovidov).
- Ative a configuração
allow_statistics_optimizepor padrão, para que o otimizador de JOINs use estatísticas de colunas. #89332 (Alexey Milovidov). - Ative
create_table_empty_primary_key_by_defaultpor padrão. Isso melhora a usabilidade. #89333 (Alexey Milovidov). - A configuração
enable_time_time64_typeagora vem habilitada por padrão. #89345 (Yarik Briukhovetskyi). - A configuração
allow_special_serialization_kinds_in_output_formatsagora é habilitada por padrão. #89402 (Pavel Kruglov). - Ignorar
ON CLUSTERem consultas executadas por meio do Shared Catalog. (Nikolay Degterinsky). - Adicionar suporte ao
ALTER DATABASE MODIFY COMMENTno Shared Catalog. (Nikolay Degterinsky). - Suporte a
CREATE OR REPLACEpara SharedSet/SharedJoin em bancos de dados Shared. (Tuan Pham Anh). - Evite aguardar outras consultas ao executar
SYNC REPLICAem SharedMergeTree. (Raúl Marín).
Melhorias em armazenamento e MergeTree
- Adiciona uma nova coluna virtual
_tags(Map(String, String)) com todas as tags associadas ao blob no S3. Resolve #72945. #77773 (Zicong Qu). - Adiciona uma mensagem de erro informando que a parte foi deduplicada. #80264 (Aleksandr Musorin).
- Passa a usar OpenSSL 3.5.4. #81389 (Konstantin Bogdanov).
- Adiciona cache para autenticação bcrypt. #87115 (Nikolay Degterinsky).
- Timestamps do Parquet sem fuso horário (
isAdjustedToUTC=false) agora são lidos como DateTime64(…, ‘UTC’) em vez de DateTime64(…). #87872 (Michael Kolupaev). - Roles definidas em SQL agora podem ser concedidas a usuários definidos em
users.xml. #88139 (c-end). - Se um skip index usado em uma consulta FINAL estiver em uma coluna que faz parte da chave primária, a etapa adicional de verificar a interseção da chave primária em outras partes é desnecessária e agora não é mais executada. Resolve #85897. #88368 (Shankar Iyer).
- Permite inserções em tabelas remotas e de lago de dados quando
disable_insertion_and_mutationestá habilitado. #88549 (Alexander Tokmakov). - Armazena em cache estatísticas no nível da tabela e adiciona duas configurações: a configuração do MergeTree
refresh_statistics_intervale a configuração de sessãouse_statistics_cache. #88670 (Han Fei). - Adiciona uma configuração do MergeTree
alter_column_secondary_index_modepara controlar o que fazer com índices durante mutações. Valores possíveis: throw, drop, rebuild e compatibility. Fecha #77797. #89335 (Raúl Marín). - Introduz um cache por tabela de
ColumnsDescriptionpara partes, reduzindo o uso de memória quando as tabelas contêm muitas partes e muitas colunas. #89352 (Azat Khuzhin).
Tabelas de sistema e monitoramento
- Adiciona várias métricas de histograma para o servidor e o Keeper, para instrumentar a duração dos estágios de execução das requisições ao Keeper. #88158 (Miсhael Stetsyuk).
- Adiciona uma nova coluna
statisticsemsystem.columns, indicando os tipos de estatísticas criadas nessa tabela. #89086 (Han Fei). - A interface HTTP passará a fornecer os headers
AgeeExpiresquando o cache de resultados de consulta for usado. Introduz novos eventos de perfil:QueryCacheAgeSeconds,QueryCacheReadRows,QueryCacheReadBytes,QueryCacheWrittenRows,QueryCacheWrittenBytes. #89759 (Alexey Milovidov). - Exibe propriedades da tabela na interface web. Clicar no número de linhas ou bytes abrirá uma consulta de
system.tables. #89771 (Alexey Milovidov). - Adiciona os campos
last_error_time,last_error_message,last_error_query_idelast_error_traceà tabelasystem.error_log. #89879 (Narasimha Pakeer). - Armazena IDs de blocos de desduplicação em system.part_logs. #89928 (Sema Checherinda).
- Altera o valor padrão da configuração
check_query_single_value_resultdetrueparafalse. Isso faz com queCHECK TABLEretorne resultados detalhados por parte, em vez de um resultado agregado. #90150 (Robert Schulze). - Adiciona uma nova coluna
parts_in_progress_namesasystem.mutationspara melhorar o diagnóstico. #90155 (Shaohua Wang). - Introduz
system.background_schedule_pool{,_log}para melhorar a introspecção de jobs em segundo plano. #91157 (Azat Khuzhin). - Adiciona os eventos de perfil
FailedInitialQueryeFailedInitialSelectQuery. #91172 (RinChanNOW). - Adiciona três colunas em
system.tablespara métricas de partes órfãs. (Han Fei). - Expõe o valor de
distributed_cache_client.connection_pool_sizecomo uma métrica. (Francesco Ciocchetti).
Melhorias no cliente e na UI
- Agora o usuário pode cancelar a consulta pressionando Ctrl-C quando o pager estiver ativo. Resolve #80778. #88935 (Grigorii Sokolik).
- A interface web agora exibirá barras na tabela mesmo quando os valores forem negativos. #89016 (Alexey Milovidov).
- Consultas iniciadas com espaços em branco não são mais salvas no histórico. #89116 (Konstantin Bogdanov).
clickhouse-clienteclickhouse-local, no modo interativo, destacarão na linha de comando identificadores com o mesmo nome do identificador atual sob o cursor. #89689 (Alexey Milovidov).- O redimensionador da área de texto da consulta na interface web agora ocupa toda a largura. #89457 (Alexey Milovidov).
- As dicas de tipo na interface web não invadem mais o cabeçalho da tabela. #89753 (Alexey Milovidov).
- Agora você pode comentar ou descomentar rapidamente as linhas selecionadas no editor de consultas da interface web usando
Ctrl+/(ouCmd+/no Mac). #91160 (Samuel K.). - Adicionado suporte para carregar a configuração do ClickHouse Client a partir dos caminhos do XDG Base Directory. Resolve #89882. #90306 (Wujun Jiang).
Melhorias em S3 e armazenamento em nuvem
- Passa a permitir automaticamente o uso de regiões opt-in da AWS para S3 quando a região não é especificada no endpoint. #88930 (Andrey Zvonov).
- Define
s3_retry_attemptscomo 500 por padrão na versão 25.6 para garantir que os backups sejam concluídos com sucesso quando houver um reparticionamento no S3. #89051 (Nikita Mikhaylov). - Armazena em cache as credenciais do S3 usadas na interação com o endpoint STS para que possam ser reutilizadas em diferentes chamadas de função. #89734 (Antonio Andelic).
- Agora, URLs pré-assinadas funcionam com S3. Fecha #65032. #90827 (Yarik Briukhovetskyi).
Melhorias em lagos de dados
- Suporte à leitura de CDF do DeltaLake por meio da table function
deltaLake, com as configuraçõesdelta_lake_snapshot_start_versionedelta_lake_snapshot_end_version. #90431 (Kseniia Sumarokova). - Suporte a configurações de armazenamento em insert into table function, para manter consistência com select. Fecha #89386. #91707 (Kseniia Sumarokova).
- Gerar um erro “not implemented” para consultas TRUNCATE em lagos de dados, em vez de simplesmente não fazer nada. Fecha #86604. #91713 (Kseniia Sumarokova).
Melhorias no Kafka
- As configurações
kafka_compression_codecekafka_compression_levelagora podem ser usadas para especificar a compressão dos produtores Kafka. #89073 (János Benjamin Antal). - Adiciona
kafka_consumer_reschedule_mscomo uma configuração ajustável do engine de tabelaKafka. Resolve #89204. #90112 (Jeremy Aguilon).
Melhorias no Keeper
- Adiciona um limite de tamanho em bytes para o lote de requisições de append no Keeper. O limite é controlado por
keeper_server.coordination_settings.max_requests_append_bytes_size. #90342 (Antonio Andelic). - Adiciona uma verificação no lado do servidor do Keeper durante o handshake para rejeitar clientes quando
last_zxid_seen (provided by the client) > last_processed_zxid. #90016 (Miсhael Stetsyuk). - Usa um limite de nós mais baixo para a solicitação RemoveRecursive do Keeper durante a limpeza do S3Queue. #90201 (Antonio Andelic).
Melhorias no formato de entrada/saída
- Adicionado suporte a UUID no Parquet quando ele é representado por
FixedString(16)com o tipo lógico UUID. #74484 (alekseev-maksim). - Adicionado suporte a array de strings como entrada para as funções
hasAnyTokensouhasAllTokens. #89124 (Elmi Ahmadov). - No formato Pretty, tuplas nomeadas agora são exibidas como Pretty JSON. Isso fecha #65022. #91779 (Mostafa Mohamed Salah).
- Adicionado um limite para o tamanho das mensagens do CapnProto. Ele pode ser alterado com
format_capn_proto_max_message_size. #91888 (Antonio Andelic).
Melhorias no índice de texto
- O índice de texto agora funciona com tabelas ReplacingMergeTree. #90908 (Elmi Ahmadov).
- Agora é possível usar índice invertido em
PREWHERE. Resolve #89975. #89977 (Peng Jian). - O tokenizador de ngrams agora pode ser criado com
ngram_length = 1. #91529 (George Larionov). - Foi adicionado um cache para o cabeçalho desserializado do índice de texto para reduzir E/S e melhorar o desempenho da consulta. #89513 (Elmi Ahmadov).
Outras melhorias
- Corrige a deserialização binária de
ArrayeMappara usar a configuraçãomax_binary_array_sizeem vez demax_binary_string_sizeao validar limites de tamanho. #88744 (Raufs Dunamalijevs). - Se a memória do sistema for inferior a 5GB, não faz
mlockdo executável por padrão. #89751 (Alexey Milovidov). - Reduz o uso de memória durante merges na tabela
system.metric_log, definindomin_bytes_for_wide_partevertical_merge_algorithm_min_bytes_to_activatecomo 128MB. #89811 (filimonov). - Tenta novamente em caso de erros de rede quando a biblioteca S3 analisa a resposta XML. #90216 (Sema Checherinda).
- Atualiza as mensagens de aviso ao se aproximar dos limites de guardrails: exibe os valores atuais e de throw. #90438 (Nikita Fomichev).
- Faz streaming de fragmentos na tabela
system.filesystem_cacheem vez de criar um único fragmento com todo o estado do cache. #90508 (Kseniia Sumarokova). - As entradas no cache de índice de similaridade vetorial agora são removidas quando partes da tabela são excluídas ou substituídas por partes mais recentes. #90750 (Shankar Iyer).
- Evita expor a versão do servidor ClickHouse em respostas de erro HTTP retornadas antes da autenticação. #91003 (filimonov).
- Adiciona as novas configurações
apply_row_policy_after_finaleapply_prewhere_after_finalpara permitir aplicar row policies e condiçõesPREWHEREapós o processamento deFINAL. Corrige #90986. #91065 (Yarik Briukhovetskyi). - Adiciona suporte ao tipo JSON em tupleElement. Fecha #81630. #91327 (Pavel Kruglov).
- Adiciona suporte a índices negativos para acessar elementos de tupla (por exemplo, tuple.-1). #91665 (Amos Bird).
- Permite conversão implícita de tipo ao converter
ArrayemQBit. #91846 (Raufs Dunamalijevs). - Adiciona uma nova coluna,
elapsed_time_microseconds, asystem.blob_storage_log. #92322 (Alexey Milovidov). - Adiciona uma nova configuração,
database_shared_drop_table_delay_seconds, que permite aos usuários controlar o atraso para exclusão de tabelas no Shared database. (Nikolay Degterinsky). - Carrega sob demanda chaves criptografadas para coleções nomeadas. (Pablo Marcos).
- Permite desabilitar o cache de clientes por buffer no distributed cache. (Kseniia Sumarokova).
- Adiciona um limite compartilhado para conexões do distributed cache. (Kseniia Sumarokova).
Correções de bugs
Esta seção contém uma seleção de correções de bugs importantes. Para ver a lista completa de todas as correções de bugs deste lançamento, consulte o changelog completo
Correções na execução de consultas
- Corrige
rows_before_limit_at_leastincorreto quando há múltiplos shards remotos envolvidos em uma agregação distribuída com mesclagem. #63511 (Amos Bird). - Corrige a exibição de
0 rows in setapós a consultaINSERT INTO ... SELECT. Fecha #47800. #79462 (Engel Danila). - Corrige
multiIfcom argumentos constantes e avaliação de curto-circuito. Fecha #72714. #84546 (Yakov Olkhovskiy). - Corrige
LogicalErrorao selecionar de uma tabela com uma restrição de subconsulta. Resolve #84190. #85575 (Pervakov Grigorii). - Corrige um erro lógico na reordenação de cross join quando
query_plan_optimize_join_order_limit > 1. Fecha #89409. #88286 (Vladimir Cherkasov). - Corrige resultados incorretos de JOIN ao usar condições OR com chaves únicas na tabela da direita. Resolve #89391. #89512 (Vladimir Cherkasov).
- Corrige um erro lógico em full_sorting_merge join com colunas duplicadas. Resolve #86957. #89495 (Vladimir Cherkasov).
- Corrige o possível erro ‘Invalid number of rows in Chunk’ em JOIN com colunas duplicadas. Resolve #89411. #90053 (Vladimir Cherkasov).
- Corrige o problema de dados duplicados em RIGHT JOIN com tabela distribuída quando as réplicas paralelas estão ativadas. #90806 (zoomxi).
- Corrige um erro lógico com
join_use_nullse múltiplas junções junto com cross join. #91853 (Vladimir Cherkasov).
Correções em tipos de dados e JSON
- Corrige, em alguns casos, a leitura de subcolunas de uma coluna com ponto no nome. Resolve #81261, #82058, #88169. #87205 (Pavel Kruglov).
- Corrige a leitura de um array misto de Floats e Bool em JSON. Antes, a inserção desses dados levava a uma exceção. #88008 (Pavel Kruglov).
- Corrige a conversão de
LowCardinality(Nullable(T))para Dynamic. #86365 (Pavel Kruglov). - Corrige um possível erro lógico durante a leitura de caminhos e suas subcolunas na serialização avançada de dados compartilhados em JSON. Fecha #89805. #89819 (Pavel Kruglov).
- Corrige um possível overflow de pilha na desserialização binária de tipos de dados. Fecha #88710. #89822 (Pavel Kruglov).
- Corrige um possível estado inconsistente de dados compartilhados e caminhos dinâmicos em JSON que poderia levar a erros lógicos e resultados inesperados. #90816 (Pavel Kruglov).
- Corrige a mesclagem de colunas JSON em Summing/Aggregating/Coalescing MergeTree. #91151 (Pavel Kruglov).
Correções no MergeTree e no armazenamento
- Corrigidos vários problemas causados pela remoção antecipada de colunas no TTL. Resolve #88002. #88860 (Amos Bird).
- Corrige resultado incorreto de min(PK)/max(PK) quando a PK está em ordem reversa. Corrige #83619. #88796 (Amos Bird).
- Corrigido sharding incorreto na otimização de
JOINquando a chave primária está ordenada em ordem decrescente. Resolve #88512. #88794 (Amos Bird). - Corrige uma condição de corrida no caminho de leitura do índice de projeção. Resolve #89497. #89762 (Peng Jian).
- Corrigido o tratamento incorreto do merge de partes esvaziadas por TTL com projeções não vazias ao usar
deduplicate_merge_projection_mode='ignore'. Resolve #89430. #89458 (Amos Bird). - Corrige o erro
TOO_MANY_MARKS, que poderia ocorrer após algumas consultasALTERpara partes compactas. #91980 (alesapin).
Correções de Parquet e de formato
- Corrige uma falha de segmentação no leitor de Parquet quando
input_format_parquet_local_file_min_bytes_for_seeké definido como 0. Resolve #78456. #88784 (Animesh). - No gravador de Parquet, emite a string
created_byno formato correto. #87735 (Michael Kolupaev). - Corrige a gravação em Parquet que não preservava a ordem original ao usar gravação com uma única thread no gravador nativo. #90126 (Arthur Passos).
- Corrige um bug no leitor de ORC ao ler colunas do tipo String codificadas com DICTIONARY_V2 e que contêm apenas valores NULL. #91889 (Peng Jian).
- Corrige um estouro ao ler no formato ORC os tipos Date e DateTime64. Fecha #70976. #91572 (Yarik Briukhovetskyi).
Correções de Iceberg e lago de dados
- Corrige o protocolo do
icebergS3Cluster. Passa a oferecer suporte à evolução de esquema, exclusões posicionais e por igualdade na função de cluster do Iceberg. Resolve #88287. #88919 (Yang Jiang). - Corrige JSON Exception em tabela Iceberg com coluna
timestampao usar o Glue catalog. Resolve #90210. #90209 (Alsu Giliazova). - Agora, o ClickHouse não usará a otimização de leitura em ordem para o Iceberg se a ordem de classificação não estiver especificada nos arquivos de manifesto. Corrige #89178. #90304 (alesapin).
Correções em funções
- Corrige um bug na função
reverseUTF8. Em versões anteriores, ela invertia incorretamente os bytes de pontos de código UTF-8 de 4 bytes. Fecha #88913. #88914 (Alexey Milovidov). - Corrige o cálculo de phi-quadrado, que causava resultados incorretos em
cramersV,cramersVBiasCorrected,theilsUecontingency. #87831 (Nihal Z. Miaji). - Corrige
top_kpara respeitar o parâmetro de limiar quando chamado com um único argumento. Fecha #88757. #88867 (Manuel). - Corrige o truncamento de argumentos de
countIf(*). Fecha #89372. #89373 (Manuel). - Corrige as funções
trim,ltrimertrim, que não funcionavam com dois argumentos. Fecha #90170. #90305 (Nihal Z. Miaji). - Corrige a função
arrayFilter, que não funcionava ao usar um array vazio e a funçãoisNull. Fecha #73849. #91105 (Nihal Z. Miaji).
Correções de memória e travamentos
- Corrige um possível travamento durante uma consulta remota com
ARRAY JOINdentro deINe com a configuraçãoenable_lazy_columns_replicationhabilitada. Resolve #90361. #89997 (Pavel Kruglov). - Corrige um travamento durante o desligamento limpo do servidor devido à ordem incorreta de destruição. Resolve #82420. #90076 (Nikita Mikhaylov).
- Corrige um travamento caso o estado de uma função de agregação contenha um valor serializado de uma coluna LowCardinality(String). #89550 (Pavel Kruglov).
- Corrige um travamento no StorageDistributed ao analisar nomes de diretório de shard malformados. #90243 (Aleksandr Musorin).
- Corrige erros espúrios de limite de memória quando o userspace page cache está habilitado. #91361 (Michael Kolupaev).
- Corrige um possível travamento em funções de agregação após
MEMORY_LIMIT_EXCEEDED. #92390 (Azat Khuzhin). - Melhora o rastreamento de memória na geração de resultados de hash joins. #89560 (Azat Khuzhin).
Correções de segurança e acesso
- Corrige o erro
ACCESS_ENTITY_NOT_FOUNDao tentar executarclusterAllReplicasa partir de um usuário com uma role inexistente. Resolve #87670. #89068 (pufit). - Corrige a validação de acesso para consultas
ALTER UPDATEquando uma função de tabelaremoteé usada comlocalhostcomo host de destino. #90761 (pufit). - Corrige a verificação de grants com curinga para revogação parcial. #90922 (pufit).
- Corrige o tratamento de grants globais com revogações com curinga. #90928 (pufit).
Correções no banco de dados Replicated
- Após a recuperação, uma réplica de banco de dados Replicated pode ficar presa por muito tempo exibindo mensagens como
Failed to marked query-0004647339 as finished; isso foi corrigido. #88671 (Alexander Tokmakov). - Corrigido
use-after-freeem Distributed devido a uma condição de corrida entre o desligamento eINSERTs em segundo plano. Resolve #88640. #89136 (Azat Khuzhin). - View materializada atualizável: corrigida uma falha rara do servidor caso a tabela de origem fosse completamente removida durante uma atualização. #89203 (Michael Kolupaev).
Correções no Keeper
- Corrigida a leitura dos changelogs durante a inicialização do Keeper nos casos em que um changelog não foi renomeado corretamente durante a rotação. #89496 (Antonio Andelic).
Outras correções relevantes
- Corrigida a degradação de desempenho na análise de índices de salto de dados. #89004 (Anton Popov).
- Corrige a incompatibilidade de particionamento do Hive que impedia uma atualização sem problemas para a 25.8. #90202 (Kseniia Sumarokova).
- Corrige consulta
WITH FILLcom loop infinito ao usarnan/inf. Resolve #69261. #90255 (Konstantin Bogdanov). - Time e Time64 agora devem respeitar corretamente os fusos horários ao serem convertidos de DateTime e DateTime64. Fecha #89896. #90310 (Yarik Briukhovetskyi).
- Corrigidos possíveis resultados incorretos após atualizações leves em consultas
SELECTcom o cache de condições de consulta habilitado. Corrige #90176. #90204 (Anton Popov). - Correção da compatibilidade da serialização em memória do estado de agregação String. #90880 (Antonio Andelic).
- Corrige a agregação do
SummingMergeTreepara colunasNestedLowCardinality. #90927 (Ivan Babrou). - Corrigido
system.view_refreshes, que falhava com o erroNo macro 'replica' in config. #92203 (Michael Kolupaev). - Corrige a replicação de um comando ALTER que adiciona indiretamente uma coluna à MV com Shared Catalog. (Nikolay Degterinsky).
- Corrige um commit de MV com falha que travava a aplicação de estado do Shared Catalog. (Nikolay Degterinsky).
- Corrige a verificação das restrições de configuração em
ALTERs nas réplicas secundárias com Shared Catalog. (Nikolay Degterinsky). - Preserva o comentário de banco de dados na migração do SharedCatalog. (Alexander Tokmakov).
- Corrige a substituição de visões materializadas em réplicas secundárias no Shared Catalog. (Nikolay Degterinsky).
- Corrige os contadores de system.distributed_cache_usage. (Kseniia Sumarokova).
- Corrige o DROP travado de uma tabela cuja criação falhou com uma exceção
ILLEGAL_COLUMNno Shared Catalog. (Nikolay Degterinsky). - Desabilitar
CREATE OR REPLACEpara SharedSet/SharedJoin em bancos de dados Replicated. (Tuan Pham Anh). - Corrige exceções
UNFINISHEDem refreshes de RMV com o Shared database. (Nikolay Degterinsky). - Corrige travamento com
TABLE_ALREADY_EXISTSem bancos de dados Shared. (Nikolay Degterinsky). - Corrige a migração de tabelas com consultas CREATE inválidas no Shared Catalog. (Nikolay Degterinsky).
- Sempre use partes virtuais na memória em
getStatus. (Mikhail Artemenko). - Adiciona tentativas de repetição à aplicação do estado do Shared Catalog durante a inicialização. (Nikolay Degterinsky).
- Correção para o
DROP DATABASEficar travado após uma exceção durante a criação de tabela. (Nikolay Degterinsky). - Corrigido erro lógico no distributed cache. (Kseniia Sumarokova).
- Corrige erro incorreto do distributed cache. (Kseniia Sumarokova).
- Corrigido
LOGICAL_ERRORem ~TemporaryLockForUUIDDirectory no Shared Catalog. (Nikolay Degterinsky). - Corrige o cache de metadados, que retornava dependências incorretas após renomear um banco de dados. (Nikolay Degterinsky).
- Shared Catalog: corrige um caso de DROP de tabelas grandes em réplicas secundárias. (Raúl Marín).
- Correção de erro lógico no Distributed Cache em
processWriteRequest. (Kseniia Sumarokova). - Remover verificações para
ALTERs de MV nas réplicas secundárias. (Nikolay Degterinsky).