- Os valores padrão de
date_time_input_format e cast_string_to_date_time_mode foram alterados de basic para best_effort. Consultas que antes não conseguiam interpretar strings de data/hora fora do formato básico (por exemplo, 2024 April 4, Apr 15, 2020 10:30:00) agora podem passar por padrão. Para manter o comportamento antigo de parsing estrito, defina essas configurações como basic (ou use compatibility). #89334 (Alexey Milovidov).
- O nome
null para elemento de Tuple agora é proibido, porque entra em conflito com o nome de subcoluna usado nos mapas de nulos de Nullable, causando resolução ambígua de subcoluna. #98377 (Alexey Milovidov).
- Foram adicionadas as configurações
dynamic_disk_allow_from_env, dynamic_disk_allow_from_zk e dynamic_disk_allow_include para impedir o uso de from_env, from_zk e include em disks dinâmicos. Trata-se de uma mudança incompatível com versões anteriores, porque passa a proibir por padrão um comportamento que antes era permitido por padrão. #99138 (Kseniia Sumarokova).
- Não é mais possível usar o leitor e gravador Parquet obsoleto baseado em Arrow. A implementação nativa será usada no lugar dele. #100949 (Alexey Milovidov).
SHOW CREATE TABLE t agora dá preferência à tabela temporária quando existem tanto uma tabela permanente quanto uma tabela temporária chamadas t e nenhum database é especificado, alinhando-se ao comportamento existente de DESCRIBE TABLE. Além disso, a sintaxe DESCRIBE TEMPORARY TABLE agora é suportada. #100966 (Alexey Milovidov).
- O valor padrão de
http_max_fields foi reduzido de 1.000.000 para 1.000, e o de http_max_field_name_size, de 128 KB para 4 KB, para limitar o uso de memória antes da autenticação por conexões HTTP. Também foram adicionadas as configurações http_max_request_header_size e http_headers_read_timeout. Usuários que dependem dos limites mais altos anteriores podem restaurá-los por meio de configurações. #103285 (Sema Checherinda).
- Foi adicionada uma coluna Nested
histograms a system.metric_log, que registra um snapshot de cada métrica de histograma registrada por linha, com uma nova configuração system_metric_log_show_zero_values_in_histograms para controlar a emissão de valores zero. Isso torna a tabela system.histogram_metric_log obsoleta. #103770 (Miсhael Stetsyuk).
CAST para DateTime ou DateTime64 sem um fuso horário explícito agora preserva o fuso horário do argumento de origem (quando a origem é um DateTime/DateTime64 com fuso horário explícito), alinhando-se ao comportamento das funções toDateTime/toDateTime64. Fecha #55072. #104433 (Alexey Milovidov).
- A função de tabela
kql foi removida. Use SET dialect = 'kusto' para executar consultas no dialeto KQL. #105101 (Alexey Milovidov).
- As funções de janela
RANK e DENSE_RANK agora rejeitam argumentos e geram NUMBER_OF_ARGUMENTS_DOESNT_MATCH, em conformidade com o padrão SQL. Antes, consultas como RANK(x) OVER (ORDER BY id) eram aceitas silenciosamente, com o argumento sendo ignorado. Para restaurar o comportamento leniente anterior, defina allow_rank_dense_rank_arguments = 1. Fecha #49526. #104324 (Groene AI).
- Adiciona uma nova configuração
max_bytes_ratio_before_external_join, espelhando max_bytes_ratio_before_external_group_by e max_bytes_ratio_before_external_sort. Ela define o limite para spill em disco em hash joins como uma fração da memória disponível; em conjunto com o limite absoluto max_bytes_before_external_join, aplica-se o menor dos dois valores resultantes. #103862 (Alexey Milovidov). A nova configuração max_bytes_ratio_before_external_join agora fica habilitada por padrão com o valor 0.5, espelhando max_bytes_ratio_before_external_group_by e max_bytes_ratio_before_external_sort. As hash joins passam automaticamente para grace hash join assim que os dados do lado direito excedem metade da memória disponível do sistema (quando há limites de memória configurados). #104285 (Alexey Milovidov).
- Adiciona a table function
filesystem. Ela permite representar a estrutura de diretórios como uma tabela, para consultar com SQL os metadados e o conteúdo dos arquivos. Originalmente #42039 por @perst20. Veja #42039. Veja #50208. #53610 (Alexey Milovidov).
- Permite passar nomes de função simples para funções de ordem superior, como
arrayMap, arrayFilter etc. Por exemplo, arrayMap(negate, [1, 2, 3]) agora é equivalente a arrayMap(x -> negate(x), [1, 2, 3]). #101033 (Alexey Milovidov).
- Adiciona a configuração
send_table_structure_on_insert_with_inline_data e a opção --inline-insert-data do client para permitir que o servidor faça ele mesmo o parse de dados inline de INSERT pelo native protocol, evitando a ida e volta necessária para receber a estrutura da tabela e melhorando o desempenho de muitos inserts pequenos. #101034 (Alexey Milovidov).
- Adiciona as funções
tokenizeQuery e highlightQuery para tokenização de consultas SQL e realce de sintaxe. tokenizeQuery retorna tokens do lexer com offsets em bytes e tipos de token; highlightQuery retorna intervalos de realce de sintaxe baseados no parser, com categorias de realce (palavra-chave, identificador, função, número, string etc.). #101054 (Alexey Milovidov).
- Adiciona a configuração
url_base para resolver URLs relativas na table function url e no table engine URL, seguindo a semântica da RFC 3986. #101113 (Alexey Milovidov).
- Passa a oferecer suporte a valores negativos na cláusula
LIMIT BY para selecionar linhas do fim de cada grupo, em vez do início. Por exemplo, LIMIT -2 BY id retorna as duas últimas linhas por id. Offsets negativos (LIMIT -1 OFFSET -1 BY id) e sinais mistos (LIMIT -2 OFFSET 1 BY id) também são compatíveis. #103222 (Nihal Z. Miaji).
- Passa a oferecer suporte à função
json_value para saída com tuple e array, a fim de melhorar o desempenho de múltiplas consultas JSON. #78362 (kevinyhzou). Passa a oferecer suporte a argumento JSONPath Tuple/Array com múltiplos caminhos em JSON_VALUE, JSON_EXISTS e JSON_QUERY, por @KevinyhZou. #101102 (Alexey Milovidov).
- Um novo parâmetro
kafka_autodetect_client_rack foi introduzido. Se definido, ele detecta a zona de disponibilidade por meio da infraestrutura da nuvem e a propaga como o parâmetro client.rack do librdkafka, para evitar comunicações entre zonas. #81323 (Ilya Golshtein).
- Adiciona o tipo de evento
Read a system.blob_storage_log para rastrear operações de leitura em armazenamento de objetos, controlado pela nova configuração enable_blob_storage_log_for_read_operations. #96867 (Alexey Milovidov).
- Os usuários agora podem ver os watches do ZooKeeper emitidos por
clickhouse-server usando a nova tabela system.zookeeper_watches. #99277 (Den Kalantaevskii).
- Adicionado o evento de perfil
Shards, que conta o número de shards envolvidos em consultas distribuídas, somado entre todas as tabelas. #99470 (Alexey Milovidov).
- UDFs
WASM podem ser declaradas como DETERMINISTIC e passam a ser elegíveis para constant folding. #100005 (Vasily Chekalkin).
- Adiciona a configuração
parallel_replicas_prefer_local_replica: quando desabilitada, as réplicas paralelas são selecionadas puramente pelo algoritmo de balanceamento de carga, permitindo que até consultas com max_parallel_replicas = 1 sejam direcionadas a outro host. #100139 (Alexey Milovidov).
- Adiciona as configurações de servidor
{disk,storage,http}_connections_rcvbuf e {disk,storage,http}_connections_sndbuf para controlar o tamanho dos buffers de socket TCP em conexões HTTP de saída, permitindo que operadores substituam o autotuning do kernel e limitem o uso de memória por conexão. #100478 (Sema Checherinda).
- Suporte a
CREATE OR REPLACE MATERIALIZED VIEW com a mesma semântica de troca atômica de CREATE OR REPLACE TABLE. Funciona com tabelas internas, tabelas TO, POPULATE, REFRESH e ON CLUSTER. #100539 (DQ).
- Adiciona as métricas de histograma
s3_read_request_duration_microseconds e s3_read_request_bytes para observar a duração da conexão das requisições GET ao S3 e os bytes consumidos, visíveis em system.histogram_metrics e no endpoint Prometheus. #102058 (Sema Checherinda).
- Adiciona os motores de tabela
Paimon, PaimonS3, PaimonAzure, PaimonHDFS e PaimonLocal com suporte à leitura incremental, baseado no rastreamento do progresso de snapshots do Keeper. O modo incremental retorna apenas novas linhas desde o último snapshot confirmado. Leituras direcionadas de delta de snapshot estão disponíveis via paimon_target_snapshot_id, e limites de snapshots por consulta via max_consume_snapshots. A atualização de metadados em segundo plano é configurável com paimon_metadata_refresh_interval_sec. Controlado por allow_experimental_paimon_storage_engine. #102343 (XiaoBinMu).
- Adicionada uma nova configuração de tabela Kafka
kafka_map_virtual_columns_on_write. Quando habilitada, colunas chamadas _key, _timestamp, _headers.name e _headers.value no esquema da tabela Kafka são produzidas como a chave, o timestamp e os headers correspondentes da mensagem Kafka no INSERT, e são excluídas do payload da mensagem. #103243 (Alexey Milovidov).
- Adicionadas as consultas
SYSTEM PAUSE VIEW [db.]name e SYSTEM PAUSE VIEWS para views materializadas atualizáveis. Diferentemente de SYSTEM STOP VIEW, SYSTEM PAUSE VIEW não interrompe a atualização atualmente em execução — a atualização em andamento pode ser concluída, e apenas as atualizações subsequentes são impedidas. Isso é revertido por SYSTEM START VIEW ou SYSTEM START VIEWS, que agora limpam de forma uniforme os estados de parada e pausa. #103252 (Nikita Mikhaylov).
- Adicionada a função
regexpPosition (com aliases compatíveis com PostgreSQL regexpInstr e regexp_instr) que retorna a posição em bytes da enésima correspondência de regex em uma string. Suporta deslocamento inicial, modo de retorno após a correspondência, flags de regex e seleção de grupo de captura. #104172 (Abhinav Agarwal).
- Novas funções
isPrime e isProbablePrime para verificações de primalidade. isPrime retorna um resultado exato para inteiros sem sinal de até UInt64. isProbablePrime também oferece suporte a UInt128 e UInt256; para esses tipos maiores, 0 significa definitivamente composto e 1 significa provavelmente primo. O segundo argumento opcional de isProbablePrime, rounds, controla a confiança (limitada a 256); o padrão de 25 rounds mantém a taxa de falso positivo para um composto aleatório abaixo de 10^-15, e isProbablePrime pode ser cancelada. #104234 (Nihal Z. Miaji). #104639 (Alexey Milovidov). #104806 (Nihal Z. Miaji).
clear e /clear agora limpam o terminal nas ferramentas de linha de comando do ClickHouse em vez de serem executados como uma consulta por engano. #104318 (Tyler Hannan).
- Permite que a função de tabela
file aceite um Array(String) de caminhos em consultas SELECT. #104442 (Yue).
- Adiciona as colunas
deterministic e higher_order à tabela system.functions. #104479 (Pedro Ferreira).
- Adiciona um parâmetro opcional de variante de codificação a
bech32Encode (bech32 / bech32m) e um modo de decodificação bruta a bech32Decode para codificação de endereços não SegWit (por exemplo, Cosmos SDK, Injective, Osmosis). #98986 (Yash ).
- Agora você pode gravar dados no formato
AvroConfluent, que antes era apenas de entrada. Isso permite produzir mensagens Avro enquadradas pelo Confluent Schema Registry diretamente do ClickHouse, por exemplo ao gravar no Kafka. O schema é registrado automaticamente no registry. Use a nova configuração output_format_avro_confluent_subject para especificar o nome do subject. #101935 (János Benjamin Antal).
- Adicionada a função
prettyPrintJSON para formatar uma string JSON de forma legível para humanos. Útil para dashboards ou relatórios, em que antes formatar a saída exigia uma etapa extra no lado do cliente. Closes #62523. #102594 (Dmitry Prokofyev).
- Adicionado
STRING_AGG como um alias de groupConcat que não diferencia maiúsculas de minúsculas, para compatibilidade com PostgreSQL / padrão SQL. #105125 (Alexey Milovidov).
- Os resultados de subconsultas individuais agora podem ser armazenados em cache de forma independente usando
SETTINGS use_query_cache = true em subconsultas específicas, sem armazenar em cache toda a consulta externa. Uma nova configuração, query_cache_for_subqueries = true, permite propagar use_query_cache em massa para todas as subconsultas. Observação: use_query_cache na consulta externa não é mais propagado automaticamente para as subconsultas. #99804 (Vincent Voyer).
- Adicionado realce de sintaxe baseado em lexer ao editor de consultas na interface web (
play.html), inspirado nas cores do clickhouse-client. #105105 (Alexey Milovidov).
Funcionalidade experimental
- Adicionada uma interface experimental de terminal web em
/webterminal que fornece uma sessão interativa do clickhouse-client no navegador via WebSocket. Desabilitada por padrão; habilite-a com a configuração de servidor allow_experimental_webterminal. Veja aqui. #100277 (Alexey Milovidov). #105191 (Alexey Milovidov). #105059 (Alexey Milovidov).
- O engine
Kafka2 (experimental, com armazenamento de offset baseado em Keeper) agora oferece suporte a consultas SELECT diretas e à configuração kafka_commit_on_select. #100276 (Alexey Milovidov).
- As UDFs
WASM agora podem fazer coerção de mais tipos numéricos: de inteiros menores para inteiros mais amplos (por exemplo, Int8 para UInt64) e de qualquer inteiro para ponto flutuante (por exemplo, Int32 para Float32). #100435 (Vasily Chekalkin).
- Adicionado suporte à função
LIKE na consulta DELETE FROM system.webassembly_modules. #104397 (Vladimir Cherkasov).
- Adicionado suporte a tipos geo para
Iceberg. #103113 (Konstantin Vedernikov).
- Adicionada a funcionalidade de instruções preparadas ao servidor ArrowFlight SQL. #103047 (Yakov Olkhovskiy).
- Melhorada a robustez do parser KQL (para suporte à linguagem Kusto) ao preservar a profundidade do parser e os contadores de backtracking entre os estágios do parser KQL, para que os limites do parser sejam acompanhados de forma consistente em consultas KQL complexas. #103528 (Yakov Olkhovskiy).
- Reutilize o cache de metadados do footer do Parquet ao ler arquivos Parquet locais pela table function
file ou pelo mecanismo de tabela File. Antes, o cache era consultado apenas para backends de armazenamento de objetos. #104260 (Alexey Milovidov).
- Propague
ORDER BY ... LIMIT n por junções LEFT/RIGHT quando a chave de ordenação fizer referência apenas a colunas do lado preservado pela junção, limitando quantas linhas a entrada desse lado precisa produzir antes da junção. Controlado pela nova configuração query_plan_top_k_through_join (habilitada por padrão). #104268 (Alexey Milovidov).
- Habilite por padrão as configurações
use_top_k_dynamic_filtering e use_skip_indexes_for_top_k para melhorar o desempenho de consultas ORDER BY ... LIMIT N. #99537 (Alexey Milovidov). Restrinja use_top_k_dynamic_filtering por padrão a colunas de ordenação de comprimento fixo, evitando regressões em consultas ORDER BY <var-length-column> LIMIT N nas quais o custo da comparação do limite por linha excede a economia de E/S. O comportamento anterior continua disponível por meio da nova configuração use_top_k_dynamic_filtering_for_variable_length_types. #104216 (Alexey Milovidov).
- Use o recurso de arena superdimensionada do
jemalloc para reduzir falhas de página. #103958 (Nikita Taranov).
- Limite os streams ativos simultaneamente em
UNION ALL para reduzir o pico de uso de memória. #100176 (Alexey Milovidov).
- Otimize ligeiramente o cache de páginas em espaço do usuário. #100300 (Alexey Milovidov). Agora, o cache de páginas em espaço do usuário é sempre melhor que o cache de páginas do SO.
- Leituras frias de armazenamento de objetos por meio do cache de páginas em espaço do usuário (
use_page_cache_for_object_storage = 1) agora são significativamente mais rápidas, porque falhas de cache consecutivas são agrupadas em uma única requisição HTTP, em vez de uma requisição por bloco page_cache_block_size. #104230 (Alexey Milovidov).
- Acelere a análise de índices que envolve conversão de tipos e aplicação de funções. Fecha #55653. #100366 (Alexey Milovidov).
- Acelere consultas muito grandes em tabelas
Merge sobre um grande número de tabelas subjacentes. Fecha #32465. #100369 (Alexey Milovidov).
- Remova a vtable dos tipos de campo de configuração, reduzindo o tamanho da cópia de
Settings em ~28x e melhorando a localidade de cache por meio de um layout de array tipado para todos os tipos de configuração. #102269 (Raúl Marín).
- Adicione as configurações
max_threads_min_free_memory_per_thread e max_insert_threads_min_free_memory_per_thread para reduzir automaticamente o paralelismo das consultas quando o servidor estiver com pouca memória livre. #100383 (Alexey Milovidov).
- Reduza o uso de memória em sistemas com pouca memória (< 4 GiB). #100389 (Alexey Milovidov).
- Adicionado
OptimizeTrivialGroupByLimitPass. Para consultas triviais SELECT ... FROM t GROUP BY k LIMIT n (sem HAVING, ORDER BY nem funções de janela), o analyzer agora define max_rows_to_group_by = n + offset com group_by_overflow_mode = 'any', de modo que a agregação para assim que n chaves distintas forem produzidas, em vez de agrupar toda a entrada. Controlado pela nova configuração optimize_trivial_group_by_limit_query (habilitada por padrão). #104473 (Amos Bird) (Alexey Milovidov).
- Índice min-max implícito em nível de grânulo para as colunas virtuais
_part_offset e _block_number, inclusive para projeções. Permite a eliminação rápida de grânulos com base em predicados de colunas virtuais. #103952 (Mikhail Artemenko). #104746 (Mikhail Artemenko). #105137 (Mikhail Artemenko).
- Para a família
prealloc_serialized de métodos de agregação, pré-calcula hashes por linha durante a etapa de serialização em lote e os usa para (a) evitar recalcular o hash em emplaceKey/findKey e (b) fazer software prefetch do bucket da próxima linha. Isso acelera a agregação serializada/de strings com múltiplas chaves ao ocultar a latência de cache miss da tabela hash. #104475 (Amos Bird) (Alexey Milovidov).
- Cache de condições de consulta para tabelas
Iceberg. #102115 (Konstantin Vedernikov).
- Otimiza
cramersV, cramersVBiasCorrected, theilsU e contingency quando usados com funções de janela. Fecha #83521. #93384 (Nihal Z. Miaji).
- Adicionada uma otimização de consulta que reescreve
tupleElement(dictGet('dict', ('a', 'b', 'c'), key), N) como dictGet('dict', 'a', key), evitando buscar atributos de dicionário desnecessários. Controlado pela configuração optimize_dictget_tuple_element (habilitada por padrão). #100186 (Alexey Milovidov).
- Habilita bufferização para etapas de ordenação no iniciador em consultas distribuídas com ordenação. #100661 (Nikita Taranov).
- Melhoria de desempenho para
partial_merge JOIN. #100945 (Artem Zuikov).
- Reduz ligeiramente a superalocação de memória em
partial_merge JOIN. #100963 (Artem Zuikov).
- Otimiza allocations/deallocations armazenando em cache as configurações de sampling, em vez de percorrer toda a hierarquia do memory-tracker. #101267 (Azat Khuzhin).
- Reduz a sobrecarga de alocação de memória durante uploads multipart no S3 por meio da pré-alocação de contêineres internos de rastreamento. #101799 (Gagan Dhakrey).
- Adiciona software prefetch na fase de probe do hash join para reduzir a latência de acesso à memória em tabelas hash grandes, controlado pela configuração
enable_software_prefetch_in_join. #102444 (Xiaozhe Yu).
- Otimiza o layout de
MemoryTracker, melhorando seu desempenho em ~25%. #103464 (Azat Khuzhin).
- Reescreve os predicados
coalesce(a, b, ...) <op> const e ifNull(a, b) <op> const antes da análise de índices, para que a chave primária por coluna e os skip indexes de cada argumento possam eliminar grânulos. Controlado pela nova configuração allow_key_condition_coalesce_rewrite (ativada por padrão). #103468 (Manuel).
- Melhorou significativamente o desempenho de consultas ao ler catálogos Iceberg com arquivos JSON de metadados grandes, otimizando o processamento de barras invertidas escapadas. #103998 (Mohaidoss).
- Evita a sobrecarga do cache não comprimido de índice quando ele está desabilitado (configuração do servidor
index_uncompressed_cache_size = 0, que é o padrão). #104063 (Michael Kolupaev).
- Corrige consultas
ORDER BY ... LIMIT com limite pequeno que liam grânulos em excesso quando combinadas com um filtro WHERE pouco seletivo. Antes, qualquer filtro acima de uma leitura em ordem desativava a divisão de tarefas por intervalo de marcas, então o pipeline não conseguia cancelar entre grânulos e lia a part inteira para cada stream. #104112 (Vladimir Cherkasov).
- Corrige a falta de reutilização do cache de tamanhos da tabela hash após reordenar os lados do JOIN. #104131 (Nikita Taranov).
- Quando
fsync_after_insert está ativado, o fsync dos arquivos de part agora é executado em paralelo usando o IO thread pool, acelerando a finalização de insert em wide tables. A carga completa de hits do ClickBench fica cerca de 22% mais rápida. #104137 (Alexey Milovidov).
- Vetoriza
find_first_symbols, find_first_not_symbols, find_last_symbols_or_null, find_last_not_symbols_or_null e splitInto em AArch64 usando NEON. Antes, esses helpers tinham um caminho SIMD apenas em x86 (SSE2 / SSE4.2) e acabavam caindo em um loop escalar no ARM. Acelera o parsing de TSV em ~2x, as funções de URL e splitByChar em ~1,3x no dataset hits do ClickBench; o parsing de JSON muito denso (cadência de campos abaixo de 16 bytes) sofre uma leve regressão, em linha com o trade-off já existente do SSE2. #104228 (Alexey Milovidov).
- A leitura de dados por meio de uma coluna
ALIAS trivial (por exemplo, some_alias['key'] onde some_alias ALIAS m) agora segue o mesmo caminho de leitura por subcoluna que a referência direta à coluna subjacente, restaurando uma grande economia de E/S para colunas com alias dos tipos Map, Array, Tuple e Nullable. #104245 (Raúl Marín).
- Reduz a contenção de locks no caminho de leitura assíncrona de sistema de arquivos remoto ao tornar o
AsyncReadCounters por consulta lock-free. #104374 (Nikita Mikhaylov).
- Plano de consulta ligeiramente melhor para varreduras em ordem de projeções. #103723 (Mikhail Artemenko).
- Estende
optimizeUseNormalProjections para também lidar com um caso específico em que nada foi filtrado, mas a chave de ordenação da projeção pode remover a etapa de ordenação do plano de consulta. #104680 (Mikhail Artemenko).
- Permitir que o açúcar sintático
json.path[] e as dicas de tipo explícitas funcionem corretamente em paths JSON tipados. #99179 (Pavel Kruglov).
- Otimizar
json.path[N].nested.path (que se expande para tupleElement(tupleElement(json.path[N], 'nested'), 'path')) para json.path[].nested.path[N], que lê muito menos dados. #99802 (Pavel Kruglov).
- Otimizar as verificações de acesso de
SHOW TABLES em system.parts, movendo as verificações de privilégio no nível do banco de dados para fora do loop por tabela. #100860 (Shaohua Wang).
- Remover uma verificação redundante de acesso a
SHOW TABLES por tabela no caminho rápido de SELECT name / SELECT database, name em system.tables. #100881 (Shaohua Wang).
- Habilitar compilação JIT no macOS. #100947 (Alexey Milovidov).
- Ignorar o adiamento da política de linha após
FINAL quando ela depende apenas de colunas da chave de ordenação e é determinística, e ignorar o adiamento correspondente de PREWHERE que a política de linha estava forçando nesse caso. #102884 (Yarik Briukhovetskyi).
- Adicionado suporte a
hasAny e hasAll como predicados de filtro em índices de texto. #103266 (Anton Popov).
- Direcionar o estado de heap de longa duração do MergeTree (metadados por parte e por tabela) para uma arena dedicada do jemalloc, exposta por meio das métricas assíncronas
jemalloc.mergetree_arena.*. Isso reduz a fragmentação da arena padrão em estado estável e evita que sobreviventes por parte mantenham páginas presas que, de outra forma, poderiam decair. #104136 (Raúl Marín).
- Melhorar o tratamento de timeout do cliente ZooKeeper sob alta carga quando muitas solicitações são colocadas em pipeline em uma única sessão. O cliente ZooKeeper agora usa um timeout baseado em progresso: enquanto qualquer dado for recebido do servidor dentro de
session_timeout_ms, a espera é estendida. Um limite rígido de 3 * session_timeout_ms por solicitação ainda limita a latência do chamador. Fecha #100466. #104351 (Antonio Andelic).
- Mover as flags de trace por evento para um array separado e alocá-las sob demanda, reduzindo a sobrecarga do tracing de
ProfileEvents. #105030 (Azat Khuzhin).
- Adicionar
compareTrackAt para ColumnDecimal, melhorando o desempenho de comparação para colunas Decimal. #105110 (Artem Zuikov).
- Adicionada uma implementação SIMD de
MD5 (AVX2 / AVX512) que calcula hashes de várias entradas em paralelo, melhorando o throughput. #105161 (Joanna Hulboj).
- Melhora a saída de ajuda de todos os aplicativos ClickHouse:
--help agora retorna consistentemente o código de saída 0, imprime em stdout, e clickhouse --help, no nível superior, lista todos os subcomandos. Adiciona a opção --no-sudo para clickhouse start / restart (útil no Docker) e o subcomando clickhouse help. Continuação de #58244 por @qoega. #98148 (Alexey Milovidov).
- O valor padrão de
input_format_column_name_matching_mode foi alterado de match_case para auto. Os formatos de entrada que fazem correspondência entre nomes de coluna de entrada e o schema da tabela (JSONEachRow, CSVWithNames, JSONColumns, BSONEachRow, RowBinaryWithNames, etc.) agora tentam primeiro uma correspondência case-sensitive e, se ela falhar, recorrem à correspondência case-insensitive. O comportamento estrito anterior é preservado em compatibility. #104320 (Alexey Milovidov).
- Adicionado
STDDEV como alias case-insensitive de stddevSamp para compatibilidade com PostgreSQL/SQL padrão. #105120 (Alexey Milovidov).
- Adicionado
array_to_string como alias case-insensitive de arrayStringConcat para compatibilidade com PostgreSQL. #105121 (Alexey Milovidov).
- Adicionado
unnest como alias case-insensitive de arrayJoin para compatibilidade com PostgreSQL (na forma de chamada de função). #105124 (Alexey Milovidov).
- A barra de progresso no
clickhouse-client agora mostra o uso de disco para dados temporários (por exemplo, em sort externo, aggregation ou JOIN) ao lado da RAM, incluindo um detalhamento por host para consultas distribuídas. #105190 (Alexey Milovidov).
- Adicionado
system.predicate_statistics_log, um novo log amostrado da seletividade de filtros de predicate e do Granule pruning do índice MergeTree por consulta. Desabilitado por padrão; habilite-o por meio da server setting predicate_statistics_sample_rate. Necessário para recomendações automáticas de índice e projection. #98727 (Yarik Briukhovetskyi).
- Permite ignorar o shard local com tabela ausente quando
skip_unavailable_shards está habilitado. #100141 (Alexey Milovidov).
- Adiciona avisos na inicialização (visíveis em
system.warnings) quando um array mdraid do Linux está sendo ressincronizado ou está em estado degradado, pois ambos podem afetar o desempenho de E/S de disco ou indicar falhas de disco. #100941 (Alexey Milovidov).
- As UDFs WASM agora aparecem em
system.functions com origin correto (WasmUserDefined) e as colunas syntax, arguments e returned_value preenchidas com base nos metadados de tipo do ClickHouse. Antes, elas estavam ausentes ou apareciam listadas com origin incorreto como duplicatas. #101053 (Vasily Chekalkin).
- A table function
generate_series agora oferece suporte a valores negativos de passo para gerar sequências decrescentes, por exemplo SELECT * FROM generate_series(99, 0, -1). #101056 (Alexey Milovidov).
- Corrige exceções
Context has expired geradas por algumas funções (dotProduct, formatRow, structureToCapnProtoSchema/structureToProtobufSchema, funções definidas pelo usuário) quando usadas em caminhos de execução diferida, como expressões DEFAULT/MATERIALIZED e configurações de mecanismo de tabela, garantindo que essas funções mantenham um contexto forte quando necessário. #101109 (Alexey Milovidov).
- Corrige erros lógicos espúrios
Cache limits violated em prioridades criadas com limites iguais a zero (como a prioridade de filesystem cache por consulta usada quando enable_filesystem_query_cache_limit está ativado). #101428 (Alexey Milovidov).
- Detecta automaticamente a região de endpoints
s3express. #101520 (Pradeep Chhetri).
- Adiciona suporte a IDs de campo para data files em gravações no
Iceberg. Fecha #102322. #102362 (Konstantin Vedernikov).
- O painel esquerdo na interface web (
play.html) agora rola de forma independente, permanece visível quando a página é rolada e, ao clicar em uma tabela, vai para a área da consulta. #102498 (Alexey Milovidov).
- Permite abrir a interface do Play em uma nova aba via Ctrl/Cmd/Shift+clique ou clique do meio no logo do ClickHouse no painel esquerdo. #102501 (Alexey Milovidov).
- Novas métricas para rastrear a memória usada por chaves primárias de projeções e pela granularidade de índice de projeções em todas as tabelas. #102587 (Narasimha Pakeer).
- Aplica
max_network_bandwidth_for_user e max_network_bandwidth_for_all_users a leituras/gravações em sistemas de arquivos remotos. #103080 (Azat Khuzhin).
- Melhora a resiliência dos backups quando views materializadas atualizáveis são atualizadas constantemente, tomando decisões com base no estado das tabelas capturado no snapshot, em vez de um estado global. #103384 (Nikita Mikhaylov).
SELECT * FROM system.databases agora sempre lista bancos de dados do catálogo do lago de dados, independentemente da configuração show_data_lake_catalogs_in_system_tables. Antes, eles ficavam ocultos por padrão, o que era inconsistente com SHOW DATABASES, que sempre os mostrava. #103444 (Alsu Giliazova).
- Alinha no código o valor padrão da configuração de servidor
concurrent_threads_soft_limit_ratio_to_cores com o valor fornecido em config.xml (2), para que o scheduler padrão max_min_fair de threads concorrentes limite, por padrão, as threads de processamento de consultas a 2x o número de núcleos, mesmo quando o config.xml fornecido não é usado. #103446 (Alexey Milovidov).
- Aprimora a robustez do sanitizer em casos de borda no parser e em funções de string ao tratar entradas vazias em
getURLScheme, evitar aritmética com ponteiro nulo nas verificações de max_query_size em Lexer::nextToken e interromper antecipadamente a avaliação de subsequências UTF-8 em haystacks vazios antes da decodificação. #103489 (Yakov Olkhovskiy).
- Correção aprimorada da inferência de monotonicidade para
divide(0, x) e intDiv(0, x): anteriormente, as funções eram reportadas incondicionalmente como monotônicas, mas 0 / x não é monotônica em qualquer intervalo que inclua 0, porque 0 / 0 é indefinido (NaN/Inf para divide, exceção de divisão por zero para intDiv). Essa suposição incorreta fazia com que KeyCondition::applyMonotonicFunctionsChainToRange produzisse intervalos com left > right, o que disparava um LOGICAL_ERROR Invalid binary search result in MergeTreeSetIndex em compilações de depuração quando uma expressão IN / NOT IN na chave primária envolvia a chave em divide(0, key) ou intDiv(0, key). As compilações de lançamento não foram afetadas — a asserção é controlada por #ifndef NDEBUG. #103621 (Groene AI).
- Substitui as métricas assíncronas
HTTPConnectionPool*TCP{Rcv,Snd}BufBytes_{p50,p75,p90,p95} por um histograma baseado em bucket, http_pool_tcp_buf_bytes (labels group, direction), em system.histogram_metrics. As métricas assíncronas totais por grupo foram preservadas. #103704 (Sema Checherinda).
- As server settings
{disk,storage,http}_connections_{rcvbuf,sndbuf} agora são reportadas como alteráveis sem reinicialização em system.server_settings. Seus valores podem ser atualizados via SYSTEM RELOAD CONFIG; o caminho de aplicação em runtime já existia desde #100478. #103772 (Sema Checherinda).
- Adiciona suporte a símbolos resolvidos (
Array(String)) em flameGraph. #103816 (Azat Khuzhin).
- O client CLI agora pode especificar
<rainbow_parentheses>false</rainbow_parentheses> na sua config em ambientes em que as cores do terminal conflitam com os parênteses (da mesma forma, clickhouse format agora tem --no_rainbow_parentheses). #103851 (Larry Snizek).
- Corrige a busca UTF-8 case-insensitive de
MultiVolnitsky, revertendo inserts parciais de putNGram em caso de falha e mudando needles com falha para searchers de fallback, evitando estado inconsistente. #103864 (Yakov Olkhovskiy).
- Implementa
sched_getcpu via TLS rseq em musl compatível com glibc. #104016 (Azat Khuzhin).
- A view materializada atualizável Replicated no modo APPEND não será mais atualizada duas vezes se a connection com o ZooKeeper for brevemente perdida durante a atualização. #104051 (Michael Kolupaev).
- Permite que tabelas Distributed sem uma lista explícita de colunas validem sharding keys com base na structure inferida da tabela remota. #104111 (Yue).
- Corrige o REST catalog com path
Azure abfss. #104120 (Konstantin Vedernikov).
- Respeita as auth settings
role_arn e role_session_name no client de snapshot S3 do Keeper, permitindo que uploads de snapshot usem authentication baseada em STS AssumeRole. #104140 (Alexey Milovidov).
- Corrige um vazamento de memória ao executar consultas com CTEs
MATERIALIZED. #104153 (Alexey Milovidov).
- Corrige a exceção de
lowerUTF8 / upperUTF8 ao processar grandes conjuntos de dados não ASCII (por exemplo, durante a compilação de índices de texto), quando o buffer de saída acumulado ultrapassaria 2 GiB; linhas individuais excessivamente longas agora são rejeitadas com um erro claro. #104229 (Shaohua Wang).
- Torna o carregamento de estatísticas de coluna do MergeTree mais robusto contra falhas transitórias de E/S, para evitar a desativação permanente de otimizações baseadas em estatísticas nas partes afetadas. #104372 (zoomxi).
INSERT INTO ... SELECT FROM input(...) não exige mais o privilégio CREATE TEMPORARY TABLE. #104470 (Alexey Milovidov).
- Adiciona uma nova configuração do MergeTree,
concurrent_part_removal_threshold_for_remote_disk (padrão 16), usada no lugar de concurrent_part_removal_threshold quando pelo menos uma parte removida está armazenada em um disco remoto. O limite anterior de 100 podia fazer com que DROP TABLE e outras operações de remoção de partes em backends de armazenamento de objetos ficassem bloqueados por dezenas de segundos, porque as remoções eram realizadas em série, embora cada uma correspondesse a uma ida e volta de rede separada. A nova configuração faz com que o caminho de remoção paralela seja acionado muito mais cedo no armazenamento remoto, sem alterar o comportamento em disco local. #104676 (Groene AI).
- A nova configuração
defer_partition_pruning_after_final (padrão 1) torna desativável o comportamento introduzido na 26.3 de ignorar o partition pruning com FINAL. Defina-a como 0 para restaurar o partition pruning anterior à 26.3 — substancialmente mais rápido em workloads de logs de eventos em que linhas com a mesma PK não podem abranger partições. compatibility = '26.2' a altera para 0 automaticamente. #104705 (Nikita Fomichev).
- Corrige
intExp2, que retornava resultados incorretos para entradas fora do intervalo (shifts >= 64 com JIT e inteiros com magnitude maior que INT_MAX em ambos os caminhos de código). #105054 (Raúl Marín).
- Coloca entre aspas argumentos de shell gerados a partir de opções de CLI e de entrada convertida em
clickhouse install e clickhouse git-import, para que paths, nomes de usuário/grupo e hashes de commit que contenham espaços em branco ou metacaracteres de shell sejam tratados corretamente. #105232 (Raúl Marín).
- O table engine
Alias agora deixou de ser experimental e está disponível sem a configuração allow_experimental_alias_table_engine. #103488 (Alexey Milovidov).
- Adiciona a opção
--queries-format ao clickhouse-benchmark para escolher entre o formato padrão de entrada, com uma consulta por linha e escapes de tabulação (tsv), e a análise da entrada padrão como um script com várias consultas separadas por ; (script). #99972 (Aleksandr Musorin).
- Os operadores de Tuple elemento por elemento
tuplePlus, tupleMinus, tupleMultiply, tupleDivide, tupleModulo, tupleIntDiv e tupleIntDivOrZero agora são variádicos e aceitam duas ou mais tuples do mesmo tamanho, aplicadas elemento por elemento como uma redução à esquerda. Antes, aceitavam exatamente dois argumentos. #104659 (Aruj Bansal).
- Adicionada uma nova interface web integrada em
/processors-profile que visualiza o pipeline de qualquer consulta SELECT anterior como um heatmap, com dados de system.query_log e system.processors_profile_log. Cada processor é colorido de acordo com seu elapsed_us e mostra estatísticas por processor (linhas, bytes, tempos de espera) ao passar o cursor. #104614 (Nikita Mikhaylov).
- A configuração
query_plan_use_logical_join_step (e seu alias query_plan_use_new_logical_join_step) agora está obsoleta e não tem efeito; a etapa lógica de join é sempre usada. #104017 (Vladimir Cherkasov).
- O campo
user em play.html e nas outras páginas web integradas (dashboard.html, jemalloc.html, merges.html, binary.html, webterminal.html) não vem mais pré-preenchido com o texto literal default. Agora ele mostra uma dica de placeholder user e fica vazio por padrão. Quando deixado vazio, a página não envia um parâmetro de URL user= (e o JSON de autenticação do WebTerminal omite o field user), então o servidor aplica seu fallback usual para o usuário default — e credentials HTTP fornecidas por outros canais (X-ClickHouse-User, HTTP Basic, configuração <handler><user> por handler) não são mais sobrescritas. #105254 (Alexey Milovidov).
- Leitor
ORC: desacopla a leitura baseada em offset (readBigAt) de use_prefetch, para que dados codificados com EC em HDFS possam ser lidos corretamente mesmo quando use_prefetch = false (por exemplo, pelo Gluten). #103348 (zhanglistar).
- Arquivos baixados de
play.html com o format CSVWithNames agora usam a extensão .csv. #103737 (JackFielding).
- Mais validação de entrada para o catálogo BigLake. #105117 (Konstantin Vedernikov).
Correção de bug (comportamento incorreto perceptível ao usuário em uma versão estável oficial)
- Corrige a formatação inconsistente ao preservar a informação sobre uma expressão estar ou não entre parênteses. #92340 (Alexey Milovidov).
- Corrige a comparação correta entre os tipos Decimal e Float. #94293 (zoomxi).
- Permite argumentos posicionais em consultas distribuídas. #94359 (simonmichal).
- Corrige a falha de asserção em
DatabaseCatalog::updateDependencies ao remover e recriar uma visão materializada com o mesmo nome; também corrige a perda silenciosa de dependências de views durante RENAME TABLE ou EXCHANGE TABLES quando as dependências referenciais estavam vazias. #98779 (Alexey Milovidov).
- Corrige um abort do servidor (falha de asserção em
DatabaseCatalog::getTableImpl) que ocorria ao criar uma tabela via ON CLUSTER com um UUID idêntico ao UUID de um banco de dados existente. #98861 (xiaohuanlin).
- Corrige o uso de skip indexes na leitura de dados (com a configuração
use_skip_indexes_on_data_read habilitada) e de patch parts existentes criadas por atualizações leves. #99543 (Alexey Milovidov).
- Corrige a exceção “Not-ready Set” quando um filtro com
IN (subquery) é movido para PREWHERE pelo otimizador de consultas. #100375 (Alexey Milovidov).
- Corrige o erro “Cannot find column” ao combinar
ADD COLUMN com RENAME COLUMN em uma única instrução ALTER TABLE. #100387 (Alexey Milovidov).
- Corrige views com operadores
UNION e INTERSECT/EXCEPT misturados que retornavam resultados incorretos após DETACH/ATTACH ou a reinicialização do servidor. #100390 (Alexey Milovidov).
- Corrige a exceção “Trying to execute PLACEHOLDER action” que podia ocorrer durante testes de estresse com o AST fuzzer quando uma subconsulta correlacionada aparecia em uma cláusula IN. #100398 (Alexey Milovidov).
- Corrige a exceção de erro lógico ao inserir em uma tabela Iceberg com uma coluna
Date particionada por transformações year, month ou day. #100404 (Alexey Milovidov).
- Corrige o uso de skip index com dados incompatíveis após
ALTER TABLE MODIFY COLUMN alterar o tipo da coluna, o que podia causar falhas no servidor em builds com sanitizer ou resultados incorretos de consulta. #100526 (Alexey Milovidov).
- Corrige o vazamento de credenciais em
query_log para as table functions paimonCluster, paimonS3Cluster, paimonAzureCluster e deltaLakeS3. #100529 (JIaQi Tang).
- Corrige o
DROP TABLE em tabelas com motor Kafka, que podia ficar bloqueado indefinidamente devido a um deadlock em rd_kafka_consumer_close. #100604 (Alexey Milovidov).
- Substitui a lista
source_table_engines codificada estaticamente por lookup em runtime via StorageFactory e DatabaseFactory. Adiciona source_access_type a DatabaseFactory::EngineFeatures, para que CREATE DATABASE com motores de origem (PostgreSQL, MySQL, S3 etc.) exija os mesmos grants de origem que CREATE TABLE. Corrige a falha de GRANT TABLE ENGINE ON * com table_engines_require_grant=false. Fecha #71544. #100746 (pufit).
- Corrige um crash do servidor ao ler de uma tabela cuja coluna
ALIAS continha uma subquery correlacionada aninhada dentro de uma chamada de função (por exemplo, ALIAS toString(intDivOrZero(x, (SELECT ...)))). CREATE TABLE e ALTER TABLE agora rejeitam qualquer subquery, em qualquer nível de profundidade, em expressões de coluna DEFAULT / ALIAS / MATERIALIZED, com THERE_IS_NO_DEFAULT_VALUE. Anteriormente, a validação superficial aceitava subqueries aninhadas, então o caso correlacionado causava crash em tempo de leitura, e o caso aninhado não correlacionado parecia funcionar, mas podia levar a comportamento inesperado; ambos agora são rejeitados no momento do DDL. #100753 (Groene AI).
- Corrige um crash do servidor (
Logical error: Bad cast from type DB::FunctionNode to DB::ColumnNode) que podia ocorrer ao usar consultas com subqueries correlacionadas em tabelas com definições CONSTRAINT ... ASSUME, quando as settings optimize_substitute_columns e convert_query_to_cnf estão habilitadas. #100756 (Groene AI).
- Corrige uma exceção que podia ocorrer ao inserir uma linha em uma coluna JSON em que a linha introduzia um novo campo dinâmico ao lado de um campo tipado com um valor incompatível, e a coluna era usada posteriormente como chave de GROUP BY. #100758 (Jimmy Aguilar Mena).
- Corrige o bypass silencioso do IO scheduling de workload para gravações em S3/armazenamento de objetos que passam pelo caminho
DiskObjectStorageTransaction (usado por disks s3_with_keeper e explicitamente quando use_fake_transaction=false). Anteriormente, gravações de INSERT em MergeTree tables nesses disks ignoravam o throttling de CREATE RESOURCE / CREATE WORKLOAD porque o link do resource nunca era injetado em WriteSettings no caminho de gravação transacional. #100777 (JIaQi Tang).
- Corrige uma colisão de schema-cache compartilhado entre
Protobuf e ProtobufList: ler uma mensagem primeiro como FORMAT Protobuf e depois como FORMAT ProtobufList podia falhar porque ProtobufList forçava o schema em cache para seu formato de envelope. ProtobufList agora recorre ao tipo de mensagem em cache quando nenhum schema de envelope está disponível. #100849 (Callum Cooper).
- Corrige heap-buffer-overflow na ponte Rust CXX devido a incompatibilidade de ABI de
std::exception. #100931 (Azat Khuzhin).
FunctionVariantAdaptor agora lança ILLEGAL_TYPE_OF_ARGUMENT quando todas as alternativas de Variant são incompatíveis com uma função, em vez de retornar silenciosamente Nullable(Nothing). Anteriormente, um predicate WHERE function(variant_col) em que nenhum tipo alternativo era compatível retornava 0 linhas sem erro, enquanto o contexto SELECT equivalente já lançava corretamente. #100939 (Vasily Chekalkin).
TRUNCATE ALL TABLES não falha mais quando o database contém views. #100943 (Alexey Milovidov).
- Corrige a otimização
optimize_rewrite_array_exists_to_has para lidar corretamente com casos com tipos incompatíveis (por exemplo, Date vs String) e a reativa por padrão. #100944 (Alexey Milovidov).
- Corrige a prioridade das configurações de S3 para que as configurações de disco em
storage_configuration substituam a seção global <s3>, e as configurações em nível de usuário/profile/consulta substituam ambas. #100975 (Alexey Milovidov).
- Corrige a serialização esparsa que perdia o sinal de zero negativo (-0.0) em colunas BFloat16, Float32 e Float64. #100983 (Takumi Hara).
- Corrige dois bugs no parser de geometria WKT usado ao ler arquivos GeoParquet e Arrow codificados em WKT: geometrias
MULTILINESTRING eram interpretadas incorretamente como Polygon (causando uma exceção para colunas tipadas e corrupção silenciosa de dados para colunas Geometry mistas), e uma string WKT malformada sem palavra-chave de tipo acionava comportamento indefinido em vez de um erro claro. #100997 (Vasily Chekalkin).
- Corrige consultas
grouping/GROUPING SETS em tabelas Distributed com um único shard que falhavam com “Method executeImpl is not supported for ‘grouping’ function”. #101030 (Alexey Milovidov).
- Corrige
LOGICAL_ERROR “Column identifier is already registered” no planner, que podia ocorrer quando a mesma expressão de tabela era processada várias vezes. #101048 (Alexey Milovidov).
- Corrige a exceção LOGICAL_ERROR “Column identifier is already registered” quando a configuração
additional_result_filter é usada com consultas UNION ou EXCEPT. #101051 (Alexey Milovidov).
- Corrige travamento do servidor (Logical error: Bad cast from ColumnVector to ColumnNullable) ao usar
* APPLY com funções de agregação e group_by_use_nulls=1 com GROUPING SETS, ROLLUP ou CUBE. #101062 (Groene AI).
- Corrige loop infinito quando
input_format_csv_skip_first_lines ou input_format_tsv_skip_first_lines excede o número de linhas no arquivo. #101111 (Alexey Milovidov).
- Corrige acesso fora dos limites na otimização de materialização tardia que podia causar uma exceção em compilações de depuração. #101144 (Alexey Milovidov).
- Corrige a inferência de tipos em CTEs recursivas: os tipos de coluna agora são ampliados iterativamente via
getLeastSupertype entre os lados não recursivo e recursivo do UNION ALL até convergirem, evitando estouro de inteiro em expressões como x + 1. #101155 (Alexey Milovidov).
- Limita as configurações de tamanho de bloco de compressão do MergeTree (max_compress_block_size, min_compress_block_size, marks_compress_block_size, primary_key_compress_block_size) a 256 MiB para evitar travamento do servidor quando valores extremos são definidos via CREATE TABLE SETTINGS. #101159 (Groene AI).
- Corrige uma falha de LOGICAL_ERROR em
QueryAnalyzer::resolve() quando uma ROW POLICY usa uma subconsulta escalar na cláusula USING (por exemplo, USING (SELECT 1)). Fecha #100695. #101263 (Groene AI).
- Corrige comportamento indefinido em
MergeTreeDataPartWriterCompact::cancel quando a alocação de um stream falha. #101292 (Alexey Milovidov).
- Corrige um caso em que o timezone não era incluído durante a atribuição na instrução ALTER. Fecha #101328. Relacionado a https://github.com/ClickHouse/ClickHouse/pull/100647. #101403 (Yarik Briukhovetskyi).
- Corrige uma falha do servidor (LOGICAL_ERROR) em consultas INSERT SELECT com ORDER BY ALL quando o pipeline de SELECT produz múltiplos streams. #101443 (Groene AI).
- Corrige resultados incorretos de consulta causados pela reordenação de join, que empurrava um filtro de INNER JOIN (referenciando apenas o lado preservado de um outer join) para a cláusula ON do outer join. #101504 (Vladimir Cherkasov).
- Evita aplicar lazy materialization a planos com arrayJoin, o que podia fazer com que o limite não fosse respeitado. Fecha #101608. #101644 (Vladimir Cherkasov).
- Corrige resultados incorretos em consultas JOIN quando a otimização
mergeFilterIntoJoinCondition descartava silenciosamente uma condição de igualdade na cláusula WHERE com tipos incompatíveis. #101652 (Xiaozhe Yu).
- Corrige o não funcionamento da dica de teste
error para erros de sintaxe/parsing — anteriormente, -- { error SYNTAX_ERROR } em uma consulta malformada falhava com “Expected server error” em vez de corresponder ao erro de parse no lado do cliente. #101675 (Groene AI).
- Corrige
INTO OUTFILE ... TRUNCATE, que na prática não usava rename atômico — a gravação era feita diretamente no arquivo original em vez de em um arquivo temporário, então, em caso de falha da consulta, o conteúdo original era destruído. Agora, os dados são gravados em um arquivo temporário e renomeados apenas em caso de sucesso. #101884 (Pablo Marcos).
- Corrige uma exceção
Unsupported DeltaLake type: varchar(n) ao ler tabelas Delta Lake cujo esquema contém tipos de coluna varchar(n) ou char(n). Esses tipos agora são mapeados para String, em conformidade com a forma como o protocolo Delta Lake os armazena como arrays simples de bytes em Parquet. #101973 (Flavio Malavazi).
- Corrige perda silenciosa de dados ao ler arquivos tar do S3 com
schema_inference_mode=union e esquemas Parquet heterogêneos — o parquet metadata cache reutilizava incorretamente os metadados do primeiro arquivo para todos os arquivos subsequentes no arquivo tar. #101990 (Ahaan Limaye).
- Corrige uma falha do servidor (LOGICAL_ERROR) ao executar ALTER TABLE UPDATE/DELETE em tabelas Iceberg quando nenhum SELECT ou INSERT anterior havia sido feito na tabela durante o mesmo ciclo de vida do servidor. #102113 (Alexey Milovidov).
- Corrige um possível crash quando uma consulta ALTER é executada em tabelas de um banco de dados em memória (por exemplo, temporary tables). #102360 (Den Kalantaevskii).
- Corrige o
formatQuery, que produzia grants duplicados como GRANT FILE ON *.*, FILE ON *.* TO x em vez de GRANT FILE ON *.* TO x, ao formatar grants READ/WRITE retrocompatíveis na mesma source. #102411 (Groene AI).
- Corrige perda de paralelismo na aggregation após consultas read-in-order quando
max_streams_to_max_threads_ratio é maior que 1. #102467 (Alexey Milovidov).
- Corrige um crash (
LOGICAL_ERROR: Unknown virtual column) ao selecionar subcolumns (como .null para Nullable, .size0 para Array, elementos de Tuple ou chaves/valores de map) de uma Buffer table engine. #102470 (Groene AI).
- Corrige a Exception “Cannot fold actions for projection” na otimização de reordenação de join quando um LEFT/RIGHT JOIN com
join_use_nulls é combinado com outras junções envolvendo mais de duas tabelas. #102516 (Alexey Milovidov).
- Corrige overflow silencioso em operações escalares pointwise em numericIndexedVector (por exemplo,
numericIndexedVectorPointwiseAdd) quando o escalar está fora do intervalo. Essas entradas agora geram INCORRECT_DATA em vez de retornar valores corrompidos. #102546 (FriendLey).
- Corrige formatação inconsistente de AST para INSERT com SAMPLE e OFFSET no nível da consulta. Fecha #102523. #102547 (zoomxi).
- Corrige a Exception
LOGICAL_ERROR em groupConcat ao desserializar um estado malformado de aggregate function. #102558 (Christoph Wurm).
- Agora, não aceitamos conteúdo inválido no final de valores CSV de Time64 com
input_format_csv_use_default_on_bad_values=0. Fecha #102490. #102596 (Yarik Briukhovetskyi).
- Corrige a Exception UNKNOWN_ELEMENT_OF_ENUM ao inserir default value em JSON column com paths tipados como Enum. Fecha #102359. #102687 (Pavel Kruglov).
- Corrige corrupção de columns_substreams.txt durante a renomeação de coluna em alguns casos. Fecha #102259. #102689 (Pavel Kruglov).
- Corrige a inserção no Data type Time durante o parsing de JSON. Fecha #102016. #102690 (Pavel Kruglov).
- Corrige a codificação hexadecimal de content sample em nomes de arquivo de schema em cache. Fecha #101904. #102703 (Pavel Kruglov).
- Corrigida uma violação da ordem de classificação (falha em debug, corrupção silenciosa de dados em release) durante o merge de
SummingMergeTree quando a chave ORDER BY é uma expressão hash sobre uma coluna Float32 contendo valores NaN de sinalização. #102791 (Groene AI).
- Tornados canceláveis via
KILL QUERY o DETACH DATABASE ... SYNC e outras operações que chamam waitDetachedTableNotInUse, além de passarem a responder ao desligamento do servidor, evitando travamentos indefinidos quando uma consulta concorrente mantém uma referência à tabela. #102804 (Antonio Andelic).
- Corrigido um possível resultado incorreto de
ANY RIGHT JOIN. #102893 (Nikita Taranov).
- Corrigidas falhas em requisições S3 com
ios_base::clear: unspecified iostream_category error em vez de serem repetidas, causadas pelo fato de BufferedStreamBuf::flushBuffer do Poco não tratar escritas curtas da camada de socket. #102894 (Sema Checherinda).
- Corrigida a falha da table function
input('auto') pela interface HTTP em consultas INSERT SELECT. #102902 (Miсhael Stetsyuk).
- Desabilitada a otimização trivial de LIMIT com row policies/additional_table_filters (para permitir análise paralela de índice). #102921 (Azat Khuzhin).
- Oculta a chave secreta na função SQL
HMAC. Corrige #102927. #102997 (Mikhail f. Shiryaev).
- Corrigida a exceção
MULTIPLE_EXPRESSIONS_FOR_ALIAS gerada em consultas distribuídas que referenciam a mesma chamada quantile várias vezes (por exemplo, em SELECT, HAVING e ORDER BY) com optimize_syntax_fuse_functions habilitado. #103014 (tanner-bruce).
- Corrige um caso encontrado pela CI em que um set ainda não pronto era passado quando o filtro depende da coluna do lado esquerdo. Fecha #102966. #103029 (Yarik Briukhovetskyi).
- Corrige castOrNull para JSON em alguns casos. Fecha #101818. #103036 (Pavel Kruglov).
- Corrige
SELECT DISTINCT retornando silenciosamente resultados incompletos quando uma projeção agregada correspondia à consulta e algumas partes da tabela não tinham dados de projeção (por exemplo, a projeção foi adicionada a uma tabela que já continha dados, e MATERIALIZE PROJECTION não foi executado). Fecha #102951. #103052 (Nihal Z. Miaji).
- Corrige a exceção
TOO_FEW_ARGUMENTS_FOR_FUNCTION quando um predicado WHERE, como AND(OR(A, A), A), colapsa para um único argumento de nível superior durante a extração de expressões comuns no analyzer. #103072 (Peng).
- Corrige um erro lógico
Function writeSlice expects same column types for GenericArraySlice and GenericArraySink gerado ao avaliar if/ifNull sobre tuples, maps ou arrays contendo um elemento QBit. ColumnQBit::structureEquals comparava incorretamente a tuple interna de uma coluna QBit com o encapsulamento externo da outra, fazendo com que colunas QBit estruturalmente idênticas fossem consideradas diferentes. #103084 (Groene AI).
- Faz com que
DETACH DATABASE com database_atomic_wait_for_drop_and_detach_synchronously respeite KILL QUERY, em vez de ficar travado indefinidamente quando houver uma referência de tabela em uso. #103095 (Alexey Milovidov).
- Corrige segfault ao excluir um módulo WASM usando um predicado que não seja um identificador (por exemplo,
WHERE 1=1). #103101 (Joe Redfern).
- Corrige uma regressão de compatibilidade com versões anteriores, em que clientes antigos falham com
UNEXPECTED_PACKET_FROM_SERVER ao inserir em um servidor mais recente via remote() ou tabelas distribuídas, causada por sendProgress incondicional no fim de processInsertQuery. #103148 (Sema Checherinda).
- IN com segundo argumento tuple não constante não deve aplicar CAST aos elementos da tuple para o tipo do lado esquerdo, pois isso pode causar overflow. Fecha #103055. #103169 (Yarik Briukhovetskyi).
- Corrige o uso de valor não inicializado em uma função do protocolo. #103187 (Pavel Kruglov).
- Corrige
LOGICAL_ERROR (Bad cast … to ColumnLowCardinality) durante a análise de índice do MergeTree quando uma cláusula WHERE compara uma coluna-chave LowCardinality com uma constante convertida para um tipo que contém LowCardinality aninhado (por exemplo, Variant(LowCardinality(Date), String)). #103211 (Groene AI).
- Corrige
Logical error: 'index < bucket_count' na família de funções de agregação timeSeries*ToGrid (por exemplo, timeSeriesResampleToGridWithStaleness, timeSeriesChangesToGrid, timeSeriesResetsToGrid, timeSeriesRateToGrid) quando chamada com parâmetros de timestamp extremos que causariam overflow na aritmética com sinal de 64 bits no cálculo da contagem de buckets. Também limita o número total de buckets da grade a 16 milhões para evitar alocação acidental de muita memória por entradas maliciosas. #103223 (Groene AI).
- Corrige a exceção
Logical error: 'Port is already connected' durante a expansão do pipeline no caminho lazy de FINAL para ReplacingMergeTree. O bug afetava consultas com query_plan_optimize_lazy_final = 1 quando ReadFromMergeTree::initializePipeline inseria transformações internas (por exemplo, um Resize) que interligavam os processors do sub-pipeline, fazendo com que LazyUnorderedReadFromMergeTreeSource::expandPipeline tentasse conectar portas de saída que já estavam conectadas. #103230 (Groene AI).
- Corrige resultados incorretos de
LIMIT BY e DISTINCT quando a entrada é um UNION ALL de subconsultas ordenadas. O otimizador do plano de consulta tratava incorretamente essa união como globalmente ordenada, fazendo com que linhas extras fossem retornadas. #103231 (Nihal Z. Miaji).
- Corrige possível falha durante o cálculo de estatísticas no tipo Map com replicação lazy. Fecha #102390. #103273 (Pavel Kruglov).
- Corrige uma condição de corrida em fontes de Dicionário ClickHouse, MySQL, PostgreSQL e XDBC, em que
clone() const lê e isModified() const grava na mesma string invalidate_query_response. #103277 (Miсhael Stetsyuk).
- Corrige a detecção incorreta de monotonicidade para
Date32. Fecha #101265. #103283 (Yarik Briukhovetskyi).
- Limita as strings do pacote TCP Hello de pré-autenticação a 64 KB e adiciona a configuração do servidor
handshake_timeout_milliseconds para limitar o tempo total de handshake, evitando que clientes não autenticados consumam memória em excesso ou mantenham threads ocupadas indefinidamente. #103284 (Sema Checherinda).
- Corrige
min_value > max_value nas estatísticas de Parquet ColumnIndex para colunas String. #103334 (Saurabh Kumar Ojha).
- Corrige o tratamento incorreto de linhas NULL para entradas
Nullable(Tuple(...)) em flattenTuple e tupleToNameValuePairs. flattenTuple agora preserva o mapa de null externo para que linhas NULL continuem NULL. tupleToNameValuePairs agora altera o tipo de valor do resultado para Nullable(T) quando possível, se a entrada for Nullable(Tuple(...)), para que linhas NULL produzam [('a', NULL), ('b', NULL)] em vez de [('a', 0), ('b', 0)]. Quando o element type não pode ser encapsulado em Nullable (por exemplo, Array), são usados valores padrão em vez de NULL. Fecha #103312. #103383 (Nihal Z. Miaji).
- Verifica dados Dynamic flattened malformados no Native format. #103392 (Pavel Kruglov).
- Corrige RPC obsoleto que causava paralisação da replicação após a sincronização do snapshot. #103406 (Seva Potapov).
- Corrige um
LOGICAL_ERROR “Cannot pop N rows from X” que abortava o servidor (em compilações de debug / sanitizer) ao ler um documento BSON malformado contendo um valor cujo tipo BSON é incompatível com o tipo da coluna de destino dentro de uma coluna Nullable(T) ou Array(Nullable(T)). A linha malformada agora produz uma exceção ILLEGAL_COLUMN limpa, como pretendido. #103418 (Groene AI).
- Corrige um encerramento abrupto do servidor em
arrayFill e arrayReverseFill quando aplicados a uma coluna Array(String) cuja primeira linha está vazia, junto com uma lambda sempre falsa. O loop de agregação / subarray causava underflow de um índice size_t para SIZE_MAX, o que então causava uma leitura fora dos limites dentro de ColumnString::doInsertManyFrom. É a mesma família de bugs de #12263. #103424 (Groene AI).
- Corrige ACCESS_DENIED / UNKNOWN_TABLE em APPEND RMVs downstream com SQL SECURITY DEFINER quando o EXCHANGE de um REPLACE RMV upstream alterna a identidade do armazenamento de destino no meio da resolução. #103427 (Alexander Gololobov).
- Preenche a coluna
_time a partir da table function url. #103437 (Nikita Taranov).
- Corrige uma possível leitura fora dos limites no caminho de descompressão do codec
ALP ao processar uma entrada malformada com largura de bits inválida. #103457 (Raufs Dunamalijevs).
- Corrige um bug em que
SYSTEM SYNC FILESYSTEM CACHE '<name>' ON CLUSTER ... podia perder o nome do cache ao formatar a consulta, fazendo com que nós remotos sincronizassem todos os caches do sistema de arquivos em vez de apenas o cache solicitado. #103469 (Asish Kumar).
- Corrige o processamento de caminho codificado em URL em
deltaLakeAzure. Fecha #103509. #103525 (Smita Kulkarni).
- Corrige um heap-use-after-free ao multiplicar um estado
AggregateFunction por um inteiro (por exemplo, quantilesExactState(...) * N). O loop de exponenciação por quadratura mesclava o estado com ele mesmo, o que é indefinido quando o merge da função de agregação realoca seu armazenamento interno. Fecha STID 0988-40af. #103536 (Groene AI).
- Corrige um raro
LOGICAL_ERROR “Part X intersects previous part Y” gerado durante a inicialização de uma tabela ReplicatedMergeTree, quando duas partes vazias inesperadas em disco tinham intervalos de blocos sobrepostos, mas sem inclusão entre si. A exceção interrompia a thread de anexação da tabela e impedia que ela fosse iniciada. #103537 (Groene AI).
- Corrige
Logical error: Incorrect mark rows for part ... (asserção apenas de depuração) que era acionado por mutações em tabelas MergeTree com granularidade de índice não adaptativa (index_granularity_bytes = 0) cuja última marca de dados estava incompleta (reproduzido com mais confiabilidade via DETACH/ATTACH, seguido de um DELETE leve). #103538 (Groene AI).
- Corrige o
clickhouse-local, que retornava 0 linhas silenciosamente ao ler pseudoarquivos em /proc e /sys por meio da função de tabela file() (por exemplo, SELECT * FROM file('/proc/cpuinfo', 'RawBLOB')). #103548 (Ashrith Bandla).
- Corrige o tratamento do argumento
max_string_length para o engine de tabela GenerateRandom. #103550 (Alex Kuleshov).
- Corrige o mascaramento de credenciais aninhadas em logs. #103552 (Vitaly Baranov).
- Corrige a detecção de SVE que usava instruções SVE quando elas não estavam disponíveis. #103568 (Raúl Marín).
- Corrige a análise dos argumentos de armazenamento de
GenerateRandom. #103574 (Konstantin Bogdanov).
- Corrige um loop infinito em
WITH FILL para dados que começam com ±inf. #103580 (Konstantin Bogdanov).
- Corrige o
JSONExtract em um tipo Variant, que truncava silenciosamente números JSON fracionários. Antes, JSONExtract('{"x": 3.14}', 'x', 'Variant(Int64, Float64)') retornava Int64=3 e JSONExtract('{"x": 3.14}', 'x', 'Variant(String, Int64)') retornava Int64=3, descartando a parte fracionária. O valor fracionário agora é preservado sem perda: um membro Float64/Decimal o assume quando presente; caso contrário, um membro String captura o JSON original. Tipos Variant contendo apenas membros inteiros (por exemplo, Variant(Int64, Int32)) e a extração direta para inteiro (JSONExtract(json, 'Int64'), JSONExtractInt, etc.) permanecem inalterados. #103620 (Groene AI).
- Corrige
SYSTEM INSTRUMENT REMOVE sem argumentos, que produzia std::bad_optional_access (código de erro 1001) em vez de SYNTAX_ERROR (código de erro 62). #103622 (Pablo Marcos).
- Corrige erro lógico / comportamento indefinido em
windowID e na window view tumble quando chamados com uma string de timezone como 3º argumento. #103641 (Alexey Milovidov).
- O logging do cliente S3 agora trata respostas HTTP 400 que incluem um header
x-amz-bucket-region não vazio (região de assinatura SigV4 incorreta) como um caso informativo de região incorreta, com uma linha de log mais clara, em vez do caminho genérico com estilo de erro. O provider de credentials de identidade web do STS é adicionado à cadeia de credentials do S3 apenas quando a identidade web está configurada, o que reduz avisos espúrios em implantações que não a utilizam. Fecha #99140. #103673 (MeltonSmith).
- Corrige
SYSTEM SYNC REPLICA <db>.<tbl> IF EXISTS para ter êxito silenciosamente quando o database não existe, em linha com o comportamento já existente para uma table ausente e com o precedente definido por DROP TABLE IF EXISTS. Antes, a consulta gerava UNKNOWN_DATABASE apesar de IF EXISTS. Fecha #103629. #103689 (Groene AI).
- Corrige o logical error
Arguments of 'plus' have incorrect data types gerado por FunctionBinaryArithmetic::executeImpl2 quando uma table MergeTree tinha Array(LowCardinality(...)) na chave de ordenação e uma cláusula WHERE usava plus / minus entre essa coluna e uma constante Array de outro tipo de elemento. KeyCondition::getMonotonicityForRange agora remove LowCardinality recursivamente antes de invocar o dispatch numérico interno. #103701 (Groene AI).
- Corrige uma condição de corrida no redimensionamento dinâmico de cache na 26.1+. #103702 (Kseniia Sumarokova).
- Corrigido um problema em que índices de omissão de texto e
bloom_filter em colunas ALIAS cuja expressão continha um lambda com constantes capturadas (por exemplo, arrayMap((k, v) -> concat(k, '=', v), mapKeys(m), mapValues(m)))) eram ignorados silenciosamente. #103708 (Anton Popov).
- Corrige
position e positionCaseInsensitive quando start_pos está próximo de UINT64_MAX, o que fazia a execução travar ou causar falha de segmentação devido a overflow na aritmética de ponteiros. #103766 (Raúl Marín).
- Corrige comportamento indefinido ao fazer parsing de
dateTime com uma parte fracionária duplicada. #103773 (Yarik Briukhovetskyi).
- Corrigida uma regressão de integridade de dados na versão 26.x em que
if e multiIf compilados com JIT, com tipo de resultado Decimal e um literal não Decimal (inteiro ou de ponto flutuante) em um dos ramos, retornavam silenciosamente um valor 10^scale menor do que o correto. O caminho lento (sem JIT) não era afetado. Solução alternativa nas versões afetadas: SET compile_expressions = 0. #103809 (Groene AI).
- Corrige o encaminhamento do tokenizer do índice de texto para as funções compatíveis. #103826 (Elmi Ahmadov).
- Corrige resultados incorretos de
numbers, generate_series e fontes semelhantes que respeitam intervalos quando a cláusula WHERE usa IN ou NOT IN sobre uma tupla cujos elementos são deduplicados em uma única coluna-chave (por exemplo, WHERE tuple(number, number) NOT IN (tuple(1, 2))). Fecha #103660. #103835 (Groene AI).
- Mantém o pico real de uso de memória do hash join com spilling automático abaixo de
max_bytes_before_external_join. Antes, a pré-alocação orientada por estatísticas, a duplicação in-place da tabela hash e os buckets ilimitados em memória do GraceHashJoin podiam, cada um, fazer a consulta ultrapassar o limite configurado e acionar MEMORY_LIMIT_EXCEEDED. #103838 (Alexey Milovidov).
- Corrige um travamento no encerramento do
clickhouse-local quando logs do sistema (como text_log ou filesystem_cache_log) estão configurados. SystemLogs::flushImpl chamava BaseDaemon::instance().flushTextLogs(), que lança std::bad_cast fora do clickhouse-server e deixava as threads de gravação em execução até que pthread_cond_destroy bloqueasse a destruição das filas de log do sistema. #103874 (Alexey Milovidov).
- Rejeita consultas CTE
MATERIALIZED cujo corpo resulta em tipos de coluna inferidos diferentes em referências distintas, com um erro TYPE_MISMATCH claro, em vez de provocar uma falha no servidor com um Bad cast LOGICAL_ERROR. Isso acontecia anteriormente quando o corpo da CTE referenciava identificadores de um escopo externo (por exemplo, um alias da projeção da subconsulta chamadora) que eram inlineados como constantes diferentes para cada referência. #103879 (Groene AI).
- Corrige o uso de um valor não inicializado nos otimizadores de plano de consulta de conversão de JOIN (
tryConvertAnyOuterJoinToInnerJoin, tryConvertAnyJoinToSemiOrAntiJoin) quando o filtro acima de um ANY OUTER JOIN contém uma função não determinística, como rand, now ou rowNumberInAllBlocks. O otimizador não tenta mais fazer constant folding desses filtros e deixa o JOIN inalterado, o que também evita conversões incorretas para INNER/SEMI/ANTI JOIN que poderiam descartar linhas silenciosamente. #103880 (Groene AI).
- Corrige um use-after-free em
StorageKafka2 que poderia causar falha no servidor quando uma sessão do Keeper é substituída enquanto o consumer mantém bloqueios efêmeros de tópico-partição. #103890 (Groene AI).
- Corrigido um
LOGICAL_ERROR “Primary key type mismatch” lançado ao fazer join de uma tabela EmbeddedRocksDB via JOIN ... USING (key) com uma subconsulta cuja coluna-chave tem um tipo diferente (por exemplo, Nullable(UInt64), Int64, Decimal) da chave primária do armazenamento. O planner agora recusa DirectKeyValueJoin em caso de incompatibilidade de tipos e recorre a HashJoin, que lida com a conversão de tipos. #103928 (Groene AI).
SET max_threads = DEFAULT (e o mesmo para max_final_threads e max_parsing_threads) não perde mais o estado automático. Antes, após redefinir uma dessas configurações, system.settings mostrava a contagem de núcleos resolvida (por exemplo, 32) em vez de 'auto(32)', e o servidor se comportava como se o valor tivesse sido definido explicitamente. #103991 (Groene AI).
- Corrige
SIZES_OF_ARRAYS_DONT_MATCH ao ler colunas AggregateFunction(topK(N), String) cujo alpha_size persistido havia sido aumentado por um ciclo de deserialize+serialize anterior à versão 25.12. #104002 (Raúl Marín).
- Corrigida uma vulnerabilidade de injeção de SQL em fontes de dicionário PostgreSQL, Cassandra e XDBC: chaves de string contendo aspas simples eram escapadas com
\' (barra invertida), que esses backends tratam como uma barra invertida literal em vez de uma sequência de escape, permitindo a injeção de SQL arbitrário em consultas de lookup de dicionário. ExternalQueryBuilder agora gera o escape padrão SQL '' para esses backends; fontes de dicionário ClickHouse e MySQL continuam usando escape com barra invertida. #104009 (Shaohua Wang).
- Corrigida uma possível incompatibilidade de tipo na agregação quando o tipo de uma coluna era alterado para/de LowCardinality, e a projeção min-max não era reconstruída. #104013 (Nikita Taranov).
- Corrige um loop infinito de otimizações de consulta causado pela não propagação da prevenção de remoção de colunas não utilizadas ao mesclar expressões. #104083 (János Benjamin Antal).
- Corrige
LOGICAL_ERROR em StreamingStorageRegistry::renameTable ao renomear em lote tabelas de streaming (S3Queue, Kafka, RabbitMQ) usando rastreamento de identidade baseado em UUID em vez de nome. #104101 (Nikita Taranov).
- Corrigidos resultados incorretos quando uma CTE construída com
UNION ALL continha um ramo SELECT DISTINCT e a consulta externa projetava apenas um subconjunto das colunas da CTE. O RemoveUnusedProjectionColumnsPass do novo analyzer estava removendo incorretamente a coluna não referenciada da projeção interna DISTINCT, fazendo com que linhas que deveriam permanecer distintas (mesmo valor na coluna projetada, mas valor diferente na coluna removida) colapsassem em uma só. #104114 (Groene AI).
- Corrige vários problemas de corretude em casos extremos na configuração
optimize_inverse_dictionary_lookup, em que a otimização podia descartar linhas silenciosamente ou suprimir exceções. Fecha #103270. Fecha #103085. #104133 (Nihal Z. Miaji).
- Corrige escrita fora dos limites ao desserializar o estado
quantileTiming. #104141 (Alexey Milovidov).
- Corrige comportamento indefinido quando um valor
Float64 fora do intervalo é convertido para um tipo inteiro amplo (UInt64, Int64, Int128, UInt128, Int256, UInt256). Antes, valores iguais a Float64(numeric_limits<T>::max()) (que são arredondados para cima, para um valor acima do máximo real) contornavam a verificação de limites e produziam UB no cast subsequente. Isso afetava o parsing de parâmetros de funções de agregação (topK, histogram, uniqUpTo, groupArrayInsertAt, etc.) e configurações tipadas como inteiros via SET <setting> = <Float64>. Fecha #103817. #104154 (Groene AI).
- Corrige a exceção
LOGICAL_ERROR “Unexpected return type from comparison. Expected UInt8. Got Const(Nullable(UInt8))” ao comparar um Tuple(Tuple(Nullable(...))) aninhado (ou com aninhamento ainda mais profundo) com um literal String. O tipo de retorno da comparação agora é inferido corretamente como Nullable(UInt8), em conformidade com o comportamento em tempo de execução. #104171 (Groene AI).
- Corrige um abort do servidor (
UndefinedBehaviorSanitizer: reference binding to null pointer, segfault em builds de lançamento) em SELECT ... FROM <ReplacingMergeTree(version, is_deleted)> FINAL PREWHERE is_deleted = <expr> AND <other column expr> quando query_plan_optimize_lazy_final = 1. A etapa de leitura lazy-FINAL sem interseção perdeu a coluna is_deleted do cabeçalho de saída porque o PREWHERE a consumiu como entrada sem reexpô-la na saída. A etapa subsequente addIsDeletedFilter então desreferenciava um ponteiro nulo ActionsDAG::Node. #104177 (Groene AI).
- Ao chamar a tabela system.failpoints, era usado um failpoint, o que podia desativá-lo. #104237 (Pedro Ferreira).
- Corrige
MemorySanitizer: use-of-uninitialized-value nas funções detectLanguage* quando a entrada contém um caractere UTF-8 terminando exatamente no limite do buffer. #104257 (Raúl Marín).
- Corrige um erro lógico (
Bad cast from type DB::CachedObjectStorage to DB::S3ObjectStorage) que abortava o parsing dos argumentos de table functions e motores de data lake (icebergS3, deltaLakeS3, etc.) quando chamados com SETTINGS disk = '...' em um disk cujo armazenamento de objetos subjacente é encapsulado por um decorador, como um cache de sistema de arquivos. Fecha #89300. #104258 (Groene AI).
- Corrige o parsing de expressões de subscrito entre parênteses em colunas chamadas
values, por exemplo (values['a']), para que não sejam mais interpretadas como expressões de tabela VALUES padrão SQL. #104312 (Desel72).
- Corrige um abort do servidor/
LOGICAL_ERROR na thread de eviction em background do cache de sistema de arquivos (SLRUFileCachePriority::collectEvictionInfo) que podia ser disparado quando keep_free_space_size_ratio ou keep_free_space_elements_ratio era alto o bastante para acionar a eviction enquanto todas as entradas de cache já haviam sido promovidas para a protected queue do SLRU (fila probationária vazia). #104313 (Groene AI).
- Corrige exceções (
NOT_FOUND_COLUMN_IN_BLOCK, LOGICAL_ERROR, AMBIGUOUS_COLUMN_NAME) ao usar projeções com views UNION ALL, window functions ou colisões de nome entre alias e coluna. Regressão de #88798. #104317 (Amos Bird).
- Corrige um possível underflow no parsing de arrays do Postgres. #104322 (Grant Holly).
- Funções que retornam um tipo não
Nullable (como Array, Tuple ou Map) agora aceitam argumentos Nullable. As funções afetadas incluem extractAll, extractAllGroups, extractAllGroupsHorizontal, extractAllGroupsVertical, extractGroups, splitByChar, splitByString, splitByRegexp, splitByWhitespace, splitByNonAlpha e alphaTokens. Linhas de entrada com NULL produzem o valor padrão do tipo de resultado (por exemplo, um array vazio) em vez de gerar “Nested type is not allowed inside Nullable type”. #104326 (Alexey Milovidov).
- Corrige estatísticas do Iceberg em tabela particionada. Isso fecha #104321. #104329 (Konstantin Vedernikov).
- Corrige um logical error fatal na inicialização do servidor no macOS (e em compilações semelhantes com jemalloc), em que
Jemalloc::verifySetup relatava incorretamente uma incompatibilidade em jemalloc_enable_background_threads porque os mallctls opcionais background_thread / max_background_threads não existem; a verificação é ignorada quando esses mallctls não estão disponíveis, e getValue não deixa mais a saída sem inicialização em caso de falha. Fecha #102183. #104330 (SAYON DEEP).
- Corrige uma regressão de corretude em que consultas
SELECT com max_rows_to_read_leaf e read_overflow_mode_leaf = 'throw' podiam lançar TOO_MANY_ROWS incorretamente, mesmo quando um skip index reduziria a leitura para abaixo do limite do leaf. As configurações simétricas fora de leaf (max_rows_to_read / read_overflow_mode) já eram tratadas. #104331 (Groene AI).
toUUID, toUUIDOrNull, toUUIDOrZero, toUUIDOrDefault, CAST para UUID e Nullable(UUID), accurateCastOrNull para UUID, e os formatos de entrada que fazem parse de UUID a partir de texto (Avro, MsgPack, JSONExtract, …) agora rejeitam strings com o comprimento correto, mas que contêm caracteres não hexadecimais. Antes, essas entradas eram silenciosamente convertidas em um UUID fabricado ao ultrapassar o fim da tabela de busca de dígitos hexadecimais; agora toUUID lança CANNOT_PARSE_UUID, e as variantes Or* retornam NULL / o UUID zero / o valor padrão fornecido. #104370 (Groene AI).
- Corrige
Bad cast LOGICAL_ERROR em caseWithExpression (e em SQL CASE expr WHEN ... THEN ... ELSE ...) quando o supertype apenas dos THEN e o supertype de (THENs + ELSE) ficam em armazenamentos ColumnDecimal diferentes — por exemplo, valores THEN (UInt16, Int8) com um ELSE de Decimal(9, 2). Fecha #104335. #104378 (Groene AI).
- Falhas internas reportadas via
logExceptionBeforeStart (flushes de asynchronous insert, refreshes de views materializadas, erros de parse gerados durante consultas internas) agora incrementam corretamente os ProfileEvents FailedInternalQuery, FailedInternalSelectQuery e FailedInternalInsertQuery, juntamente com os contadores visíveis ao usuário FailedQuery, FailedSelectQuery e FailedInsertQuery. Antes, esses contadores internos permaneciam em zero para falhas ocorridas antes do início da execução da consulta, subcontabilizando uma classe importante de falhas internas. #104399 (Groene AI).
- Corrige
Code: 36. BAD_ARGUMENTS Expected literal, got {name:Type} gerado quando um parâmetro de consulta é usado na configuração base_backup de uma instrução BACKUP ou RESTORE (por exemplo, BACKUP ... SETTINGS base_backup = S3({backup_name:String}, ...)). A regressão foi introduzida na versão 26.1.5 pelo PR #99205. Fecha #103324. #104413 (Groene AI).
- Corrige uma interrupção do servidor em gravações no
IcebergLocal/IcebergS3 quando ALTER TABLE ... DROP COLUMN é seguido por um INSERT com iceberg_metadata_staleness_ms maior que zero. ALTER agora invalida o cache local dos arquivos de metadata do Iceberg para que leituras e gravações subsequentes usem o novo schema. #104419 (Groene AI).
- Corrige
DROP ROLE, DROP USER, DROP SETTINGS PROFILE, DROP ROW POLICY, DROP QUOTA e DROP MASKING POLICY para remover referências à entidade removida de qualquer outra entidade de acesso que a referenciava (por exemplo, a lista DEFAULT ROLE de um usuário, a lista TO de um profile de configurações, ou os destinatários de uma row policy) e persistir essa limpeza em disco. Antes, o estado em memória parecia correto porque SHOW CREATE filtra UUIDs desconhecidos, mas os arquivos .sql em disco mantinham entradas ID('<dropped-uuid>') órfãs, e essas referências reapareciam na próxima reinicialização do servidor, gerando erros ACCESS_ENTITY_NOT_FOUND durante a execução distribuída de consultas. #104427 (Groene AI).
- Corrige uma interrupção do servidor acionada por
azureBlobStorage, pelo engine AzureBlobStorage e por DeltaLake-on-Azure com uma connection string cuja URL BlobEndpoint tem uma porta vazia, não numérica ou fora do intervalo (por exemplo, BlobEndpoint=http://host:abc/). O servidor agora retorna um erro BAD_ARGUMENTS claro em vez de abortar em compilações de debug/sanitizer. #104460 (Groene AI).
- Permite usar um identificador sem aspas como nome de usuário nas table functions
remote e remoteSecure, espelhando o comportamento dos argumentos de database e table, que aceitam identificadores sem aspas. Antes, essa consulta falhava com um erro de authentication enganoso, referindo-se ao usuário default. #104465 (Alexey Milovidov).
- Corrige
Logical error: Incorrect ASTSelectWithUnionQuery (modes: M, selects: N) acionado quando o corpo de uma user-defined function SQL contém um UNION ALL interno entre parênteses (por exemplo, CREATE FUNCTION f AS x -> (SELECT 1 UNION ALL (SELECT 1 UNION ALL SELECT 1))). #104477 (Groene AI).
- Corrige
uniqThetaIntersect, que retornava a cardinalidade do primeiro argumento em vez de 0 quando o segundo argumento é um estado uniqTheta vazio — por exemplo, o resultado de uniqThetaMergeStateIf(s, predicate) quando o predicado exclui todas as linhas. #104529 (Groene AI).
- Corrige
SHOW TABLES e system.tables, que truncavam silenciosamente a listagem de bancos de dados DataLakeCatalog baseados em catálogos REST do Iceberg (iceberg-rest, onelake, biglake). Quando o servidor de catálogo paginava a resposta de list-tables ou list-namespaces (por exemplo, no Microsoft Fabric / OneLake com mais de ~50 tabelas por espaço de nomes), as tabelas das páginas seguintes ficavam invisíveis para SHOW TABLES e system.tables, embora pudessem ser consultadas com SELECT direto. RestCatalog agora segue o token de continuação next-page-token definido pela especificação OpenAPI do Iceberg REST, alinhando-se ao comportamento já existente de PaimonRestCatalog e UnityCatalog. #104531 (Groene AI).
- A table function
input agora infere sua estrutura a partir da cláusula FORMAT da consulta INSERT em que está inserida, quando esse format tem um schema fixo (LineAsString, RawBLOB, JSONAsString etc.), de modo que os usuários não precisam mais repetir a estrutura como em input('line String') para esses formatos. #104532. #104533 (Groene AI).
- Atualizado o tipo de dado dos campos no histórico do Iceberg de
Int32 para Int64. Fecha #94176. #104579 (Smita Kulkarni).
- Corrigido
Inconsistent AST formatting LOGICAL_ERROR ao analisar uma chamada de função em que uma lambda vem após uma vírgula, por exemplo SELECT substring(x, `x` -> `x`). Antes, o parser mesclava silenciosamente os argumentos anteriores ao lado esquerdo da lambda, produzindo uma chamada com um único argumento que não podia ser analisada novamente para reconstruir a mesma AST. Agora ele preserva a aridade original da função. #104626 (Groene AI).
CHECK TABLE t agora dá preferência a uma tabela TEMPORARY em vez de uma permanente com o mesmo nome quando nenhum qualificador de banco de dados é informado, alinhando-se à precedência já usada por SHOW CREATE TABLE, DESCRIBE TABLE, OPTIMIZE TABLE e ALTER TABLE. Antes, CHECK TABLE t ignorava completamente tabelas temporárias, por isso falhava com UNKNOWN_TABLE em uma tabela temporária Log ou File, embora esses motores suportem CHECK. Continuação de #100966. #104637 (Groene AI).
- Corrige o loop de encerramento e reinicialização do Keeper quando
get /keeper/availability_zone é enviado com quorum_reads=true para um Keeper sem <placement> configurado. #104663 (myeongjun).
- Corrige uma data race de TOCTOU em
FutureSetFromTuple::buildOrderedSetInplace que resulta em um erro lógico. #104673 (Miсhael Stetsyuk).
- Corrige várias funções que retornavam resultados diferentes para a mesma entrada, dependendo de os argumentos chegarem como colunas ou constantes:
bitRotateLeft / bitRotateRight (contagens de deslocamento nos limites), length(FixedString) / concatWithSeparator com entradas LowCardinality(Nullable), roundDown em NaN e rightUTF8 em UTF-8 inválido. #104710 (Raúl Marín).
- Corrigido
anyHeavy, que retornava um valor não heavy quando o valor mais frequente era o valor padrão da coluna e os dados estavam distribuídos em várias partes MergeTree (caminho de leitura de coluna esparsa). #104712 (Raúl Marín).
- Corrige vários defeitos no tratamento de restrições de configurações: restrições de
MergeTreeSettings declaradas no nome canônico de uma configuração podiam ser contornadas ao gravar em um alias dessa configuração; a verificação da restrição disallowed_values lançava uma exceção em caminhos de clamp (consultas secundárias, workers ON CLUSTER, views SQL SECURITY DEFINER) em vez de descartar silenciosamente a alteração. #104737 (Raúl Marín).
- Corrige uma exceção
LOGICAL_ERROR (Metadata is not initialized) gerada por OPTIMIZE TABLE, ALTER TABLE ... DELETE, ALTER TABLE ... ADD COLUMN e outras variantes de ALTER em uma tabela Iceberg / IcebergLocal / DeltaLake / Hudi anexada sob demanda, cujos metadados ainda não haviam sido carregados (algo típico após uma reinicialização do servidor ou depois que uma gravação anterior de metadados falhou e deixou um arquivo de metadados corrompido no disco). Agora, a operação prossegue normalmente se os metadados forem carregados com sucesso, ou expõe a falha subjacente de carregamento como uma exceção comum visível ao usuário, em vez de abortar o servidor em builds de debug / sanitizer. #104738 (Groene AI).
- Corrige um segfault devido a um bug de use-after-free em
AvroConfluentRowInputFormat. #104751 (Miсhael Stetsyuk).
- Variantes escalares de
numericIndexedVectorPointwiseMultiply, numericIndexedVectorPointwiseDivide, numericIndexedVectorPointwiseEqual e numericIndexedVectorPointwiseNotEqual agora geram INCORRECT_DATA quando chamadas com um escalar UInt64 acima de Int64::max. #104784 (FriendLey).
- Corrige um bug em que substituir manualmente uma configuração por meio de seu nome de alias (por exemplo,
SET enable_analyzer = 1 em vez de SET allow_experimental_analyzer = 1) após aplicar uma configuração de compatibility podia fazer com que essa substituição fosse revertida por uma alteração subsequente da configuração compatibility. #104829 (Raúl Marín).
- Corrige a desativação do logger da AWS após https://github.com/ClickHouse/ClickHouse/commit/0e8ad4355c9d. #104837 (Konstantin Bogdanov).
- Corrige mais três funções que retornavam resultados diferentes para a mesma entrada, dependendo de os argumentos serem passados como colunas ou constantes:
transform (e caseWithExpression por meio dela) com um valor padrão constante Date/Date32/Enum/FixedString, operadores de comparação entre uma String e uma FixedString constante, e if/ifNull/nullIf com um ramo FixedString sob uma condição constante. #104858 (Raúl Marín).
- Corrige o encerramento abrupto do servidor com
Bad cast from type DB::ColumnConst to DB::ColumnNullable durante partition pruning para tabelas MergeTree quando a expressão de partição contém uma cadeia de funções que colapsa para um único valor constante (como floor(NULL, toRelativeYearNum(...))). #104861 (Groene AI).
- Corrige uma data race detectada pelo
ThreadSanitizer no construtor de cópia de ContextData: table_function_results era copiado do objeto de origem sem adquirir table_function_results_mutex, de modo que uma execução concorrente de Context::executeTableFunction podia competir com a leitura não sincronizada no construtor de cópia. #104879 (Groene AI).
- Corrige verificações de consistência de data part para tipos com estrutura dinâmica e detecta
columns_substreams.txt corrompido. Reenvio de https://github.com/ClickHouse/ClickHouse/pull/103858 com alterações adicionais. #104888 (Pavel Kruglov).
- Corrige a condição de corrida entre DROP e UNDROP no DatabaseCatalog. #104915 (Azat Khuzhin).
- Corrige o redimensionamento dinâmico do cache do sistema de arquivos com segmentos parcialmente baixados, incluindo a restauração da contabilização após uma evicção malsucedida. #104921 (Antonio Andelic).
DETACH TABLE em uma tabela temporária (sem a palavra-chave TEMPORARY) agora gera corretamente SYNTAX_ERROR, em conformidade com o comportamento de DETACH TEMPORARY TABLE. Antes, ele apenas definia silenciosamente uma flag interna is_detached e retornava sem erro. Para remover uma tabela temporária, use DROP TEMPORARY TABLE ou DROP TABLE (este último resolve a tabela temporária via Context::ResolveExternal). Fecha #103475. #104943 (Groene AI).
- Faz com que a table function
filesystem respeite max_memory_usage / max_server_memory_usage ao carregar o conteúdo do arquivo. Antes, leituras grandes ou numerosas de conteúdo em paralelo podiam ultrapassar o limite sem gerar MEMORY_LIMIT_EXCEEDED e acabar sendo encerradas por OOM. #104956 (Alexey Milovidov).
- Corrige um
LOGICAL_ERROR gerado ao filtrar system.detached_tables por uuid (por exemplo, SELECT count() FROM system.detached_tables WHERE uuid = '...'). A consulta agora retorna o resultado esperado em vez de abortar o servidor. #104979 (Groene AI).
flattenTuple não gera mais um LOGICAL_ERROR quando chamado em uma tupla cuja estrutura aninhada contém apenas folhas Tuple() vazias (por exemplo, Tuple(c0 Array(Tuple())) ou Tuple(c0 Tuple())). Essas entradas agora produzem uma exceção ILLEGAL_TYPE_OF_ARGUMENT visível para o usuário, explicando que o resultado do flatten seria uma tupla vazia. #104989 (Groene AI).
- Corrige um abort do servidor e um bug silencioso de resultado incorreto ao executar consultas em
loop(remote(...)) (ou qualquer loop() que envolva um storage capaz de adiar a agregação) com GROUP BY. O planner externo costumava adicionar MergingAggregatedStep com base no estágio de processamento informado pelo storage interno, mas LoopSource sempre materializa seu select interno com QueryProcessingStage::Complete e emite fragmentos simples de colunas, então MergingAggregatedTransform disparava um LOGICAL_ERROR (Chunk info was not set for chunk in MergingAggregatedTransform) com enable_parallel_replicas = 1 e, caso contrário, descartava silenciosamente a agregação externa. #105001 (Groene AI).
clickhouse-benchmark --reconnect (simples, sem valor) foi quebrado inadvertidamente na 25.4 por uma mudança que transformou --reconnect em uma opção inteira, exigindo um valor. A forma simples agora volta a funcionar e é equivalente a --reconnect=1 (reconectar a cada consulta). #105006 (Groene AI).
- Corrige a saída JSON malformada para nomes de coluna terminados em sequências UTF-8 incompletas. #105012 (Pablo Marcos).
- Corrige a perda silenciosa de dados após
EXCHANGE TABLES ou CREATE OR REPLACE TABLE na tabela de origem de uma visão materializada. A aresta de dependência source-view da MV agora é mantida no nome original para que continue sendo acionada em inserts. Regressão introduzida por #98779; restaura o comportamento anterior à regressão. #105029 (Sema Checherinda).
- Corrige
CANNOT_COMPILE_CODE Could not find symbol __fixunsdfti ao compilar com JIT expressões que convertem Float em UInt128, como toUInt128(<Float64 expression>). Os built-ins sem sinal do compiler-rt para conversão de float em inteiro de 128 bits estavam ausentes no resolvedor de símbolos do JIT. Fecha #105031. #105048 (Raúl Marín).
- Corrige o fato de o
clickhouse-local não imprimir mensagens de log de uma consulta com falha quando send_logs_level está configurado. #105067 (Alexey Milovidov).
- Corrige resultados incorretos quando a mesma view parametrizada é referenciada mais de uma vez na mesma consulta com valores de argumento diferentes. Antes, o analisador colapsava as chamadas em uma só, descartando silenciosamente todos os filtros, exceto o primeiro. #105170 (Alexey Milovidov).
- Corrige a linha
TOTALS sendo renderizada duas vezes na parte inferior da tabela de resultados na interface web play.html. #103803 (Alexey Milovidov).
- Rejeita vetores não finitos (
NaN, ±Inf) durante a busca vetorial (seja como vetores consultados ou como vetores de referência); antes, eles causavam comportamento indefinido no usearch. #104079 (Groene AI).
- PromQL: corrige o operador de agregação para vetores vazios. #104425 (Vitaly Baranov).
- PromQL: corrige o tratamento de erros na API de consulta do Prometheus. #104741 (Vitaly Baranov).
- Corrige uma condição de corrida em
MergeTreeTransaction::afterCommit na qual, após uma perda de conexão entre a gravação do CSN de commit no ZooKeeper e a finalização da transação, a resposta COMMIT podia chegar ao cliente antes que o novo creation_csn / removal_csn ficasse visível em system.parts. #104708 (Tuan Pham Anh).
- Corrige o crescimento exponencial do uso de memória no parser KQL ao converter indexação aninhada de array (
arr[arr[arr[...]]]). #105142 (Alexey Milovidov).
- Corrige resultados incorretos para
RIGHT ANY JOIN quando a tabela da direita tem várias linhas por chave e o bloco de saída é dividido devido a limites de tamanho. Fecha #99431. #102064 (Vladimir Cherkasov).
- Verifica se há estouro de pilha no leitor
Avro durante a desserialização de tipos aninhados. #102417 (Pavel Kruglov).
- Corrige linhas duplicadas em
system.completions para configurações de MergeTree — cada nome de configuração aparecia duas vezes porque tanto getMergeTreeSettings quanto getReplicatedMergeTreeSettings eram listados, apesar de terem nomes de configuração idênticos. Fecha #102013. #102015 (Groene AI).
- Corrige o
StorageObjectStorageQueue (S3Queue, AzureQueue), que bloqueava o encerramento até que arquivos parcialmente processados fossem lidos por completo do armazenamento de objetos. A source agora aborta a leitura imediatamente durante o encerramento; a desduplicação garante que as linhas já enviadas para a tabela de destino antes do encerramento não sejam duplicadas quando o arquivo for tentado novamente na próxima inicialização. #103126 (Tuan Pham Anh).
- Corrige inserts de múltiplos blocos no table engine
Alias com insert_deduplication_token, para que todos os blocks sejam preservados. #103246 (Enric Calabuig).
- Corrige
JSONHas e JSONExtractBool em colunas JSON nativas, que retornavam o valor extraído (convertido para UInt8) em vez de 0/1. #103313 (zxuhan7).
- Protege o input format
CustomSeparated contra dados malformados ou maliciosos que omitem format_custom_row_after_delimiter. A detecção de header, a inferência de esquema e linhas com número variável de colunas antes acumulavam fields sem limite e podiam alocar muitos gigabytes de memória antes de falhar. As leituras agora falham com INCORRECT_DATA assim que uma única linha contiver mais de 1.000.000 de fields. #103404 (Groene AI).
- Corrige o
RESTORE de tabelas MergeTree replicadas para que o anexo de parts restauradas use backup_restore_keeper_max_retries em vez do orçamento normal de tentativas do Keeper para insert. #104610 (Pablo Marcos).
- Corrige resultados incorretos de
WHERE p AND <LowCardinality(Nullable(int)) constant> em tabelas MergeTree. Antes, essas queries retornavam zero linhas porque o part pruning derivava um valor padrão NULL do tipo LowCardinality(Nullable(...)) e sintetizava uma proteção notEquals(x, NULL), eliminando toda partição. #104767 (Groene AI).
- Corrige resultado incorreto de aggregation ao agrupar por uma função não injetiva de uma coluna que também é a partition key (por exemplo,
PARTITION BY a com GROUP BY intDiv(a, 2) ou a % 2). Valores de partições diferentes que eram mapeados para o mesmo grupo não eram merged, produzindo linhas de grupo duplicadas com allow_aggregate_partitions_independently = 1. #104869 (Nihal Z. Miaji).
- Corrige uma condição de corrida na transferência de snapshot do
Keeper, em que um snapshot podia ser removido ou movido enquanto era enviado para um seguidor em recuperação. #104941 (Antonio Andelic).
- Corrige um bug silencioso de resultado incorreto em
hilbertEncode e mortonEncode, no qual um primeiro argumento Tuple não constante (máscara de intervalo) usava os valores da linha 0 para orientar o deslocamento de bits de todas as linhas. As funções agora calculam os valores da máscara por linha, de modo que o resultado não depende mais de a entrada ser constante nem do tamanho do block. #104992 (Groene AI).
- Corrige o
clickhouse-local, que ignorava silenciosamente a configuração no nível do usuário (profiles, users, quotas, configurações de controle de acesso) quando o configuration file era descoberto automaticamente em ./clickhouse-local.xml, ~/.clickhouse-local/config.xml ou /etc/clickhouse-local/config.xml. Antes, essas configurações eram aplicadas apenas quando --config-file era informado ou ./config.xml existia no diretório atual; agora, todos os caminhos de discovery se comportam de forma consistente. #105008 (Groene AI).
- Corrige colunas
BFloat16 que retornavam silenciosamente zero correspondências quando comparadas com um literal de string (por exemplo, WHERE bf16_col = '49.9'). #105042 (Raúl Marín).
- Corrige o tratamento de
CLEAR COLUMN e TTL durante merges em SummingMergeTree, AggregatingMergeTree e CoalescingMergeTree quando as colunas necessárias para o merge estão ausentes ou expiradas. Fecha #101953. #105203 (Antonio Andelic).
- Corrige uma condição de corrida entre
DNSCacheUpdater::run e Context::reloadClusterConfig com a adição de uma verificação explícita de nulo para shared->clusters_config antes de desreferenciá-lo. #105220 (Mikhail f. Shiryaev).
- Corrige o parsing
best_effort de data e hora para toDateTime64 com precisão ms e ns. #105233 (Kaviraj Kanagaraj).
- Corrige
OSIOWaitMicroseconds, que reportava a espera de E/S ao longo do ciclo de vida da thread em vez da espera de E/S por consulta. #105246 (Mikhail f. Shiryaev).
- O mecanismo de tabela
Hudi agora gera INCORRECT_DATA (uma exceção normal no nível da consulta) em vez de LOGICAL_ERROR quando um arquivo Parquet no diretório da tabela não segue a convenção de nomenclatura do Hudi [FileId]_[FileWriteToken]_[Timestamp].[extension]. Antes, esses nomes de arquivo causavam uma exceção em compilações de depuração. #105266 (Groene AI).
- Corrige um deadlock em
ParallelFormattingOutputFormat em caso de falha de agendamento: quando scheduleFormatterThreadForUnitWithNumber lança uma exceção (por exemplo, CANNOT_SCHEDULE_TASK), a unidade permanecia em READY_TO_FORMAT sem nenhuma thread de formatação para processá-la, levando a um travamento. A chamada de agendamento agora é encapsulada em try/catch, e qualquer falha é encaminhada para onBackgroundException, para que o coletor seja encerrado corretamente. #105275 (Azat Khuzhin).
- Corrige perda silenciosa de dados em async inserts de
Distributed ao se recuperar de um desligamento anormal: se o último arquivo .bin em um batch salvo estivesse intacto, mas um arquivo intermediário estivesse corrompido, DistributedAsyncInsertBatch::recoverBatch validaria apenas o header do último arquivo, e então sendBatch marcaria o batch inteiro — incluindo os arquivos intactos — como corrompido, perdendo suas linhas. Agora, o header de cada arquivo é validado individualmente, para que apenas o arquivo realmente corrompido seja movido para broken/ e as linhas restantes cheguem ao shard remoto. #105281 (Groene AI).
- Corrige uma regressão em
clickhouse extract-from-config --try: quando a config usava atributos from_env e não tinha elemento include_from (ou tinha um apontando para um arquivo inexistente), todas as substitutions from_env eram silenciosamente descartadas e retornavam strings vazias. Isso quebrou a descoberta de porta do entrypoint do Docker na versão 26.2.5. Fecha #101704. #105283 (Groene AI).
- Corrige a falha de
INSERT INTO em uma tabela SQLite, com erro de sintaxe do SQLite, quando o valor inserido é um Enum, JSON ou AggregateFunction cuja representação textual contém aspas simples. A configuração output_format_values_escape_quote_with_quote agora é respeitada pelas serializações correspondentes (antes, apenas String e FixedString a respeitavam). #105285 (Groene AI).
- Corrige
Code: 44. ILLEGAL_COLUMN: Cannot add column ...: column with this name already exists, gerado por consultas distribuídas com allow_push_predicate_ast_for_distributed_subqueries = 1 (o padrão), quando uma tupla GLOBAL IN é comparada com uma subconsulta cuja projeção contém nomes de colunas duplicados, por exemplo (x, y) GLOBAL IN (SELECT number, number FROM numbers(5)). #105290 (Groene AI).
- Corrige
reinterpret para Array(LowCardinality(...)), que retornava um erro NOT_IMPLEMENTED confuso em tempo de execução; agora retorna ILLEGAL_TYPE_OF_ARGUMENT durante a verificação de tipos. #105301 (Raúl Marín).
minMap/maxMap (forma de array) e minMappedArrays/maxMappedArrays agora tratam NaN de forma consistente com ORDER BY: NaN é tratado por último (retornado apenas quando todos os valores são NaN). Antes, os resultados dependiam da posição de NaN nos dados devido à semântica de comparação não ordenada do IEEE 754 e divergiam da forma com argumento Map de minMap/maxMap, corrigida em #100448. #105331 (Raúl Marín).
- Corrige um vazamento de memória no cache
ColumnsDescription por tabela em tabelas da família MergeTree com colunas Nested. As entradas nunca eram removidas do cache ao longo de ciclos de ALTER ADD COLUMN/DROP COLUMN quando share_nested_offsets = 1 (o padrão). #105376 (Groene AI).
- Corrige a exceção
BAD_ARGUMENTS “It’s a bug! Only integer types are supported by __bitWrapperFunc”, gerada quando um SELECT com um skip index TYPE set(N) tem um átomo em WHERE cujo tipo de resultado é Float, BFloat16 ou qualquer outro tipo não inteiro (por exemplo WHERE c0 + 0.1 ou WHERE log(c0)). Nesse caso, o skip index agora recorre ao caminho normal de filtro. #105384 (Groene AI).
melhorias em build, testes e empacotamento
- Parar de usar as bibliotecas e os cabeçalhos de sistema
compiler-rt. Fecha #91475. #102857 (Konstantin Bogdanov).
- Atualizar a imagem base distroless do Docker para corrigir CVEs do OpenSSL em
libssl3t64. #103583 (Rahul Nair).
- Passar a receber a chave GPG de forma confiável durante os lançamentos, encadeando vários servidores de chaves do Ubuntu, em vez de expirar por tempo limite em
keyserver.ubuntu.com. #103834 (Mikhail f. Shiryaev).
- Remover e proibir verificações do
CMake em tempo de compilação (check_*, try_compile, try_run). O compilador e o toolchain são fixos, portanto a detecção de recursos no momento da configuração é desnecessária e agora está bloqueada em todo o projeto; qualquer comportamento específico de versão deve ser condicionado explicitamente a CMAKE_CXX_COMPILER_VERSION. #103980 (Alexey Milovidov).
- Atualizar
libarchive de 3.8.6 para 3.8.7. #104047 (Robert Schulze).
- Atualizar
mongo-c-driver para 2.3.0. #104300 (Raúl Marín).
- Atualizar as dependências do LLVM para 22.x. #104381 (Joshua Carp).
- Permitir a compilação das classes de descritor PTY e embedded-client no macOS e no FreeBSD usando as funções POSIX portáveis
posix_openpt / grantpt / unlockpt e removendo guardas #if exclusivos do Linux. #104436 (Alexey Milovidov).
- Atualizar
librdkafka para a versão 2.14.1. #105222 (János Benjamin Antal).
- O operador
IN agora usa semântica de valor exato para o tipo Bool: apenas os valores 0 e 1 no conjunto correspondem a valores Bool. Antes, valores numéricos maiores que 255 no conjunto IN eram incorretamente convertidos para true quando comparados com Bool, então SELECT CAST(1, 'Bool') IN (256) retornava 1. Agora, retorna corretamente 0. Fecha #92980. #93115 (Ashrith Bandla).
- A biblioteca H3 foi atualizada para a v4, o que melhora a precisão dos cálculos de comprimento, área e outras métricas. Essa alteração é incompatível com versões anteriores porque os novos resultados diferem dos anteriores. #100348 (Alexey Milovidov).
- Não permite mais o uso de
SELECT como identificador simples em um elemento da lista de expressões WITH. #101059 (Aruj Bansal).
- Este patch altera a forma como a tabela merge lida com colunas virtuais. Se a tabela subjacente contiver
_table ou _database, essas colunas serão lidas do armazenamento; caso contrário, serão preenchidas após a etapa de leitura usando a etapa de expressão. #101742 (Mikhail Artemenko).
- O operador
IN agora também rejeita conversões com perda de Decimal dentro de tipos compostos (Tuple, Array, Map), tornando seu comportamento consistente com comparações escalares de nível superior. Antes, as verificações de precisão eram aplicadas apenas a valores escalares de nível superior: por exemplo, CAST('33.3', 'Decimal64(1)') IN (33.33) retornava corretamente 0, mas CAST(['33.3'], 'Array(Decimal64(1))') IN ([33.33]) retornava incorretamente 1 porque a conversão com perda acontecia dentro de um Array. Agora, ambos os casos retornam corretamente 0. #101812 (Nihal Z. Miaji).
- Os valores padrão de
http_max_fields foram reduzidos de 1,000,000 para 1,000 e os de http_max_field_name_size, de 128 KB para 4 KB, para limitar o uso de memória antes da autenticação por conexões HTTP. Foram adicionadas as configurações http_max_request_header_size e http_headers_read_timeout. Usuários que dependem dos limites mais altos anteriores podem restaurá-los por meio das configurações. #103285 (Sema Checherinda).
- Adiciona spilling automático às junções hash e às junções hash paralelas, convertendo-as em grace hash join quando o limite de memória é atingido. Esse comportamento é controlado por
max_bytes_before_external_join. #97813 (János Benjamin Antal).
- Adiciona suporte ao Arrow Flight SQL. #91170 (Yakov Olkhovskiy).
- Adiciona suporte a leituras incrementais em motores de tabela
Paimon com rastreamento do progresso de snapshot baseado no Keeper, incluindo leituras direcionadas de delta de snapshot via paimon_target_snapshot_id, e amplia a cobertura de testes para mapeamento de tipos, poda de partições e cenários de leitura incremental. #93655 (XiaoBinMu).
- A função
stem deixou de ser experimental (antes, era necessário habilitar a configuração allow_experimental_nlp_functions). #102399 (Jimmy Aguilar Mena). Agora, você pode aplicar stemming facilmente a todas as palavras/tokens nas colunas String, FixedString, Array([Fixed]String), Nullable, LowCardinality e Const com a função stem. #99137 (Jimmy Aguilar Mena).
- Implementado o novo comportamento de
max_insert_block_size_rows, max_insert_block_size_bytes, min_insert_block_size_rows, min_insert_block_size_bytes no processo de squashing, sob a configuração de compatibilidade use_strict_insert_block_limits. #94207 (Kirill Kopnev).
- Adiciona a função
arrayAutocorrelation(arr [, max_lag]), que calcula a autocorrelação normalizada de um Array numérico para cada defasagem. Suporta Arrays de inteiros, ponto flutuante e decimais. #94776 (Wenyu Chen).
- Função SQL
obfuscateQuery. Fecha #98010. #98305 (Xuewei Wang).
- Adicionado suporte aos tipos Map e JSON/Object como atributos de dicionários. Agora, os dicionários podem armazenar e recuperar tipos complexos, incluindo Map(String, String), Map(String, Array(String)), JSON e Nullable(JSON), tanto nos layouts FLAT quanto HASHED. #98627 (yanglongwei).
- Foram adicionadas duas novas configurações do MergeTree —
replicated_fetches_min_part_level e replicated_fetches_min_part_level_timeout_seconds — que permitem que as réplicas deixem de buscar partes recém-inseridas (ainda não mescladas) de outras réplicas, reduzindo a sobrecarga da replicação durante períodos de ingestão intensa. #98625 (tanner-bruce).
- Adiciona suporte a skip index do MergeTree para colunas JSON usando JSONAllPaths com os tipos de índice bloom_filter, tokenbf_v1, ngrambf_v1 e text (invertido), permitindo ignorar grânulos com base no conjunto de caminhos JSON presentes em cada grânulo. #98886 (Pavel Kruglov).
- A função
printf agora oferece suporte a strings de formato não constantes, permitindo usar diferentes padrões de formato por linha com base nos valores das colunas. #98991 (Yash ).
- Adiciona um novo índice de projeção,
commit_order, que reorganiza os dados de acordo com a ordem de inserção. #99004 (Mikhail Artemenko).
- Adiciona a função
highlight, que envolve ocorrências de termos de pesquisa em uma string de texto com tags HTML (o padrão é <em>/</em>). Suporta correspondência ASCII sem diferenciar maiúsculas de minúsculas, mesclagem automática de correspondências sobrepostas e tags personalizadas de abertura/fechamento. #99131 (Peng).
- Implemente cotas por hash normalizado da consulta para proteger serviços públicos do ClickHouse contra abuso. 1. Suporte a
NORMALIZED_QUERY_HASH como tipo de chave de cota - buckets de cota separados para cada consulta normalizada exclusiva, para que CREATE QUOTA q KEYED BY normalized_query_hash acompanhe cada consulta distinta de forma independente. 2. Suporte a QUERIES_PER_NORMALIZED_HASH como tipo de recurso de cota — limita o número máximo de execuções de qualquer consulta normalizada dentro de um intervalo, para que MAX queries_per_normalized_hash = 100 impeça que um mesmo padrão de consulta seja executado mais de 100 vezes. #99586 (Alexey Milovidov).
- Agora, os usuários podem escrever consultas de join usando a sintaxe
NATURAL JOIN, que faz a correspondência automática de todas as colunas com o mesmo nome e elimina a duplicação dessas colunas no resultado. #99840 (Peter Nguyen).
- Suporte para
SET TIME ZONE 'tz' como alias de SET session_timezone. #99883 (phulv94).
- Adicionado suporte a consultas parametrizadas na UI da Web (
play.html): parâmetros de consulta como {name:Type} são detectados, e campos de entrada são exibidos para preencher seus valores. #100041 (Alexey Milovidov).
- Suporte à cláusula padrão SQL
VALUES como expressão de tabela em FROM, por exemplo, SELECT * FROM (VALUES (1, 'a'), (2, 'b')) AS t(id, val). #100143 (Desel72).
- Adicionadas unidades compatíveis com PostgreSQL ao operador
EXTRACT: EPOCH, DOW, DOY, ISODOW, ISOYEAR, WEEK, CENTURY, DECADE, MILLENNIUM. Também foi corrigido EXTRACT(WEEK FROM date), que anteriormente gerava um erro. #100274 (Alexey Milovidov).
- Adicionado suporte a literais compostos de intervalo no padrão SQL com qualificadores de faixa
TO, por exemplo, INTERVAL '1:30' HOUR TO MINUTE. Internamente, eles são decompostos em somas de intervalos. #100453 (Desel72).
- Adicionar métricas assíncronas para a memória de buffer TCP de recebimento e envio do kernel (
sk_rmem_alloc, sk_wmem_alloc) dos sockets do pool de conexões HTTP, reportadas como percentis p50/p75/p90/p95 e totais por grupo de conexões. #100575 (Sema Checherinda).
- Adicionada uma UI web para profiling do jemalloc no ClickHouse Keeper, disponível em
/jemalloc na porta de controle HTTP. #100606 (murphy-4o).
- Implementado o comando
SYSTEM FLUSH OBJECT STORAGE QUEUE db.table PATH 'x' para os modos ordenado e não ordenado. #100709 (Bharat Nallan).
- Adicionada a função
JSONAllValues, que retorna todos os valores de uma coluna JSON como Array(String), com os valores serializados em formato textual e ordenados pelos nomes de seus caminhos. Adicionado suporte a índice de texto para a expressão JSONAllValues em colunas JSON. Quando um índice de texto é criado em JSONAllValues(json_column), ele é usado automaticamente para filtrar consultas em subcolunas JSON (por exemplo, json_column.key1 = 'value'). #100730 (Anton Popov).
- Adiciona uma nova configuração
input_format_column_name_matching_mode que permite diferentes tratamentos de maiúsculas e minúsculas nos formatos de entrada. #99346 (manerone).
- Adicionado o comando
watch ao clickhouse-keeper-client, com suporte a watch nos comandos get, exists e ls. #100834 (Den Kalantaevskii).
- Foi adicionada a solicitação
getChildrenRecursive (ListRecursive) ao ClickHouse Keeper e o comando lsr ao clickhouse-keeper-client. Isso fecha #99916. #100998 (Konstantin Vedernikov).
- Adiciona a nova função
arrayTranspose, que recebe um array bidimensional (matriz) e o transpõe: SELECT arrayTranspose([[1, 2, 3], [4, 5, 6]]). #101214 (Vitaly Baranov).
- A configuração
auto_statistics_types mergetree tem como valor padrão 'minmax, uniq' — as estatísticas minmax e uniq são criadas automaticamente para todas as colunas compatíveis em novas tabelas - materialize_statistics_on_insert agora tem como padrão false — as estatísticas agora são geradas durante as mesclagens, em vez de no momento da inserção, reduzindo a sobrecarga de inserção. use SET materialize_statistics_on_insert = 1 para restaurar o comportamento anterior. #101275 (Han Fei).
- Adicionada a configuração de refresh
prefer_dependency_replica para cadeias de dependência de visões materializadas, para reduzir a perda de dados causada pela latência de replicação entre réplicas. #101591 (Seva Potapov).
- Adiciona uma função
hasPhrase (alias matchPhrase) para busca por frases (sequências contínuas de tokens). A busca é feita por força bruta, ou seja, o índice de texto ainda não oferece suporte a ela. #101997 (Elmi Ahmadov).
- Adiciona as métricas de histograma
s3_read_request_duration_microseconds e s3_read_request_bytes para observar a duração da conexão das solicitações GET ao S3 e os bytes consumidos, visíveis em system.histogram_metrics e no endpoint do Prometheus. #102058 (Sema Checherinda).
Date e Date32 agora podem ser somados a valores Time e Time64 usando o operador +, produzindo um resultado DateTime ou DateTime64. Por exemplo, SELECT toDate('2024-01-15') + toTime('14:30:25') retorna 2024-01-15 14:30:25. O resultado é calculado no fuso horário da sessão, e resultados fora do intervalo são tratados de acordo com a configuração date_time_overflow_behavior. Fecha #95914. #102421 (Nihal Z. Miaji).
- O índice de texto agora está em GA e permanece habilitado independentemente da configuração
compatibility, evitando que seja desabilitado inesperadamente durante restaurações a partir de backup ou ao executar no modo de compatibilidade. #101518 (Nikita Fomichev).
funcionalidade experimental
- Adiciona
ALTER TABLE ... EXECUTE remove_orphan_files para tabelas Iceberg, a fim de identificar e remover arquivos não referenciados do armazenamento de objetos. #99127 (murphy-4o).
- Adiciona a configuração
query_plan_optimize_join_order_randomize, que randomiza as estatísticas usadas na reordenação de joins, útil para testes. #100643 (Vladimir Cherkasov).
- Adiciona suporte a função de IA no ClickHouse, permitindo que os usuários chamem endpoints da OpenAI e da Anthropic usando SQL.
aiGenerate está incluída como a primeira função desse tipo. #100831 (George Larionov).
- Adiciona funções de IA:
aiClassify, aiExtract e aiTranslate, para usar APIs de LLM no ClickHouse. #100832 (George Larionov).
- Adiciona
system.histogram_metric_log, uma nova tabela de sistema que gera periodicamente snapshots de todas as métricas de histograma (por exemplo, latências de S3/Azure e durações dos estágios de processamento de requisições do Keeper). Além disso, a coluna value de system.histogram_metrics passa a ser Float64, por ser mais flexível e compatível com o modelo de dados do Prometheus. #103046 (Miсhael Stetsyuk). É provável que a estrutura da tabela seja alterada em versões futuras.
- O ClickHouse agora consegue descartar partes de dados inteiras em consultas SELECT com base em estatísticas de mín./máx. #94140 (zoomxi).
- Reduz a contenção por bloqueios durante operações de somente leitura em tabelas ReplicatedMergeTree com mutações concluídas. #95771 (Eduard Karacharov).
- Passa a respeitar
optimize_read_in_order ao ler projeções. Fecha #89453. #95885 (Andrey Zvonov).
- Pequenas melhorias no Hash Join e no Concurrent Hash Join. #96663 (Yarik Briukhovetskyi).
- Otimiza a transformação
DISTINCT desabilitando a otimização para colunas LowCardinality quando os dados de entrada são quase todos distintos. #97113 (Nihal Z. Miaji).
- Otimização de desempenho para consultas com
LIKE de #97723. Agora, essas consultas podem usar índices de texto. #98149 (Elmi Ahmadov).
- As funções matemáticas vetorizadas (
exp, log, sigmoid, tanh) agora são aceleradas em AArch64 (usando NEON/SVE) e em FreeBSD/Darwin, onde antes recorriam a um fallback escalar mais lento. #98230 (Raúl Marín).
- Consultas que filtram colunas de chave primária do
MergeTree com alternâncias em expressões regulares baseadas em strings literais, como ^(abc-1|abc-2), agora podem usar a poda da chave primária quando as alternativas compartilham um prefixo comum. #98988 (Yash ).
- Generaliza a filtragem dinâmica top-k de
ORDER BY ... LIMIT para dar suporte a Nullable, String e COLLATE. #99033 (murphy-4o).
- Acelera o hash join com chaves
Int32 e Int64 de pequeno intervalo usando uma tabela hash com índice direto. #99275 (Hechem Selmi).
- Consultas descontínuas mais rápidas em colunas
LowCardinality com um único dicionário. #99285 (Ivan Babrou).
- Acelera as funções
var*Stable e stddev*Stable para colunas Float64 com a desvirtualização do loop interno. Observação: isso permite otimizações do compilador (FMA/registradores) que alteram os resultados de ponto flutuante no nível de ULP. #99460 (Riyane El Qoqui).
- Usa a codificação base58 otimizada do Firedancer para entradas de 32/64 bytes (automática para
base58Encode). Permite usar a decodificação base58 otimizada se o resultado da decodificação tiver 32/64 bytes (explicitamente com base58Decode('...', 32) ou equivalente). #99461 (Joanna Hulboj).
- Habilite otimizações baseadas em seções no linker (
-ffunction-sections, -fdata-sections, --icf=all) para reduzir o tamanho do binário e melhorar o uso do cache de instruções. #99474 (Alexey Milovidov).
- Corrige o escalonamento negativo em consultas curtas com agregação em máquinas com muitos núcleos. Quando uma consulta lê poucas marcas, o pipeline deixa de se expandir até
max_threads após a agregação, evitando a sobrecarga causada por fluxos quase vazios. #99493 (Alexey Milovidov).
- Melhore o desempenho das consultas com réplicas paralelas ao selecionar corretamente o tamanho da tarefa de leitura. #99801 (Nikita Taranov).
- Permitir prefetch ao ler um arquivo remoto pelo cache de páginas em userspace. #99919 (Alexey Milovidov).
- Evita o cálculo desnecessário da subcoluna
.size de String durante a enumeração de subcolunas. #99941 (Pavel Kruglov).
- Torna a barra de progresso do clickhouse-client menos oscilante ao usá-lo de um hotel com clusters com um número muito grande de réplicas. #100145 (Alexey Milovidov).
- Inicie
MemoryWorker no clickhouse-local quando o cache de páginas estiver habilitado, para que o cache de páginas em userspace possa realmente ser usado. #100306 (Alexey Milovidov).
- Otimize as consultas levando a cláusula
LIMIT para dentro do UNION ALL. #100364 (Alexey Milovidov).
- Adiciona suporte à compilação JIT para comparações de colunas
String e FixedString em ORDER BY, melhorando o desempenho da ordenação na fase de mesclagem em 6–17% para chaves de ordenação com muitas strings. Em coautoria com @lgbo-ustc. #100577 (Raúl Marín).
- Quando
read_in_order_use_virtual_row está habilitado junto com a nova configuração read_in_order_use_virtual_row_per_block, as informações de limite de linha virtual agora são emitidas após cada bloco lido de MergeTree, permitindo que a operação de merge repriorize as fontes no meio do fluxo para partes cujos dados são totalmente filtrados por WHERE/PREWHERE/JOIN. Fecha #99945. #100603 (Vladimir Cherkasov).
- Conversão mais rápida de Float para String para valores inteiros grandes, com a extensão do caminho rápido de
itoa com arredondamento compatível com dragonbox. #100649 (Raúl Marín).
- Substitua
dragonbox por zmij para uma conversão de Float em String 1,5x a 3x mais rápida. #100650 (Raúl Marín).
- Conversão mais rápida de
Int128/UInt128 para string ao substituir a divisão por software pela redução de Barrett e pelo desenrolamento do loop de conversão. #100671 (Raúl Marín).
- Evitar a criação de threads redundantes na mesclagem paralela de
uniqExact. #100686 (Jiebin Sun).
- Adiciona merge paralelo em lote para
uniqExact. #100687 (Jiebin Sun).
- Melhoria na paralelização de consultas com views simples (com tabela
MergeTree subjacente) executadas com réplicas paralelas. #100815 (Igor Nikonov).
- Implementa suporte a réplicas paralelas em views simples (incluindo views
UNION ALL compatíveis sobre tabelas MergeTree) quando parallel_replicas_allow_view_over_mergetree=1. Isso permite paralelizar a consulta externa da view em vez da interna, aumentando a paralelização da consulta entre nós. #100958 (Igor Nikonov).
- Otimiza a leitura seguindo a ordem da chave primária para
full_sorting_merge quando há filtros com IN no plano de consulta. #101261 (Nikita Taranov).
- Otimização de alocações/desalocações ao usar cache para as configurações de amostragem, em vez de percorrer toda a hierarquia do rastreador de memória. #101267 (Azat Khuzhin).
- Corrige uma regressão significativa no desempenho de INSERT quando
deduplicate_insert = 'enable' (padrão desde a versão 26.2), transferindo o cálculo do hash dos dados do squashing para o sink e usando hash de colunas em lote via updateHashWithValueRange, reduzindo a sobrecarga de ~2.5s para ~0.5s em 5M linhas com 22 colunas. #101494 (Sema Checherinda).
- Reduza a sobrecarga do profiling de locks usando
try_lock para evitar medir o tempo de aquisições sem contenção e removendo a medição do tempo de retenção. #101502 (Antonio Andelic).
- Intrínsecos AVX-512 escritos manualmente em
arrayDotProduct foram substituídos por loops auto-vetorizáveis independentes de plataforma, com adição de suporte a AVX2 e ARM NEON. #101571 (Peng).
- Melhora o desempenho de
INSERT VALUES para colunas Map, Array e Tuple quando os valores são passados como strings escapadas (por exemplo, '{\'key\':1}'), evitando recorrer desnecessariamente ao analisador de expressões SQL. #102119 (Joanna Hulboj).
- Corrigido o uso excessivo de CPU do engine de tabela
RabbitMQ. #102711 (Jaap Elst).
- O otimizador da ordem das junções agora infere predicados transitivos de equijunção a partir das condições de join existentes. Por exemplo, dado
A.x = B.x AND B.x = C.x, a equivalência A.x = C.x é reconhecida, permitindo que o otimizador considere junções diretas entre tabelas conectadas transitivamente. Isso pode melhorar a qualidade do plano em esquemas star e snowflake, nos quais as tabelas de dimensão se conectam por meio de uma tabela de fatos compartilhada. O recurso é controlado pela nova configuração enable_join_transitive_predicates (desativada por padrão). #98479 (Alexander Gololobov).
- Otimiza
TRUNCATE DATABASE TABLES LIKE com o pré-cancelamento paralelo de merges. #98597 (Shaohua Wang).
- Adicionado suporte à monotonicidade na multiplicação, permitindo a poda da chave primária em expressões
key * constant. #98983 (Amos Bird).
- Os dicionários de cache não usam mais bloqueio exclusivo em
hasKeys; isso reduz a contenção de bloqueios ao usar um bloqueio compartilhado para leituras do cache. #100796 (liuguangliang).
- Incorporação da subconsulta VIEW à árvore de consulta para permitir que mais otimizações sejam aplicadas à VIEW. #100830 (Dmitry Novik).
- Otimiza o carregamento do cache na inicialização do servidor. #101500 (Kseniia Sumarokova).
- Implementa a materialização tardia de colunas para ReplacingMergeTree com FINAL, caso o predicado seja seletivo o suficiente. #101647 (Nikolai Kochetov).
- Reative a otimização
optimize_rewrite_array_exists_to_has (desativada por padrão desde a versão 23.10). Ela reescreve arrayExists(x -> x = elem, arr) para o has(arr, elem), que é muito mais rápido, e agora ignora corretamente a reescrita quando o tipo de elemento do array e elem não são compatíveis com has (por exemplo, Date vs String), de modo que as consultas que antes falhavam continuem funcionando. Fecha #71431. #100944 (Alexey Milovidov).
- Saída aprimorada do EXPLAIN PLAN pretty=1: imprime as colunas de saída da consulta no nível superior, mostra rótulos/símbolos das relações de join com o número estimado de linhas no resultado e a localidade, e inclui colunas de saída por passo para etapas de join/origem. As alterações cobrem a parte de Information Deficit de #98117. #99462 (Kirill Kopnev).
- Adiciona a configuração de tabela MergeTree
share_nested_offsets (padrão true). Quando definida como false, colunas Array com nomes contendo pontos (por exemplo, n.a, n.b) são tratadas como colunas independentes, em vez de compartilharem arquivos de offset e validarem tamanhos iguais de array como parte da semântica legada de Nested. #98416 (Amos Bird).
- Agora, os usuários podem especificar vários métodos de autenticação na configuração users.xml/yaml (em SQL, isso sempre foi possível). #91998 (Flip-Liquid).
- Recarregamento automático das conexões TLS entre nós do Raft. #93455 (Evgeny).
- Amplia
cast_keep_nullable para funcionar com tipos Dynamic/JSON. Quando definido, a conversão de NULL de tipos que podem ser Nullable retorna NULL; caso contrário, NULL gera o erro CANNOT_INSERT_NULL_IN_ORDINARY_COLUMN. #96504 (Seva Potapov).
- Reduziu o consumo de memória das estruturas internas de dados (objetos
ISerialization) com a introdução de um pool de objetos. #96563 (Nikita Mikhaylov).
- Adicionado suporte aos campos
password e identity na configuração XML do keeper-client. #96800 (Grigorii Sokolik).
- Melhora as escritas do
Iceberg para o Unity Catalog. #98162 (Konstantin Vedernikov).
- Adicionar a configuração
finalize_projection_parts_synchronously para permitir a finalização síncrona das partes de projeção durante o INSERT, reduzindo o pico de uso de memória em tabelas com muitas projeções e preservando, por padrão, o comportamento assíncrono existente. #98228 (Amos Bird).
- Adicionar a coluna
projections_duration_ms a system.part_log, que registra, em milissegundos, a duração da mesclagem/reconstrução de cada projeção. #98292 (Amos Bird).
- Melhoria no cancelamento de consultas usando ExpressionTransform e NumbersRangedSource com KILL QUERY e cancelamento de consulta (Ctrl+C) no clickhouse-client. #98908 (Roman Vasin).
- Substitua a lista
source_table_engines, definida de forma estática, por uma consulta em tempo de execução via StorageFactory::getAllStorages(). Isso adiciona verificações de acesso para alguns motores de tabela que estavam faltando e fecha #71544. #98984 (pufit).
- Adiciona uma configuração para controlar o comportamento em caso de incompatibilidade de tipo em Variant e Dynamic (throw ou retornar null). #99085 (Bharat Nallan).
- Melhorar a compatibilidade entre
Iceberg e Spark: corrigir o tratamento inconsistente de caminhos causado pelo uso misto de caminhos de armazenamento e de metadados; garantir que as tabelas Iceberg gravem um local de tabela que seja uma URL ou um caminho absoluto; adicionar um fallback para a contagem do tamanho de arquivos no Azure, porque alguns leitores do ClickHouse não oferecem suporte à contagem de bytes após a travessia; tratar version-hint.txt de forma compatível com o Spark; introduzir abstrações em nível de tipo que dificultam a confusão entre tipos de caminho no futuro; adicionar testes para Azure e Local que verificam a interoperabilidade entre engines sem upload/download intermediário; corrigir o uso de exclusões por posição, que antes dependia de heurísticas de inferência de caminho, abordagem inadequada nesse caso. #99163 (Daniil Ivanik). #100420 (Daniil Ivanik).
- Corrige uma possível condição de corrida em
IPartitionStrategy::cached_result introduzida por https://github.com/ClickHouse/ClickHouse/pull/92844. #99400 (Arthur Passos).
- Agora, os usuários podem escrever tipos de dados Interval do ClickHouse no formato Arrow. #99519 (Peter Nguyen).
- Adiciona suporte nativo à importação e exportação de tipos de dados
UUID nos formatos Arrow e Parquet. Agora, os usuários podem consultar e transferir dados UUID diretamente entre o ClickHouse e outras ferramentas de dados, sem precisar de conversões manuais para string nem de soluções alternativas. Inferência lógica automatizada para UUIDs de nível superior e suporte a dica de esquema explícita para UUIDs aninhados. #99521 (Ivan).
- Suporte a arquivos
7z em armazenamento de objetos. Fecha #70968. #99600 (Alexey Milovidov).
- Adiciona os ProfileEvents
ObjectStorageListedObjects, ObjectStorageGlobFilteredObjects, ObjectStoragePredicateFilteredObjects e ObjectStorageReadObjects para introspecção do pipeline de listagem e leitura de arquivos em armazenamento de objetos (S3, Azure etc.). #99778 (Sema Checherinda).
- Corrige a falha da função de tabela
merge com o erro UNKNOWN_IDENTIFIER ao consultar colunas que não estão presentes em todas as tabelas distribuídas/remotas subjacentes. #99833 (Alexey Milovidov).
- Agora incluímos o tempo de commit na métrica de tempo total de execução de mutação do ReplicatedMergeTree. Esse tempo havia sido perdido após #96376. #99936 (alesapin).
- Adiciona um log write-ahead para objetos blob com remoção pendente em
MetadataStorageFromDisk, melhorando a durabilidade e a consistência entre os metadados e o armazenamento remoto de objetos quando esses objetos são excluídos. #100019 (Maksim Kita).
- Desativada a geração de SQL por IA (comando
??) no cliente embutido (protocolos SSH e WebSocket) para impedir o acesso às variáveis de ambiente do servidor. #100290 (Alexey Milovidov).
- Altera a interface dos inserts do Iceberg com o catálogo. Descontinua as configurações:
storage_catalog_type, storage_aws_access_key_id, etc. #100334 (Konstantin Vedernikov).
- Tratar tabulações como 4 espaços ao colar no clickhouse-client. Fecha #100405. #100416 (Raúl Marín).
- Evite varrer todo o catálogo remoto do lago de dados em busca de dicas de tabela “Talvez você tenha querido dizer …” quando
show_data_lake_catalogs_in_system_tables estiver desabilitado. #100452 (Alsu Giliazova).
- Aplicar
distributed_index_analysis_min_indexes_bytes_to_activate após a poda de partições. #100477 (Azat Khuzhin).
- Corrige erro de asserção no pushdown do filtro de Bloom em Parquet ao usar cláusulas IN/NOT IN vazias. #100543 (zoomxi).
- As estatísticas de coluna MinMax agora armazenam os valores mínimo e máximo como Field (tipado), em vez de Float64. O formato serializado inclui o nome do tipo da coluna junto com os valores. A versão do arquivo de estatísticas foi atualizada para V2; arquivos escritos por versões anteriores exigem re-materialização (ALTER TABLE … MATERIALIZE STATISTICS ALL). corrige #53140. #100605 (Han Fei).
- Atualiza
cppkafka para incluir a correção do deadlock ao fechar o Consumer. #100612 (Azat Khuzhin).
- As informações do objeto usadas para o parsing de arquivos de dados no Iceberg agora incluem o número de linhas do arquivo e o tamanho do arquivo em bytes, extraídos do arquivo de manifesto. #100645 (Daniil Ivanik).
- Adiciona o parâmetro de configuração
use_separate_cache_arena para permitir controlar a separação da arena de memória do cache. #100664 (Seva Potapov).
- Adiciona suporte nativo para importar os tipos de dados
StringView e BinaryView do Apache Arrow para colunas String do ClickHouse, melhorando a compatibilidade com a ingestão baseada em Arrow. #100762 (Ivan).
- Algumas configurações do servidor Keeper agora são recarregadas dinamicamente quando o arquivo de configuração é alterado em tempo de execução: max_requests_batch_size, max_requests_batch_bytes_size, max_request_size, quorum_reads. #100773 (Michael Kolupaev).
- Aumenta os eventos de perfil
MemoryAllocatedWithoutCheck/MemoryAllocatedWithoutCheckBytes em build de release. #100899 (Pavel Kruglov).
- O rastreamento de memória do Cgroupv2 agora exclui
slab_reclaimable da memória do kernel, oferecendo uma medida mais precisa do consumo de memória não recuperável. #100901 (Antonio Andelic).
use_partition_pruning = 0 agora também desativa a poda do índice MinMax e a otimização de contagem nas colunas da chave de partição, além de desativar a poda com base nas chaves de partição. #100904 (Nihal Z. Miaji).
pretty=1 em EXPLAIN [PLAN] agora imprime expressões em um formato legível para humanos. #100927 (Kirill Kopnev).
accurateCastOrNull e accurateCastOrDefault agora oferecem suporte a tipos de destino Tuple, incluindo Tuples aninhadas com elementos Nullable. Anteriormente, essas funções rejeitavam tipos de destino Tuple porque Tuple não podia estar dentro de Nullable. Fecha #100820. #100942 (Nihal Z. Miaji).
- Corrige a duplicação de gráficos na UI do Play ao alternar entre os temas claro e escuro. #101058 (Alexey Milovidov).
- Atualização do chdig para v26.3.1 (interface do Perfetto, sparklines no resumo de CPU/Memória/Merges/Consultas, system.warnings, busca por regexp nos logs). #101092 (Azat Khuzhin). Atualização do chdig para v26.4.3 (melhorias no Perfetto, correções no compartilhamento via pastila.nl, diffs de flamegraph, alteração de configurações em tempo real). #103145 (Azat Khuzhin).
- Agora você pode ter uma vírgula final na cláusula
WITH antes de uma consulta SELECT. #101093 (Aruj Bansal).
- Adiciona a configuração MergeTree
compress_per_column_in_compact_parts para controlar como os blocos comprimidos são organizados nas partes Compact. Quando true (padrão, preservando o comportamento atual), cada coluna inicia um novo bloco comprimido, permitindo descompressão seletiva. Quando false, todas as colunas dentro de um grânulo são agrupadas no mesmo bloco comprimido, melhorando a taxa de compressão e o desempenho de leitura para cargas de trabalho que sempre leem todas as colunas. #101114 (Amos Bird).
- Exibir o balão com informações da tabela na UI do Play apenas ao passar o cursor sobre o nome da tabela, e não sobre a linha inteira. #101118 (Alexey Milovidov).
- Adicionados ícones específicos por engine e melhorias na UX da lista de tabelas na barra lateral da UI do Play. #101134 (Alexey Milovidov).
- Suporte a
Nullable(Tuple) nos formatos legados Arrow, ArrowStream, ORC e Parquet. #101272 (Nihal Z. Miaji).
- Exibir a linha TOTALS no rodapé da tabela na interface web (play.html). #101286 (Alexey Milovidov).
- Suporte ao modo de múltiplas consultas na UI web (
play.html): execute várias consultas de uma só vez, com execução paralela de consultas do tipo SELECT e exibição dos resultados por consulta. #101290 (Alexey Milovidov).
- Corrigido o redimensionamento de colunas na UI web do play.html após a refatoração da tabela de resultados em um componente web. #101295 (Alexey Milovidov).
- Adicionada a capacidade de limitar o número de flushes do perfil do jemalloc em MEMORY_LIMIT_EXCEEDED por intervalo de tempo. #101396 (Azat Khuzhin).
- Adicionadas as configurações do Keeper
nuraft_streaming_mode (o padrão é false), nuraft_max_log_gap_in_stream e nuraft_max_bytes_in_flight_in_stream. Fecha #90743. #101427 (Kseniia Sumarokova).
- Adicionada a métrica assíncrona
CGroupMemoryUsedWithoutPageCache, que informa o uso de memória do cgroup excluindo tanto o page cache do kernel do SO quanto o userspace page cache do ClickHouse, em linha com MemoryResidentWithoutPageCache. Também foi esclarecida a descrição da métrica CGroupMemoryUsed. #101513 (Francesco Ciocchetti).
- Adicionar açúcar sintático no nível do parser para a sintaxe padrão SQL da função
OVERLAY. A função overlay já existe; isso acrescenta suporte à forma baseada em palavras-chave, usando PLACING, FROM e FOR como separadores. #101681 (Desel72).
- Adicionado o alias de coluna
INDEX_LENGTH à tabela de sistema information_schema.tables, em linha com os aliases existentes em maiúsculas nessa tabela. #101705 (Robert Schulze).
- Tabela de sistema
information_schema.tables agora ignora partes inativas da tabela. Isso torna mais realistas os valores exibidos para o tamanho da tabela. #101706 (Robert Schulze).
- A função
ngrams agora rejeita tamanhos de ngram inválidos. Exemplo: SELECT ngrams('abc', 0) agora retorna um erro. #101922 (Robert Schulze).
- Um complemento a #91820 e #90837: remover algoritmos não compatíveis da mensagem de erro; executar testes específicos de FIPS em builds FIPS. #102067 (Mikhail f. Shiryaev).
- Limitar a altura das células a três linhas na Web UI (
play.html), com expansão ao clique. #102154 (Alexey Milovidov).
- Adicionada uma nova opção que permite forçar o estilo (virtual/path) para endpoints do S3. Resolve #82019; #76007 Continuação de https://github.com/ClickHouse/ClickHouse/pull/83168. #102378 (Konstantin Vedernikov).
- A configuração
restore_replace_external_engines_to_null agora também deixa de restaurar bancos de dados com motores externos (por exemplo, DataLakeCatalog, MySQL, PostgreSQL, S3), em vez de falhar ou iniciar conexões externas. #102400 (Nikita Fomichev).
- Adicionado suporte à análise de índices de texto para a função
hasPhrase no modo HINT. #102438 (Elmi Ahmadov).
- Trata STATISTICS como somente leitura em ColumnDependency para corrigir LOGICAL_ERROR durante MATERIALIZE STATISTICS ALL. #102627 (Konstantin Bogdanov).
- Criar e preencher
system.asynchronous_metric_log no modo keeper-as-server. #102664 (Miсhael Stetsyuk).
- Adiciona a opção de configuração
default_system_log_flush_policy.skip_alias_columns para permitir omitir colunas ALIAS das tabelas de log do sistema, corrigindo logs do sistema com backend em S3 que rejeitam colunas ALIAS. #102669 (Miсhael Stetsyuk).
- N’ao habilite estatísticas automáticas para tabelas de sistema. Elas raramente conseguem se beneficiar delas. #102862 (Han Fei).
- Suporte ao tokenizador
array para a otimização de LIKE. #102880 (Elmi Ahmadov).
- Enviar MemoryAllocatedWithoutCheck mesmo nas builds de release. #103064 (Azat Khuzhin).
- Exibe
untracked_memory por thread em system.stack_trace. #103065 (Azat Khuzhin).
Correção de bug (comportamento incorreto perceptível ao usuário em uma versão estável oficial)
- Corrige o erro
Block structure mismatch in stream causado por colunas desnecessárias retornadas pela materialização tardia. Corrige #95191. #96682 (Nikolai Kochetov).
- Corrige um erro lógico em uma consulta com política de mascaramento de dados usando
ON CLUSTER. #97594 (Bharat Nallan).
- Corrige um bug ao usar o Unity Catalog sobre o GCS. #98456 (Melvyn Peignon).
DataLakeCatalog agora respeita a configuração http_forbid_headers do servidor ao validar a definição auth_header. #98827 (Michael Anastasakis).
- Corrige chamadas N+1 de
HeadObject em globs do S3 com expansão por chaves. #99219 (Konstantin Bogdanov).
- Validar alterações de configurações em consultas CREATE quando o próprio engine também oferece suporte a configurações. #99279 (János Benjamin Antal).
- Corrigido o problema em que
ALTER TABLE UPDATE/DELETE falhava com o erro Missing columns quando uma tabela tinha uma coluna MATERIALIZED cuja expressão dependia de uma coluna EPHEMERAL. #99281 (Yash ).
- As credenciais em strings de conexão JDBC, ODBC e NATS agora são mascaradas nos logs de consulta e na saída de
SHOW CREATE, evitando a exposição acidental de informações sensíveis. Para strings de conexão no formato URI (por exemplo, {scheme}://{user}:{password}@{host}), apenas a parte da senha é mascarada, enquanto o restante permanece visível para facilitar a depuração. A configuração nats_token agora também é mascarada. #99344 (János Benjamin Antal).
- Corrige o
parseDateTimeBestEffort, que analisava incorretamente palavras iniciadas por prefixos de mês no formato DD-month-YYYY. Fecha #99345. #99350 (Pavel Kruglov).
- Correção da ignorância de TABLE_UUID_MISMATCH quando o analyzer não é usado. #99380 (Azat Khuzhin).
- Corrige um bug em que configurações explícitas enviadas junto com
compatibility, na mesma solicitação, podiam ser ignoradas silenciosamente quando seu valor correspondia ao padrão do servidor. #99402 (Raufs Dunamalijevs).
- Corrige casos em que números com zeros à esquerda no caminho de particionamento do Hive causavam erros. Corrige #98801. #99458 (Yarik Briukhovetskyi).
- Corrige
heap-use-after-free quando uma tabela é removida enquanto uma consulta de leitura está em execução (19 ocorrências no CI nos últimos 90 dias). #99483 (Alexey Milovidov).
- Corrigido um bug no Keeper em que uma solicitação de leitura podia travar (fazendo a sessão expirar) se outra sessão não relacionada no mesmo servidor fosse encerrada exatamente no momento errado. #99484 (Michael Kolupaev).
- Validar a estrutura da coluna antes de aplicar patches. #99531 (Seva Potapov).
- Corrige falha de asserção em
rows_sources na mesclagem vertical quando SYSTEM STOP/START MERGES é alternado rapidamente durante a mesclagem de uma tabela com colunas Dynamic. #99532 (Alexey Milovidov).
- Corrige a poda incorreta de partições em
toWeek(), que fazia consultas com WHERE toWeek(date, mode) = N retornarem resultados vazios para as semanas 49-52 em tabelas particionadas por toYYYYMM(date). #99542 (Takumi Hara).
- Corrigida exceção em funções que operam sobre ColumnReplicated com linhas não referenciadas geradas por JOIN. #99564 (Hechem Selmi).
- Corrige o problema em que
CLEAR COLUMN não reconstruía projeções nem reavaliava colunas materializadas que dependem da coluna limpa, o que poderia causar exceções ou corrupção de dados durante mesclagens subsequentes. #99565 (Desel72).
- Foi corrigida uma exceção (
Bad get: has Tuple, actual type String) em ConditionSelectivityEstimator quando uma consulta usa IN com um único parâmetro de consulta escalar (por exemplo, WHERE col IN ({p:String})) em uma tabela que tem estatísticas de coluna e com use_statistics habilitado. #99614 (Ilya Yatsishin).
- Parte com projeções desconhecidas não deve ser marcada como permanentemente perdida. #99623 (Sema Checherinda).
- Corrige uma rara exceção de erro lógico durante a mesclagem vertical quando
SYSTEM STOP MERGES e SYSTEM START MERGES são executados simultaneamente. #99628 (Desel72).
- Corrigida uma referência pendente em injectRequiredColumns que causava falha durante a mesclagem. #99679 (Tuan Pham Anh).
- Corrigido o comportamento indefinido no leitor do formato Avro ao ler valores numéricos que causam overflow no tipo da coluna de destino. Agora, as consultas falham em caso de overflow, em vez de produzir silenciosamente valores incorretos. #99697 (asyablue22).
- Corrige a interpretação de aspas no estilo shell nos argumentos da função de tabela
executable. #99794 (Nikita Semenov).
- Corrige um falso positivo de abort em
NativeReader ao desserializar um fluxo em formato Native com divergência na contagem de linhas: alterado de LOGICAL_ERROR para INCORRECT_DATA para que o erro seja tratado como erro de dados, em vez de acionar abort() em builds de sanitizer/depuração. #99822 (Rahul Nair).
- Corrige o encerramento abrupto do processo na desserialização da coluna
Tuple quando o tipo de serialização no fluxo binário é DETACHED. #99823 (Rahul Nair).
- Corrige uma exceção
LOGICAL_ERROR indevida durante o redimensionamento dinâmico do cache do filesystem, causada por uma condição de corrida na promoção da subfila SLRU. #99850 (Alexey Milovidov).
- Corrige consultas de async insert que reportavam zero em
written_rows, read_rows e result_rows no query_log e na saída do cliente. #99879 (Sema Checherinda).
- Corrige a exceção “Conversão inválida do tipo X para Y” em
KILL QUERY quando a consulta interna contra as tabelas de sistema retorna colunas encapsuladas em ColumnConst. #99881 (Alexey Milovidov).
- Corrige erro lógico em subconsulta correlacionada dentro do argumento untuple. #99917 (Vladimir Cherkasov).
- Corrige uma exceção ao chamar
right, rightUTF8 ou outras funções de substring com um comprimento de INT64_MIN (-9223372036854775808), o que antes causava comportamento indefinido devido a overflow de inteiro. Agora, as funções reportam corretamente um erro ARGUMENT_OUT_OF_BOUND. #99934 (Jimmy Aguilar Mena).
- Agora o ClickHouse deve lidar corretamente com tabelas no estilo Spark (em que temos o caminho absoluto completo de cada arquivo ou o caminho relativo em relação ao caminho comum da tabela). Corrige #92348. #99935 (alesapin).
- Corrige a exceção “Formatação inconsistente de AST” em
ALTER TABLE ... MODIFY QUERY com subconsultas aninhadas que contêm SETTINGS quando o próprio ALTER também tem SETTINGS. #99938 (Nikita Mikhaylov).
- Reversão de #97114 “Mover a estimativa de linhas no passo de join antes da verificação de 1 filho” devido à suspeita de regressão de desempenho. #99957 (Alexander Gololobov).
- Corrige um bug em que o ClickHouse podia ignorar arquivos quando o cabeçalho
Content-Length não estava presente na resposta à requisição HEAD correspondente (por exemplo, devido à transcodificação descompressiva no GCS). #99971 (Yarik Briukhovetskyi).
- Corrige falha de asserção (exceção em builds de depuração, resultados incorretos em builds de release) ao multiplicar estados de agregação de
NumericIndexedVector por uma constante inteira par, causada por XOR consigo mesmos em bitmaps Roaring com alias em pointwiseAddInplace. #99976 (Desel72).
- Evita a exceção
Unexpected return type no pushdown de filtro legado em JOIN USING encadeado quando os tipos das chaves mudam após as conversões de join. #99999 (Alexey Milovidov).
- Corrige a exceção
LOGICAL_ERROR “Unexpected node type for table expression … Actual IDENTIFIER” quando uma subconsulta escalar é usada em um argumento não resolvido de função de tabela, por exemplo, SELECT * FROM remote('localhost', view(SELECT 2 AS x), concat(x, (SELECT 1))). #100014 (Alexey Milovidov).
- Corrigida a falha no
INSERT com VALUES quando os dados eram seguidos, na linha seguinte, por um comentário SQL no final (-- ou /* */). O comentário agora é ignorado em vez de ser interpretado como outra linha. #100016 (Pratima Patel).
- Corrigida exceção no
arrayRemove ao comparar tuplas com elementos NULL. #100017 (Alexey Milovidov).
- Corrige vazamento de dados entre usuários em
system.asynchronous_inserts: qualquer usuário com SELECT na tabela podia ver entradas pendentes de insert assíncrono de outros usuários. As entradas agora são filtradas com base no usuário atual, a menos que o usuário tenha o privilégio SHOW_USERS. #100024 (Shaohua Wang).
- Corrige o caso em que a conversão de Time64 para UInt64 podia limitar os valores a 24 horas. #100025 (Yarik Briukhovetskyi).
- Corrige travamento do servidor local quando CREATE DICTIONARY tem uma definição com um valor de lista contendo uma função inexistente. #100036 (Yakov Olkhovskiy).
- Corrige os formatos
CSV e MsgPack, que não conseguiam interpretar Nullable(Tuple) corretamente. Fecha #99753. #100038 (Nihal Z. Miaji).
- Corrige a falha de
CREATE VIEW com UNKNOWN_IDENTIFIER ao usar um alias de expressão de função em WITH (por exemplo, tuple(...)) como lado direito de IN. #100042 (Peng).
- Corrige a falha de funções de agregação de séries temporais (por exemplo,
timeSeriesResampleToGridWithStaleness) com ILLEGAL_TYPE_OF_ARGUMENT quando usadas com initializeAggregation ou AggregatingMergeTree sob réplicas paralelas. #100053 (Alexey Milovidov).
- Corrige o processamento de valores negativos em NumericIndexedVectorDataBSI. #100086 (Daniil Ivanik).
- Correção das funções
accurateCastOrDefault e to*OrDefault, que não preservavam o tipo de coluna Const em entradas constantes. #100132 (Alexey Milovidov).
- Parâmetros de consulta omitidos do tipo
LowCardinality(Nullable(T)) agora passam corretamente a ter NULL como valor padrão, assim como Nullable(T). #100144 (Denys Melnyk).
- Corrige o uso de um valor não inicializado em StringSearcher.h. #100225 (Konstantin Bogdanov).
- Passa a permitir o cancelamento de subconsultas escalares e de outros pipelines durante a análise via Ctrl+C. Antes, pressionar Ctrl+C durante a execução de uma subconsulta escalar demorada não surtia efeito até que a subconsulta fosse concluída. Também corrige a barra de progresso e as estatísticas em JSON para informar corretamente as linhas lidas durante a execução de subconsultas escalares, tanto no
clickhouse-client quanto no clickhouse-local. Em coautoria com @YjyJeff. #100230 (Raúl Marín).
- Corrigida uma exceção
LOGICAL_ERROR em consultas que envolvem colunas Dynamic com junções cruzadas e filtros em tempo de execução, causada por ColumnVariant::filter compartilhar ponteiros para colunas Variant em vez de cloná-los no caminho de otimização hasOnlyNulls. Fecha https://github.com/ClickHouse/ClickHouse/pull/100147. #100234 (Pavel Kruglov).
- Corrigido um bug em Array de Variant que podia reinterpretar o tipo de dado ao chamar a função
arrayFirst/arrayLast. Por exemplo, antes Array(Variant(Date, Bool)) era convertido em Bool quando, na verdade, o tipo Variant subjacente era Date. #100255 (timothygk).
- Algumas pequenas alterações nas funções: as funções h3 agora validam melhor os limites;
readWKB verifica os limites de tamanho (uma nova configuração, max_wkb_geometry_elements); as funções de geração aleatória limitam o número máximo de iterações em seus cálculos. Um desdobramento de #93543. #100270 (Alexey Milovidov).
- Foi corrigido um problema em que
cutURLParameter podia ignorar parâmetros indevidamente quando eles apareciam como substrings de outros parâmetros. #100280 (Nikita Semenov).
- Corrigida exceção quando a configuração do caminho do arquivo de metadados do Iceberg contém um byte nulo. #100283 (Alexey Milovidov).
- Corrigido o crescimento quadrático no número de consultas executadas quando
distributed_index_analysis é usado com predicados que contêm subconsultas IN. #100287 (Anton Popov).
- Corrigida a exceção “Block structure mismatch” ao usar
GROUP BY ... WITH TOTALS HAVING em combinação com UNION DISTINCT e expressões Nullable. #100293 (Alexey Milovidov).
- Correção da exceção LOGICAL_ERROR em
estimateCompressionRatio quando o parâmetro block_size_bytes é extremamente grande. #100298 (Alexey Milovidov).
- Corrige a exceção “Inconsistent AST formatting” em builds de depuração ao usar
GROUP BY CUBE(...) WITH ROLLUP ou outras combinações semelhantes. #100376 (Alexey Milovidov).
- Corrigida a exceção ao criar uma view com aliases de colunas e consultas com
SELECT * ou EXCEPT/INTERSECT. #100386 (Alexey Milovidov).
- Corrige o travamento indefinido de
DROP TABLE em tabelas com engine Kafka quando os consumidores ficam presos em um rebalanceamento após um erro de heartbeat. #100388 (Alexey Milovidov).
- Corrigida a exceção
ReadBuffer is canceled. Can't read from it. durante operações de backup/restauração com arquivos zip. #100400 (Alexey Milovidov).
- Corrigida a exceção
TOO_MANY_ROWS em consultas SELECT count() com max_rows_to_read / force_primary_key quando os dados estão distribuídos em várias partes com limites de grânulos não alinhados. #100408 (Alexey Milovidov).
- Corrige
system.completions para filtrar corretamente bancos de dados, tabelas e colunas por permissões de acesso em todas as combinações de grant: por tabela, por DB e revogação por coluna. #100432 (Shaohua Wang).
- Corrige SEGFAULT no NuRaft causado por uma condição de corrida. #100444 (Pablo Marcos).
min/max/argMin/argMax agora tratam NaN de forma consistente com ORDER BY: NaN é sempre ignorado (só é retornado quando todos os valores são NaN). Antes, os resultados dependiam da posição de NaN nos dados devido à semântica de comparação não ordenada do IEEE 754. #100448 (Raúl Marín).
- Corrigido um bug de copiar e colar em que
delta_lake_snapshot_end_version, quando definido sem delta_lake_snapshot_start_version, era ignorado silenciosamente em vez de gerar um erro BAD_ARGUMENTS. #100454 (Mohammad Lareb Zafar).
StorageRabbitMQ::shutdown não é idempotente (acessa incondicionalmente ponteiros fracos e depois destrói os ponteiros compartilhados correspondentes), mas agora ele é chamado duas vezes: primeiro em StreamingStorageRegistry e depois em DatabaseCatalog. Esta correção torna o método idempotente e adiciona verificações defensivas contra nulo. #100455 (Miсhael Stetsyuk).
- Corrigida a exceção
LOGICAL_ERROR ao usar accurateCastOrNull com QBit como tipo de destino. #100470 (Raufs Dunamalijevs).
- Corrige a exceção LOGICAL_ERROR “Stream … not found” ao inserir dados em uma tabela com colunas
Array(JSON) aninhadas em partes wide com optimize_on_insert=0. #100475 (Pavel Kruglov).
- Validar os caminhos das entradas de arquivos nos metadados de backup para rejeitar travessia de diretórios, caminhos absolutos e nomes vazios durante
RESTORE. #100483 (Pablo Marcos).
- Corrigida a sintaxe
LIMIT m OFFSET n WITH TIES, que não funcionava. Essa sintaxe é equivalente a LIMIT n, m WITH TIES, que já funcionava. #100491 (Nihal Z. Miaji).
- Corrigida a exceção “No set is registered for key” ao usar
IN com colunas Nullable(Tuple) que têm campos nomeados e elementos LowCardinality. #100523 (Alexey Milovidov).
- Corrige
heap-buffer-overflow em usearch sorted_buffer_gt::insert(), que poderia causar travamento ou corromper a memória silenciosamente durante a busca por similaridade vetorial. #100537 (Dustin Healy).
- Corrige o fato de
EXECUTE AS ignorar as cláusulas FORMAT e INTO OUTFILE especificadas na consulta. #100538 (pufit).
- Corrige a formatação inconsistente da AST para SAMPLE com OFFSET no nível da consulta. Fecha #100576. #100579 (Pavel Kruglov).
- Corrige o catálogo Polaris no Azure. Desde a versão 25.12, esse catálogo no Azure passou a adicionar o bucket no início do caminho. Por exemplo,
abfss://polaris-polaris@<some_url>.windows.net/polaris-polaris/<other-path> em vez de abfss://polaris-polaris@<some_url>.windows.net/<other-path>. Este PR remove o bucket do caminho. #100583 (Konstantin Vedernikov).
- Corrigida exceção de incompatibilidade de tipos em transform quando a coluna padrão é
const em alguns blocos. Fecha #100574. #100616 (Pavel Kruglov).
- Corrige casos de NOT_FOUND_COLUMN_IN_BLOCK em que a parte SELECT da projeção contém colunas que não existem na parte SELECT original da consulta. Fecha #100194. #100623 (Yarik Briukhovetskyi).
- Valida as dimensões do shape no formato Npy em relação ao tamanho do arquivo e aos limites de overflow para evitar negação de serviço causada por arquivos
.npy maliciosamente criados com dimensões excessivamente grandes. Também rejeita shapes vazios e limita a memória por linha a 2 GiB. #100625 (Raúl Marín).
- Correção do problema em que
session_timezone era ignorado ao analisar valores DateTime durante inserts assíncronos (TCP) e todos os inserts via HTTP. #100647 (Sema Checherinda).
- Permite passar a chave de sharding para as funções de tabela
cluster() e clusterAllReplicas() ao usar uma função de tabela como fonte (por exemplo, cluster('name', view(...), sharding_key)). #100665 (Sergey Veletskiy).
- Corrige uma falha do servidor (falha de asserção) ao usar funções agregadas paramétricas com o combinador Array e argumentos NULL, como
quantileIfArrayArray(0.5)([[NULL]], [[1]]). #100679 (nerve-bot).
- Corrige uma exceção ao calcular o supertipo comum para tuplas vazias e não vazias com
use_variant_as_common_type ativado. #100699 (Antonio Andelic).
- O servidor não falha mais ao iniciar quando um disco do Azure Blob Storage está configurado, mas o endpoint está temporariamente inacessível (por exemplo, por falha de DNS). #100701 (Raúl Marín).
- Corrige o comportamento indefinido em
positiveModulo quando o divisor sem sinal não pode ser representado no tipo de resultado com sinal. #100705 (Raúl Marín).
- Corrige falha no servidor (erro lógico “Unexpected return type from __topKFilter”) quando
use_top_k_dynamic_filtering está habilitado e a coluna ORDER BY tem tipo Dynamic ou Variant. #100742 (Groene AI).
- Corrige travamento do servidor ao usar a função
has() com PREWHERE/WHERE em uma chave Tuple que contém elementos LowCardinality. #100760 (Groene AI).
- Corrigida a falha na asserção
file_offset_of_buffer_end <= getFileSize() (exceção em builds de depuração) ao ler tabelas Log ou StripeLog no armazenamento de objetos S3 com gravações concorrentes. #100763 (Alexey Milovidov).
- Corrige uma exceção no estimador de seletividade das estatísticas quando uma cláusula WHERE contém uma expressão de função (por exemplo, toDecimal64(col, 3)) em uma tabela com estatísticas habilitadas. Agora, o estimador ignora esses predicados em vez de tentar uma conversão de tipo inválida. #100764 (Han Fei).
- Corrige um caso raro em que um
join com reordenação pode gerar um resultado incorreto. #100790 (Yarik Briukhovetskyi).
- Corrige tipos de argumento incorretos em
AggregateFunction na otimização de contagem trivial, o que causava a exceção NUMBER_OF_ARGUMENTS_DOESNT_MATCH ao consultar expressões como count(v0 + v1) em tabelas distribuídas. #100794 (YjyJeff).
- Alguns catálogos podem exibir informações sensíveis na seção
SETTINGS do resultado da consulta select * from system.databases. Este PR evita esse comportamento. #100800 (Konstantin Vedernikov).
- Corrige comportamento indefinido (overflow de inteiro com sinal) em
toStartOfInterval ao usar intervalos Week, Quarter ou Year com um argumento origin e valores de intervalo extremos. #100817 (Raúl Marín).
- Corrige os combinadores de funções de agregação
If, Distinct, DistinctIf, IfState com tipo de retorno Tuple e um ou mais argumentos Nullable, que não conseguiam ler estados serializados antigos após a introdução de Nullable(Tuple). Fecha #98917. #100826 (Nihal Z. Miaji).
- Corrige segfault em s3Cluster e consultas distribuídas devido a um use-after-free no pool de conexões. #100837 (Konstantin Bogdanov).
- Corrige falha de segmentação causada por desreferência de ponteiro nulo ao carregar dicionários durante o desligamento do servidor.
Context::getUserDefinedSQLObjectsStorage (desreferencia user_defined_sql_objects_storage) é chamado por threads de dicionário em paralelo à thread principal, que chama Context::shutdown (define user_defined_sql_objects_storage como nulo). Precisamos garantir que futuras atualizações no carregador de dicionários sejam desabilitadas, interromper as consultas de dicionário em execução e aguardar a finalização das threads de carregamento de dicionários — tudo isso antes de executar Context::shutdown. Semelhante ao que fazemos com consultas normais. #100839 (Miсhael Stetsyuk).
- Corrigido estouro de buffer em
ULIDStringToDateTime quando a entrada contém bytes não ASCII. #100843 (Konstantin Bogdanov).
- Corrige falha (
LOGICAL_ERROR) ao consultar uma tabela Merge (ou a função de tabela merge()) que engloba várias tabelas, incluindo uma tabela Distributed, com distributed_group_by_no_merge=1 ativado. #100859 (Groene AI).
- Cast_keep_nullable, quando ativado, não gerará exceção ao converter NULL dinâmico em variant. #100864 (Seva Potapov).
- Corrige os comandos
get, exists e ls do clickhouse-keeper-client, que exibiam mensagens de erro duplicadas de watch_id em stdout em vez de stderr. #100893 (Mohammad Lareb Zafar).
- Corrige a exceção em
intDiv/intDivOrZero em arrays de tuplas Nullable, por exemplo, SELECT intDiv([divide((1, 2), ... AND NULL)], 2). #100895 (Raúl Marín).
- Avalia os argumentos da engine
StorageAlias antes de armazenar a definição, para que expressões como currentDatabase() sejam resolvidas como literais antes de serem salvas no banco de dados. #100902 (Nikolay Degterinsky).
- Corrigido
processAndOptimizeTextIndexFunctions quando query_plan_merge_expressions = 0, em que ExpressionStep fica diretamente acima de ReadFromMergeTree. Corrige #100879. #100909 (Jimmy Aguilar Mena).
- Atualizado o replxx para incluir correção de acesso fora dos limites em do_complete_line. #100925 (Azat Khuzhin).
- Corrige resultados incorretos quando um JOIN com a otimização shard-by-PK usa o cache de condições da consulta e algumas partes são filtradas por condições armazenadas em cache. #100926 (Groene AI).
- Corrige o retorno de
ILLEGAL_DIVISION por divide e intDiv quando usados em expressões de filtro durante a análise de índices, em alguns casos. #100928 (Nihal Z. Miaji).
- Corrigidos erros “A tabela de destino não existe” em visões materializadas com tabelas internas durante a inicialização assíncrona, causados por uma ordem incorreta das dependências na inicialização. #100946 (Nikolay Degterinsky).
- Corrige comportamento indefinido (overflow de inteiro assinado) em
parseDateTimeBestEffort ao analisar strings de data e hora com mais de 18 dígitos na parte fracionária dos segundos. #100948 (Vasily Chekalkin).
- Corrigida uma falha ao usar um índice de pesquisa textual com uma cláusula
IN contendo uma subconsulta Tuple, por exemplo, WHERE (id, str) IN (SELECT (id, str) FROM ...), ou quando o número de colunas da subconsulta não corresponde ao da tupla no lado esquerdo de IN. #100959 (Anton Popov).
- Corrigida uma falha ao criar um dicionário de polígonos a partir de uma tabela
MergeTree que usa serialização esparsa de colunas. #100964 (Anton Popov).
- Corrigido o erro lógico “Invalid action query tree node” ao usar
INTERSECT ALL / UNION ALL com expressões simplificadas para constantes. #100977 (Alexey Milovidov).
- Corrige a função de agregação
sumCountOrDefault com um ou mais argumentos Nullable que não conseguiam ler estados serializados antigos após a introdução de Nullable(Tuple). Fecha #100882. #101021 (Nihal Z. Miaji).
- Corrige falha (
Logical error: isConst/isSparse/isReplicated assertTypeEquality) em algoritmos de merge quando a replicação preguiçosa de colunas (enable_lazy_columns_replication) produz colunas ColumnReplicated que entram em pipelines de merge-sort com entradas que chegam mais tarde. #101036 (Groene AI).
- Corrige o erro incorreto
UNKNOWN_IDENTIFIER quando o mesmo alias é usado para várias expressões em SELECT; agora é reportado o erro correto MULTIPLE_EXPRESSIONS_FOR_ALIAS. #101040 (Alexey Milovidov).
- Corrige colunas ALIAS com tipos
DateTime/DateTime64 que não aplicavam a conversão de fuso horário quando o fuso horário declarado é diferente do fuso horário da expressão. #101043 (Alexey Milovidov).
- Corrige o problema de as políticas de linha não serem registradas em
query_log para views, subconsultas e INSERT ... SELECT. Embora as políticas de linha fossem aplicadas durante o planejamento da consulta, elas não eram propagadas dos subplanejadores para o planejador pai para fins de registro. As políticas de linha (apenas para registro) agora são mantidas em QueryAccessInfo, para que tanto os planejadores quanto os subplanejadores possam preenchê-las. #101044 (Narasimha Pakeer).
- Corrige a exceção em
DirectJoinMergeTreeEntity quando os blocos do pipeline contêm colunas ColumnConst mescladas com colunas regulares. #101046 (Alexey Milovidov).
- Corrige espaço indevido na formatação do alias de coluna na CTE (
WITH t (a, b) → WITH t(a, b)). #101049 (Alexey Milovidov).
- Corrige a falha nas funções de tabela
remote/cluster com funções de tabela aninhadas, como merge, quando o analisador está habilitado. #101055 (Alexey Milovidov).
- Corrige a aplicação do
OFFSET em dobro em consultas distribuídas quando prefer_localhost_replica=1, resultando em menos linhas do que o esperado. #101071 (Nihal Z. Miaji).
- Corrige uma falha ao usar o formato
Regexp com uma expressão regular inválida na configuração format_regexp. #101074 (Nihal Z. Miaji).
- Corrige o erro “Illegal type Decimal64 of start parameter” em funções de agregação de séries temporais ao usar
serialize_query_plan=1 com réplicas paralelas. #101083 (Groene AI).
- Corrigida uma exceção em
optimizeLazyMaterialization quando uma projeção com PREWHERE é usada com ORDER BY ... LIMIT. #101115 (Anton Popov).
- Corrige falha do servidor (SIGABRT) ao usar funções de agregação com o combinador interno
Null (por exemplo, sumNull, avgNull) e com a configuração aggregate_functions_null_for_empty = 1 habilitada. #101147 (Groene AI).
- Corrige um erro de uso após liberação no caminho de escrita do cache do sistema de arquivos que poderia causar leituras de memória já liberada ao registrar no log segmentos de arquivo concluídos (detectado pelo MemorySanitizer no BuzzHouse). #101161 (Groene AI).
- Corrige uma falha do servidor com “Trying to attach external table to a ready set without explicit elements” quando a análise distribuída de índices encontra um predicado
GLOBAL IN cujo Set foi criado sem elementos explícitos. #101178 (Groene AI).
- Corrige funções de agregação
MAX/MIN em colunas Decimal que retornavam resultados incorretos quando a compilação JIT está ativada (após atingir o limite de compilação). #101203 (Raúl Marín).
- Corrige a desativação permanente das otimizações de
minmax_count_projection e de COUNT(*) trivial após uma exclusão leve, mesmo depois de todas as partes com marca de exclusão leve terem sido mescladas. #101212 (Anton Popov).
- Corrige um caso que pode levar ao erro lógico
Having zero bytes, ... no cache, causado pela sobrescrita de um objeto remoto entre list e read, o que antes resultava em metadados de objeto obsoletos. #101219 (Kseniia Sumarokova).
- Corrige uma falha do servidor (LOGICAL_ERROR: Bad cast from ColumnVector to ColumnLowCardinality) ao executar uma consulta em uma tabela MergeTree com
ORDER BY CAST(lc_column, 'Type'), em que lc_column tem o tipo LowCardinality. #101220 (Groene AI).
- Corrigida a limpeza de nós de processamento obsoletos no
S3Queue. #101230 (Kseniia Sumarokova).
- Corrigido UB em mergeTreeAnalyzeIndexes() em caso de argumento optimizations inválido. #101253 (Azat Khuzhin).
- Corrige a exceção
Logical error: 'partitions_count > 0' ao executar ALTER TABLE UPDATE em sequência em uma tabela Iceberg particionada. #101278 (Desel72).
- Corrige resultados incorretos de consulta quando uma constante inteira grande (por exemplo, 256, 2147483648) é usada como predicado booleano em uma cláusula WHERE com AND em tabelas MergeTree. Por exemplo,
SELECT count() FROM t WHERE (2147483648 > b) AND 2147483648 retornava incorretamente 0 em vez de corresponder a todas as linhas. #101287 (Groene AI).
- Corrige insert-select em cluster Delta Lake com Replicated MergeTree. #101299 (Konstantin Vedernikov).
- Corrigido travamento com “Logical error: Reading from materialized CTE before materialization” quando uma subconsulta escalar faz referência a uma cadeia de CTEs materializadas interdependentes. #101305 (Groene AI).
- Corrige uma condição de corrida no
storage_id em IStorage::getDependentViewsByColumn. #101385 (Nikolay Degterinsky).
- Corrige a formatação e a clonagem da AST de BACKUP FROM SNAPSHOT. #101405 (Pablo Marcos).
- Corrige o crash de LOGICAL_ERROR “O componente atual está vazio” ao consultar
system.part_moves_between_shards com enforce_keeper_component_tracking habilitado. #101462 (Groene AI).
- Corrige uma falha de segmentação em DataTypeDynamic::create() quando o fuzzer gera uma AST malformada do tipo Dynamic. #101464 (Groene AI).
- Lançar um erro quando as configurações
delta_lake_snapshot_version ou de versão do CDF forem usadas sem o DeltaKernel habilitado, em vez de retornar dados incorretos silenciosamente. #101489 (Desel72).
- Corrige a exceção
NOT_FOUND_COLUMN_IN_BLOCK ao usar ARRAY JOIN com JOIN USING e com a configuração analyzer_compatibility_join_using_top_level_identifier habilitada. Fecha #101240. #101507 (Vladimir Cherkasov).
- Corrige a falha no loop de retry de INSERT do Iceberg quando a tabela foi criada com
iceberg_metadata_file_path e a versão de metadados de destino já existia. #101548 (Groene AI).
- Remover
Nullable da coluna de resultado em arrayIntersect e funções relacionadas para evitar incompatibilidade de serialização/desserialização. #101569 (George Larionov).
- Corrige travamento do servidor (LOGICAL_ERROR) ao executar SELECT em uma visão materializada apoiada por uma tabela com mecanismo IcebergLocal. #101577 (Groene AI).
- Corrige a mensagem de erro incorreta ao chamar
intExp10 com o argumento NaN — ela indicava intExp2 em vez de intExp10. #101582 (Krishna Chaitanya).
- Correção de
allow_statistics=0, que não bloqueava ALTER TABLE ADD STATISTICS e ALTER TABLE DROP STATISTICS após a refatoração em #100288. #101585 (Krishna Chaitanya).
- Corrige a falha do
CREATE TABLE no KeeperMap com “Cannot create metadata for table” quando nós remanescentes do ZooKeeper de um drop parcial anterior à versão 25.1 não têm o nó drop_lock_version. #101623 (Antonio Andelic).
- Corrige um possível erro lógico ao ler subcolunas de Map. Fecha #100769. Fecha #101336. #101641 (Pavel Kruglov).
- Corrige a prioridade da correspondência exata de subcoluna em relação à correspondência por prefixo em
getSubcolumnData para evitar uma possível falha. Fecha #101271. #101645 (Pavel Kruglov).
- Corrige o travamento (LOGICAL_ERROR: “ColumnUnique can’t contain null values”) ao comparar uma coluna
LowCardinality com uma constante NULL Variant quando use_variant_default_implementation_for_comparisons está desabilitado. #101690 (Groene AI).
- O que: Adicionada uma verificação de stream vazio ao Bzip2ReadBuffer para que ele retorne EOF em vez de lançar UNEXPECTED_END_OF_FILE quando o stream interno estiver vazio. #101691 (ClickGap AI Bot).
- O quê: Corrigido o texto descritivo invertido da coluna
alterable em system.s3_queue_settings e system.azure_queue_settings — os significados de 0 e 1 foram invertidos para corresponder ao comportamento real do código. #101703 (ClickGap AI Bot).
- Corrige o positiveModulo(tuple, number), que estava sendo direcionado incorretamente para divisão em vez de módulo. #101709 (ClickGap AI Bot).
- Corrige uma falha quando
thread_pool_size é configurado em um disco com cache. Antes, FileCacheSettings::loadFromConfig() rejeitava thread_pool_size como uma configuração desconhecida, o que impedia a inicialização do servidor. A configuração é um parâmetro válido de IDisk que controla o número de threads usadas nas operações de cópia entre discos durante movimentações de partes em segundo plano. #101712 (Francisco).
- Corrige a criação do dicionário
RANGE_HASHED, que aceitava silenciosamente um atributo de intervalo MAX inexistente e usava a configuração de tipo incorreta quando os atributos de intervalo mínimo e máximo tinham tipos diferentes. O bug era um erro de copiar e colar em buildRangeConfiguration, que buscava min_attr_name em vez de max_attr_name para o atributo máximo. #101732 (Yakov Olkhovskiy).
- Corrige uma falha de
use-after-free no agendador de concessão de CPU quando o temporizador de espera sobrevive à thread de trabalho à qual seus ProfileEvents::Counters se referem. #101761 (Antonio Andelic).
- Corrige um bug nas funções arrayLevenshteinDistanceWeighted e arraySimilarity. Fecha #101725. #101767 (Mikhail f. Shiryaev).
- Corrigida a API de consulta do Prometheus que ignorava corpos de formulário em POST. #101794 (James Cunningham).
- Corrige a propagação de exceção no destrutor S3
Client::~Client, que causava o encerramento do servidor. #101798 (Gagan Dhakrey).
- Corrige um erro de uso após o fim do escopo na desserialização paralela de caminhos dinâmicos do tipo
Object, que podia causar travamentos ao ler tabelas com muitos caminhos dinâmicos. #101823 (Antonio Andelic).
- Corrigida a saída incorreta da função
formatDateTime com o formatador %W sob determinadas configurações de formatação (não padrão). #101847 (Robert Schulze).
- Corrigido falso negativo em
shouldPatchFunction em SYSTEM INSTRUMENT ADD quando a string de busca aparece pela primeira vez dentro de um argumento de template do nome de símbolo desmanglado. #101885 (Pablo Marcos).
- Corrige a perda do registro de UDF quando a sessão do ZooKeeper expira durante a atualização periódica — todas as funções definidas pelo usuário podiam ficar indisponíveis até que uma atualização completa fosse concluída com êxito. #101891 (Nikita Fomichev).
- Corrigida a descrição de
system.codecs para AES_256_GCM_SIV para indicar AES-256 em vez de AES-128. #101917 (Jimmy Aguilar Mena).
- Corrige o uso de extremos incorretos em índice min-max criado em coluna JSON, o que levava a um resultado incorreto de consulta. Fecha #101700. #101918 (Pavel Kruglov).
- O tokenizador
splitByString agora rejeita separadores de string vazios. #101928 (Robert Schulze).
- Corrigido
materialize_skip_indexes_on_merge=false, que não estava suprimindo índices de texto (full-text) durante a mesclagem. Antes, apenas os skip indexes não textuais (minmax, set, bloom_filter) eram suprimidos; os índices de texto continuavam a ser criados, desperdiçando CPU e E/S. #101932 (Groene AI).
- O tokenizer
sparseGrams gerou tokens mais longos do que o comprimento máximo informado (isso ocorreu devido a um +2 fixo na implementação). #101934 (Elmi Ahmadov).
- Corrigido o SIGSEGV em
MergeTreeDataPartWriterWide::cancel quando um construtor de stream lança uma exceção durante addStreams, deixando uma entrada nula em column_streams. #101936 (Antonio Andelic).
- Corrige uma exceção ao consultar tabelas Merge ou Distributed com um índice de texto completo e condições de filtro combinadas que misturam
has*Tokens com LIKE, quando query_plan_direct_read_from_text_index está habilitado. #101939 (Jimmy Aguilar Mena).
- Corrige comportamento indefinido ao analisar pacotes de consulta do protocolo nativo com valores inválidos de
QueryProcessingStage. #101972 (Raúl Marín).
- Feche a conexão TCP quando ocorrer uma exceção durante a análise inicial da consulta, para evitar a leitura de dados corrompidos de um fluxo dessincronizado. #101989 (Raúl Marín).
- Corrige um bug de condição de corrida no SLRU do filesystem cache 26.1+, que pode levar a um erro lógico na reserva de espaço. Em uma compilação de depuração, também pode causar falha de
assert: 'O estado anterior é Evicting, mas o estado esperado era Active ao definir a flag Evicting para 2c1e3484ecdc6b78a8978fa5b17c5097:0:339 (estado: Evicting)'.. #101991 (Kseniia Sumarokova).
- Corrige a exceção ao converter uma string com dados residuais para o tipo vazio
Tuple(). #102011 (Alexey Milovidov).
- Corrige a ordenação incorreta das linhas em consultas que usam ORDER BY com o algoritmo de join grace_hash. As consultas afetadas podiam retornar resultados na ordem errada, gerando uma saída incorreta sem qualquer aviso. #102036 (János Benjamin Antal).
- Corrige um LOGICAL ERROR (Unexpected size of index type) que podia ocorrer em consultas com RIGHT JOIN e FULL JOIN quando a configuração
max_bytes_in_join estava definida. #102042 (Jimmy Aguilar Mena).
- Corrige casos em que Time com valores negativos retornava um resultado incorreto ao ser comparado com DateTime. Fecha #101670. #102056 (Yarik Briukhovetskyi).
- Corrige uma falha na atualização de UDF causada por
ZooKeeperRetriesControl ao repetir tentativas em uma sessão do ZooKeeper obsoleta (expirada) sem renová-la. #102059 (Nikita Fomichev).
- Corrige a falta de espaços ao formatar unlock snapshot. fecha https://github.com/clickhouse/clickhouse/issues/101723. #102063 (Han Fei).
- Corrige crash (SIGSEGV) ao executar uma consulta em uma view com cláusula WHERE quando a consulta interna produz colunas com tipos diferentes dos metadados da view (por exemplo, Nullable de LEFT JOIN com
join_use_nulls). #102085 (Miсhael Stetsyuk).
- Corrige entradas de
VectorSimilarityIndexCache que nunca eram removidas do cache após a remoção da part devido a chaves de cache inconsistentes. #102152 (Seva Potapov).
- Aplicar NACK a mensagens corrompidas ao usar o armazenamento RabbitMQ. #102157 (Seva Potapov).
- Corrige erro lógico ao analisar uma string inválida de tupla vazia. #102289 (Nihal Z. Miaji).
- Corrige resultados incorretos de agregação (linhas duplicadas) ao usar
optimize_aggregation_in_order=1 com colunas do GROUP BY em ordem diferente da chave de ordenação da tabela. #102299 (Groene AI).
- Corrige falha em
IcebergLocal ALTER TABLE ... UPDATE ao usar o formato Avro, causada por os tipos encapsuladores LowCardinality/Nullable não serem desembrulhados antes da serialização. #102337 (Desel72).
- Corrigida uma falha de segmentação em mutações de colunas materializadas sem expressão. Fecha #102185. #102342 (zoomxi).
- Correção no CoalescingMergeTree para o tipo Array. Isso corrige #89509. #102384 (Konstantin Vedernikov).
- Corrige segfault (ou LOGICAL_ERROR em builds de depuração) ao ler arquivos Parquet com o pushdown de filtro de Bloom habilitado e condições de igualdade/desigualdade na cláusula WHERE. A falha ocorria devido a um acesso de memória fora dos limites durante a recuperação de dados do filtro de Bloom no prefetcher do Parquet e também podia causar resultados de consulta incorretos e não determinísticos. #102385 (Groene AI).
- Corrige a interrupção com
LOGICAL_ERROR durante o redimensionamento dinâmico do cache de sistema de arquivos SLRU, causada por estatísticas de evicção compartilhadas entre subfilas e por um caminho de recuperação incorreto para candidatos malsucedidos. #102396 (Antonio Andelic).
- Corrige a falha de inicialização, em uma réplica nova, de tabelas alias sem tabela de destino no banco de dados Replicated. Fecha #101320. #102397 (Nikolay Degterinsky).
- Corrige leitura fora dos limites em funções de busca em strings (
countSubstrings, position etc.) ao procurar uma sequência composta inteiramente por bytes nulos. #102401 (Raúl Marín).
- As configurações de índice de texto completo (
enable_full_text_index, allow_experimental_full_text_index, use_skip_indexes_on_data_read) não são mais desativadas quando a configuração compatibility aponta para uma versão anterior à 26.1. Antes, isso podia impedir o SharedDatabaseCatalog de criar tabelas com índices de texto. #102422 (Nikita Fomichev).
- Corrige leitura fora dos limites no
printf com % ao final. #102472 (Raúl Marín).
- Corrige uma exceção de chassert
ReadBuffer is canceled em builds de depuração no AsynchronousMetrics, causada porque o rewind não redefine a flag de cancelamento do buffer. #102524 (Yuri Fedoseev).
- Corrigido
hasToken / hasTokenOrNull para padrões compostos apenas por separadores (por exemplo, '()', '!!!') em colunas com índice de texto: anteriormente, o índice ignorava silenciosamente todos os grânulos em vez de gerar BAD_ARGUMENTS (para hasToken) ou retornar NULL (para hasTokenOrNull). #102544 (Jimmy Aguilar Mena).
- Corrige OOMs em requisições multi enormes no Keeper. Para tracing com OpenTelemetry, alocamos incondicionalmente >1 KiB para spans do OpenTelemetry em objetos
ZooKeeperRequest — ou seja, para requisições multi realmente enormes, tentamos alocar >10 GiB de memória adicional. Para corrigir isso, agora mantemos dados compartilhados em memória estática e usamos std::unique_ptr em vez de std::optional em ZooKeeperOpentelemetrySpans. #102586 (Miсhael Stetsyuk).
- Corrige o aumento indevido de CurrentMetric de
NamedCollection causado por CREATE NAMED COLLECTION IF NOT EXISTS em coleções existentes, além da falta de inicialização para coleções carregadas da configuração ou do armazenamento SQL na inicialização. Fecha #102507. #102598 (Pablo Marcos).
- Corrigida a exceção em
getStructureOfRemoteTable quando o shard local retorna colunas vazias devido a DDL concorrente. #102604 (Alexey Milovidov).
- Corrige a exceção
LOGICAL_ERROR quando várias consultas concorrentes CREATE TABLE IF NOT EXISTS apontam para a mesma tabela S3Queue em um banco de dados Shared. #102610 (Nikita Taranov).
- Corrige o crash de LOGICAL_ERROR “Unexpected number of rows in column subchunk” no leitor nativo Parquet V3 ao ler colunas Nullable com um filtro WHERE. #102628 (Groene AI).
- Corrige a descrição do evento de profile
AzureWriteMicroseconds, que dizia “read” em vez de “write”. #102639 (Miсhael Stetsyuk).
- Falha na política de linha que gera a exceção ‘Not found column in block’ em alguns casos especiais. #102648 (Yarik Briukhovetskyi).
- Corrigida uma exceção do servidor no ClusterDiscovery quando um cluster estático (definido na configuração) ficava temporariamente sem nós ativos. #102661 (Kseniia Sumarokova).
- Corrige a inferência incorreta do tipo de dado de data em caso de overflow após o ajuste do fuso horário. Fecha #102601. #102674 (Pavel Kruglov).
- Corrige um problema em que o
SYSTEM WAIT VIEW ficava travado indefinidamente quando a view materializada atualizável era removida enquanto a espera estava em andamento. #102681 (Nikolay Degterinsky).
- Corrigido o
CASE com expressão Dynamic, que retornava ELSE para todas as linhas. Fecha #102511. #102684 (Pavel Kruglov).
- Corrige a serialização do tipo Dynamic achatado usando tipos de dados codificados em binário. Fecha #101911. #102692 (Pavel Kruglov).
- Corrige format_schema_source=‘query’ ignorando silenciosamente resultados com múltiplas linhas. Fecha #101905. #102698 (Pavel Kruglov).
- Informa o código de saída real pelo cliente SSH, em vez de mapear todos os erros para
1. Fecha #101741. #102700 (Konstantin Bogdanov).
- Corrige a perda de cabeçalhos HTTP em manipuladores de consulta dinâmicos/predefinidos. Fecha #101846. #102706 (Konstantin Bogdanov).
- Aplicada a correção de amostragem de Poisson a heap profiles colapsados do jemalloc para corresponder à saída do jeprof. Anteriormente, o formato colapsado subestimava os tamanhos reais de alocação por não levar em conta a probabilidade de amostragem. #102759 (Antonio Andelic).
- Corrige o travamento na função
hasPhrase com um argumento NULL. #102802 (Nikita Taranov).
- Corrige falha no servidor (SIGSEGV) ao ler arquivos Avro com esquemas recursivos que contêm referências cíclicas a tipos simbólicos. Agora, esses esquemas são detectados e rejeitados com uma mensagem de erro clara, em vez de provocar uma falha. #102853 (Groene AI).
- Corrige falha do servidor (asserção
LOGICAL_ERROR) quando uma função em uma coluna Variant atinge o limite de memória ou outra exceção que não seja de conversão de tipo durante o casting do resultado em FunctionVariantAdaptor. A exceção agora é propagada corretamente, em vez de ser classificada incorretamente como um erro interno. #102855 (Groene AI).
- Corrige falha do servidor em builds de depuração/com sanitizers quando
std::length_error é lançada durante a inferência de esquema (por exemplo, por valores extremos de input_format_msgpack_number_of_columns ou dados de entrada malformados). #102859 (Groene AI).
- Fazer com que a representação de NULL na serialização de colunas replicadas e esparsas respeite as configurações (por exemplo, format_tsv_null_representation). #102888 (Hechem Selmi).
- Retroportado em #103499: corrige um problema em que requisições ao S3 falhavam com
ios_base::clear: unspecified iostream_category error em vez de serem repetidas, causado por BufferedStreamBuf::flushBuffer do Poco não tratar escritas curtas da camada de socket. #102894 (Sema Checherinda).
- Corrige as otimizações de
minmax_count_projection e do COUNT(*) trivial, que permaneciam desabilitadas permanentemente após uma exclusão leve, mesmo depois de todas as partes com uma máscara de exclusão leve terem sido mescladas. #102900 (Anton Popov).
- Corrigidos travamentos aleatórios no jemalloc devido ao LTO. #102913 (Azat Khuzhin).
- Otimize cadeias com OR em políticas de linha para
IN no novo analisador. #102915 (Azat Khuzhin).
- Corrige a corrupção de metadados do jemalloc causada pela liberação do cache de páginas com alinhamento incorreto, o que pode causar falhas. #102918 (Azat Khuzhin).
- INSERTs simples sem visões materializadas não solicitam mais slots do ConcurrencyControl e threads em excesso (
max_threads em vez de max_insert_threads), evitando o esgotamento de slots de CC e a explosão no número de threads em clusters com alta taxa de INSERTs. #102961 (Sema Checherinda).
- Reintroduzido o ArrowMemoryPool para permitir lançar MEMORY_LIMIT_EXCEEDED e evitar OOM do kernel. #102999 (Azat Khuzhin).
- Corrige o problema em que
cast_string_to_date_time_mode era ignorado em CAST para Nullable(DateTime). Fecha #101840. #103035 (Pavel Kruglov).
- Adicionado suporte a colunas
ALIAS na otimização de leitura direta do índice de texto. #103037 (Anton Popov).
- Backport em #103454: corrige o caso em que
SELECT DISTINCT retornava silenciosamente resultados incompletos quando uma projeção de agregação correspondia à consulta e algumas partes da tabela não tinham dados de projeção (por exemplo, a projeção foi adicionada a uma tabela que já continha dados, e MATERIALIZE PROJECTION não foi executado). Fecha #102951. #103052 (Nihal Z. Miaji).
- Corrige resultados incorretos retornados por
WHERE x AND toNullable(N) em tabelas MergeTree quando N é um inteiro com largura maior que UInt8 (por exemplo, 256, 65535, 2147483648 ou qualquer inteiro negativo). O filtro descartava incorretamente todas as linhas porque splitFilterNodeForAllowedInputs usava um zero NULL ao converter para booleano o restante Nullable de um AND reduzido, fazendo com que a comparação se tornasse NULL sob a lógica de três valores. #103077 (Groene AI).
- Corrigido o tipo incorreto de argumento informado nas mensagens de erro das funções de busca em strings (por exemplo,
locate, position) quando os argumentos são passados em ordem invertida (locate(needle, haystack) com function_locate_has_mysql_compatible_argument_order = 1). #103102 (Alex Kuleshov).
- Corrige o bloqueio indefinido de waitForPause quando disableFailPoint é chamado sem nenhuma thread pausada no failpoint. #103119 (Shaohua Wang).
- Limita as strings do pacote TCP Hello de pré-autenticação a 64 KB e adiciona a configuração de servidor
handshake_timeout_milliseconds para limitar o tempo total do handshake, evitando que clientes não autenticados consumam memória em excesso ou ocupem threads indefinidamente. #103284 (Sema Checherinda).
- Corrige estatísticas min_value > max_value no ColumnIndex do Parquet para colunas String. #103334 (Saurabh Kumar Ojha).
- Verificação de dados Dynamic achatados malformados no formato Native. #103392 (Pavel Kruglov).
- Preenchimento da coluna
_time a partir da função de tabela url. #103437 (Nikita Taranov).
- Corrige a detecção de SVE, que usava instruções SVE quando elas não estavam disponíveis. #103568 (Raúl Marín).
Melhorias em build, testes e empacotamento
- A dependência Libstemmer (Snowball) agora usa a nova versão v3.0.1. #99256 (Jimmy Aguilar Mena).
- Configurações aleatórias no clickhouse-test:
use_skip_indexes_for_top_k, use_top_k_dynamic_filtering, query_plan_max_limit_for_top_k_optimization. #91782 (Nikita Fomichev).
- Implemente um teste de estresse para funções, verificando a consistência de suas diversas propriedades. #93543 (Michael Kolupaev).
- Fornece uma configuração própria do CMake para
llvm-project, em vez de importar a configuração upstream. #97453 (Konstantin Bogdanov).
- Randomizar mais configurações
optimize_* na infraestrutura de testes para melhorar a cobertura das etapas de otimização de consultas. #97547 (Alexey Milovidov).
- Use a toolchain Rust nightly-2026-03-22. #98602 (Konstantin Bogdanov).
- Usa
wasmtime v42.0.1. #98603 (Konstantin Bogdanov).
- Usar
llvm-project 22.1.1. #98882 (Konstantin Bogdanov).
- Substitua
SANITIZE_COVERAGE (callbacks personalizados do sanitizer, granularidade no nível de símbolo) pela cobertura baseada no código-fonte do LLVM (WITH_COVERAGE, -fprofile-instr-generate -fcoverage-mapping) para o pipeline noturno de cobertura por teste. O servidor agora lê seu próprio mapeamento de cobertura a partir de seções ELF na inicialização e coleta tuplas (file, line_start, line_end) por teste por meio de um novo comando SYSTEM SET COVERAGE TEST 'name'. A seleção de testes em verificações de CI direcionadas usa consultas por intervalo de linhas em uma nova tabela checks_coverage_lines no CIDB e classifica os testes candidatos de acordo com quantas linhas alteradas no diff eles cobrem. #99513 (Nikita Fomichev).
- Corrige o erro de linkagem do llvm-libc em builds com -O0. #100023 (Zheguang Zhao).
- Corrigidas duas mensagens de erro na inicialização do contêiner caso a configuração não incluísse as definições
logger.log e logger.errorlog (por exemplo, quando todas as mensagens de log devem ser enviadas para STDOUT/STDERR). #100239 (Simon).
- Prefira
ld64.lld ao ld da Apple (cctools-port ld64) para builds do macOS. Isso deve reduzir significativamente os tempos de link no Darwin, já que o ld64 do cctools-port é muito lento com -ffunction-sections e -dead_strip. Usa ld como fallback se ld64.lld não estiver disponível. #100275 (Alexey Milovidov).
- Testes para garantir que os diretórios não contenham nenhum segredo (REST + Glue). #100307 (Konstantin Vedernikov).
- Reexecute os testes modificados recentemente com diferentes configurações aleatórias. #100385 (Alexey Milovidov).
- Rastreie as dependências de arquivos
#embed no CMake e habilite o modo de dependência do ccache para recompilações corretas. #100411 (Alexey Milovidov).
- Adiciona testes de validação para consultas TPC-H. #100580 (Raufs Dunamalijevs).
- Passa a usar
aws-sdk-cpp 1.11.771. #100582 (Konstantin Bogdanov).
- Permitir que XMLs de teste de desempenho façam referência a arquivos externos de consulta SQL e a configurações por meio do atributo file. #100747 (Raufs Dunamalijevs).
- Corrige a compilação com
-march=x86-64-v4 ao adicionar o include ausente de TargetSpecific.h em LowerUpperImpl.h. #100932 (Alexey Milovidov).
- Corrige a compilação no Gentoo adicionando
--no-default-config a cxxflags. #100973 (Isak Ellmer).
- Adicionado
utils/auto-bisect/ — um framework de bisseção baseado em shell que baixa binários de CI pré-compilados e executa um script de teste fornecido pelo usuário para encontrar o primeiro commit que introduziu uma regressão, sem exigir uma compilação local. #100989 (Nikita Fomichev).
- Desabilite o ThinLTO por padrão no CMake para que os builds locais de desenvolvedor não o ativem mais implicitamente. Os builds de release da CI não são afetados, pois passam explicitamente
-DENABLE_THINLTO=1. #101041 (Alexey Milovidov).
- Adicionar o benchmark TPC-DS SF1 aos testes de desempenho. #101209 (Raufs Dunamalijevs).
- Adicionados testes sem estado para exclusões leves no MergeTree, cobrindo: ciclo de vida da flag
has_lightweight_delete, correção de COUNT(*) com optimize_trivial_count_query, integridade das colunas MATERIALIZED/DEFAULT, recuperação da flag no ReplicatedMergeTree, read_in_order com linhas excluídas, múltiplos ciclos de exclusão/merge, ocultação da coluna _row_exists, variedade de predicados e aplicação do RBAC em ALTER DELETE. #101792 (Nikita Fomichev).
- As imagens Docker distroless agora são publicadas nas variantes ubuntu e alpine para releases com tag. #101941 (Rahul Nair).
- Os stack traces agora mostram paths relativos limpos e diretos (por exemplo,
src/Common/Exception.cpp) em vez de paths poluídos com o diretório de build (por exemplo, ./ci/tmp/fast_build/./src/Common/Exception.cpp). #102000 (Raúl Marín).
- Adiciona uma verificação de estilo no CI que rejeita arquivos maiores que 5 MB commitados no repositório, com uma lista de permissões para dados de teste legítimos já existentes. Remove o
zookeeper_log.parquet não utilizado de 14 MB. #102080 (Raúl Marín).
- Remova cerca de 400 diretivas
#include não utilizadas dos headers para reduzir o tempo de compilação. #102585 (Raúl Marín).
- Passa a usar
wasmtime v43.0.1. #102603 (Konstantin Bogdanov).
- Usa o
openssl 3.5.6. #102606 (Konstantin Bogdanov).
- Use
xz 5.8.3. #102607 (Konstantin Bogdanov).
- Atualiza a base da imagem Docker distroless do Debian 12 (glibc 2.36, OpenSSL 3.0) para o Debian 13 (glibc 2.41, OpenSSL 3.5), reduzindo a superfície de CVEs a zero vulnerabilidades exploráveis. #101678 (Rahul Nair).
- Fazer downgrade após um upgrade pode causar perda de dados. Propaga as versões de serialização dos tipos de dados para tipos de dados aninhados. Por exemplo, a versão de serialização de String
with_size_stream antes era aplicada apenas a colunas String de nível superior e a elementos de Tuple. Agora, ela é aplicada a qualquer tipo String dentro de qualquer tipo aninhado, como Array/Map/Variant/JSON/etc. Esse comportamento é controlado pela configuração do MergeTree propagate_types_serialization_versions_to_nested_types, que agora vem habilitada por padrão. Após essa mudança, partes de dados recém-criadas não podem ser lidas por versões mais antigas, mas partes antigas podem ser lidas na nova versão sem problemas. O upgrade é seguro, mas o downgrade não — se você precisar reverter após fazer upgrade para a 26.3, os dados gravados pela 26.3 em colunas com tipos aninhados ficarão ilegíveis! Veja #101429 para mais detalhes. #94859 (Pavel Kruglov).
- Removido o tipo de skip index
hypothesis. Era um recurso obscuro e experimental, com utilidade prática limitada. Criar tabelas com INDEX ... TYPE hypothesis agora produzirá um erro. #96874 (Alexey Milovidov).
- Removida a função experimental
detectProgrammingLanguage. #99567 (Alexey Milovidov).
- Corrige a precedência do operador
NOT para ficar de acordo com o padrão SQL: agora NOT tem precedência menor que IS NULL, BETWEEN, LIKE e os operadores aritméticos. Por exemplo, NOT (x) IS NULL agora é interpretado como NOT (x IS NULL) em vez de (NOT x) IS NULL. Isso pode alterar o resultado de consultas que dependiam do comportamento anterior (fora do padrão). #97680 (Alexey Milovidov).
- Corrige os metadados de projeções comuns para que projeções com chaves de ordenação de múltiplas colunas sejam reconhecidas corretamente. Com base em #90429. #91352 (Amos Bird).
- Corrigidos os arquivos de índices de salto que não respeitavam a configuração replace_long_file_name_to_hash, causando erros “File name too long” e comprometendo as leituras de índice de índices com nomes longos. Os nomes de arquivo dos índices de salto agora são transformados em hash quando excedem max_file_name_length, de forma semelhante aos arquivos de coluna. Isso é retrocompatível (novos servidores leem partes antigas), mas fazer downgrade (ou usar servidores antigos durante uma atualização contínua) pode fazer com que índices com nomes longos sejam ignorados. #97128 (Raúl Marín).
- Ative o async insert por padrão. O ClickHouse agora agrupará em lote todos os inserts pequenos por padrão. Essa configuração é definida em compatibility. Se você definir
compatibility=<version less than 26.2>, o valor padrão será o anterior, false. Você pode desativar/ativar async inserts em vários níveis: na configuração dos perfis de usuários, na sessão, na consulta ou na tabela MergeTree. #97590 (Sema Checherinda).
- Altera o valor padrão de
mysql_datatypes_support_level de vazio para decimal,datetime64,date2Date32, habilitando por padrão o mapeamento correto de DATE do MySQL para Date32, de DECIMAL/NUMERIC para Decimal e de DATETIME/TIMESTAMP com precisão para DateTime64. Anteriormente, as colunas DATE do MySQL eram mapeadas para Date, que não consegue representar datas anteriores a 1970-01-01, causando corrupção de dados. #97716 (Alexey Milovidov).
- Aceita array de nomes de partes em vez de regexp para
mergeTreeAnalyzeIndexes{,UUID}, já que regexp é lento (funcionalidade experimental). #98474 (Azat Khuzhin).
- Altere o valor padrão de
stderr_reaction de throw para log_last para UDFs executáveis. UDFs que gravam avisos em stderr não falham mais quando o código de saída é 0. As exceções de código de saída agora incluem o conteúdo de stderr. #99232 (Xu Jia).
- Adicionada serialização com buckets para colunas map no MergeTree (
map_serialization_version = 'with_buckets'). As chaves são divididas em buckets com base em hash, para que a leitura de uma única chave (m['key']) leia apenas um bucket em vez da coluna inteira, proporcionando aceleração de 2 a 49x nas lookups de chave única, dependendo do tamanho do map. O número de buckets e a estratégia de bucketização podem ser controlados pelas novas configurações do MergeTree: map_serialization_version, max_buckets_in_map, map_buckets_strategy, map_buckets_coefficient e map_buckets_min_avg_size. #99200 (Pavel Kruglov).
- Adiciona suporte a CTEs materializadas. Permite avaliar CTEs apenas uma vez durante a execução da consulta e armazenar seus resultados em tabelas temporárias. Fecha #53449. #94849 (Dmitry Novik).
- Permite determinadas funções padrão do SQL sem parênteses, por compatibilidade, como
NOW. Fecha #52102. #95949 (Aly Kafoury).
- Agora é possível usar a função de chave de ordenação natural como
naturalSortKey(s). #90322 (Nazarii Piontko).
- Agora você pode usar entrada nativa de JSON/Object para as funções JSONExtract. Fecha #88370. #96711 (Fisnik Kastrati).
- Se um parâmetro de consulta tiver tipo
Nullable e não for especificado, vamos presumir que seu valor é NULL. #93869 (Vikash Kumar).
- Suporte a um ZooKeeper auxiliar para o banco de dados
Replicated. #95590 (RinChanNOW).
- Adicionado suporte à função
has para o tipo JSON, para verificar a existência de um path, de forma semelhante ao Map. #96927 (DQ).
- Adicionada a função de tabela
mergeTreeTextIndex(database, table, index), que permite ler dados diretamente de um índice de texto. Essa função pode ser usada para introspecção ou para realizar agregações sobre os dados do índice de texto. #97003 (Anton Popov).
- Adicionada a configuração
table_readonly do MergeTree para marcar tabelas como somente leitura, impedindo inserções e modificações. #97652 (Alexey Milovidov).
- Adiciona a nova configuração
use_partition_pruning e o alias use_partition_key. Defina-a como false para desativar a poda de partições com base na chave de particionamento. #97888 (Nihal Z. Miaji).
- Implementa
ALTER TABLE ... EXECUTE expire_snapshots('<timestamp>') para tabelas do Iceberg. #97904 (murphy-4o). #99130
- Permite que cada entrada
type=http em <protocols> especifique uma chave <handlers> personalizada apontando para uma seção de configuração <http_handlers_*> separada, permitindo regras diferentes de roteamento HTTP por porta. #98414 (Amos Bird).
- Adicione a opção
pretty=1 ao EXPLAIN para uma saída em árvore com recuo e compact=1 para colapsar etapas Expression, tornando os planos de consulta mais legíveis. #98500 (Kirill Kopnev).
- Adiciona a configuração de servidor
restore_access_entities_with_current_grants. Quando habilitada, os usuários/roles restaurados de backups têm seus grants limitados ao que o usuário que está restaurando tem permissão para conceder (com a mesma semântica de GRANT CURRENT GRANTS), em vez de falhar com ACCESS_DENIED. #98795 (pufit).
- Adicionadas as funções
caseFoldUTF8 e removeDiacriticsUTF8 para case folding em Unicode e remoção de diacríticos. #98973 (George Larionov).
- Adiciona a função de string
normalizeUTF8NFKCCasefold para normalização Unicode NFKC_Casefold, que combina a normalização NFKC com o case folding. #99276 (George Larionov).
- Adiciona o tokenizer
asciiCJK para índices de texto completo e a função tokens. Ele divide o texto com base nas regras de fronteira de palavras do Unicode: palavras ASCII são formadas por caracteres conectores (sublinhado, dois-pontos, ponto e aspas simples), enquanto caracteres Unicode não ASCII se tornam tokens de um único caractere. #99357 (Amos Bird).
- Adicionadas as configurações
max_skip_unavailable_shards_num e max_skip_unavailable_shards_ratio para limitar quantos shards podem ser ignorados sem aviso quando skip_unavailable_shards está habilitado. Se o número ou a proporção de shards indisponíveis exceder o limite configurado, uma exceção é lançada em vez de retornar silenciosamente resultados incompletos. #99369 (Alexey Milovidov).
- Agora, os usuários podem usar a palavra-chave
SOME em expressões de subconsulta. Ela se comporta exatamente como ANY. #99842 (Artem Kytkin).
- Adicionada a configuração
output_format_trim_fixed_string para remover bytes nulos no final de valores FixedString em formatos de saída de texto. #97558 (NeedmeFordev).
- Suporte a expressões de join entre tabelas entre parênteses na cláusula
FROM, por exemplo, SELECT * FROM (t1 CROSS JOIN t2). #97650 (Alexey Milovidov).
- Implementada a função
toDaysInMonth: ela retorna o número de dias do mês da data especificada. #99227 (Vitaly Baranov).
Funcionalidade Experimental
- Adiciona suporte experimental a Funções Definidas pelo Usuário (UDFs) baseadas em WebAssembly, permitindo implementar lógica de função personalizada em WebAssembly e executá-la no ClickHouse. Agradecimentos especiais a Alexey Smirnov por contribuir com o suporte ao backend do Wasmtime. #88747 (Vladimir Cherkasov). Melhorias incrementais no suporte a UDFs WASM. #99373 (Vasily Chekalkin).
- Adiciona suporte a dialetos SQL externos usando a biblioteca
polyglot. #99496 (Alexey Milovidov).
- Adiciona o codec de compressão de ponto flutuante
ALP (sem fallback ALP_rd para valores double não compressíveis). #91362 (Nazarii Piontko).
- Adiciona suporte experimental a lazy type hints para colunas
JSON. Quando habilitado por meio de allow_experimental_json_lazy_type_hints, ALTER TABLE ... MODIFY COLUMN json JSON(path TypeName) que apenas adiciona ou modifica type hints é concluído instantaneamente como uma operação somente de metadados, sem reescrever dados históricos. Os type hints são aplicados em tempo de consulta para partes antigas e materializados durante INSERTs e merges em segundo plano. #97412 (tanner-bruce).
- Habilita leituras paralelas na table engine YTsaurus. #97343 (MikhailBurdukov).
- Melhora o desempenho de lagos de dados. Nas versões anteriores, a leitura no armazenamento de objetos não ajustava o pipeline ao número de threads de processamento. Isso traz melhorias de várias ordens de magnitude (~40x) em máquinas com vários núcleos. #99548 (Alexey Milovidov).
- Agora, a relação entre
enable_parallel_replicas e automatic_parallel_replicas_mode é a seguinte. Uma consulta só pode usar réplicas paralelas se enable_parallel_replicas > 0. Além disso, se automatic_parallel_replicas_mode=1, a decisão de usar ou não réplicas paralelas é tomada durante o planejamento, com base nas estatísticas coletadas anteriormente. Se automatic_parallel_replicas_mode=0, réplicas paralelas serão usadas em todas as consultas compatíveis, independentemente de quaisquer estatísticas. Uma exceção importante é o insert-select distribuído com réplicas paralelas: nesse caso, as consultas sempre serão executadas como se automatic_parallel_replicas_mode=0. #97517 (Nikita Taranov).
- Permite a poda de partições quando o predicado contém qualquer operador de comparação (
=, <, >, !=) e a chave de partição está envolvida em uma cadeia de funções determinísticas (por exemplo, PARTITION BY x e predicados como cityHash64(x) % 5 > 2, toYYYYMM(x) < 2026, toYYYYMM(x) = 2026 ou toYYYYMM(x) != 2026 usarão a chave de partição para poda). Fecha #28800. #98432 (Nihal Z. Miaji).
- Permite a otimização de leitura em ordem e a poda da chave primária quando o tipo de destino de
CAST é Nullable e a conversão é monotônica; por exemplo, com PRIMARY KEY x, o ClickHouse pode usar a otimização de leitura em ordem para ORDER BY x::Nullable(UInt64) e aplicar a poda da chave primária a predicados como WHERE x::Nullable(UInt64) > 500000. #98482 (Nihal Z. Miaji).
- Permite poda de índices e pushdown de filtros quando uma coluna de inteiros é comparada com um literal de ponto flutuante; por exemplo, predicados como
WHERE x < 10.5 agora podem usar a chave primária para poda, e filtros como prime < 1e9 ou number < 1e5 agora sofrem pushdown nas funções de tabela primes() e numbers(), em vez de causar execução sem limites. Fecha #85167. #98516 (Nihal Z. Miaji).
- Foi adicionado um novo cache SLRU para metadados do Parquet, melhorando o desempenho de leitura ao eliminar a necessidade de baixar os arquivos novamente apenas para ler os metadados. #98140 (Grant Holly).
- Suporte à inversão dos lados de junções ANTI, SEMI e FULL com base nas estatísticas do otimizador. #97498 (Hechem Selmi).
- Otimizar o descarte de grânulos para
pointInPolygon em polígonos grandes e corrigir a análise de índice de pointInPolygon, que gerava exceção durante a poda da chave primária. #91633 (Nihal Z. Miaji).
- Melhora no desempenho da função
levenshteinDistance. #94543 (Joanna Hulboj).
- Otimize as conversões em lote do tipo decimal, evitando chamadas de função por elemento. #95923 (Konstantin Bogdanov).
- As tabelas Iceberg agora oferecem suporte à pré-busca assíncrona de metadados por meio da configuração de tabela
iceberg_metadata_async_prefetch_period_ms, que preenche periodicamente o cache de metadados de forma antecipada. Além disso, a configuração de consulta iceberg_metadata_staleness_ms permite que consultas SELECT usem metadados em cache se eles estiverem mais atualizados do que o nível de obsolescência especificado, eliminando chamadas ao catálogo Iceberg durante o processamento da solicitação. #96191 (Arsen Muk).
- O modo ordenado do
S3Queue usa S3 ListObjectsV2 StartAfter para evitar relistar todo o histórico do prefixo, reduzindo as chamadas ao ListObjects. #96370 (Venkata Vineel ).
- Menor consumo de memória na desduplicação de inserts. Em geral, o bloco original é necessário para a desduplicação, mas, no caso de sync insert, pudemos omiti-lo e economizar memória de vez. #96661 (Sema Checherinda).
- Use um valor específico da arquitetura para o tamanho da linha de cache, em vez de um valor fixo de 64. #97357 (Nikita Taranov).
- Leitura ligeiramente otimizada do dicionário do índice de texto, melhorando o desempenho geral da análise de índice de texto. #97519 (Anton Popov).
- Acelera a descompressão de blocos de 16 bytes com
LZ4 em ARM. #97774 (Raúl Marín).
- Refatorada a tokenização para uma nova interface de alto desempenho, substituindo a antiga API em estilo de iterador para dar suporte a SIMD e tokenizadores com estado. Parte de #90268. #97871 (Amos Bird).
- Desempenho aprimorado da análise de índice de texto para consultas com condições combinadas envolvendo colunas indexadas e não indexadas. Antes, a otimização de saída antecipada durante a análise de índice era desativada incorretamente nesses casos. #98096 (Anton Popov).
- Melhora o desempenho de consultas com expressões constantes que geram arrays ou maps muito longos. #98287 (Alexey Milovidov).
- Corrigida a análise da condição de chave para chaves primárias
DateTime64 comparadas com constantes inteiras, o que anteriormente impedia a poda de grânulos. #98410 (Amos Bird).
- A configuração
optimize_syntax_fuse_functions vem habilitada por padrão. #98424 (Alexey Milovidov).
- Otimize a função de agregação
avgWeighted usando acumuladores locais em vez de armazenar e encaminhar cada linha por meio do estado de agregação, melhorando o desempenho em até 27% para entradas Nullable. #98793 (Antonio Andelic).
- Melhora o desempenho e reduz o uso de memória de funções de janela paralelas em determinados cenários e de cargas de trabalho com
arrayFold em arrays grandes. Isso também pode reduzir a pressão de falhas de página e melhorar a estabilidade sob limites rígidos de memória para as consultas afetadas. #98892 (filimonov).
- Melhora o desempenho das mesclagens ordenadas. #99013 (Artem Zuikov).
- Otimize
INTERSECT ALL e EXCEPT ALL. #99097 (Raufs Dunamalijevs).
- Suporte à otimização
read_in_order_use_virtual_row para leituras em ordem inversa. #99198 (Vladimir Cherkasov).
- Reduza a contenção de cache em JOINs
RIGHT e FULL verificando se JoinUsedFlags está definido antes de gravar. #99274 (Hechem Selmi).
- Otimize
PrefetchingHelper::calcPrefetchLookAhead substituindo os cálculos em ponto flutuante por aritmética inteiramente inteira, melhorando o layout do cache de instruções e reduzindo a sobrecarga de ciclos durante os loops de agregação. #99327 (Riyane El Qoqui).
- Reduza o consumo de memória do Keeper substituindo
absl::flat_hash_set por CompactChildrenSet para armazenar os filhos dos nós. O novo contêiner armazena de 0 a 1 filho inline, sem alocação no heap, o que cobre a maioria dos nós do Keeper. Isso reduz o tamanho de KeeperMemNode de 144 para 128 bytes. #99860 (Antonio Andelic).
- As projeções de agregação agora são suportadas corretamente em views. Corrige #32753. #88798 (Amos Bird).
- Suporte à otimização da conversão de join OUTER para INNER com
join_use_nulls. Fecha #90978. #95968 (Vladimir Cherkasov).
- Melhora a leitura de subcolunas com o cálculo correto dos tamanhos antes da leitura. Isso reduz o uso de memória e acelera a leitura das subcolunas. #96251 (Pavel Kruglov).
- Faz com que os caches de marks, de dados não compactados e de páginas usem uma arena separada do jemalloc para evitar a fragmentação de memória quando alocações de curta duração, isto é, para consultas e requisições, se misturam com alocações de maior duração dos caches. #96812 (Seva Potapov). #98812. #99021
- Tabelas com regras
DELETE TTL agora podem usar o algoritmo de mesclagem vertical. #97332 (murphy-4o).
- Aplica data skipping indexes durante a análise distribuída de índices. #97767 (Azat Khuzhin).
- As marcas dos índices secundários agora são pré-carregadas quando a configuração
prewarm_mark_cache está habilitada (carregadas no cache de marcas do índice durante os fetches de data parts e na inicialização da tabela). #97772 (Anton Popov).
- Redução de bloqueios no controle de acesso. #97894 (Nikita Taranov).
- Quando apply_row_policy_after_final ou apply_prewhere_after_final estiver habilitado, condições compostas com AND em políticas de linha e PREWHERE agora são decompostas para extrair átomos da chave de ordenação para a análise do índice da chave primária. Antes, se um filtro adiado contivesse uma mistura de predicados da chave de ordenação e de predicados que não pertenciam à chave de ordenação (por exemplo, x > 1 AND y != ‘foo’), a expressão inteira era excluída da análise de índice. Agora, átomos da chave de ordenação (como x > 1) são extraídos e usados para a poda de grânulos, mesmo em expressões AND aninhadas. #98513 (Yarik Briukhovetskyi).
- Reduz a contenção de bloqueios no MergeTreeBackgroundExecutor, fazendo com que os recursos da tarefa sejam liberados sem adquirir o bloqueio. Fecha #93620. #98604 (Dmitry Novik).
- Corrige o uso excessivo de memória (~514 MiB) durante a autodetecção de formato ao ler dados não Arrow (por exemplo, JSON de
url ou file sem formato explícito), causado pelo leitor ArrowStream interpretar incorretamente os primeiros bytes como um comprimento de metadados enorme. #98893 (Konstantin Bogdanov).
- Permite analisar arquivos GeoParquet que contêm diferentes tipos Geo na mesma coluna. #97851 (Mark Needham).
- Adiciona a função SQL
tokensForLikePattern, que tokeniza padrões LIKE respeitando a semântica dos curingas: % e _ são tratados como curingas, curingas com escape (\%, \_) são tratados como literais, e tokens adjacentes a curingas sem escape são descartados. #97872 (Amos Bird).
- Adiciona um placeholder
{_schema_hash} para o mecanismo de tabela S3, que insere um hash das definições das colunas da tabela no caminho no S3. #98265 (Miсhael Stetsyuk).
SymbolIndex, addressToSymbol, system.symbols e buildId agora funcionam no macOS ao analisar as tabelas de símbolos do Mach-O. #99014 (Alexey Milovidov).
- A tabela
system.stack_trace agora funciona no macOS, permitindo a introspecção das pilhas de chamadas de todas as threads do servidor. #98982 (Alexey Milovidov).
- Adiciona a opção de configuração LDAP por servidor
<follow_referrals> (padrão false) para controlar se o cliente LDAP segue encaminhamentos. Desabilitar o seguimento de encaminhamentos evita timeouts e travamentos ao pesquisar a partir de um base DN na raiz do domínio do Active Directory. As mensagens de log relacionadas a encaminhamentos foram movidas de warn para trace. #96765 (paf91).
- Agora rastreamos todos os índices de data skipping usados durante a execução da consulta na tabela
query_log, em uma nova coluna chamada skip_indices. Corrige #78676. Autor original @pheepa. #87862 (Grant Holly).
- As dicas de ACCESS_DENIED não revelam mais os nomes das colunas, a menos que o usuário possa exibir todas as colunas obrigatórias; os nomes do banco de dados e da tabela continuam visíveis na dica. #91067 (filimonov).
- Adiciona uma thread dedicada de limpeza para o MergeTree para evitar atrasos na limpeza em cenários de alta carga de merge. Isso resolve #86181. #91574 (Amos Bird).
- Recarrega a configuração do cluster se os IPs do
hostname do servidor local tiverem mudado, em vez dos IPs de qualquer host. Corrige #81215, #70156 e #65268. #93726 (Zhigao Hong).
- Permite que
optimize_aggregators_of_group_by_keys otimize corretamente as funções de agregação em consultas com GROUPING SETS. #93935 (Xiaozhe Yu).
- Keeper-bench: relatar erros nas métricas e gerar arquivo JSON de métricas para o modo —input-request-log. #95748 (Mohammad Lareb Zafar).
- Adiciona a nova cláusula ROLE ao CREATE USER. #97074 (Vitaly Baranov).
- Agora é possível definir as configurações de internal_replication para um cluster criado pelo banco de dados Replicated. #97228 (Pervakov Grigorii).
- A nova configuração
allow_nullable_tuple_in_extracted_subcolumns controla se as subcolunas Tuple(...) extraídas de Tuple, Variant, Dynamic e JSON são retornadas como Nullable(Tuple(...)) (NULL para linhas ausentes) ou como Tuple(...) (valores padrão de Tuple para linhas ausentes). Desativada por padrão, essa configuração só pode ser alterada reiniciando o servidor. #97299 (Nihal Z. Miaji).
- Adiciona informações sobre filtros diferidos como um item separado na saída da consulta EXPLAIN (ao usar Row Policies/PREWHERE com FINAL). Relacionado: #91065. #97374 (Yarik Briukhovetskyi).
- Habilitado
type_json_allow_duplicated_key_with_literal_and_nested_object por padrão. Isso permite evitar erros de chaves duplicadas durante o parsing de JSONs como {"a" : 42, "a" : {"b" : 42}}, que podem ser formatados pelo ClickHouse a partir dos dados JSON originais {"a" : 42, "a.b" : 42}. #97423 (Pavel Kruglov).
- Melhoria no Keeper:
find_super_nodes é um comando muito útil para depurar aumentos inesperados na contagem de nós no Keeper. Infelizmente, se houver vários super nós, é quase impossível encontrar mais de um, porque o comando fica travado indefinidamente ao percorrer os filhos do primeiro super nó encontrado. Este PR impede a travessia dos filhos de super nós. #97819 (pufit).
- Suporte inicial para autocompletar no
clickhouse-keeper-client. #97828 (Konstantin Bogdanov).
- Grava os buffers assíncronos de logging em caso de falha. #97836 (Azat Khuzhin).
- Habilite o recurso de impersonate por padrão (consulte EXECUTE AS target_user). #97870 (Vitaly Baranov).
- Melhora o cancelamento de consultas com o engine de tabela SQLite por meio de KILL QUERY e cancel query (Ctrl+C) no clickhouse-client. #97944 (Roman Vasin).
- Adicionada a configuração do servidor
jemalloc_profiler_sampling_rate para controlar o lg_prof_sample do jemalloc e expô-la como a métrica assíncrona jemalloc.prof.lg_sample. #97945 (Antonio Andelic).
- Suporte a pesos na implementação de fila concorrente com limite. #97962 (Daniil Ivanik).
- Adiciona
sslmode às chaves permitidas para fontes de dicionário do PostgreSQL. Antes, sslmode não estava na lista de permissões dictionary_allowed_keys em PostgreSQLDictionarySource.cpp, o que tornava impossível configurar o modo SSL para conexões de dicionário do PostgreSQL. Isso impedia que os dicionários se conectassem a servidores PostgreSQL que exigem SSL (por exemplo, o AWS RDS, que impõe SSL por padrão), pois a conexão falhava na negociação de TLS e o servidor rejeitava o fallback não criptografado. #98014 (mcalfin).
- Exibir um erro claro de “arquivo não encontrado” ao informar um caminho de arquivo inexistente para
clickhouse ou clickhouse-local, em vez de uma mensagem genérica confusa. #98048 (Raúl Marín).
- Agora é possível criar índices de texto em colunas
Nullable([Fixed]String) e Array(Nullable([Fixed]String)). #98118 (Jimmy Aguilar Mena).
- Evite remover coleções nomeadas que são dependências de fontes de dicionários. #98127 (Pablo Marcos).
- Ativado o algoritmo de join
grace_hash para consultas com totais. #98144 (János Benjamin Antal).
- Cancela merges em segundo plano antecipadamente no DROP DATABASE para ordinary shared merge tree. #98161 (Shaohua Wang).
- Melhoria no cancelamento de consultas com MongoDB e MySQL usando KILL QUERY e cancel query (Ctrl+C) no clickhouse-client. #98187 (Roman Vasin).
- Remova o NetlinkMetricsProvider e use exclusivamente o procfs para coletar métricas de taskstats por thread. A coleta baseada em Netlink é problemática em ambientes conteinerizados e apresenta maior latência de cauda sob contenção. #98229 (Amos Bird).
- Refatoração do tratamento de arquivos de manifesto do Iceberg para corrigir problemas no cache de arquivos de manifesto. #98231 (Daniil Ivanik).
- Agora, também consideramos os casos em que a chave de ordenação da tabela pode ser uma expressão como
toDate(time), e podemos decidir não adiar expressões como essa quando elas fazem parte de filtros. #98237 (Yarik Briukhovetskyi).
- Adicionada uma nova métrica
MaxAllocatedEphemeralLockSequentialNumber para o maior número sequencial alocado para znodes de bloqueio efêmeros no ZooKeeper. #98243 (Miсhael Stetsyuk).
- Atualiza o ClickStack para a versão 2.20.0. #98252 (Aaron Knudtson).
- Foi adicionado um novo evento de perfil
KeeperRequestTotalWithSubrequests que contabiliza individualmente cada sub-requisição dentro de uma requisição múltipla, proporcionando melhor visibilidade da carga de trabalho real do Keeper. O evento existente KeeperRequestTotal continua contabilizando cada requisição múltipla como uma única requisição. #98348 (Antonio Andelic).
SYSTEM RELOAD DICTIONARIES agora recarrega os dicionários em ordem topológica, para que os dicionários que usam outros dicionários como origem vejam dados atualizados após a recarga. #98356 (Alexey Milovidov).
- Reinicie o cache de estatísticas após alterar a configuração do MergeTree. #98520 (Han Fei).
- Somente as réplicas “ativas” (com as quais é possível se conectar) participam da análise distribuída de índices. #98521 (Azat Khuzhin).
- Adiciona uma configuração
access_control_improvements.disallow_config_defined_profiles_for_sql_defined_users (desabilitada/permitida por padrão) que proíbe o uso de perfis de configurações definidos no arquivo de configuração (exceto o perfil default) para usuários definidos por SQL. #98662 (Alexander Tokmakov).
- Limite o número de nós usados pela heurística automática de parallel replicas ao número real de nós no cluster (em vez de considerar apenas a configuração
max_parallel_replicas). #98668 (Nikita Taranov).
- Implementar requisições com hedge e leitura assíncrona para análise distribuída de índices. #98724 (Azat Khuzhin).
- A desserialização de estados binários de
AggregateFunction agora exige o consumo de toda a entrada. Se houver bytes redundantes extras no final, o ClickHouse lança uma exceção em vez de aceitar dados de estado malformados. #98786 (Nihal Z. Miaji).
- TRUNCATE DATABASE passa a responder ao cancelamento de consulta. #98828 (Shaohua Wang).
- Aprimora o
keeper-bench com pipelining de requisições, período de aquecimento, estatísticas por operação, seeds reproduzíveis e melhor tratamento de erros. #98906 (Antonio Andelic).
- Suporte à cláusula SAMPLE na análise distribuída de índices. #98931 (Azat Khuzhin).
- Mostrar o título do gráfico no dashboard mesmo quando a consulta retornar um resultado vazio ou gerar um erro. #98975 (Yash ).
- As mensagens de erro do Analyzer não listam mais todas as colunas de uma tabela (o que podia gerar exceções de mais de 150 KB). As listas de colunas agora são limitadas a 10 itens. #99002 (Yash ).
- Retorna corretamente as estatísticas de coluna de subconsultas com junções, para que a consulta pai possa usá-las na reordenação de junções. #99096 (Alexander Gololobov).
- Marque a sessão do ZooKeeper como expirada assim que a finalização começar, em vez de esperar que a thread de envio seja encerrada. Isso permite que outras threads estabeleçam uma nova sessão sem demora. #99102 (Raúl Marín).
- Passa a usar mais funções matemáticas da LLVM-libc:
exp, exp2, expm1, fabs, fabsl, floor, fmodl, log, log2, logf, pow, scalbn, scalbnl, copysignl, nan, nanf, nanl e as constantes compartilhadas explogxf. #99118 (Konstantin Bogdanov).
- Reduz o uso de memória e corrige uma possível saída duplicada no formato collapsed de
system.jemalloc_profile_text. #99121 (Antonio Andelic).
- Adiciona a coluna
is_subrequest a system.aggregated_zookeeper_log para separar requisições autônomas de sub-requisições dentro de requisições Multi/MultiRead. Antes, as sub-requisições eram agregadas nos mesmos buckets que as requisições autônomas e, como cada suboperação era registrada com a duração total da multirrequisão, a latência média se tornava enganosa. As sub-requisições agora têm latência zero. #99169 (Miсhael Stetsyuk).
- Permite usar o comando
ALTER TABLE MODIFY COLUMN x TTL ... sem especificar o tipo da coluna. #99208 (Nikolay Degterinsky).
- Ignora solicitações obsoletas ao Keeper para sessões que já se desconectaram, evitando idas e voltas desnecessárias ao Raft. O número de sessões encerradas acompanhadas é limitado pela configuração de coordenação
max_finished_sessions_cache_size. #99246 (Antonio Andelic).
- Suporte a índice de texto baseado em
mapValues(map) com o operador IN. #99286 (Anton Popov).
- Suporte a autocompletar semelhante ao de shell no clickhouse keeper-client (tratando o autocompletar de argumentos entre aspas, ou seja,
'foo ba', tratando argumentos com escape, ou seja, foo\ ba, fazendo com que ls imprima nós entre aspas, caso contenham espaços em branco). #99312 (Azat Khuzhin).
- Evita que o comando
mntr do Keeper fique bloqueado devido à contenção de locks. #99472 (Antonio Andelic).
- Reduz a contenção de bloqueios no dispatcher do Keeper ao invocar callbacks e despachar solicitações de leitura fora do escopo do mutex, além de adicionar guardas de bloqueio com perfilamento para observabilidade. #99751 (Antonio Andelic).
- Tolera a ausência de padding no final do último bloco de arquivos Parquet. #99857 (Seva Potapov).
Correção de bug (comportamento incorreto perceptível ao usuário em uma versão estável oficial)
- Corrige como o destino de uma tabela alias é salvo como dependência de DDL quando não está totalmente qualificado: agora ele é salvo com o banco de dados da tabela alias, em vez do banco de dados da sessão. #95175 (Enric Calabuig).
- Corrige resultado incorreto ou exceção na leitura de subcolunas de colunas ALIAS. #95408 (Pavel Kruglov).
- Corrige a ausência de coluna ao usar um alias de identificador não padrão em JOIN com o analisador antigo. Corrige #25594, #47288 e #53263. #95679 (Zhigao Hong).
- Corrige um travamento nas funções do dialeto Kusto
bin(), bin_at(), extract() e indexof() ao receber argumentos vazios. #95736 (NeedmeFordev).
- Proíbe montar local_object_storage (usado por data lakes sobre o sistema de arquivos local e talvez pelo LocalDisk) em qualquer local diferente de user_files_path no clickhouse-client. #96201 (Daniil Ivanik).
- No
DeltaLake table engine, corrige uma condição de corrida lógica na mudança da versão do snapshot e remove recarregamentos pesados redundantes do snapshot. #96226 (Kseniia Sumarokova).
- Corrigido erro lógico ao anexar uma parte no MergeTree quando havia várias renomeações encadeadas entre a desanexação e a anexação. #96351 (Alexey Milovidov).
- Corrige um bug em que configurações explícitas enviadas junto com
compatibility na mesma solicitação podiam ser ignoradas silenciosamente quando o valor delas correspondia ao padrão do servidor. #97078 (Raufs Dunamalijevs).
- Corrigido o problema em que o cliente relatava
NETWORK_ERROR em vez do erro de parsing real (com o número correto da linha) quando um INSERT com parsing paralelo encontrava dados inválidos. #97339 (Alexey Milovidov).
- Corrige o problema que impedia a
sumCount aggregate function de ler estados serializados mais antigos após a introdução de Nullable(Tuple). Fecha #97370. #97502 (Nihal Z. Miaji).
- Corrigida a exceção na comparação de tuplas envolvendo elementos do tipo
Nothing (por exemplo, ao comparar elementos de tupla NULL) quando essa comparação é usada com GROUPING SETS e ORDER BY. #97509 (Alexey Milovidov).
- Corrige o cálculo não determinístico de
uncompressed_hash em partes Compact do MergeTree quando vários codecs de compressão são usados, o que poderia levar a uma desduplicação incorreta. #97522 (Alexey Milovidov).
- Corrige erro lógico de
stream ausente durante INSERT SELECT com JSON e buckets em dados compartilhados. Fecha #97331. #97523 (Pavel Kruglov).
- Corrige exceções
MEMORY_LIMIT_EXCEEDED que estavam sendo reportadas incorretamente como CORRUPTED_DATA durante operações de merge de SummingMergeTree e CoalescingMergeTree. #97537 (János Benjamin Antal).
- Corrigida a exceção “Context has expired” em subconsultas correlacionadas que contêm funções de tabela como
url(). #97544 (Alexey Milovidov).
- Corrige exceções e comportamento incorreto em
optimize_syntax_fuse_functions com projeções agregadas, tipos Date e preservação dos nomes das colunas. #97545 (Alexey Milovidov).
- Remove a reescrita incorreta de consulta de
replaceRegexpOne para extract, que produzia resultados incorretos quando a regexp não correspondia; também corrige a exceção quando replaceRegexpOne é usado com GROUP BY ... WITH CUBE e group_by_use_nulls=1. #97546 (Alexey Milovidov).
- Corrige o
DROP DATABASE com database_atomic_wait_for_drop_and_detach_synchronously, que ficava bloqueado indefinidamente quando a consulta era cancelada. #97586 (Alexey Milovidov).
- Corrige
KILL QUERY, que não conseguia encerrar consultas travadas na geração de WITH FILL, no carregamento de Dicionário via dictGet ou em ALTER DELETE com mutations_sync=1 no ReplicatedMergeTree. #97589 (Alexey Milovidov).
- A função de tabela
loop estava chamando inner_storage->read() diretamente, contornando a camada do interpretador, onde políticas de linha, permissões em nível de coluna e outras verificações de segurança são aplicadas. Isso permitia que um usuário restrito por políticas de linha lesse todas as linhas via loop(table), mesmo quando um SELECT direto retornava zero linhas. #97682 (pufit).
- Corrige a poda incorreta de partições em casos que usam DateTime64 pré-epoch com a função
toDate(). #97746 (Yarik Briukhovetskyi).
- Após este patch,
hasPartitionId retornará false se houver outra partição com um ID de partição maior no conjunto de partes de dados. #97748 (Mikhail Artemenko).
- Corrige possíveis travamentos durante a leitura de grânulos vazios em dados compartilhados avançados no JSON. Fecha #97563. #97778 (Pavel Kruglov).
- Corrige
LOGICAL_ERROR Cannot schedule a file ao fazer INSERT em Distributed devido a uma condição de corrida entre DROP e INSERT. #97822 (Azat Khuzhin).
- Corrigido crash/assert do servidor ClickHouse em chamada para
mapContainsKey/mapContainsKeyLike com índice de salto tokenbf_v1. #97826 (Shankar Iyer).
- Corrige exceções LOGICAL_ERROR causadas por
LowCardinality dentro de tipos compostos (Variant, Dynamic, Tuple) em concatWithSeparator, format, subconsultas IN, GLOBAL IN e junções com filtros em tempo de execução. #97831 (Raúl Marín).
- Corrigida a exceção
LOGICAL_ERROR Chunk info was not set for chunk in MergingAggregatedTransform ao usar ARRAY JOIN com a função de tabela merge() em várias tabelas Distributed combinadas com GROUP BY. #97838 (Raúl Marín).
- Correção de travamento do servidor (
std::terminate) causado por uma exceção não capturada no destrutor do pool de conexões HTTP quando o limite rígido do grupo de conexões é atingido em cenários de alta concorrência. A exceção HTTP_CONNECTION_LIMIT_REACHED podia escapar de ~PooledConnection ao devolver uma conexão ao pool para reutilização, levando a SIGABRT. #97850 (Antonio Andelic).
- Corrige resultado incorreto quando o algoritmo
grace_hash é usado com junções não equi e o bloco da esquerda não pode ser processado completamente devido às limitações de tamanho no resultado da junção. #97866 (János Benjamin Antal).
- Corrigida a ineficiência de desempenho na varredura de metadados do DeltaLake introduzida em #96686. #97880 (Kseniia Sumarokova).
- Corrige condição de corrida no cliente ZooKeeper entre sendThread e receiveThread. #97887 (Pablo Marcos).
- Corrige um bug em que não era possível usar CTE com operações insert-select distribuídas. Continuação de https://github.com/ClickHouse/ClickHouse/pull/87789. Fecha #95837. #97889 (Yarik Briukhovetskyi).
- Corrige uma exceção em
CachedOnDiskReadBufferFromFile::readBigAt. Fecha #97325. #97890 (Kseniia Sumarokova).
- Corrige a exceção
LOGICAL_ERROR na engine Alias com colunas materializadas, causada por incompatibilidade entre colunas. Fecha #97907. #97921 (Kai Zhu).
- Corrige perda de dados do Keeper após reinicialização ao usar o Azure Blob Storage com metadados
s3_plain para armazenamento de logs. #97987 (Antonio Andelic).
- Corrige a miscompilação por JIT da função
sign para tipos inteiros maiores que Int8 — valores fora do intervalo de -128 a 127 podiam produzir um sinal incorreto. #98012 (Alexey Milovidov).
- Corrigidos a exceção
DUPLICATE_COLUMN e valores NULL silenciosos ao ler tabelas Delta Lake que usam o modo de mapeamento de colunas “name” com campos de struct cujos nomes contêm pontos (por exemplo, STRUCT<`a.foo`: STRING, `b.foo`: STRING>). #98013 (Caio Ishizaka Costa).
- Corrige mutação após atualização leve e em índices secundários. #98044 (Raúl Marín).
- Corrige resultado incorreto de consultas FINAL ao misturar índices de salto da chave primária e de colunas que não fazem parte da chave primária. #98097 (Raúl Marín).
- Aplicar verificações de READ ON FILE a file() escalar e a DESCRIBE TABLE file(). #98115 (Nikolay Degterinsky).
- Corrige um travamento em que, ao consultar arquivos com um padrão glob (por exemplo,
file('dir/**', 'LineAsString')), era gerada uma exceção não tratada do sistema de arquivos (STD_EXCEPTION) se o diretório contivesse um link simbólico quebrado. Links simbólicos quebrados agora são ignorados silenciosamente, e a consulta retorna resultados de todos os arquivos válidos. #98143 (Mark Andreev).
- Corrige falha de segmentação na otimização do plano de consulta durante a conversão de
outer join em inner join com arrayJoin na expressão de filtro. #98147 (Alexey Milovidov).
- Corrigido o problema em que o formato
ProtobufList não funcionava com o engine Kafka porque o estado de leitura não era redefinido entre as mensagens. #98151 (Alexey Milovidov).
- Corrige um erro lógico com analyzer_compatibility_join_using_top_level_identifier e ARRAY JOIN, fechando #98164. #98179 (Vladimir Cherkasov).
- O componente
Watch agora é definido para respostas de watch em aggregated_zookeeper_log, em vez de ficar vazio. #98202 (Antonio Andelic).
- Se as colunas da chave de partição não estiverem incluídas na chave de ordenação, a poda de partições poderá ignorar incorretamente partições que contêm linhas que deveriam “prevalecer” durante a desduplicação FINAL. #98242 (Yarik Briukhovetskyi).
- Corrige o erro lógico “Bad cast from type DB::ColumnConst to DB::ColumnArray” em
kql_array_sort_asc/kql_array_sort_desc quando são chamados com argumentos de array constantes. #98251 (Alexey Milovidov).
- Corrige o acesso fora dos limites em
ColumnConst::getExtremes, que poderia causar um travamento com extremes = 1 habilitado. #98263 (Alexey Milovidov).
- Corrigido um possível deadlock quando duas operações
MOVE PARTITION concorrentes atuam sobre o mesmo par de tabelas em direções opostas. #98264 (Alexey Milovidov).
- O servidor HTTP agora retorna uma mensagem de erro no corpo da resposta para respostas 400 Bad Request causadas por cabeçalhos malformados, em vez de retornar um corpo vazio. #98268 (Alexey Milovidov).
- Corrige resultados incorretos na análise de índice distribuída (funcionalidade experimental) e no cache de condições de consulta. #98269 (Azat Khuzhin).
- Corrigida a exceção LOGICAL_ERROR “Resultado inválido da busca binária em
MergeTreeSetIndex”, provocada pela conversão toDate em colunas de chave com dados que cruzam o limite de 65535. #98276 (Alexey Milovidov).
- Corrige a exceção
LOGICAL_ERROR quando um RIGHT JOIN envolvido em um CROSS JOIN é trocado pela otimização query_plan_join_swap_table no código legado da etapa de join. #98279 (Alexey Milovidov).
- Valide dados corrompidos na desserialização de
DDSketch para evitar segfaults, exceções, loops infinitos e OOM ao ler estados corrompidos da função de agregação quantilesDD. #98284 (Alexey Milovidov).
- Corrige o LOGICAL_ERROR “Trying to execute PLACEHOLDER action” quando colunas correlacionadas de consultas externas são referenciadas dentro de funções lambda, como
arrayMap. #98285 (Alexey Milovidov).
- Corrige a exceção de erro lógico em
caseWithExpression quando a expressão CASE inclui materialize(NULL) ou outros argumentos Nullable(Nothing). #98290 (Alexey Milovidov).
- Corrige exceção de cast inválido ao filtrar a coluna virtual
_table na função de tabela merge. #98291 (Alexey Milovidov).
- Corrige uma falha esporádica de desduplicação em que reinserções eram desduplicadas incorretamente devido à ordem inconsistente de limpeza entre os diretórios
blocks/ e deduplication_hashes/ do ZooKeeper. #98293 (Alexey Milovidov).
- Corrige a exceção ao usar
ORDER BY ... WITH FILL junto com LIMIT BY. #98361 (Alexey Milovidov).
- Corrige a corrupção silenciosa de dados ao inserir uma coluna
Date de Parquet/Arrow em uma coluna Enum — agora a conversão incompatível de tipos é corretamente rejeitada, em vez de armazenar valores de enum inválidos. #98364 (Alexey Milovidov).
- Corrigida uma exceção ao ler um arquivo Arrow com uma coluna
Array em uma tabela com uma coluna Nested. #98365 (Alexey Milovidov).
- Corrige mutações
MATERIALIZE INDEX e MATERIALIZE PROJECTION que ficavam bloqueadas quando o índice ou a projeção era excluído antes de a mutação terminar. #98369 (Alexey Milovidov).
- Corrigida a exceção ao ler de
Nullable(Tuple(...)) quando o nome de um elemento de Tuple entra em conflito com a subcoluna null de Nullable. #98372 (Alexey Milovidov).
- Corrigida a exceção “Column … query tree node does not have valid source node” ao fazer join entre uma tabela
Merge (encapsulando uma tabela Distributed) e outra tabela. #98376 (Alexey Milovidov).
- Corrige a conversão incorreta de
Bool do Parquet para FixedString no leitor V3 native, que produzia bytes brutos em vez da representação em string. #98378 (Alexey Milovidov).
- Corrige
tryGetColumnDescription para filtrar as subcolunas pelo tipo da coluna pai, em linha com outros métodos de busca de colunas. #98391 (Alexey Milovidov).
- Aceita credenciais em base64 sem padding na autenticação HTTP Basic. Alguns clientes HTTP omitem o padding
= no final do cabeçalho Authorization: Basic, o que antes causava falhas de autenticação. #98392 (Amos Bird).
- Corrige resultados incorretos na poda de partições após a mesclagem de partes com colunas de chave de partição
Nullable, causados por limites incorretos no índice min-max. #98405 (Amos Bird).
- Corrige uma exceção rara no executor do pipeline, que podia se manifestar como
Received signal 6 (apenas em builds de depuração), durante uma condição de corrida entre a expansão do pipeline e o cancelamento da consulta. #98428 (Alexey Milovidov).
- Corrigida a exceção “Column identifier is already registered” ao usar
count_distinct_optimization com a cláusula QUALIFY. #98433 (Alexey Milovidov).
- Corrige a exceção “cannot be inside Nullable type” ao usar
IN/NOT IN com argumentos de coluna LowCardinality (por exemplo, a NOT IN (b), em que a é LowCardinality(String)). #98443 (Alexey Milovidov).
- Corrigida a exceção “Pipeline stuck” em junções
full_sorting_merge, causada por um deadlock no PingPongProcessor quando a otimização FilterBySetOnTheFly criava uma dependência circular com o MergeJoinTransform. #98454 (Alexey Milovidov).
- Corrige a exceção
LOGICAL_ERROR “Projection cannot increase the number of rows in a block” durante a mesclagem de partes com TTL que exclui todas as linhas e com uma projeção agregada com chave GROUP BY constante. #98458 (Alexey Milovidov).
- Corrigida a exceção de erro lógico ao usar
CROSS JOIN junto com INNER JOIN USING. #98459 (Alexey Milovidov).
- Corrige o desreferenciamento de ponteiro nulo em
dictGetOrDefault quando o argumento de chave é Nullable. #98460 (Alexey Milovidov).
- Corrige uma exceção em consultas
DISTINCT ao usar projeções agregadas quando materialize causa diferenças no tipo LowCardinality entre a consulta e a projeção. #98462 (Alexey Milovidov).
- Corrigida a exceção LOGICAL_ERROR ao usar
arrayJoin em uma expressão de filtro com OUTER JOIN e join_use_nulls habilitado. #98464 (Alexey Milovidov).
- Corrigida a exceção de erro lógico “A réplica decidiu ler no modo WithOrder, e não em ReverseOrder” ao usar réplicas paralelas com
optimize_aggregation_in_order. #98467 (Alexey Milovidov).
- Corrigido um problema em que o ClickHouse Keeper desconectava clientes Java do ZooKeeper após a solicitação
addWatch. O cliente Java espera um corpo ErrorResponse de 4 bytes na resposta de addWatch, mas o Keeper estava enviando um corpo vazio, causando EOFException e desconexão da sessão. Isso quebrava o CuratorCache do Apache Curator e qualquer aplicação Java que usasse watches persistentes. Corrige #98079. #98499 (Antonio Andelic).
- Corrige as métricas do Keeper
zk_followers e zk_synced_followers, que não diminuíam quando um follower ficava indisponível. Adiciona as novas métricas zk_learners e zk_synced_non_voting_followers ao comando de quatro letras mntr. Corrige #54173. #98504 (Antonio Andelic).
- Corrige uma exceção
LOGICAL_ERROR em renameAndCommitEmptyParts que podia ocorrer quando TRUNCATE TABLE era executado simultaneamente com OPTIMIZE TABLE com transações MergeTree. #98508 (Alexey Milovidov).
- Corrigida a porta segura de Raft do Keeper, que ignorava
cipherList e dhParamsFile da configuração openSSL, usando sempre os valores padrão em vez dos especificados pelo usuário. Fecha #51188. #98509 (Antonio Andelic).
- Corrigidas mensagens de log enganosas do Keeper, como “Receiving request for session X took 9963 ms”, em que o tempo informado na verdade era gasto ficando ocioso em
poll() entre heartbeats, e não na execução da operação em si. Corrige #79026. #98510 (Antonio Andelic).
- Corrige um resultado inesperado com read_in_order_use_virtual_row e funções monotônicas, fecha #97837. #98514 (Vladimir Cherkasov).
- Corrige
LOGICAL_ERROR: Not-ready Set is passed as the second argument for function 'in' ao usar PREWHERE com subconsulta IN em tabelas MergeTree. #98522 (Alexey Milovidov).
- Corrigidas conexões TCP do Keeper que impediam o desligamento adequado do servidor por não responderem ao sinal de encerramento. #98525 (Alexey Milovidov).
- Corrigida a exceção “A coluna de ordenação não foi encontrada nas saídas do ActionsDAG” quando
query_plan_convert_join_to_in está habilitado com query_plan_merge_expressions = 0. #98526 (Alexey Milovidov).
- Corrige falha na fonte de dicionário do MongoDB ao usar coleções nomeadas. Fecha #97840. #98528 (Pablo Marcos).
- Corrigido LOGICAL_ERROR quando Identifier fica vazio após a substituição de parâmetros. #98530 (Pervakov Grigorii).
- Corrigido o deadlock do pipeline ao usar
sort_overflow_mode = 'break' em conjunto com funções de janela. #98543 (Alexey Milovidov).
- Corrige o rollback de coluna no engine Buffer durante o tratamento de uma exceção ao acrescentar um novo bloco. A lógica anterior podia levar a um estado corrompido das colunas na memória. #98551 (Pavel Kruglov).
- Corrigida a exceção
Bad cast from type ColumnConst to ColumnDynamic na comparação null-safe (<=> / IS NOT DISTINCT FROM) com colunas Dynamic ou Variant constantes e NULL. Também foi corrigido o problema em que IS DISTINCT FROM com Dynamic/Variant vs NULL sempre retornava 0 incorretamente. #98553 (Alexey Milovidov).
- Corrigido o uso do índice de texto com outros skip indexes. Anteriormente, podiam ocorrer erros lógicos como “Trying to get non-existing mark” quando um filtro da consulta utilizava simultaneamente um índice de texto e outros skip indexes regulares. #98555 (Anton Popov).
- Corrige o erro lógico “TABLE_FUNCTION is not allowed in expression context” quando uma função de tabela com alias aparece várias vezes no mesmo escopo de consulta (por exemplo, nas cláusulas
PREWHERE e QUALIFY). #98557 (Alexey Milovidov).
- Corrige a análise distribuída de índice com expressões (não apenas colunas) na PK (levava a nenhuma filtragem de grânulos redundantes em réplicas remotas). #98561 (Azat Khuzhin).
- Impedir a exclusão de uma coluna quando suas subcolunas forem usadas em expressões default/alias de outras colunas e usar o analisador para expressões default em ALTER DROP COLUMN. #98569 (Nikita Mikhaylov).
- Correção de novas tentativas incorretas de solicitações ao S3 em erros que não permitem retry (incluindo
HTTP_CONNECTION_LIMIT_REACHED) no cliente HTTP. #98598 (Sema Checherinda).
- Corrige um overflow decimal na poda de partições com DateTime64. #98628 (Yarik Briukhovetskyi).
- Corrige dois bugs na compilação JIT de expressões: um erro de copia e cola na verificação de tipos de
nativeCast que tornava inacessíveis os caminhos de conversão de inteiro para inteiro e de float para float, e um nullptr incorreto de TargetMachine passado ao LLVM PassBuilder, impedindo o registro de passes de otimização específicos do destino. #98660 (Alexey Milovidov).
- Corrige uma falha no RBAC que permitia aos usuários executar
DESCRIBE em qualquer tabela por meio de remote(), remoteSecure(), cluster() ou clusterAllReplicas() apontadas para localhost, sem exigir o privilégio SHOW_COLUMNS. #98669 (pufit).
- Corrige a exceção
BAD_GET e resultados incorretos em consultas quando uma expressão não booleana (por exemplo, sin(col)) é usada tanto em WHERE quanto em SELECT com um JOIN, devido à otimização de push-down de filtro corromper nós DAG compartilhados. #98681 (Alexey Milovidov).
- Corrigido LOGICAL_ERROR “A réplica decidiu ler no modo Default em vez de WithOrder” ao usar
read_in_order_through_join com réplicas paralelas. #98685 (Alexey Milovidov).
- Corrigida a exceção “Bad cast from type
DB::TableFunctionNode to DB::QueryNode” ao usar a função de tabela input como argumento de remote. #98694 (Alexey Milovidov).
- Corrige a ressurreição de partes de dados desatualizadas causada pela remoção incorreta de partes de cobertura vazias. #98698 (Shaohua Wang).
- Corrigida a exceção em
LogicalExpressionOptimizerPass quando uma função booleana em uma comparação com equals retorna um tipo Variant. #98712 (Alexey Milovidov).
- Corrige o
parseDateTimeBestEffort, que interpretava incorretamente palavras iniciadas com prefixos de meses/dias da semana. Fecha #97965. #98742 (Pavel Kruglov).
- Corrige a exceção
UNKNOWN_IDENTIFIER ao executar consulta com a table function merge() ou o engine Merge em tabelas com colunas JSON que têm parâmetros diferentes (por exemplo, campos SKIP diferentes) e colunas ALIAS que referenciam subcaminhos JSON, com o novo analisador ativado. Fecha #97812. #98753 (Pavel Kruglov).
- Corrigida a otimização
optimize_skip_unused_shards no analisador quando o armazenamento Distributed é usado em uma View. #98754 (Nikolai Kochetov).
- Corrige o acesso por nome a subcolunas de tupla (por exemplo,
SELECT x.a para Tuple(a UUID, b Int32)) em tabelas externas passadas via --external no clickhouse-client. Fecha #96925. #98755 (Pavel Kruglov).
- Corrige a exceção em
reverseUTF8 com entrada UTF-8 inválida (truncada). #98770 (Alexey Milovidov).
- Correção da detecção da utilidade do índice de salto Set com OR e predicado false (ou seja, or(x, 0)). #98776 (Azat Khuzhin).
- Corrige uma exceção
LOGICAL_ERROR (incompatibilidade na estrutura do bloco em removeUnusedColumns) que podia ocorrer com FINAL + PREWHERE + expressão WHERE constante + agregações que não dependem de coluna, como count(). #98778 (Alexey Milovidov).
- Garantir que as entradas de
system.trace_log para os recarregamentos automáticos de Dictionaries do ClickHouse tenham IDs de consulta não vazios. #98784 (Miсhael Stetsyuk).
- Corrige uma falha em que poderíamos desreferenciar um ponteiro nulo em tabelas do sistema criadas entre o momento em que tiramos um snapshot das tabelas na chamada
IDatabaseTablesIterator::table() e a alteração dessas tabelas em outra thread durante a iteração subsequente. #98792 (Grant Holly).
- Corrigido o problema em que
SYSTEM START REPLICATED VIEW não ativava a tarefa de atualização. #98797 (Pablo Marcos).
- Corrige a exceção “Nomes de tabela inconsistentes” ao usar a função de tabela
view() que contém JOINs dentro de outro JOIN (apenas com o analyzer antigo). #98809 (Alexey Milovidov).
- Correção no ajuste de RLIMIT_SIGPENDING (via pending_signals). #98829 (Azat Khuzhin).
- Correção de exceção ao combinar
loop com funções de tabela de cluster. #98860 (Konstantin Bogdanov).
- LEFT ANTI JOIN com múltiplas colunas de chave de junção retornou resultados incorretos quando
enable_join_runtime_filters=1 (que é o padrão). #98871 (Alexander Gololobov).
- Corrige
WITH FILL STALENESS, que produzia linhas preenchidas a mais quando os dados eram lidos em vários fragmentos (por exemplo, com index_granularity pequeno). #98895 (Alexey Milovidov).
- Corrigido o LOGICAL_ERROR “RPNBuilderFunctionTreeNode has A arguments, attempted to get argument at index B”. #98900 (Azat Khuzhin).
- Corrige o desvio no rastreamento de memória causado por alocações com falha que não eram desfeitas, comportamento indefinido de
nallocx(0) e erro de uma unidade no rastreamento global de pico. Estende o rastreamento para cobrir os buffers circulares do io_uring. #98915 (Antonio Andelic).
- Proibir o attach a tabelas locais de lago de dados fora dos paths do usuário, e não apenas a criação delas. #98936 (Daniil Ivanik).
- Corrige uma condição de corrida que poderia causar uma exceção “ReadBuffer is canceled” em consultas que usam
urlCluster ou funções de tabela de cluster similares. #98955 (Alexey Milovidov).
- Corrigida a exceção
LOGICAL_ERROR em funções financeiras (financialNetPresentValue, financialInternalRateOfReturn etc.) quando são passados argumentos do tipo BFloat16. #98958 (Alexey Milovidov).
- Corrige a não aplicação de índices de salto (e de condições da chave primária) a colunas ALIAS quando a mesclagem de expressões do plano de consulta está desabilitada (
query_plan_merge_expressions = 0 ou query_plan_enable_optimizations = 0). #98960 (Peng).
- Incrementa o ProfileEvent
InsertQuery em inserções assíncronas. Fecha #98626. #98962 (Narasimha Pakeer).
- Corrige a exceção “Comportamento inconsistente de KeyCondition” em builds de depuração quando a chave primária contém valores NaN de ponto flutuante, fazendo com que
accurateLess e accurateEquals tratem NaN de forma consistente com a ordenação do ClickHouse. Fecha #98075. #98964 (Alexey Milovidov).
- SummingMergeTree não soma mais colunas Bool (nem colunas de outros tipos de domínio). Os valores Bool são mantidos como estão, em vez de serem somados aritmeticamente. #98976 (Yash ).
- Corrige a exceção Scalar doesn’t exist que ocorria ao consultar um shard remoto com
optimize_const_name_size definido e enable_scalar_subquery_optimization = 0. As constantes grandes substituídas por referências __getScalar na consulta remota não estavam sendo enviadas ao shard, o que fazia a consulta falhar. #98979 (andriibeee).
- Corrige
NOT_FOUND_COLUMN_IN_BLOCK em algumas consultas com GROUP BY e expressões que incluem busca inversa em dicionário, comparações com conversão de Date/DateTime e comparações de tuplas. Fecha #98888. #98980 (Nihal Z. Miaji).
- Corrigido comportamento indefinido (desreferenciamento de ponteiro nulo) ao alterar uma coluna version/sign/is_deleted para
EPHEMERAL ou ALIAS nos motores MergeTree. Essas alterações agora são corretamente rejeitadas. #98985 (Alexey Milovidov).
- Corrigido um problema em que
system.grants omitia, na coluna access_object, os parâmetros de expressão regular dos privilégios URL e S3. #98987 (DQ).
- Corrigidas as leituras do Iceberg BigLake: as credenciais ADC agora são repassadas ao cliente S3 do GCS (corrigindo erros 403), as credenciais OAuth2 são codificadas em URL antes do envio (corrigindo falhas de autenticação para tokens com caracteres especiais), e a travessia do namespace não é mais interrompida por respostas HTTP 400 do BigLake. #98998 (Nikita Fomichev).
- Corrigida a falha do
clickhouse-client ao mudar o fuso horário quando a variável de ambiente TZ usa a sintaxe de caminho de arquivo do POSIX (por exemplo, TZ=:/etc/localtime). #99000 (Yash ).
- Corrige a poda incorreta ou menos eficiente quando
startsWith, LIKE e NOT LIKE são usados com a coluna FixedString. Além disso, a função de conversão de FixedString para String agora pode podar grânulos quando aplicada à coluna de chave. Fecha #98940. #99001 (Nihal Z. Miaji).
- Corrigido
windowFunnel com strict_deduplication, que retornava um nível incorreto quando um evento duplicado era encontrado. #99003 (Yash ).
- Corrige um bug em que
EXISTS ignorava as cláusulas LIMIT e OFFSET em subconsultas, causando resultados incorretos quando a subconsulta não retornava nenhuma linha devido a um offset ou a um limite igual a zero. Fecha #88722. #99005 (andriibeee).
- Corrigida a exceção “Incompatibilidade na estrutura do bloco” quando a otimização de push-down de filtro encontra uma expressão AND que é avaliada por curto-circuito como uma constante com
GROUPING SETS. #99010 (Alexey Milovidov).
- Corrigida exceção ao ler patch parts (atualizações leves) sem a coluna
_part_offset no plano de consulta. #99023 (Alexey Milovidov).
- Uma consulta como
SELECT * FROM table WHERE pk_id = '', em que pk_id é a chave primária e do tipo String, agora usará corretamente o índice da chave primária para filtrar grânulos. #99027 (Shankar Iyer).
- Correção da exceção
DEPENDENCIES_NOT_FOUND no engine Kafka quando a visão materializada é desanexada enquanto a thread em segundo plano está transferindo dados. #99028 (Alexey Milovidov).
- Corrigida a exceção ao criar uma tabela com uma coluna
EPHEMERAL que tem o mesmo nome de uma coluna virtual (por exemplo, _part_offset). #99031 (Alexey Milovidov).
- Corrige a mensagem enganosa “inflate failed: buffer error” ao ler arquivos compactados inexistentes por meio da função de tabela
url() com padrões glob. Agora retorna um resultado vazio, como esperado, quando http_skip_not_found_url_for_globs está habilitado. #99034 (Alexey Milovidov).
- Corrige um travamento do servidor (
std::terminate) ao executar ALTER TABLE ... DROP PART em uma patch part após uma alteração de esquema (por exemplo, ADD COLUMN). O travamento foi causado pela ausência de colunas de sistema (_part) nos metadados da parte de cobertura vazia, o que levou a uma exceção não capturada dentro de um NOEXCEPT_SCOPE. #99036 (Peng).
- O processo do servidor ClickHouse poderia falhar se fosse lançada uma exceção por exceder o limite de memória durante uma leitura de disco em cache. Isso já foi corrigido. #99042 (Shankar Iyer).
- Corrige
LOGICAL_ERROR ao consultar uma tabela que tem uma ROW POLICY e uma coluna ALIAS usando dictGet. O problema era causado pelo acesso prematuro à expressão da tabela durante a resolução da coluna ALIAS no novo analisador. #99065 (Peng).
- Corrige erro de acesso fora dos limites quando o usuário tenta consultar apenas colunas virtuais de uma tabela Iceberg com dados em formato Avro. É um cenário super raro, então não o marcamos como crítico. Corrige #88238. #99080 (alesapin).
- Corrigido segfault em CTE recursiva com
remote() + view(). #99081 (Konstantin Bogdanov).
- Ignora a análise extra desnecessária de índices quando a otimização de leitura em ordem é aplicada. #99084 (Vladimir Cherkasov).
- Corrigido um travamento causado por uma exceção de limite de memória gerada durante a aplicação de patch part. #99086 (Anton Popov).
- Corrige a asserção de depuração em
DDLWorker, causada por first_failed_task_name desatualizado após a exclusão de uma entrada do ZooKeeper durante a recuperação após reinicialização. #99099 (Antonio Andelic).
- Corrigida a reconstrução de índices de texto em mesclagens com TTL. #99107 (Anton Popov).
- Corrige falha na consulta
ALTER TABLE ... REMOVE SETTINGS ao usar o mecanismo de tabela Iceberg. Corrige #86330. #99108 (alesapin).
- Corrige um bug na otimização
query_plan_convert_any_join_to_semi_or_anti_join, que retornava um resultado incorreto para linhas sem correspondência. Relacionado: https://github.com/ClickHouse/ClickHouse/pull/95995. #99112 (Yarik Briukhovetskyi).
- Corrigida a exceção LOGICAL_ERROR em
ASTColumnsExceptTransformer::transform. #99119 (Pablo Marcos).
- Corrige um bypass de RBAC que permitia aos usuários obter a estrutura da tabela por meio de
DESCRIBE TABLE ou CREATE TABLE AS em funções de tabela (mysql(), postgresql(), sqlite(), arrowFlight(), jdbc(), odbc(), etc.) sem os privilégios de acesso à origem exigidos. Para funções que inferem o schema a partir de servidores remotos, isso também permitia disparar conexões de saída (SSRF) sem autorização. #99122 (pufit).
- Corrige travamento do Keeper (segfault no NuRaft) durante a reconfiguração dinâmica e a transferência de liderança. #99133 (JIaQi Tang).
- Corrige falha ao usar tabela Buffer com SAMPLE quando o destino não é compatível com ele. #99141 (Kseniia Sumarokova).
- Corrige LOGICAL_ERROR causado por divergência na ordem das colunas nas partes de patch. #99164 (Pablo Marcos).
- Corrige um travamento muito raro quando a tabela Iceberg contém arquivos em formatos mistos (ORC e Parquet). Corrige #88126. #99168 (alesapin).
- Correção para
max_execution_time não ser aplicado em backup/restauração. #99205 (Kseniia Sumarokova).
- Correção de
insert_deduplication_token, que estava sendo ignorado silenciosamente em consultas INSERT SELECT sem ORDER BY ALL. Anteriormente, a desduplicação era totalmente desativada para INSERT SELECT sem ordenação, mesmo quando um token explícito fornecido pelo usuário era informado. Agora, fornecer insert_deduplication_token é suficiente para ativar a desduplicação independentemente de ORDER BY ALL. #99206 (Desel72).
- Corrige verificações excessivas de acesso durante a otimização
InverseDictionaryLookupPass, verificando o privilégio CREATE_TEMPORARY_TABLE uma única vez antes da etapa, em vez de em cada nó visitado. #99210 (Mikhail Artemenko).
- Correção de
clickhouse format --obfuscate, que produzia SQL inválido ao ofuscar tipos de skip index, nomes de codecs de compressão, nomes de engines de banco de dados e definições de layout/source de dicionários. #99260 (Raúl Marín).
- Corrigido um bug em que, em alguns casos, a comparação entre os tipos Time[64] e DateTime[64] ficava confusa; agora, em casos como esse, os valores de Time[64] são promovidos para DateTime[64] com a adição de
1970-01-01 como parte da data. #99267 (Yarik Briukhovetskyi).
- Limitar as restrições de configuração no worker de DDL para consultas de DDL distribuído. #99317 (Pablo Marcos).
- Corrige pequenos problemas na autenticação TOTP: a opção de CLI
--one-time-password com senha vazia e a validação dos valores de configuração <digits> e <period>. #99322 (Vladimir Cherkasov).
- Corrige o erro lógico
unordered_map::at: key not found no formato de saída Avro ao serializar colunas Enum8/Enum16 com valores que não estão presentes na definição do enum. #99332 (Desel72).
- Corrige o CHECK TABLE com serialização esparsa em Tuple com Dynamic. Fecha #96588. #99351 (Pavel Kruglov).
- Corrigida a validação rígida demais do pré-processador de índice de texto. #99359 (Anton Popov).
- Corrige problemas de compatibilidade ao atualizar tabelas replicadas com índices minmax implícitos da versão 25.10 para versões mais recentes. #99392 (Raúl Marín).
- Removido o suporte a funções negadas (
notEquals, notLike, notIn) na análise de índice de texto. Essas funções nunca conseguiam pular nenhum grânulo, portanto sua análise no índice só adicionava sobrecarga, sem benefício algum. #99393 (Anton Popov).
- Corrigido
optimize_skip_unused_shards com um novo analisador para o caso em que uma tabela Distributed era usada em uma subconsulta com IN. #99436 (Nikolai Kochetov).
- Corrige heap-use-after-free em
INTERSECT/EXCEPT quando a consulta gera nomes de colunas duplicados. #99471 (Alexey Milovidov).
- Corrige erro lógico em
ALTER TABLE ... DROP PART quando um parâmetro de consulta tipado é usado como nome da parte. #99489 (Alexey Milovidov).
- Corrigida a exceção
NOT_FOUND_COLUMN_IN_BLOCK quando um predicado de índice de texto (por exemplo, hasAllTokens) é referenciado tanto nas cláusulas SELECT quanto WHERE por meio de um alias. #99504 (Anton Popov).
- Corrige resultados incorretos ao usar
hasAllTokens com OR em colunas que têm índices de texto separados. #99505 (Anton Popov).
- Inicializa o cache de páginas no
clickhouse-local para que a configuração page_cache_max_size tenha efeito. #99510 (Alexey Milovidov).
- Corrigida uma ocorrência rara em que uma parte de dados era marcada incorretamente como corrompida e desanexada após a consulta
DETACH/ATTACH TABLE. #99529 (Anton Popov).
- Corrige a exceção
std::length_error ao consultar tabelas de sistema vazias no formato Pretty pela interface HTTP. #99541 (Alexey Milovidov).
- Corrige
LOGICAL_ERROR ao usar ALTER TABLE ADD COLUMN para criar uma coluna EPHEMERAL com o mesmo nome de uma coluna virtual (por exemplo, _part_offset). #99549 (Alexey Milovidov).
- Corrige um problema em que as entradas de
VectorSimilarityIndexCache nunca eram descartadas do cache após a remoção de uma parte, devido a chaves de cache incompatíveis. #99575 (Seva Potapov).
- Proíbe a leitura de credenciais do Google a partir de um arquivo local. Essa configuração é insegura porque permite ler outras credenciais se o caminho do arquivo for conhecido. #99584 (Konstantin Vedernikov).
- Corrige a queda de desempenho no analisador. Remove colunas não utilizadas em ARRAY JOIN. #99587 (Dmitry Novik).
- Corrigida a leitura do índice de texto em uma tabela com exclusões leves e políticas de linha existentes. #99661 (Anton Popov).
- Corrige o desreferenciamento de
nullptr no leitor de Parquet quando o fluxo filter-in-decoder encontra páginas descartadas pelo filtro. Fecha #99676. #99677 (Alexey Milovidov).
- Corrige o seek incorreto em AsynchronousReadBufferFromFileDescriptor com O_DIRECT. Fecha #99358. #99678 (Pavel Kruglov).
- Corrigido heap-buffer-overflow em
CompressionCodecT64 e aborto do processo em CompressionCodecMultiple ao descomprimir dados comprimidos malformados. Ambos os problemas foram encontrados por novos targets do libFuzzer. Os codecs agora lançam uma exceção em vez de provocar uma falha. #99680 (Rahul).
- Adiar o processamento até que o servidor termine de carregar todas as tabelas. #99700 (Seva Potapov).
- Correção na fonte de dicionário MySQL que ignorava o
RemoteHostFilter para parâmetros DDL inline. #99720 (Shaohua Wang).
- Corrigido erro lógico ao iterar por tabelas de lago de dados em
system.tables. #99739 (Konstantin Vedernikov).
- Corrigida a análise de predicados com a função
IN em índice de texto com pré-processador. Corrigida a colisão de tokens buscados no índice de texto, o que poderia levar a resultados incorretos. #99755 (Anton Popov).
- Corrigido loop infinito ao ler arquivos no formato
Npy com dimensões negativas em shape. #99812 (Desel72).
- Corrigido o
global-buffer-overflow na função CRC32 com argumentos FixedString quando avaliada com zero linhas durante o cálculo do cabeçalho do plano de consulta. #99835 (Alexey Milovidov).
- Corrige falha (desreferenciamento de ponteiro nulo) ao executar
ALTER TABLE ... MODIFY COLUMN ... COMMENT em tabelas Iceberg. #99838 (Desel72).
- Correção da configuração
aggregate_functions_null_for_empty para funcionar com funções de agregação que retornam tipos não Nullable, como Array ou Map (por exemplo, groupArray, sumMap). #99839 (Alexey Milovidov).
- Corrigida a exceção LOGICAL_ERROR na função
midpoint quando chamada com tipos inteiros mistos, com e sem sinal. #99867 (Alexey Milovidov).
- Corrigir a exceção “Block structure mismatch” em consultas com cláusula HAVING nas quais a expressão de filtro contém tanto um agregado envolvido por uma função que produz NULL quanto
materialize(0). #99915 (Alexey Milovidov).
- Corrige uma falha de asserção em
sipHash128Keyed (e em funções de hash com chave semelhantes) quando o argumento data é um map com chaves do tipo array ou outros tipos de array aninhados. #99921 (Alexey Milovidov).
- Corrigida a exceção
LOGICAL_ERROR “Set não pronto” na função IN durante a otimização do plano de consulta com convertAnyJoinToSemiOrAntiJoin. #99939 (Alexey Milovidov).
melhoria em build, teste e empacotamento
- Reduz o tempo de compilação removendo inclusões pesadas de cabeçalhos e movendo instanciações de template custosas para fora dos cabeçalhos. #97893 (Raúl Marín).
- Reduz o tempo de compilação de funções aritméticas e dos cabeçalhos relacionados ao enxugar matrizes de despacho de template e remover inclusões pesadas. #98204 (Raúl Marín).
- Usa
mongo-c-driver 2.2.2. #98304 (Konstantin Bogdanov).
- Usa
postgres REL_18_3. #98306 (Konstantin Bogdanov).
- Habilita o allocator jemalloc para builds UBSan, a fim de evitar o acúmulo de RSS causado pela recuperação ineficiente de memória do malloc da glibc. #98444 (Alexey Milovidov).
- Usa o symbol mangling v0 do Rust e remove símbolos internos da biblioteca PRQL para reduzir o inchaço nos nomes de símbolos causado por bibliotecas de combinadores de parser. #98446 (Alexey Milovidov).
- Adiciona o conjunto de benchmark TPC-H e o README do TPC-DS a
tests/benchmarks. #98495 (Raufs Dunamalijevs).
- Adiciona testes de corretude para todas as 99 queries do TPC-DS. #99204 (Raufs Dunamalijevs).
- Adiciona um teste de integration que reproduz o bug de DDL CREATE TABLE + ALTER com réplica offline (#44070), marcado como falha esperada. #99259 (Raufs Dunamalijevs).
- Integra o jemalloc com o prefixo
je_ e remove o uso de —wrap do linker. #99342 (Azat Khuzhin).
- A desduplicação fica ativada por padrão para todas as inserções. Antes, ela ficava desativada para
async inserts e para MVs, mas ativada para inserções síncronas. O objetivo é ter os mesmos padrões para as duas formas de inserção. Se você tiver a desduplicação explicitamente desativada no seu cluster, precisará definir explicitamente deduplicate_insert='backward_compatible_choice' para manter o comportamento antigo. O mesmo vale para deduplicate_blocks_in_dependent_materialized_views. #95970 (Sema Checherinda).
- Formato de armazenamento das estatísticas aprimorado. Todas as estatísticas agora são armazenadas em um único arquivo. #93414 (Anton Popov). Se você não ativou explicitamente as estatísticas da tabela, pode ignorar este item.
- Limita os metadados em memória do S3(Azure)Queue. As tabelas do sistema foram renomeadas de
azure_queue para azure_queue_metadata_cache e de system.s3queue para s3queue_metadata_cache. #95809 (Kseniia Sumarokova).
- Anteriormente, aplicar uma função a uma coluna
Variant retornava NULL silenciosamente quando um subtipo de variante era incompatível com a função; agora, isso gera uma exceção, o que pode quebrar consultas que dependiam desse comportamento silencioso com NULL. #95811 (Bharat Nallan).
- As colunas
DATE do PostgreSQL agora são inferidas como Date32 no ClickHouse (nas versões anteriores, eram inferidas como Date, o que levava ao estouro de valores fora de uma faixa estreita). Permite inserir valores Date32 de volta no PostgreSQL. Fecha #73084. #95999 (Alexey Milovidov).
- A semântica da configuração
do_not_merge_across_partitions_select_final ficou mais explícita. Antes, o recurso podia ser ativado automaticamente quando a configuração não era definida explicitamente nos arquivos de configuração. Isso causou confusão repetidas vezes e, infelizmente, levou a alguns problemas em produção. Agora, as regras são mais simples: do_not_merge_across_partitions_select_final=1 ativa a funcionalidade incondicionalmente. Se do_not_merge_across_partitions_select_final=0, o modo automático só é usado se a nova configuração enable_automatic_decision_for_merging_across_partitions_for_final=1 estiver ativada; caso contrário, não é usado. Para preservar o comportamento anterior tanto quanto possível, os valores padrão foram definidos como do_not_merge_across_partitions_select_final=0 e enable_automatic_decision_for_merging_across_partitions_for_final=1. #96110 (Nikita Taranov).
- Ao criar uma tabela S3 com colunas explicitamente especificadas, o ClickHouse agora valida se esses nomes de coluna realmente existem no schema do arquivo remoto. Consultas que antes funcionavam com nomes de coluna incompatíveis agora falharão durante a criação da tabela. Isso corrige #96089. #96194 (Konstantin Vedernikov).
- Proibido o uso de subconsultas em ORDER BY e em outras expressões de chave de tabela. #96847 (Alexey Milovidov).
- Ative
apply_row_policy_after_final por padrão. Inicialmente, quando optimize_move_to_prewhere_if_final=0, tanto ROW POLICY quanto PREWHERE respeitavam FINAL e eram aplicadas após FINAL. Isso foi afetado por #87303, que ignorava optimize_move_to_prewhere_if_final para o filtro de ROW POLICY. Para corrigir isso, este PR habilita a configuração apply_row_policy_after_final, introduzida em #91065. Com apply_row_policy_after_final habilitada, ROW POLICY continua respeitando FINAL por padrão, como antes. Este PR introduz uma mudança incompatível, pois altera o comportamento de optimize_move_to_prewhere_if_final=1. Agora, para que ROW POLICY seja aplicada antes de FINAL, deve-se usar apply_row_policy_after_final em vez de optimize_move_to_prewhere_if_final. #97279 (Nikolai Kochetov).
- O tipo
Date agora é serializado como o tipo nativo date32 do Arrow nos formatos Arrow/ArrowStream, em vez de uint16. Ferramentas como o PyArrow agora reconhecerão corretamente a coluna como sendo do tipo data. O comportamento anterior pode ser restaurado com a configuração output_format_arrow_date_as_uint16. A leitura de arquivos Arrow antigos que usavam uint16 para colunas Date continua sendo compatível. #96860 (Alexey Milovidov).
- Agora, os usuários podem usar o ClickStack (uma UI de observabilidade) diretamente no ClickHouse, o que é útil para depuração e desenvolvimento local. #96597 (Aaron Knudtson).
- Suporte para senha de uso único baseada em tempo (TOTP) como método de autenticação. #71273 (Vladimir Cherkasov).
- Adicionada a configuração de banco de dados
lazy_load_tables. Quando habilitada, as tabelas não são carregadas durante a inicialização do banco de dados — em vez disso, é criado um StorageTableProxy leve, e o table engine real é materializado no primeiro acesso. #96283 (xiaohuanlin).
- Foi adicionada a configuração
input_format_max_block_wait_ms para emitir blocos de dados ao atingir o timeout e permitir o processamento dos dados restantes quando uma conexão HTTP é encerrada inesperadamente. #94509 (Mostafa Mohamed Salah).
- Integração com o catálogo do Google BigLake. Isso encerra #95339. #97104 (Konstantin Vedernikov).
- Foi adicionada a tabela de sistema
system.tokenizers, que mostra todos os tokenizadores disponíveis. #96753 (Robert Schulze).
- Adiciona uma nova tabela de sistema
system.user_defined_functions para monitorar o status de carregamento e a configuração de UDFs. #90340 (Xu Jia).
- Adicionada a tabela
system.jemalloc_stats, que expõe estatísticas do alocador de memória jemalloc (via malloc_stats_print) para diagnosticar o uso de memória em servidores compilados com jemalloc. Também foi adicionado o endpoint HTTP /jemalloc.html na interface HTTP do ClickHouse para visualização interativa dessas estatísticas. #97077 (Antonio Andelic).
- Foi adicionada a tabela
system.jemalloc_profile_text para ler e analisar perfis de heap do jemalloc. O formato de saída é controlado pela configuração jemalloc_profile_text_output_format (raw, symbolized ou collapsed; o padrão é collapsed). A resolução de frames inline é controlada por jemalloc_profile_text_symbolize_with_inline (quando ativado, frames inline são incluídos, ao custo de uma simbolização mais lenta; quando desativado, eles são ignorados para gerar saída mais rapidamente). Para o formato collapsed, jemalloc_profile_text_collapsed_use_count controla se as pilhas são ponderadas pela contagem de alocações ativas (true) ou pelos bytes ativos (false, padrão). Isso facilita o profiling de memória e a visualização de perfis de heap do jemalloc em flame graph. Corrige #93248. #97218 (Antonio Andelic).
- Adiciona a configuração
default_dictionary_database, que permite ao ClickHouse resolver dicionários externos referenciados sem qualificador de banco de dados em um banco de dados padrão especificado. Isso simplifica a migração de dicionários globais definidos em XML para dicionários por banco de dados definidos em SQL, permitindo que consultas de dicionário existentes (por exemplo, dictGet(‘name’, …)) continuem funcionando sem alterações. #91412 (Dmitrii Plotnikov).
- Adiciona suporte a ZooKeeper auxiliar para
DatabaseReplicated. #91683 (RinChanNOW).
- Implementadas a nova função de tabela
primes e a nova tabela de sistema system.primes, que contém números primos em ordem crescente. Fecha #90839. #92776 (Nihal Z. Miaji).
- Async inserts oferecem suporte a quorum em paralelo. Os dados inseridos são replicados para o quorum. Se forem encontradas duplicatas, a consulta aguarda até que os dados inseridos anteriormente também sejam replicados. #93356 (Sema Checherinda).
- Adicionadas as funções
colorOKLABToSRGB, colorSRGBToOKLAB para converter valores de sRGB para OKLAB e vice-versa. #93361 (Pranav Tiwari).
- Nova configuração
deduplicate_insert, que substitui insert_deduplicate e async_insert_deduplicate. #94413 (Sema Checherinda).
- A configuração do servidor
insert_deduplication_version possibilita a migração para um hash de desduplicação unificado. #95409 (Sema Checherinda).
- Adicionada a função de hash
xxh3_128. #96055 (Raúl Marín).
- Adicionada a consulta
OPTIMIZE <table> DRY RUN PARTS <part names> para simular mesclagens sem gravar a parte resultante. Ela pode ser útil para fins de teste: verificar a correção da mesclagem na nova versão, reproduzir de forma determinística bugs relacionados a mesclagens e avaliar com confiabilidade o desempenho da mesclagem. #96122 (Anton Popov).
- Adiciona uma nova verificação, ativada por padrão por meio da configuração
check_named_collection_dependencies, para evitar a remoção de named collections usadas por tabelas. #96181 (Pablo Marcos).
- Adicionado
system.fail_points para inspecionar os failpoints existentes no servidor e verificar se estão habilitados ou não. Isso ajudará a automatizar os testes. #96762 (Pedro Ferreira).
- Adiciona controle de acesso baseado em funções ao catálogo do Glue. Use as configurações
aws_role_arn e, opcionalmente, aws_role_session_name. #90825 (Antonio Andelic).
- Foi adicionada a configuração
add_minmax_index_for_temporal_columns que, quando ativada, cria automaticamente índices minmax para todas as colunas Date, Date32, Time, Time64, DateTime e DateTime64. #93355 (Michael Jarrett).
- Suporte a aliases de tabela estendidos para junções (consultas como
SELECT * FROM (SELECT 1) AS t(a) JOIN (SELECT 1) AS u(b) ON a = b). Resolve #95131. #95331 (Yarik Briukhovetskyi).
- Adicionado suporte a
ALTER TABLE RENAME COLUMN para tabelas Iceberg. Anteriormente, apenas ADD COLUMN, DROP COLUMN, and MODIFY COLUMN eram suportados. #97455 (murphy-4o).
Funcionalidade experimental
- O índice de texto agora está em disponibilidade geral. #96794 (Robert Schulze).
- O tipo de dado
QBit, para armazenamento vetorial quantizado com bits compactados (usado em busca aproximada de vizinhos mais próximos), agora está disponível de forma geral e não exige mais a ativação de uma configuração experimental. #95358 (Raufs Dunamalijevs).
- A busca vetorial no ClickHouse agora pode usar réplicas no cluster para distribuir a carga e a pesquisa entre as partes do índice vetorial. Isso permite que o ClickHouse ofereça suporte a índices vetoriais grandes que excedem a capacidade de memória de uma única VM. #95876 (Shankar Iyer).
- Adicionado um AST fuzzer no lado do servidor, controlado pelas configurações
ast_fuzzer_runs e ast_fuzzer_any_query. Quando habilitado, o servidor executa mutações aleatórias de cada consulta após sua execução normal, descartando os resultados. #97568 (Alexey Milovidov).
- Adicionada a função
iif ao dialeto KQL experimental. #94790 (happyso).
- A inferência de esquema agora respeita
allow_experimental_nullable_tuple_type. Quando habilitada, ela permite que tipos de tupla inferidos sejam Nullable(Tuple(...)), para que objetos aninhados ausentes possam se tornar NULL em vez de uma tupla com elementos NULL. #95525 (Nihal Z. Miaji).
- A configuração
use_statistics_cache agora vem habilitada por padrão, de modo que as estatísticas de coluna sejam armazenadas em cache na memória para acelerar a otimização de consultas, sem a necessidade de recarregá-las de cada parte. #95950 (Han Fei).
- Permite que qualquer expressão determinística na chave primária seja usada para skipping de dados (por exemplo,
ORDER BY cityHash64(user_id)/ ORDER BY length(user_id)). Para expressões determinísticas, o ClickHouse pode aplicar a expressão às constantes da consulta e usar o resultado no índice da chave primária para predicados como =, IN e has. Se a expressão também for injetiva (por exemplo, ORDER BY hex(p) ou ORDER BY reverse(tuple(reverse(p), hex(p)))), podemos usar efetivamente o índice para as formas negadas: !=, NOT IN e NOT has. Fecha #10685. Fecha #82161. #92952 (Nihal Z. Miaji).
- Formato de armazenamento das estatísticas melhorado. Agora, todas as estatísticas são armazenadas em um único arquivo. #93414 (Anton Popov).
- Permite leitura paralela para motores de tabela/funções remotos no cache do sistema de arquivos. #71781 (Kseniia Sumarokova).
- Permite usar cache de páginas em espaço do usuário com arquivos locais e funções de tabela para armazenamento de objetos. #77874 (Michael Kolupaev).
- Evita memcpy desnecessário no cache de páginas em espaço de usuário. #77884 (Michael Kolupaev).
- O valor padrão de
concurrent_threads_scheduler agora é max_min_fair em vez de fair_round_robin. Isso melhora a equidade sob alta carga ao priorizar consultas com menos slots alocados, para que consultas de curta duração não sejam prejudicadas por consultas de longa duração. #95300 (Sergei Trifonov).
- Se uma consulta
FINAL usava a condição da chave primária para filtrar, seguida por skip indexes para outras condições, a etapa de processamento PrimaryKeyExpand agora verificará a interseção apenas dos intervalos inicialmente pré-selecionados da chave primária. #94903 (Shankar Iyer).
- Ao usar réplicas paralelas com funções de tabela como
s3(...), as consultas com uma única subconsulta que encapsula a função de tabela agora são paralelizadas automaticamente entre as réplicas, enquanto antes apenas referências diretas à função de tabela eram paralelizadas. Fecha #92264. #96332 (phulv94).
- Permite separar dados e arquivos do sistema em cache em segmentos distintos. #87834 (MikhailBurdukov).
- Aceleração de algumas operações de hash join com a implementação de dispatch dinâmico para
ColumnVector::replicate. #79573 (Raúl Marín).
- Melhoria de desempenho do
hash join paralelo em casos de predicados complexos. Antes, processávamos em uma única thread as linhas sem correspondência no join, o que não é ideal; a otimização consiste em paralelizar o processamento dessas linhas em várias threads. Pode ser controlado pela configuração parallel_non_joined_rows_processing. Ativado por padrão. #92068 (Yarik Briukhovetskyi).
- Pequena otimização no parsing do tipo JSON. #93614 (Pavel Kruglov).
- Melhora o consumo de memória da AST. A otimização faz sentido, pois os campos não são usados quando o realce não é utilizado e não há parsing de VALUES. #93974 (Ilya Yatsishin).
- Otimize o consumo de memória de objetos AST de Tuple nomeadas. Armazene os nomes das colunas como strings no objeto tuple, em vez de mantê-los em nós literais AST genéricos. #94704 (Ilya Yatsishin).
- A desvirtualização foi aprimorada com opções adicionais do linker. #94737 (Nikita Taranov).
- Melhora o desempenho da clonagem de réplicas de tabelas ReplicatedMergeTree com muitas partes ao agrupar solicitações ao ZooKeeper em lotes. #94847 (c-end).
- Quando a etapa de leitura já tinha filtros PREWHERE, não era possível adicionar outro filtro. Essa mudança adia a otimização de PREWHERE para depois da otimização de filtros de runtime de JOIN, para que os filtros de runtime também possam ser aplicados ao PREWHERE. #95838 (Alexander Gololobov).
- Acelera a compressão com o codec
T64 usando despacho dinâmico em x86. #95881 (Raúl Marín).
- Aceleração do
uniq para tipos numéricos com inserções em lote, quando possível (sem NULL, sem -If, sem GROUP BY, sem IPv6 nem String). #95904 (Raúl Marín).
- Otimizações de baixo nível para o Keeper: constatou-se que
ZooKeeper::observeOperations é responsável por >20% do consumo de CPU da thread de recebimento do ZooKeeper. Esta alteração resolve isso da seguinte forma: 1. Para AggregatedZooKeeperLog::stats, usa CityHash64 em vez de SipHash, que é >10x mais rápido. 2. Para Coordination::ErrorCounter, usa std::array<std::atomic<UInt32>, N> em vez de std::unordered_map e std::mutex. #95962 (Miсhael Stetsyuk).
- Removido o alinhamento de 64 bytes de ProfileEvents::Counter para economizar memória. #96097 (Azat Khuzhin).
- Otimização de memória: reduz o tamanho da estrutura
CachedOnDiskReadBufferFromFile em 50x. #96098 (Azat Khuzhin).
- Não copie dados antigos no redimensionamento da tabela hash se ela estiver vazia. #96180 (Raúl Marín).
- Suporte a filtros de runtime de JOIN em junções
RIGHT OUTER. #96183 (Hechem Selmi).
- A otimização
enable_join_runtime_filters agora passa a ser o padrão. #89314 (Alexey Milovidov).
- Anteriormente, a otimização de leitura direta do índice de texto era aplicada apenas quando todas as partes tinham um índice de texto materializado. Este PR adiciona suporte parcial: se algumas partes tiverem um índice de texto materializado, essas partes o usarão, enquanto as partes sem um índice de texto materializado voltarão a executar a expressão de filtro original. #96411 (Anton Popov).
- Adicionados índices secundários
minmax para colunas de tempo e índices bloom_filter para colunas query_id/initial_query_id nas tabelas de log do sistema, para filtragem mais rápida. #96712 (Alexey Milovidov).
- A otimização de materialização tardia agora é aplicada a todos os ramos de uma consulta
UNION ALL, não apenas ao primeiro. Consultas que combinam múltiplas leituras ordenadas e limitadas de diferentes tabelas MergeTree por meio de UNION ALL agora se beneficiarão da leitura postergada de colunas em cada ramo, reduzindo a E/S. #96832 (Federico Ginosa).
- Otimiza o cálculo do índice skip minmax durante o INSERT ao remover uma cópia desnecessária de dados e habilitar o cálculo vetorizado de mínimo/máximo para colunas numéricas. #97392 (Raúl Marín).
- O mecanismo de armazenamento
DeltaLake agora usa o resultado de count() dos metadados do Delta Lake e exibe as estatísticas corretas da tabela em system.tables (total de bytes/linhas). #96190 (Kseniia Sumarokova).
- As colunas não utilizadas também são removidas da etapa de leitura ao ler de uma MergeTree. Isso é especialmente útil quando um filtro é levado para
PREWHERE. #89982 (János Benjamin Antal).
- Melhorado o processamento da consulta
SHOW TABLES, buscando apenas os nomes das tabelas, e aprimorado o getLightweightTablesIterator para retornar uma estrutura contendo apenas nomes de tabelas. Resolve #93835. #94467 (Smita Kulkarni).
- Aprimora
assumeNotNull, coalesce e ifNull para permitir a poda pela chave primária e pelo skip index em predicados de intervalo quando as colunas-chave são encapsuladas nessas funções. Fecha #94689. #94754 (Nihal Z. Miaji).
- Adiciona a extensão with_data & with_stat à solicitação getChildren do Keeper. Isso permite obter não apenas a lista de nós filhos, mas também seus
stat e/ou data em uma única operação. #94826 (Nikolay Degterinsky).
- A análise de índice é realizada apenas uma vez (na maioria dos casos), independentemente de o plano executado ser local ou com réplicas paralelas. #94854 (Nikita Taranov).
- Permite habilitar a análise distribuída de índices com base na quantidade de partes (
distributed_index_analysis_min_parts_to_activate) e no tamanho dos índices (distributed_index_analysis_min_indexes_size_to_activate). #95216 (Azat Khuzhin).
- Habilitada a otimização PREWHERE para tabelas Iceberg. #95476 (Konstantin Vedernikov).
- Reduz a pegada de memória de algumas classes de AST. #95514 (Raúl Marín).
- Limita o número de streams do pipeline gerados com
split_intersecting_parts_ranges_into_layers habilitado. Ajuda a evitar o consumo excessivo de memória. #96478 (Nikita Taranov).
- Implementa a otimização de conjuntos equivalentes para múltiplas junções. Consultas com várias operações consecutivas de
INNER JOIN agora se beneficiam de uma otimização aprimorada de pushdown de filtros. Quando tabelas são unidas por colunas equivalentes (por exemplo, t1 JOIN t2 ON t1.id = t2.id JOIN t3 ON t2.id = t3.id WHERE t1.id > 10), os filtros aplicados a qualquer tabela da cadeia são automaticamente propagados para todas as tabelas. Fecha #96550. #96596 (Vladimir Cherkasov).
- Otimiza a varredura dos metadados do delta lake. Usa alterações do PR https://github.com/delta-io/delta-kernel-rs/pull/1827 do delta-kernel. #96686 (Kseniia Sumarokova).
- No banco de dados Replicated, não atualize o cluster armazenado em cache para cada consulta fictícia. #96897 (Tuan Pham Anh).
- Use o índice da chave primária ao filtrar com
startsWithUTF8 se o prefixo contiver apenas caracteres ASCII. #97055 (vkcku).
- Adicionado rastreamento do OpenTelemetry para solicitações ao Keeper. #91332 (Miсhael Stetsyuk).
- Novas opções de configuração:
logger.startup_console_level & logger.shutdown_console_level para permitir substituir o nível de log do console durante a inicialização e o desligamento do ClickHouse, respectivamente. #95919 (Garrett Thomas).
- Respeitar as sobreposições definidas na linha de comando ao recarregar a configuração. Fecha #80294. #80295 (Alexey Milovidov).
- Permitir sobrescrever parâmetros de coleção nomeada com pares chave-valor na função de tabela
mongodb. #89616 (vanchaklar).
- A otimização de leitura em ordem para tabelas Iceberg agora funciona com funções de ordenação complexas, como
icebergBucket e icebergTruncate, não apenas com referências simples a colunas. #90256 (Konstantin Vedernikov).
- Adiciona uma nova coluna chamada parts_postpone_reasons em system.mutations para melhorar o diagnóstico, que exibe os motivos do adiamento das partes. #92206 (Shaohua Wang).
- Acompanhe as alterações no número de linhas a serem lidas (devido a inserções/exclusões ou ao uso do cache de condições de consulta) em
DataflowStatisticsCache. #93636 (Nikita Taranov).
- Suporte à consulta SYSTEM RESET DDL WORKER [ON CLUSTER]. Ela solicita a redefinição do estado do DDLWorker em sua thread principal. Isso é útil para atualizar a réplica ativa quando os IDs de host são atualizados. #93780 (Tuan Pham Anh).
- Adicionado suporte a
mutation_ids em system.part_log para os tipos de evento MUTATE_PART e MUTATE_PART_START. #93811 (Shaohua Wang).
- As operações em segundo plano (Mutate, Merge) agora podem ser configuradas independentemente por meio do perfil ‘background’. Antes, essas operações compartilhavam as mesmas configurações das consultas regulares por meio do perfil ‘default’. #93905 (Arsen Muk).
- Adicionadas mais informações ao
system.crash_log. #94112 #95857 (Miсhael Stetsyuk).
- Foi adicionada a nova métrica
QueryNonInternal para acompanhar o número de consultas não internas em execução. Essa métrica é exposta como ClickHouseMetrics_QueryNonInternal e ajuda os operadores a monitorar a concorrência de consultas em relação ao limite max_concurrent_queries, que se aplica apenas a consultas não internas. #94284 (Ashwath Singh).
- Adiciona suporte à coleta de estatísticas de bytes de entrada para colunas em partes compactas no
RuntimeDataflowStatisticsCacheUpdater. #94626 (Nikita Taranov).
- Adiciona uma verificação para detectar configuração incorreta do Keeper que causa falhas na formação do cluster. Fecha #60932. #94682 (Konstantin Bogdanov).
- Melhora na desserialização de prefixos JSON durante o carregamento de partes. #94848 (Pavel Kruglov).
- Refatora a gravação usando o pipeline completo de INSERT, que aciona visões materializadas na tabela de destino. #94890 (Kai Zhu).
- Use otimizações do plano de busca por similaridade vetorial apenas se houver um índice para a coluna pesquisada. #94998 (Eduard Karacharov).
- Verifique o limite total de memória antes da autenticação do usuário e gere
(total) memory limit exceeded se o limite total exceder o permitido. #95003 (Nikolai Kochetov).
- Adicionada a opção de configuração
throw_on_unmatched_row_policies, que, quando habilitada, lança uma exceção se um usuário consultar uma tabela que tenha políticas de linha, mas nenhuma delas se aplique a esse usuário — evitando o comportamento ambíguo de retornar todas as linhas devido a uma configuração incorreta de controle de acesso. #95014 (Vitaly Baranov).
- Atualização dinâmica dos tokens de acesso do S3 em consultas longas com Unity Catalog. Isso fecha #93981. #95069 (Konstantin Vedernikov).
- Desative a redução gradual de páginas sujas do jemalloc se o ClickHouse estiver sob pressão de memória contínua por
memory_worker_decay_adjustment_period_ms milissegundos. Reative a redução gradual de páginas sujas do jemalloc se o ClickHouse estiver operando em condições normais pelo mesmo período. #95145 (Antonio Andelic).
- Suporte auxiliar ao ZooKeeper no S3Queue usando a configuração
keeper_path do s3Queue. #95203 (Diego Nieto).
- Respeitar
max_parts_to_merge_at_once nas mesclagens de partes com descarte por TTL. #95315 (Kseniia Sumarokova).
- Adiciona
connection_address e connection_port ao query_log para refletir a conexão física (address e port são substituídos ao se conectar por meio de proxy e auth_use_forwarded_address=1). #95471 (Yakov Olkhovskiy).
- Corrigida a contabilização incorreta de memória do cache de condições da consulta. O principal problema era que ela não levava em conta a chave de cache, composta por várias strings (como part_name, o ID da tabela e toda a condição SQL). #95478 (Nikita Mikhaylov).
- O servidor iniciado com a configuração embutida permitirá manipular usuários e privilégios, salvando-os no diretório
access, como na configuração padrão. Isso facilita os testes. Também foram habilitadas todas as melhorias de access_control_improvements na configuração embutida e no clickhouse-local. #95481 (Alexey Milovidov).
- Mensagens de erro de autenticação do S3 foram aprimoradas para incluir uma dica para verificar as credenciais quando o acesso for negado. #95648 (Gerald Latkovic).
- Habilita o cache de estatísticas e define o período de atualização do cache para 300s. #95841 (Han Fei).
- Adiciona o nome do componente em
system.aggregated_zookeeper_log. #95882 (Antonio Andelic).
- Ignorar leituras no armazenamento de objetos ao consultar tabelas
DeltaLake em system.tables. #95899 (Antonio Andelic).
- Habilita
enable_max_bytes_limit_for_min_age_to_force_merge por padrão quando a configuração compatibility está definida como 26.2 ou superior. #95917 (Christoph Wurm).
- Delta Lake agora está disponível no macOS. Corrige #95979. #95985 (Alexey Milovidov).
- Nas versões anteriores, ao combinar expressões ALTER conflitantes com UPDATE e RENAME COLUMN, era lançado um erro lógico em vez de uma exceção apropriada. Fecha #70678. #96022 (Alexey Milovidov).
- Melhorada a saída de ajuda para todos os aplicativos do ClickHouse, e adicionada a opção —no-sudo, com algumas correções. Esta é uma continuação de #58244, de Ilya Yatsishin. #96025 (Alexey Milovidov).
- Adicionar o alias
distanceCosine para cosineDistance, porque todas as outras funções de distância já têm um alias nesse formato. #96065 (Raufs Dunamalijevs).
- Adiciona suporte à extensão
with_data do Keeper para melhorar a obtenção de tabelas no Database Replicated. #96090 (Nikolay Degterinsky).
- Atualizado o chdig para v26.2.1 (novos recursos e suporte a MacOS). #96113 (Azat Khuzhin).
- Melhoria no pushdown de filtro para
numbers e primes. O ClickHouse agora pode derivar limites de valor conservadores a partir de condições WHERE quando não é possível derivar limites exatos, e restringir a geração da sequência de acordo com isso (por exemplo, para WHERE number % 5 < 2 AND number > 100 AND number < 300, o ClickHouse gerará apenas números entre 100 e 300 e, em seguida, aplicará o predicado), evitando varreduras não limitadas. Fecha #84853. Fecha #93913. #96115 (Nihal Z. Miaji).
- O formatador anteriormente colocava
SELECT entre parênteses quando uma cláusula COMMENT estava presente, para eliminar ambiguidades na análise sintática. Em vez disso, COMMENT agora é emitido antes de AS SELECT, o que elimina a ambiguidade sem usar parênteses. #96293 (Alexey Milovidov).
- A opção de configuração
allow_impersonate_user agora fica na seção access_control_improvements, em vez de ser uma configuração autônoma do servidor. #96451 (Vitaly Baranov).
- Permite recarregar a quente a configuração
core_dump.size_limit, evitando a necessidade de reiniciar servidores para que as alterações de configuração entrem em vigor. #96524 (Miсhael Stetsyuk).
- Melhora a interoperabilidade dos profilers de CPU e em tempo real com os timeouts de socket. #96601 (Sergei Trifonov).
- Impede o reaparecimento de dados removidos se ADD COLUMN for executado rapidamente após a mutação DROP COLUMN. #96713 (Alexey Milovidov).
- Alterado o tipo de
function_id em system.instrumentation de LowCardinality(Int32) para Int32. #96726 (Copilot).
- A espera síncrona por mutações passará a respeitar o cancelamento da consulta e os limites de tempo. #96756 (Alexey Milovidov).
- Adicionado o comando de sistema
SYSTEM RELOAD DELTA KERNEL TRACING <level> para permitir alterar o logging do delta-kernel, o que pode ser útil para depuração. #96763 (Kseniia Sumarokova).
- A filtragem por família de endereços IP, isto é, as configurações
dns_allow_resolve_names_to_ipv4/ipv6, é aplicada mesmo que o cache de DNS esteja desabilitado. #96810 (c-end).
- Melhorias na introspecção do jemalloc. #96840 (Azat Khuzhin).
- Corrige a interface web do
/play, que gerava QUERY_CACHE_USED_WITH_SYSTEM_TABLE ao consultar tabelas de sistema. #96869 (Alexey Milovidov).
- Melhoria na UI Web: alterar o favicon para indicar o estado de uma consulta em execução; exibir erros de consultas auxiliares (carregamento de bancos de dados e tabelas) em vez de ignorá-los silenciosamente. Fecha #85055. #96883 (Alexey Milovidov).
- Torne o painel esquerdo da UI
/play clicável para alternar a lista de bancos de dados. #96884 (Alexey Milovidov).
DROP DATABASE agora remove as tabelas na ordem inversa das dependências, aumentando a segurança contra falhas quando o banco de dados contém tabelas com dependências de carregamento (por exemplo, tabelas Distributed que usam joinGet). #97057 (Alexey Milovidov).
- Atualize o yaml-cpp para impedir que YAML inválido seja ignorado. #97333 (Azat Khuzhin).
- Exibir um indicador de carregamento na barra lateral de
play.html enquanto as tabelas são carregadas. #97531 (Alexey Milovidov).
- Adiciona um botão para copiar os resultados brutos da consulta para a área de transferência na UI web integrada (play.html). #97532 (Alexey Milovidov).
- Corrigido o ofuscador de consultas (
clickhouse-format --obfuscate) para gerar SQL analisável em mais casos. #97584 (Alexey Milovidov).
Correção de bug (comportamento incorreto perceptível ao usuário em uma versão estável oficial)
- Após ALTERs somente de metadados, como a extensão dos elementos de enums, a otimização da agregação com projeção pode acabar gerando uma exceção. #84143 (Alexey Milovidov).
- As visões materializadas agora usam como contexto de execução o banco de dados em que foram criadas, o que significa que: - é possível omitir a qualificação explícita do banco de dados nos nomes referenciados na consulta SELECT da visão - se nenhuma qualificação explícita de banco de dados for informada, será assumido o mesmo banco de dados em que a visão materializada foi criada. #88193 (Dmitry Kovalev).
- Corrige a substituição de parâmetros de consulta em métodos de autenticação de CREATE USER ao usar ON CLUSTER. Os parâmetros de consulta em métodos de autenticação (por exemplo, senha) não estavam sendo substituídos, causando erros UNKNOWN_QUERY_PARAMETER em nós remotos. #92777 (xiaohuanlin).
- Corrigidas inconsistências na análise do índice de texto para as funções
has, mapContainsKey e mapContainsValue. Antes, consultas que usavam essas funções podiam retornar resultados diferentes dependendo de a expressão ser avaliada com ou sem um índice de texto. #93578 (Anton Popov).
- Corrigido travamento ao anexar uma tabela a um banco de dados
MaterializedPostgreSQL se dropReplicationSlot lançar uma exceção durante o desenrolamento da pilha. #96871 (Alexey Milovidov).
- Backups podiam derrubar o servidor se você fizesse muitos backups concorrentes em conflito com os mesmos arquivos. #93659 (Alexey Milovidov).
- Corrige consultas com réplicas paralelas e JOIN em tabela não MT. Fecha #92056. #93902 (Igor Nikonov).
- Corrige um problema em que colunas do Iceberg com ponto no nome retornavam NULL como valor. #94335 (Mikhail Koviazin).
- Correção no tratamento de strings UTF8 em
stringJaccardIndexUTF8 e melhoria de desempenho. #94613 (Joanna Hulboj).
- Corrige possíveis estouros em
WITH FILL STALENESS (que podem levar a UB e/ou loops infinitos). Corrige possível loop infinito devido a saltos muito grandes. Adiciona suporte ao analisador antigo (principalmente para testes de estresse). #94663 (Azat Khuzhin).
- Corrige possíveis travamentos de consultas distribuídas quando hostnames são resolvidos para vários endereços e uma réplica remota trava. #94726 (c-end).
- Corrige resultado inválido ao fazer join de múltiplas expressões de tabela, quando a expressão de tabela mais à esquerda é uma table function
-Cluster. Resolve #89996. #94748 (Konstantin Bogdanov).
- Corrige a poda incorreta da chave primária e do índice de salto para predicados com
toWeek, toYearWeek, toStartOfWeek, toLastDayOfWeek e toDayOfWeek, e corrige exceções em algumas dessas funções em consultas válidas com LowCardinality(String). #94816 (Nihal Z. Miaji).
- Removida a dispensa desnecessária da verificação de permissões em consultas
ATTACH para uma view com SQL Security. Isso evita uma possível escalada de privilégios quando um usuário anexa uma view com definidor sem validar o acesso necessário. #94865 (pufit).
- Corrige um travamento na inicialização do
ReplicatedMergeTree causado pela remoção concorrente de diretórios delete_tmp_*. #94892 (myeongjun).
- Corrigido o
INSERT em tabelas Iceberg com visões materializadas, que fazia com que informações de desduplicação fossem perdidas e causava uma exceção. #94938 (Daniil Ivanik).
- Corrige um bug em que
SYSTEM DROP QUERY CACHE TAG 'TAGNAME' ON CLUSTER <CLUSTERNAME> removia todo o cache em todo o cluster. #94978 (Rory Crispin).
- Preservar a granularidade constante do índice (use_const_adaptive_granularity) após mesclagens verticais (v2 com uma correção para Nested e, de modo geral). #95013 (Azat Khuzhin).
- Corrige uma condição de corrida no cache do sistema de arquivos na versão 26.1, após [ClickHouse/ClickHouse#82764](https://github.com/ClickHouse/ClickHouse/pull/82764). #95042 (Kseniia Sumarokova).
- Corrige o cancelamento da função de tabela
postgresql() com KILL QUERY e o cancelamento de consulta (Ctrl+C) no clickhouse-client. #95136 (Roman Vasin).
- Corrigida a inferência de tipos para colunas qualificadas de tabelas de origem quando várias junções são usadas com a cláusula
USING. Anteriormente, junções subsequentes atualizavam incorretamente os tipos das colunas subjacentes da origem para um supertipo comum, mesmo quando a coluna não estava envolvida naquela junção (por exemplo, em SELECT t2.a FROM t1 LEFT JOIN t2 USING (a) LEFT JOIN t3 USING (a), a coluna t2.a é usada apenas na primeira junção, portanto seu tipo deve ser o supertipo de t1.a e t2.a, excluindo t3.a). Isso podia levar a erros lógicos ou falhas quando funções esperavam tipos de coluna diferentes dos que realmente apareciam no plano de execução. #95157 (Vladimir Cherkasov).
- Fazer a transformação da coluna apenas uma vez ao obter o conteúdo da lista e dos arquivos .avro do manifesto. #95164 (Daniil Ivanik).
- Corrige o cálculo incorreto do tamanho de colunas JSON, que poderia levar a uso excessivo de memória ou a estatísticas de coluna incorretas. #95207 (Azat Khuzhin).
- Corrigida a contabilização incorreta de memória ao aplicar grandes partes de patch após atualizações leves. Anteriormente, a aplicação de patches grandes podia causar uso excessivo de memória e fazer com que o processo do servidor fosse encerrado pelo OOM killer. #95231 (Anton Popov).
- Corrige um comportamento indefinido que poderia causar resultados incorretos ou uma exceção quando uma consulta distribuída com
max_parallel_replicas voltava para uma réplica local durante a análise de índices. #95263 (Azat Khuzhin).
- Corrigida a agregação de colunas esparsas para
sum e séries temporais quando group_by_overflow_mode está definido como any. #95301 (Mikhail Koviazin).
- Corrige um problema de confiabilidade na política de disco
plain_rewritable, em que um erro de rede durante a remoção do vínculo de um arquivo de metadados poderia deixar o armazenamento em um estado inconsistente. #95302 (Mikhail Artemenko).
- Date substituído por Date32 para Iceberg. #95322 (Konstantin Vedernikov).
- O argumento
password da função de tabela redis agora será mascarado nos logs e nas tabelas de sistema (por exemplo: query_log). #95325 (János Benjamin Antal).
- Corrige um bug em que tabelas podiam ser removidas ou alteradas enquanto uma consulta distribuída ainda estava em execução nelas, o que podia causar exceções ou resultados incorretos. #95356 (Azat Khuzhin).
- Corrige um erro lógico em alguns casos em que
LIMIT/OFFSET negativo é usado em consultas distribuídas. #95357 (Nihal Z. Miaji).
- Corrige um bug em que o clickhouse-client pedia a senha duas vezes ao se conectar via ssh. #95372 (Isak Ellmer).
- Corrige uma condição de corrida no mecanismo de armazenamento S3(Azure)Queue. #95385 (Kseniia Sumarokova).
- Corrigido o erro no filtro prewhere causado por expressões lambda em prewhere. #95395 (Xiaozhe Yu).
- Corrige
optimize_syntax_fuse_functions para não reescrever sum/count/avg em sumCount() quando o argumento da agregação é Nullable. Fecha #95390. #95441 (Nihal Z. Miaji).
- Evita possíveis falhas em consultas distribuídas em caso de cancelamento. #95466 (Aleksandr Musorin).
- Corrige a desduplicação no streaming do engine S3(Azure)Queue. #95467 (Kseniia Sumarokova).
- Corrige a atualização das políticas de linha atribuídas ao usuário inicial em consultas distribuídas. #95469 (Vitaly Baranov).
- Corrige a verificação de discos criptografados em plain_rewritable (corrige a possível ocorrência de
It is not possible to register multiple plain-rewritable disks with the same object storage prefix). #95470 (Azat Khuzhin).
- A função de tabela
mergeTreeProjection não tinha uma verificação de acesso, o que permitia que usuários sem permissão SELECT em uma tabela (mas com permissões para funções de tabela) lessem dados de suas projeções. Esta correção adiciona a mesma verificação de acesso que mergeTreeIndex e mergeTreeAnalyzeIndexes já possuem. #95480 (Alexey Milovidov).
- Corrige um possível erro lógico na leitura da subcoluna size de subcolunas dinâmicas dos tipos Dynamic/JSON. #95573 (Pavel Kruglov).
- Corrige uma regressão na replicação zero-copy (experimental), introduzida por #94262, em que partes compartilhadas podiam ser excluídas antes de outras réplicas terminarem de obtê-las. #95597 (filimonov).
- Corrige falha ao aplicar
tupleElement a arrays de JSON. Fecha #95581. #95647 (Pavel Kruglov).
- Corrige uma exceção de erro lógico ao usar um matcher (
*) dentro de uma função lambda em uma cláusula VALUES de um JOIN com USING. Fecha #93675. #95661 (Vladimir Cherkasov).
- Corrigido o erro lógico
There was an error: Cannot obtain error message ao aguardar um DDL distribuído e excluir simultaneamente o banco de dados Replicated. Corrige #95539. #95664 (Alexander Tokmakov).
- Corrigida a função
IN, que retornava resultados incorretos com valores NULL quando transform_null_in está habilitado. Fecha #65776. #95674 (Nihal Z. Miaji).
- Trata corretamente os tipos LowCardinality Nullable em
CAST quando a configuração cast_keep_nullable está habilitada. Fecha #95670. #95747 (Alexey Milovidov).
- Corrige a compactação de dados particionados do Delta Lake. #95773 (Kseniia Sumarokova).
- Corrige condição de corrida na coluna Nullable de join em filtros de runtime. #95775 (Hechem Selmi).
- Corrige um possível erro lógico na consulta com matcher (
*, table.*) e analyzer_compatibility_join_using_top_level_identifier quando a coluna USING tem tipos diferentes nas tabelas e na lista SELECT. Fecha #90477. #95808 (Vladimir Cherkasov).
- Corrige falhas de segurança de memória em operações paralelas de thread pool (backups, agregação, consultas distribuídas) que poderiam causar exceções quando ocorria um erro durante o agendamento de tarefas. #95818 (Raúl Marín).
- Corrige uma falha no
DROP WORKLOAD quando executado concorrentemente com consultas que usam o workload que está sendo removido. #95856 (Alexey Milovidov).
- Corrige a lentidão ao consultar tabelas de sistema com um usuário que tem permissões limitadas em muitos bancos de dados. Fecha #89371. #95874 (pufit).
- Corrige a execução de tupleElement em JSON com caminhos aninhados; antes, isso podia levar a um resultado incorreto de consulta. #95907 (Pavel Kruglov).
- Foi corrigido um erro
NOT_SUPPORTED que podia ocorrer ao usar o algoritmo de JOIN direct com uma tabela MergeTree vazia. #95935 (Vladimir Cherkasov).
- Corrigido o problema em que o cliente não sugeria nem autocompletava nomes de alias para configurações, fecha #92190. #95945 (phulv94).
- Corrigido o event_date em system.asynchronous_metric_log. #95947 (Raúl Marín).
- Corrigido o problema de ignorar paths no tipo de dado JSON. Antes, com
JSON(SKIP path), todas as chaves JSON com o prefixo path eram ignoradas, inclusive chaves como "pathpath", o que podia levar à perda de dados nesses paths durante a inserção. Agora, isso foi corrigido, e apenas a chave "path" é ignorada. #95948 (Pavel Kruglov).
- Uma parte com projeções desconhecidas não deve ser marcada como perdida para sempre. #95952 (Mikhail Artemenko).
- Corrige o problema em que uma string vazia passa a ser
NULL em uma tabela Join com chave Nullable(String). Fecha #71414. #96002 (Alexey Milovidov).
- Agora o mecanismo PostgreSQL pode ler corretamente
BOOLEAN[]. Fecha #72754. #96006 (Alexey Milovidov).
- Corrige o formato
ProtobufList no caso de leitura de um arquivo vazio. Fecha #70059. #96007 (Alexey Milovidov).
- Corrige o formato
ProtobufList, que gerava um registro fantasma em tabelas vazias. Fecha #72596. #96010 (Alexey Milovidov).
- Corrigida a incompatibilidade de tipos na função
if entre UInt64 e Int32 em um caso incomum de consultas distribuídas com PREWHERE e inferência de tipos. Fecha #70017. #96012 (Alexey Milovidov).
- Corrigidas consultas compiladas com
JIT que envolvem o tipo Bool. #96013 (Alexey Milovidov).
- Corrige erro lógico na leitura de uma coluna UUID a partir de uma coluna TEXT do SQLite. Fecha #71263. #96016 (Alexey Milovidov).
- Corrige a conversão de tipos na engine SQLite para
DateTime, Date, UUID e outros tipos. Fecha #73481. #96017 (Alexey Milovidov).
- Valores
FixedString foram escapados incorretamente em consultas a bancos de dados externos, SQLite e PostgreSQL. Corrige #73519. Em coautoria com @jh0x. #96019 (Alexey Milovidov).
- Corrige falha de asserção em WindowTransform com um offset PRECEDING grande. Fecha #75852. #96026 (Alexey Milovidov).
- Corrige um bug com possível corrupção de dados quando inserts assíncronos concorrentes usam os mesmos nomes de parâmetros, mas contêm valores diferentes. #96035 (Seva Potapov).
- Corrigido o período dos profilers globais (controlados por
global_profiler_real_time_period_ns e global_profiler_cpu_time_period_ns). Em vez do valor configurado, era usado um valor truncado, fazendo com que o profiler fosse despertado mais vezes do que o previsto. #96048 (Antonio Andelic).
- Anteriormente, se o arquivo de dados de referência no arquivo de manifesto do Iceberg para exclusão por posição estivesse presente em uma entrada, mas fosse NULL, não obtínhamos os limites corretos para os arquivos de dados correspondentes. Este PR corrige esse bug. #96061 (Daniil Ivanik).
- Corrigida a revogação de papéis padrão. #96103 (Vitaly Baranov).
- Corrige um use-after-free na análise de índice em uma combinação rara de
use_primary_key desabilitado e um número muito grande de disjunções de condições que usam o índice. #96112 (Alexey Milovidov).
- Corrige uma regressão no codec
Gorilla quando um tamanho especificado explicitamente não corresponde ao tamanho do tipo de dado e o buffer é pequeno demais. Em versões anteriores, isso gerava uma exceção durante a descompressão. Fecha #78253. #96118 (Alexey Milovidov).
- Evita deadlock em dicionários carregados quando um dicionário faz referência a uma tabela Merge que, por sua vez, faz referência a ele recursivamente. Fecha #78360. #96120 (Alexey Milovidov).
- Corrige o uso de valor não inicializado em
formatDateTime com especificadores de formato sem largura fixa, como os dos estilos MySQL e JODA. #96133 (Alexey Milovidov).
- A combinação das configurações
use_const_adaptive_granularity e index_granularity_bytes (o que significa “granularidade não adaptativa”) levou a um erro no cálculo do número de linhas a serem lidas e a uma exceção. #96143 (Alexey Milovidov).
- Executar uma mutação ALTER UPDATE inválida em tabelas no armazenamento de objetos do tipo arquivo, como S3 e Azure, podia levar ao desreferenciamento de nullptr. Fecha #92994. #96162 (Alexey Milovidov).
- Corrigido
AccessRights::contains, que retornava resultados incorretos com revogações parciais. #96170 (pufit).
- Corrige colisão de hash no cache de condições de consulta para constantes de CTE após constant folding, o que poderia levar a um resultado de consulta incorreto. Fecha #96060. #96172 (Alexey Milovidov).
- Corrige um possível deadlock em ProcessList. Isso pode acontecer devido a uma possível inversão de bloqueios se o rastreador de overcommit de memória for acionado enquanto adicionamos uma tarefa ao verificador de cancelamento. #96182 (Antonio Andelic).
- Corrigido um bug em que consultas envolvendo junções externas (LEFT, RIGHT ou FULL) combinadas com vários INNER JOINs podiam retornar resultados incorretos devido à reordenação inválida das junções. Quando a condição ON de uma junção externa fazia referência a colunas de várias tabelas já unidas anteriormente, o otimizador não levava em conta todas as dependências entre as tabelas e podia reordenar as junções de forma incorreta, resultando na omissão de linhas. Fecha #95972. #96193 (Vladimir Cherkasov).
- Quando uma tabela não tem estatísticas definidas, o ClickHouse não deve tentar carregá-las. Isso evita uma certa sobrecarga (mais de 100 ms) na verificação da existência dos arquivos de estatísticas. (issue #96068). #96233 (Han Fei).
- Corrige
optimize_syntax_fuse_functions para não converter sum/count/avg em sumCount() quando o argumento de agregação é LowCardinality(Nullable). Fecha #95390. #96239 (Nihal Z. Miaji).
- Corrigida a poda incorreta de partições para as funções
not IN e not has em alguns casos. #96241 (Nihal Z. Miaji).
- Correção de
stack-use-after-scope no índice de similaridade vetorial. #96259 (Alexey Milovidov).
- Corrige o executor de testes, que não reconhecia comentários com dica de erro quando uma consulta era precedida por um comentário SQL. #96336 (Yakov Olkhovskiy).
- Corrige erro lógico em KeyCondition quando uma tabela tem chave primária Nullable e a consulta usa a função
coalesce, com o primeiro argumento constante. #96340 (Alexey Milovidov).
- A interação de
GROUPING SETS, group_by_use_nulls e o tipo de dado Tuple com LowCardinality em seu interior podia produzir uma estrutura de bloco inesperada no pipeline de consulta, levando a um erro lógico. Isso surgiu após a introdução de Tuples Nullable. #96358 (Alexey Milovidov).
- Era possível criar uma tabela com uma expressão vazia
() como índice, o que resultava em um acesso inválido à memória. #96363 (Alexey Milovidov).
- Corrigido um travamento no analyzer antigo com JOIN e aliases duplicados. #96405 (Ilya Golshtein).
- Corrigido o erro
Nested columns sizes are inconsistent with local_discriminators causado por uma otimização incorreta de filtragem in-place para colunas Variant. #96410 (Alexey Milovidov).
- Corrigido
CREATE TABLE ... CLONE AS ..., que ignorava o qualificador completo da tabela de origem. #96415 (Hasyimi Bahrudin).
- Corrigido o cancelamento da função de tabela
mysql com KILL QUERY e com o cancelamento da consulta (Ctrl+C) no clickhouse-client. #96437 (Roman Vasin).
- Corrige
livelock na thread de verificação de cancelamento para consultas com valores elevados de max_execution_time. #96450 (Sergei Trifonov).
- Corrige um erro lógico que ocorre em alguns casos quando
LIMIT/OFFSET fracionário é usado em consultas distribuídas. #96475 (Nihal Z. Miaji).
- Corrige o desreferenciamento de ponteiro nulo em certas expressões com funções lambda. #96479 (Alexey Milovidov).
- Corrige resultados incorretos quando colunas
LowCardinality são convertidas em Nullable. #96483 (Nihal Z. Miaji).
- Corrige um crash ao criar uma tabela Iceberg com uma cláusula
ORDER BY que faz referência a uma coluna inexistente ou usa um argumento posicional. Fecha #93280. #96484 (Konstantin Vedernikov).
- Corrigida a exceção de filtro em tempo de execução para colunas Tuple com subcampos Nullable. #96509 (Alexey Milovidov).
- Corrigida a exceção
LOGICAL_ERROR no leitor nativo do Parquet V3 quando a coluna de filtro PREWHERE contém valores UInt8 não booleanos. #96594 (Alexey Milovidov).
- Corrige a regeneração implícita de índice em tabelas replicadas durante alterações de metadados. #96600 (Raúl Marín).
- Corrige uma condição de corrida em DROP WORKLOAD. #96614 (Sergei Trifonov).
- Corrige um bug nas gravações em tabelas Iceberg em que inserções particionadas podiam gerar uma distribuição incorreta dos dados entre os arquivos de partição. #96620 (Konstantin Vedernikov).
- Corrigido o
heap-use-after-free em CREATE TABLE com restrições. #96669 (Nikita Taranov).
- Validar a versão witness em bech32 para evitar estouro de buffer. #96671 (Raúl Marín).
- Corrige erros retornados por
system.tables quando um catálogo REST de lago de dados é criado com uma configuração auth_header inválida. #96680 (Han Fei).
- Corrigido o problema em que
min(timestamp) retornava epoch (1970-01-01) via _minmax_count_projection após um merge de TTL, quando todas as linhas de um bloco eram filtradas. #96703 (Raquel Barbadillo).
- Melhorada a validação da configuração
iceberg_metadata_file_path para evitar path traversal e garantir que o arquivo de metadados especificado esteja dentro do diretório da tabela. #96754 (Daniil Ivanik).
- Corrige travamento em
ifNull com argumento Variant usado em GROUP BY. #96790 (Alexey Milovidov).
- Corrigidas colisões nas chaves de cache entre tabelas com a configuração
table_disk=1. #96818 (Raufs Dunamalijevs).
- Corrige a thread de limpeza do MemoryWorker que ficava travada devido a uma race condition. #96819 (Antonio Andelic).
- Não registre em logs dados contendo credenciais em catálogos Iceberg. #96831 (Konstantin Vedernikov).
- Corrige o código de saída do clickhouse-client após erro no servidor. #96841 (Vitaly Baranov).
- Consultas com CROSS JOINs e réplicas paralelas habilitadas podiam retornar um resultado incorreto. Corrige #74337. #96848 (Igor Nikonov).
- Corrigidas consultas
ALTER TABLE DROP COLUMN que falhavam quando uma atualização leve já havia sido executada anteriormente na mesma coluna. #96861 (Anton Popov).
- Corrige estouro de pilha (travamento) ao criar backups em arquivo (
.zip, .tzst) em um disco de armazenamento de objetos plain_rewritable. #96872 (Alexey Milovidov).
- Corrige o travamento do servidor quando o backup falha por falta de espaço em disco ou outros erros de E/S no sistema de arquivos de destino. #96873 (Alexey Milovidov).
- Corrige
EXCEPT ALL e INTERSECT ALL, que ignoravam a multiplicidade das linhas e se comportavam como suas versões DISTINCT. #96876 (Alexey Milovidov).
- Corrigida a exceção
std::terminate em indexOfAssumeSorted quando chamada com tipos incompatíveis (por exemplo, um array IPv4 com um valor de busca inteiro). #96877 (Alexey Milovidov).
- Corrige a exceção
Bad cast from type DB::ColumnNullable to DB::ColumnString ao usar funções de janela com group_by_use_nulls = 1 e CUBE/ROLLUP/GROUPING SETS. #96878 (Alexey Milovidov).
- Corrige resultados incorretos quando expressões compiladas com JIT convertem
DateTime em DateTime64 (por exemplo, em CASE/if/multiIf com tipos DateTime mistos). O valor era reinterpretado em vez de ser dimensionado corretamente, gerando timestamps incorretos após a compilação da expressão entrar em ação. #96879 (Alexey Milovidov).
- Corrigida a exceção de erro lógico em
CoalescingMergeTree quando uma expressão de índice de salto produz uma coluna constante (por exemplo, bloom_filter em ifNotFinite(1, c0) para uma coluna inteira). #96880 (Alexey Milovidov).
- Corrige o número de porta incorreto na mensagem de erro ao se conectar acidentalmente via HTTP à porta do protocolo nativo com TLS habilitado. #96881 (Alexey Milovidov).
- Corrige o fato de
SETTINGS por subconsulta não ser aplicado a funções de tabela como file em CTEs e subconsultas. #96882 (Alexey Milovidov).
- Corrige vazamento de memória em objetos BIO ao ler certificados X509. #96885 (Alexey Milovidov).
- Corrige a exceção
LOGICAL_ERROR no analisador de consultas quando uma expressão lambda é passada em um contexto em que se espera um valor concreto (por exemplo, como argumento acumulador de arrayFold). #96892 (Alexey Milovidov).
- Corrige a exceção
ColumnNullable is not compatible with original ao converter tipos aninhados complexos (Array de Nullable Tuple contendo Map com valores Nullable Enum). #96924 (Alexey Milovidov).
- Corrige uma condição de corrida no carregamento paralelo do Dicionário
HASHED com shards, que ocasionalmente podia fazer com que algumas linhas não fossem carregadas. #96953 (Alexey Milovidov).
- Corrige uma race condition entre
REPLACE PARTITION e mutações em segundo plano que poderia fazer com que tanto os dados antigos quanto os novos permanecessem visíveis após a substituição. #96955 (Alexey Milovidov).
- Correção na função
arrayJoin, que produzia linhas duplicadas quando usada com INNER JOIN e cláusula WHERE, causada pela otimização parcial de push-down de predicados, que empurrava incorretamente filtros contendo arrayJoin para baixo de um JOIN. #96989 (Alexey Milovidov).
- Corrige falha (SEGFAULT) em
clearCaches causada por BlockIO::operator= não mover query_metadata_cache, o que levava à destruição prematura de snapshots de armazenamento em cache e ao uso do armazenamento MergeTreeData após sua liberação. #96995 (Alexey Milovidov).
- Correção de falha de asserção em
IfTransformStringsToEnumPass quando a função if ou transform retorna Nullable(String) (por exemplo, com GROUP BY ... WITH CUBE e group_by_use_nulls = true). #97002 (Alexey Milovidov).
- Corrige dados incorretos gravados durante
INSERT ... SELECT com UNION ALL e JOIN, em que colunas constantes do tipo string podiam receber valores errados após a compactação de blocos. #97019 (Hasyimi Bahrudin).
- Corrige a exceção
assert_cast (ou corrupção silenciosa de dados em builds de release) ao gerar estatísticas de coluna após ALTER TABLE MODIFY COLUMN alterar o tipo da coluna. #97027 (Alexey Milovidov).
- Corrige leituras de memória não inicializada no Azure Blob Storage, no protocolo SSH e nas interfaces Arrow Flight. #97053 (Alexey Milovidov).
- Corrige casos em que índices afetavam o resultado de consultas com ROW POLICY/PREWHERE e FINAL. #97076 (Yarik Briukhovetskyi).
- Corrige a condição de corrida remanescente entre
REPLACE PARTITION e mutações em segundo plano em tabelas MergeTree, que poderia fazer dados antigos reaparecerem. #97105 (Alexey Milovidov).
- Corrige índices implícitos em colunas de alias e realiza a validação completa antes de criá-los. #97115 (Raúl Marín).
- Corrige um erro lógico em
FunctionVariantAdaptor em funções que exigem argumentos const, como arrayROCAUC. #97116 (Bharat Nallan).
- Corrige mutações travadas quando
PartCheckThread recoloca na fila um GET_PART para uma parte que já sofreu mutação, deixando entradas fantasma em parts_to_do. #97162 (Alexey Milovidov).
- Corrige a estimativa do número de linhas no plano de consulta para subconsultas com
ORDER BY ... LIMIT, o que poderia levar o otimizador a escolher uma ordem de join subótima. #97193 (Alexander Gololobov).
- Corrige a exceção
LOGICAL_ERROR em FunctionVariantAdaptor quando uma função que opera em colunas do tipo Variant retorna o tipo Nothing, o que pode acontecer com arrays vazios em consultas UNION ALL. #97213 (Alexey Milovidov).
- Corrige uma condição de corrida durante operações de cópia multipart no S3 (por exemplo, durante
BACKUP/RESTORE no S3) que poderia causar exceções em caso de acesso concorrente. #97227 (Azat Khuzhin).
- Corrige a exceção
LOGICAL_ERROR quando arrayJoin na cláusula WHERE referencia colunas de ambos os lados de um JOIN. #97239 (Alexey Milovidov).
- Correção da exceção
LOGICAL_ERROR ao ler a subcoluna .size de um Nullable(String) esparso em um Tuple com PREWHERE. #97264 (Alexey Milovidov).
- Corrige a exceção “O número de linhas no fragmento lazy não corresponde ao número de offsets” em
LazyMaterializingTransform ao ler tabelas com granularidade de índice não adaptativa (index_granularity_bytes = 0) usando ORDER BY ... LIMIT. #97270 (Alexey Milovidov).
- Corrige o
SYSTEM RESTART REPLICA, que fazia a tabela desaparecer do banco de dados quando a recriação da tabela falhava com uma exceção não relacionada ao ZooKeeper (por exemplo, limite de memória), causando divergências no hash dos metadados em DatabaseReplicated. #97276 (Alexey Milovidov).
- O campo
readonly em system.merge_tree_settings agora reflete corretamente que certas configurações de MergeTree (por exemplo, index_granularity) são sempre somente leitura. #97277 (Robert Schulze).
- Corrige uma falha durante a otimização de
count() em tabelas MergeTree quando o snapshot do armazenamento foi criado sem dados. #97281 (Pablo Marcos).
- Corrige uma possível falha ao resolver nomes de função com base em informações de depuração para stack traces. #97294 (Azat Khuzhin).
- Corrige erro lógico em analyzer_compatibility_join_using_top_level_identifier e nas colunas ALIAS. Fecha #96228. #97297 (Vladimir Cherkasov).
- Corrigida a exceção
LOGICAL_ERROR em applyOrder ao usar colunas indexadas por texto com a cláusula QUALIFY. #97313 (Alexey Milovidov).
- A tabela de sistema
system.functions agora exibe categories = 'Internal' para funções internas, em vez de categories = ''. #97315 (Robert Schulze).
- Consulta com sequência de RIGHT JOIN e réplicas paralelas habilitadas pode produzir resultado incorreto. Corrige #74341. #97316 (Igor Nikonov).
- Corrige erros espúrios de
TABLE_UUID_MISMATCH que podiam ocorrer com views materializadas atualizáveis e em outros cenários em que tabelas são renomeadas. #97323 (Azat Khuzhin).
- Corrigido segfault no backup de
StorageKeeperMap devido a uso após liberação de um ponteiro de armazenamento inválido em um lote lazy de backup. #97336 (Alexey Milovidov).
- Corrige a função
exists com uma subconsulta escalar dentro de um ALTER UPDATE/DELETE quando mutations_execute_subqueries_on_initiator está habilitado. A subconsulta escalar era avaliada incorretamente, o que podia levar a um erro ou a um comando de mutação corrompido que impedia o carregamento da tabela na próxima reinicialização do servidor. #97347 (Kirill Kopnev).
- Corrige a exceção lógica
Unexpected return type from equals. Expected Nullable(UInt8). Got Const(LowCardinality(Nullable(UInt8))) ao comparar NULL com uma coluna do tipo Variant que contém tipos LowCardinality. #97379 (Alexey Milovidov).
- Corrige uma possível condição de corrida quando
EXCHANGE TABLES é executado em paralelo com o cache de consultas distribuído por shards habilitado. #97411 (Konstantin Vedernikov).
- Corrige a exceção
LOGICAL_ERROR na conversão de Array para QBit quando nullable_source de um wrapper Tuple externo substitui a coluna de array convertida por uma coluna com tipo incompatível. Fecha #97389. #97413 (Alexey Milovidov).
- Corrige a inconsistência no round-trip da formatação de AST para literais de tupla com alias entre parênteses; por exemplo,
(('a', 'b') AS x) era reformatado incorretamente como tuple(('a', 'b') AS x). #97418 (Alexey Milovidov).
- Corrige uma exceção durante inserções assíncronas com desduplicação quando uma falha de parsing resultava em um bloco vazio, com zero linhas. #97460 (Sema Checherinda).
- Corrige a exceção “O número de linhas no fragmento lazy não corresponde ao número de offsets” em
LazyMaterializingTransform ao ler tabelas com granularidade de índice não adaptativa (index_granularity_bytes = 0) usando ORDER BY ... LIMIT. #97482 (Alexey Milovidov).
- Corrige as configurações de inserção no Iceberg. Adiciona um alias para a configuração
allow_experimental_insert_into_iceberg. #97483 (Konstantin Vedernikov).
- Corrige
ACCESS_DENIED para usuários sem a permissão CREATE TEMPORARY TABLE quando a otimização optimize_inverse_dictionary_lookup reescreve os predicados dictGet(...). O ClickHouse agora ignora essa reescrita e executa a expressão original. Fecha #97269. #97484 (Nihal Z. Miaji).
- Corrigida falha de asserção (exceção em builds de depuração/com sanitizer) em
Set e MergeTreeIndexSet ao processar colunas com subcolunas esparsas internas (por exemplo, colunas Tuple de partes do MergeTree com perfis diferentes de serialização esparsa). #97493 (Alexey Milovidov).
- Corrige um possível use-after-free no StorageKafka2. #97520 (Bharat Nallan).
- Correção de
INTO OUTFILE com TRUNCATE e a configuração into_outfile_create_parent_directories quando o caminho de saída contém diretórios. #97549 (Alexey Milovidov).
- Corrigido o erro
BAD_ARGUMENTS ao consultar tabelas com expressões lambda em colunas ALIAS por meio da função de tabela merge() com o analisador habilitado. #97551 (Alexey Milovidov).
- Corrigida a exceção em
system.zookeeper_info quando o zxid do Keeper é 0. #97553 (Alexey Milovidov).
- Corrigido um possível erro lógico no Dicionário
ip_trie quando o tipo da chave não é String. #97555 (Bharat Nallan).
- Corrige a falha na autenticação OAuth do REST catalog para o
RestCatalog base (ela só funcionava em catálogos derivados, como OneLakeCatalog). Isso quebrou o REST catalog padrão após a introdução do catálogo BigLake. #97561 (Konstantin Vedernikov).
- As funções de geometria (
perimeterSpherical, areaSpherical etc.) agora aceitam subtipos individuais de geometria (Polygon, Ring, Point etc.), além do tipo Variant Geometry. #97571 (Alexey Milovidov).
- Corrige a exceção
LOGICAL_ERROR ao usar isNull/isNotNull em subcolunas de tipos Nullable(Tuple(... Nullable(T) ...)). Fecha #97224. #97582 (Alexey Milovidov).
- Corrigida a desreferenciação de ponteiro nulo ao aplicar patch parts durante atualizações leves. #97583 (Alexey Milovidov).
BaseSettings::readBinary passa o índice de accessor.find para field_infos[] sem verificar o valor sentinela que indica “não encontrado” (isto é, -1), o que pode causar um acesso fora dos limites de std::vector. O problema foi detectado graças ao hardening do libcxx. Isso provavelmente ocorreu durante a desserialização do plano de consulta, quando um servidor mais novo envia uma configuração desconhecida para um servidor mais antigo. O método de leitura baseado em string já trata isso corretamente; em readBinary, faltava a mesma verificação. #97585 (Miсhael Stetsyuk).
- Corrige resultados incorretos em consultas
UNION ALL em que um dos ramos tinha um predicado sempre falso — esse ramo lia dados indevidamente em vez de não retornar nada. #97620 (Bharat Nallan).
- Corrige a falha em
IN (col) com uma única referência de coluna, que resultava no erro UNSUPPORTED_METHOD. #97646 (Alexey Milovidov).
- Corrige a exceção de erro lógico em
GROUP BY ... WITH ROLLUP/CUBE quando as chaves incluem LowCardinality(Nullable(...)) dentro de Nullable(Tuple(...)). #97647 (Alexey Milovidov).
- Corrige a inconsistência na formatação da AST para
NOT (1, 1, 1), que poderia causar LOGICAL_ERROR em compilações de depuração. #97653 (Alexey Milovidov).
- Corrige a exceção de
keeper-converter ao encontrar arquivos vazios de log de transações do ZooKeeper. #97673 (Alexey Milovidov).
Melhorias em build, testes e empacotamento
- O ClickHouse agora pode ser compilado com clang-23 (master). #95578 (Alexey Milovidov).
- Corrige a definição forçada de
is_local como false quando bind_host está configurado e a substitui por um teste de integração. Complemento de #74741. #93109 #96018 (Zhigao Hong).
- Testes de estresse: corrigir os testes de estresse e de upgrade na CI. ignorar as tags
no-{build}. adicionar randomização para compatibilidade. #94693 (Nikita Fomichev).
- Disponibilizar o binário parser_memory_profiler a partir da build. A ferramenta pode ser usada para analisar o consumo de memória da AST. #95826 (Ilya Yatsishin).
- Adicionada a flag
--symbolize à ferramenta parser_memory_profiler, que gera arquivos .heap.sym com os símbolos resolvidos nos resultados. #96477 (Ilya Yatsishin).
- Fixar imagens Docker de terceiros em versões específicas nos testes de integração. #96500 (Alexey Milovidov).
- Restaura a possibilidade de fazer a vinculação dinâmica do
OpenSSL. Isso não é recomendado e não é usado em nenhum build de produção, mas a opção ainda existe para os entusiastas da Internet. #96506 (Govind R Nair).
- Redução do intervalo do
magic_enum de [-100, 1000] para o padrão [-128, 127] com o uso de uma especialização por tipo para Coordination::OpNum, melhorando o tempo de compilação. #96632 (Alexey Milovidov).
- Removidos templates C++ desnecessários das classes Function para reduzir o tempo de compilação. #96646 (Alexey Milovidov).
- Mover a geração de
StorageSystemLicenses para a etapa de configuração, a fim de melhorar o paralelismo da compilação. #96697 (Alexey Milovidov).
- Verificação de licenças em paralelo. #96727 (Raúl Marín).
- Adicionar teste funcional sem estado para dar suporte ao protocolo SSH. #96996 (Alexey Milovidov).
- Adiciona o Kafka 3.9.0 à infraestrutura de testes funcionais stateless, permitindo testar diretamente os motores de tabela Kafka e Kafka2 usando o ClickHouse Keeper como ZooKeeper. Seis novos testes stateless cobrem operações básicas de produção/consumo, colunas virtuais, INSERT, múltiplos formatos, tratamento de mensagens corrompidas e armazenamento de offsets com base no Keeper. #96997 (Alexey Milovidov).
- Adiciona um workflow de CI para compilar uma toolchain clang otimizada com PGO+BOLT. #96991 (Alexey Milovidov).
- Use a build do LLVM/Clang otimizada com PGO no CI, o que deve gerar um ganho de 20..30% na velocidade de compilação. #97031 (Alexey Milovidov).
- Substituídas as funções matemáticas da glibc por implementações do llvm-libc. #90151 (Konstantin Bogdanov).
- Atualização do Boost da versão 1.83 para 1.90, corrigindo uma falha de asserção no
devector em builds de depuração. #97037 (Alexey Milovidov).
- Atualizado
postgres para REL_18_1. #95189 (Konstantin Bogdanov).
- Passa a usar
libexpat 2.7.3. #95218 (Konstantin Bogdanov).
- Use
OpenSSL 3.5.5. #95345 (Konstantin Bogdanov).
- Use
simdjson v4.2.4. #97129 (Konstantin Bogdanov).
- Usa
libarchive 3.8.5. #97131 (Konstantin Bogdanov).
- Use
fast_float v8.2.3. #97133 (Konstantin Bogdanov).
- Use
abseil-cpp 20260107.1 e s2geometry v0.13.1. #97134 (Konstantin Bogdanov).
- Atualiza
libxml2 para 2.15.1. #95574 (Robert Schulze).
- Atualizadas 7 imagens Docker de teste de integração Tier-3, de imagens base EOL ou removidas para versões atualmente suportadas. #97314 (Rahul).
- Adiciona consultas do benchmark TPC-DS. #97349 (Raufs Dunamalijevs).
- Substitua as opções individuais do CMake para conjuntos de instruções x86 (
ENABLE_SSSE3, ENABLE_AVX2, NO_SSE3_OR_HIGHER, ARCH_NATIVE etc.) por uma única opção numérica X86_ARCH_LEVEL (1/2/3/4), alinhada aos níveis padrão de microarquitetura x86-64 já usados pelo sistema de despacho em tempo de execução. #97354 (Raúl Marín).
- Evita a instanciação de variantes de template
division_by_nullable=true para operações que não envolvem divisão em FunctionBinaryArithmetic, reduzindo o tempo de compilação e o tamanho do binário. #97496 (Raúl Marín).
- Reduza o volume de inclusões de
Exception.h removendo-o de cabeçalhos amplamente referenciados, como typeid_cast.h, assert_cast.h, Context_fwd.h, IDataType.h e vários cabeçalhos de Column. #97497 (Raúl Marín).
- Sempre use os cabeçalhos integrados do
compiler-rt (interfaces do sanitizer e do XRay) em vez dos cabeçalhos do compilador do host e, por padrão, compile as bibliotecas compiler-rt a partir do código-fonte. #97499 (Raúl Marín).
- Evita incluir os headers boost/multiprecision em
wide_integer_impl.h em plataformas com suporte adequado a long double, melhorando o tempo de compilação. #96633 (Alexey Milovidov).
- Implementar o job de cobertura de código com LLVM e habilitá-lo inicialmente para a branch master. #90952 (Alexey Bakharew).
- Habilita o hardening rápido do libcxx para builds de release. Isso é necessário principalmente para verificações de acesso fora dos limites. Dados os resultados dos testes de desempenho, não se espera impacto perceptível no desempenho. #94757 (Miсhael Stetsyuk).
- Corrige a formatação inconsistente causada por uma substituição incorreta de aliases no formatador. Fecha #82833. Fecha #82832. Fecha #68296. Esta alteração pode ser incompatível com versões anteriores: quando o analisador está desabilitado, determinadas consultas CREATE VIEW em que IN referencia um alias não podem ser processadas. Para evitar essa incompatibilidade, habilite o analisador (ele está habilitado por padrão desde a versão 24.3). #82838 (Alexey Milovidov).
- Os codecs
DEFLATE_QPL e ZSTD_QAT foram removidos. Recomenda-se que os usuários convertam os dados existentes compactados com DEFLATE_QPL ou ZSTD_QAT para outro codec antes da atualização. Observe que, para usar esses codecs, era necessário habilitar as configurações enable_deflate_qpl_codec e enable_zstd_qat_codec. #92150 (Robert Schulze).
- Melhoramos a depuração de UDF ao habilitar a captura de stderr em
system.query_log.exception. Antes, o stderr de UDF era registrado apenas em arquivos e não aparecia nos logs de consulta, o que tornava a depuração impossível. Agora, por padrão, o stderr dispara exceções e é acumulado por completo (até 1 MB) antes de ser gerado, para que tracebacks completos do Python e mensagens de erro apareçam em system.query_log.exception, facilitando a solução de problemas. #92209 (Xu Jia).
- A lista vazia de colunas na cláusula
JOIN USING () agora é considerada um erro de sintaxe. Antes, deveria resultar em INVALID_JOIN_ON_EXPRESSION durante a execução da consulta. Em alguns casos, como ao fazer join com o armazenamento Join, isso levava a LOGICAL_ERROR, corrigindo #82502. #92371 (Vladimir Cherkasov).
- Passa a usar correspondência parcial para
SKIP REGEXP no tipo JSON por padrão. Fecha #79250. #92847 (Pavel Kruglov).
- Revertida a alteração “Permitir INSERT em colunas ALIAS simples” (reverte ClickHouse/ClickHouse#84154). Ela não funciona com formatos personalizados e não é protegida por uma configuração. #92849 (Azat Khuzhin).
- Configuração para gerar erro caso um catálogo de lago de dados não tenha acesso ao armazenamento de objetos. #93606 (Konstantin Vedernikov).
- O engine de banco de dados
Lazy foi removido e não está mais disponível. Fecha #91231. #93627 (Alexey Milovidov).
- Remova o modo
transposed_with_wide_view de metric_log — ele não pode ser usado devido a um bug. Não é mais possível definir system.metric_log com esse modo. Isso reverte parcialmente #78412. #93867 (Alexey Milovidov).
- O agendamento de CPU para workloads agora é preemptivo por padrão. Consulte a configuração de servidor
cpu_slot_preemption. #94060 (Sergei Trifonov).
- Escapar os nomes dos arquivos de índice para evitar partes corrompidas. Com essa mudança, o ClickHouse não conseguirá carregar índices com caracteres não ASCII no nome criados por versões anteriores. Para lidar com isso, você pode usar a configuração do MergeTree
escape_index_filenames. #94079 (Raúl Marín).
- As configurações de formato
exact_rows_before_limit, rows_before_aggregation, cross_to_inner_join_rewrite, regexp_dict_allow_hyperscan, regexp_dict_flag_case_insensitive, regexp_dict_flag_dotall e dictionary_use_async_executor foram alteradas e agora são configurações regulares (não de formato). Esta é uma mudança puramente interna, sem efeitos visíveis para o usuário, exceto no caso (improvável) de você ter especificado alguma dessas configurações em definições de table engine Iceberg ou DeltaLake ou Kafka ou S3 ou S3Queue ou Azure ou Hive ou RabbitMQ ou Set ou FileLog ou NATS. Nesses casos, essas configurações antes eram ignoradas; agora, essas definições geram um erro. #94106 (Robert Schulze).
- As funções
joinGet/joinGetOrNull agora exigem privilégios SELECT na tabela Join subjacente. Após essa alteração, executar joinGet('db.table', 'column', key) exige que o usuário tenha o privilégio SELECT tanto nas colunas de chave definidas na tabela Join quanto na coluna de atributo que está sendo recuperada. Consultas sem esses privilégios falharão com ACCESS_DENIED. Para migrar, conceda as permissões necessárias usando GRANT SELECT ON db.join_table TO user para acesso à tabela inteira, ou GRANT SELECT(key_col, attr_col) ON db.join_table TO user para acesso no nível de coluna. Essa alteração afeta todos os usuários e aplicativos que dependem de joinGet/joinGetOrNull e para os quais concessões explícitas de SELECT não haviam sido configuradas anteriormente. #94307 (Vladimir Cherkasov).
- Verifica
SHOW COLUMNS em consultas CREATE TABLE ... AS .... Anteriormente, verificava SHOW TABLES, o que é um privilégio incorreto para esse tipo de verificação de permissão. #94556 (pufit).
- Torna o formato de saída
Hash independente do tamanho dos blocos. #94503 (Alexey Milovidov). Note que isso altera os valores de hash de saída em comparação com as versões anteriores.
- API HTTP e UI web embutida para o ClickHouse Keeper. #78181 (pufit e speeedmaster).
- A desduplicação de inserts assíncronos agora funciona com visões materializadas dependentes. Quando ocorre uma colisão por block_id, o bloco original é filtrado para remover as linhas associadas ao block_id, e as linhas restantes são transformadas com todas as consultas SELECT relevantes das visões materializadas; isso reconstrói o bloco original sem linhas conflitantes. #89140 (Sema Checherinda). Agora é permitido usar desduplicação com inserts assíncronos quando há visões materializadas envolvidas. #93957 (Sema Checherinda).
- Introduziu uma nova sintaxe e um novo framework para simplificar e ampliar a funcionalidade de índice de projeção. Isso dá continuidade a https://github.com/ClickHouse/ClickHouse/pull/81021. #91844 (Amos Bird).
- Adicionar suporte a índice de texto em colunas
Array. #89895 (Jimmy Aguilar Mena).
- Ativa
use_variant_as_common_type por padrão, o que permite usar tipos incompatíveis em um Array, em consultas UNION e nos ramos de if/multiIf/case. #90677 (Alexey Milovidov).
- Nova tabela de sistema
zookeeper_info. Implementa #88014. #90809 (Smita Kulkarni).
- Suporte ao tipo
Variant em todas as funções. #90900 (Bharat Nallan).
- Adiciona uma métrica
ClickHouse_Info ao endpoint /metrics do Prometheus, contendo principalmente informações de versão, de modo que seja possível criar gráficos para acompanhar informações detalhadas de versão ao longo do tempo. #91125 (Christoph Wurm).
- Introduz um novo comando de quatro letras
rcfg para o Keeper, que permite alterar a configuração do cluster. Esse comando oferece possibilidades mais amplas de alteração da configuração do que a solicitação padrão reconfigure. O comando recebe uma string json como argumento. O conjunto completo de bytes enviados à interface TCP deve ter esta forma: rcfg{json_string_length_big_endian}{json_string}. Alguns exemplos do comando podem ser assim: {"preconditions": {"leaders": [1, 2], "members": [1, 2, 3, 4, 5]}, "actions": [{"transfer_leadership": [3]}, {"remove_members": [1, 2]}, {"set_priority": [{"id": 4, "priority": 100}, {"id": 5, "priority": 100}]}, {"transfer_leadership": [4, 5]}, {"set_priority": [{"id": 3, "priority": 0}]}]}. #91354 (alesapin).
- Adiciona a função
reverseBySeparator, que inverte a ordem das substrings em uma string, separadas por um separador especificado. Fecha #91463. #91780 (Xuewei Wang).
- Adiciona a nova configuração
max_insert_block_size_bytes, que permite controlar com mais precisão a formação dos blocos inseridos. #92833 (Kirill Kopnev).
- É possível executar consultas DDL com a cláusula
ON CLUSTER em um banco de dados Replicated se a configuração ignore_on_cluster_for_replicated_database estiver habilitada. Nesse caso, o nome do cluster será ignorado. #92872 (Kirill).
- Implementada a função
mergeTreeAnalyzeIndexes. #92954 (Azat Khuzhin).
- Adiciona a nova configuração
use_primary_key. Defina-a como false para desabilitar a poda de grânulos com base na chave primária. #93319 (Nihal Z. Miaji).
- Adicionada a função de tabela
icebergLocalCluster. #93323 (Anton Ivashkin).
- Adicionada a função
cosineDistanceTransposed, que calcula uma aproximação da distância de cosseno entre dois pontos. #93621 (Raufs Dunamalijevs).
- Adicionada a coluna
files à tabela system.parts, que mostra o número de arquivos em cada parte de dados. #94337 (Match).
- Adiciona um escalonador max-min fair para controle de concorrência. Oferece mais equidade em cenários de alta sobresubscrição, quando muitas consultas competem por slots de CPU limitados. Consultas de curta duração não são prejudicadas por consultas de longa duração que acumularam mais slots ao longo do tempo. É habilitado pelo valor
max_min_fair da configuração do servidor concurrent_threads_scheduler. #94732 (Sergei Trifonov).
- Adicionada a possibilidade de o ClickHouse client substituir o SNI de TLS ao se conectar ao servidor. #89761 (Matt Klein).
- Suporte para tabelas temporárias em chamadas da função
joinGet. #92973 (Eduard Karacharov).
- Suporte para vetores de exclusão no mecanismo de tabela
DeltaLake. #93852 (Kseniia Sumarokova).
- Adicionado suporte a vetores de exclusão para
deltaLakeCluster. #94365 (Kseniia Sumarokova).
- Suporte ao Google Cloud Storage para lagos de dados. #93866 (Konstantin Vedernikov).
Funcionalidade Experimental
- A configuração
use_skip_indexes_on_data_read agora vem habilitada por padrão. Essa configuração permite aplicar filtragem em streaming ao mesmo tempo que os dados são lidos, melhorando o desempenho da consulta e o tempo de inicialização. #93407 (Shankar Iyer).
- Melhora o desempenho do
DISTINCT em colunas LowCardinality. Fecha #5917. #91639 (Nihal Z. Miaji).
- Otimize a função de agregação
distinctJSONPaths para que leia apenas os caminhos JSON nas partes de dados, e não a coluna JSON inteira. #92196 (Pavel Kruglov).
- Mais filtros foram propagados para as junções. #85556 (Nikita Taranov).
- Suporte a mais casos de push down da condição
ON da junção quando o filtro usa entradas de apenas um dos lados. Suporte a junções ANY, SEMI e ANTI. #92584 (Dmitry Novik).
- Permite usar conjuntos equivalentes para aplicar pushdown de filtros em
SEMI JOIN. Fecha #85239. #92837 (Dmitry Novik).
- Ignora a leitura do lado esquerdo do hash join quando o lado direito está vazio. Antes, líamos o lado esquerdo até o primeiro bloco não vazio, o que podia dar bastante trabalho em casos com filtragem intensa ou agregação. #94062 (Alexander Gololobov).
- Usando o método “fastrange” (Daniel Lemire) para particionar dados dentro do pipeline de consulta. Isso pode melhorar a ordenação paralela e as junções. #93080 (Alexey Milovidov).
- Melhora no desempenho de funções de janela quando
PARTITION BY coincide ou é um prefixo da chave de ordenação. #87299 (Nikita Taranov).
- O filtro externo é propagado até as views, o que permite aplicar PREWHERE em nós locais e remotos. Resolve #88189. #88316 (Igor Nikonov).
- Implementa a compilação JIT para mais funções. Fecha #73509. #88770 (Alexey Milovidov com Taiyang Li).
- Se um skip index usado em uma consulta
FINAL estiver em uma coluna que faz parte da chave primária, o passo adicional de verificar, em outras partes, a interseção com a chave primária é desnecessário e não é mais executado. Resolve #85897. #93899 (Shankar Iyer).
- Otimize o desempenho e o uso de memória para
LIMIT e OFFSET fracionários. #91167 (Ahmed Gouda).
- Corrigido o uso da lógica mais rápida de leitura aleatória no prefetcher do Parquet Reader V3. Fecha #90890. #91435 (Arsen Muk).
- Melhora o desempenho do
icebergCluster. Fecha #91462. #91537 (Yang Jiang).
- Não filtre por colunas virtuais em filtros constantes. #91588 (c-end).
- Reduz o uso de memória de INSERT/merges com partes wide em tabelas com muitas colunas ao habilitar buffers de gravação adaptativos. Adiciona suporte a buffers de gravação adaptativos em discos criptografados. #92250 (Azat Khuzhin).
- Melhorado o desempenho da busca de texto completo com índice de texto e o tokenizador
sparseGrams, reduzindo o número de tokens pesquisados no índice. #93078 (Anton Popov).
- A função
isValidASCII foi otimizada para casos positivos, ou seja, valores de entrada compostos apenas por ASCII. #93347 (Robert Schulze).
- A otimização de leitura em ordem agora reconhece quando as colunas de ORDER BY são constantes por causa das condições em WHERE, permitindo leituras eficientes em ordem inversa. Isso beneficia consultas multilocatário, como
WHERE tenant='42' ORDER BY tenant, event_time DESC, que agora podem usar InReverseOrder em vez de exigir uma ordenação completa.”. #94103 (matanper).
- Introduzida uma classe AST especializada para Enum para armazenar parâmetros de valor em pares (string, integer), em vez de filhos ASTLiteral, otimizando o consumo de memória. #94178 (Ilya Yatsishin).
- Análise distribuída de índices em múltiplas réplicas. Benéfica para armazenamento compartilhado e grandes volumes de dados no cluster. Isso se aplica ao SharedMergeTree (ClickHouse Cloud) e também pode se aplicar a outros tipos de tabelas MergeTree em armazenamento compartilhado. #86786 (Azat Khuzhin).
- Reduzir a sobrecarga dos filtros de runtime de JOIN desabilitando-os nos seguintes casos: - há bits demais definidos no filtro de Bloom - poucas linhas são filtradas em tempo de execução. #91578 (Alexander Gololobov).
- Use um buffer em memória para a entrada de subconsultas correlacionadas, a fim de evitar avaliá-la várias vezes. Parte de #79890. #91205 (Dmitry Novik).
- Permitir que todas as réplicas assumam intervalos órfãos durante a leitura com réplicas paralelas. Isso melhora o balanceamento de carga e reduz a latência na cauda longa. #91374 (zoomxi).
- A agregação/ordenação/join externos agora respeitam a configuração da consulta
temporary_files_codec em todos os contextos. Corrigidos os eventos de perfil ausentes para grace hash join. #92388 (Vladimir Cherkasov).
- Torna mais robusta a detecção do uso de memória das consultas para gravação em disco durante agregação/ordenação. #92500 (Azat Khuzhin).
- Estimativa da contagem total de linhas e das estatísticas de NDV (número de valores distintos) das colunas-chave de agregação. #92812 (Alexander Gololobov).
- Otimizada a compressão da lista de postings com simdcomp. #92871 (Peng Jian).
- Refatoração do processamento no modo Ordered do S3Queue com buckets. Isso também deve melhorar o desempenho, reduzindo o número de requisições ao Keeper. #92889 (Kseniia Sumarokova).
- As funções
mapContainsKeyLike e mapContainsValueLike agora podem usar um índice de texto em mapKeys() ou mapValues(), respectivamente. #93049 (Michael Jarrett).
- Reduza o uso de memória em sistemas que não sejam Linux (ative a limpeza imediata de páginas sujas do jemalloc). #93360 (Eduard Karacharov).
- Força o expurgo das arenas do jemalloc caso a proporção entre o tamanho das páginas sujas e
max_server_memory_usage exceda memory_worker_purge_dirty_pages_threshold_ratio. #93500 (Eduard Karacharov).
- Reduz o uso de memória da AST. #93601 (Nikolai Kochetov).
- Em alguns casos, vimos que o ClickHouse não respeita o limite de memória ao ler de uma tabela. Esse comportamento foi corrigido. #93715 (Nikita Mikhaylov).
- Habilita por padrão a extensão Keeper
CHECK_STAT e TRY_REMOVE. #93886 (Mikhail Artemenko).
- Interpretar os limites inferior e superior dos nomes de arquivo correspondentes a exclusões por posição a partir das entradas do arquivo de manifesto do Iceberg para selecionar melhor os arquivos de dados correspondentes. #93980 (Daniil Ivanik).
- Adicionadas mais duas configurações para controlar o número máximo de subcolunas dinâmicas em uma coluna JSON. A primeira é a configuração do MergeTree
merge_max_dynamic_subcolumns_in_compact_part (semelhante à já adicionada merge_max_dynamic_subcolumns_in_wide_part), que limita o número de subcolunas dinâmicas criadas durante o merge em uma parte Compact. A segunda é a configuração no nível da consulta max_dynamic_subcolumns_in_json_type_parsing, que limita o número de subcolunas dinâmicas criadas durante o parsing de dados JSON, permitindo especificar o limite no insert. #94184 (Pavel Kruglov).
- Otimiza ligeiramente a consolidação de colunas JSON em alguns casos. #94247 (Pavel Kruglov).
- Reduza os tamanhos das filas do pool de threads com base na experiência em ambiente de produção. Adicione uma verificação explícita do consumo de memória antes de ler qualquer dado do MergeTree. #94692 (Nikita Mikhaylov).
- Certifique-se de que o agendador dê preferência à thread MemoryWorker em caso de escassez de CPU, pois isso protege o processo do ClickHouse contra uma ameaça existencial. #94864 (Nikita Mikhaylov).
- Executa a limpeza de páginas sujas do jemalloc em uma thread separada da thread principal do MemoryWorker. Se a limpeza for lenta, isso poderá atrasar as atualizações do uso de RSS, o que pode levar ao encerramento do processo por falta de memória. Introduz a nova configuração
memory_worker_purge_total_memory_threshold_ratio para iniciar a limpeza de páginas sujas com base na proporção do uso total de memória. #94902 (Antonio Andelic).
system.blob_storage_log agora está disponível para o Azure Blob Storage. #93105 (Alexey Milovidov).
- Implementar
blob_storage_log para Local e HDFS. Corrigir um erro quando o S3Queue usava algo diferente do nome do disco ao registrar em blob_storage_log. Adicionar a coluna error_code a blob_storage_log. Dividir o arquivo de configuração de teste para simplificar os testes locais. #93106 (Alexey Milovidov).
clickhouse-client e clickhouse-local passarão a destacar grupos de dígitos (milhares, milhões etc.) em literais numéricos durante a digitação. Isso fecha #93100. #93108 (Alexey Milovidov).
- Adiciona suporte no
clickhouse-client a argumentos de linha de comando com espaço ao redor do sinal de igual. Fecha #93077. #93174 (Cole Smith).
- Com
<interactive_history_legacy_keymap>true</interactive_history_legacy_keymap>, o cliente de CLI agora pode voltar a usar Ctrl-R para a busca normal, como antes, enquanto Ctrl-T faz a busca fuzzy. #87785 (Larry Snizek).
- A instrução para limpar caches
SYSTEM DROP [...] CACHE dava a falsa impressão de que ela desabilitava o cache. O ClickHouse agora também oferece suporte à instrução SYSTEM CLEAR [...] CACHE, que é mais clara. A sintaxe antiga continua disponível. #93727 (Pranav Tiwari).
- Suporte a múltiplas colunas como chave primária no
EmbeddedRocksDB. Fecha #32819. #33917 (usurai).
- Agora é possível usar IN com valores não constantes em escalares (consultas como
val1 NOT IN if(cond, val2, val3)). #93495 (Yarik Briukhovetskyi).
- Impede que os
headers x-amz-server-side-encryption sejam propagados para as requisições S3 HeadObject, UploadPart e CompleteMultipartUpload, pois não são suportados. #64577 (Francisco J. Jurado Moreno).
- Rastreamento do particionamento do Hive para o modo ordenado no S3Queue. Resolve #71161. #81040 (Anton Ivashkin).
- Otimização da reserva de espaço no cache do sistema de arquivos.
FileCache::collectCandidatesForEviction será executado sem bloqueio exclusivo. #82764 (Kseniia Sumarokova).
- Suporte à estratégia de rotação composta (tamanho + tempo) para o log do servidor. #87620 (Jianmei Zhang).
- O cliente de CLI agora pode especificar
<warnings>false</warnings> em vez da opção de linha de comando --no-warnings. #87783 (Larry Snizek).
- Adiciona suporte à função de agregação
avg com valores Date, DateTime e Time como argumentos. Fecha #82267. #87845 (Yarik Briukhovetskyi).
- A otimização
use_join_disjunctions_push_down está habilitada por padrão. #89313 (Alexey Milovidov).
- Suporte a mais motores de tabela e tipos de fonte de dados em subconsultas correlacionadas. Fecha #80775. #90175 (Dmitry Novik).
- Se o schema da view parametrizada for especificado explicitamente, ele será exibido. Corrige #88875, #81385. #90220 (Grigorii Sokolik).
- Lida corretamente com a lacuna nas entradas de log do Keeper quando os logs estão antes do último índice confirmado. #90403 (Antonio Andelic).
- Melhorada a configuração
min_free_disk_bytes_to_perform_insert para funcionar corretamente com volumes JBOD. #90878 (Aleksandr Musorin).
- Agora é possível especificar a configuração
storage_class_name em coleções nomeadas para o mecanismo de tabela S3 e a função de tabela s3. #91926 (János Benjamin Antal).
- Suporte à inserção em zookeeper auxiliar via
system.zookeeper. #92092 (RinChanNOW).
- Adiciona novas métricas para o Keeper: os profile events
KeeperChangelogWrittenBytes, KeeperChangelogFileSyncMicroseconds, KeeperSnapshotWrittenBytes e KeeperSnapshotFileSyncMicroseconds, bem como as métricas de histograma KeeperBatchSizeElements e KeeperBatchSizeBytes. #92149 (Miсhael Stetsyuk).
- Adicionada uma nova configuração,
trace_profile_events_list, que limita o tracing com trace_profile_event à lista especificada de nomes de eventos. Isso permite uma coleta de dados mais precisa em workloads de grande porte. #92298 (Alexey Milovidov).
- Adiciona suporte a SYSTEM NOTIFY FAILPOINT para failpoints pausáveis. - Adiciona suporte a SYSTEM WAIT FAILPOINT fp PAUSE/RESUME. #92368 (Shaohua Wang).
- Adicionada a coluna
creation (implícita/explícita) em system.data_skipping_indices. #92378 (Raúl Marín).
- Permitir passar a descrição das colunas das tabelas dyn do YTsaurus para a fonte do dicionário. #92391 (MikhailBurdukov).
- Em #63985, passamos a permitir especificar todos os parâmetros necessários para a configuração de TLS individualmente por porta (consulte protocolos combináveis), de modo que não precisamos depender de uma configuração global de TLS. No entanto, a implementação ainda exige implicitamente a existência de uma seção de configuração global
openSSL.server, o que conflita com ambientes em que são necessárias configurações de TLS diferentes para portas diferentes. Por exemplo, em implantações keeper-in-server, precisamos de configurações de TLS separadas para a comunicação entre Keepers e as conexões do clickhouse client. #92457 (Miсhael Stetsyuk).
- Adiciona uma nova configuração
input_format_binary_max_type_complexity que limita o número total de nós de tipo que podem ser decodificados em formato binário para evitar payloads maliciosos. #92519 (Raufs Dunamalijevs).
- Passa a refletir as tarefas em execução em
system.background_schedule_pool{,_log}. Adiciona documentação. #92587 (Azat Khuzhin).
- Executa a consulta atual na busca com Ctrl+R no cliente se nenhuma correspondência for encontrada no histórico. #92749 (Azat Khuzhin).
- Adiciona suporte a
EXPLAIN indices = 1 como alias de EXPLAIN indexes = 1. Fecha #92483. #92774 (Pranav Tiwari).
- O leitor de Parquet agora permite ler como JSON colunas Tuple ou map:
select x from file(f.parquet, auto, 'x JSON') funciona mesmo que o tipo da coluna x em f.parquet seja tuple ou map. #92864 (Michael Kolupaev).
- Suporte a tuplas vazias no leitor de Parquet. #92868 (Michael Kolupaev).
- Recorre à cópia em modo leitura e escrita no Azure Blob Storage quando a cópia nativa falha com BadRequest (por exemplo, lista de blocos inválida). Antes, isso só era feito para o erro Unauthorized, observado ao copiar um blob entre diferentes contas de armazenamento. Mas às vezes também vemos o erro “The specified block list is invalid”. Agora, a condição foi atualizada para recorrer à leitura & escrita em todas as falhas da cópia nativa. #92888 (Smita Kulkarni).
- Corrige o throttling no endpoint de metadados do EC2 ao executar muitas consultas simultâneas no S3 com credenciais de perfil de instância do EC2. Antes, cada consulta criava seu próprio
AWSInstanceProfileCredentialsProvider, gerando solicitações simultâneas ao serviço de metadados do EC2, o que podia resultar em timeout e erros HTTP response code: 403. Agora, o provedor de credenciais fica em cache e é compartilhado entre todas as consultas. #92891 (Sav).
- Reformula a configuração
insert_select_deduplicate para permitir manter a compatibilidade com versões anteriores. #92951 (Sema Checherinda).
- Registrar tarefas em segundo plano mais lentas do que a média (
background_schedule_pool_log.duration_threshold_milliseconds=30) para evitar o excesso de logs de tarefas. #92965 (Azat Khuzhin).
- Em versões anteriores, alguns nomes de funções em C++ eram exibidos incorretamente (“mangled”) em
system.trace_log e system.symbols, e a função demangle não conseguia processá-los adequadamente. Corrige #93074. #93075 (Alexey Milovidov).
- Introduzida a configuração de backup
backup_data_from_refreshable_materialized_view_targets para não fazer backup de views materializadas atualizáveis. RMVs com estratégia de atualização APPEND são sempre incluídas no backup. #93076 (Julia Kartseva). #93658 (Julia Kartseva)
- Use informações mínimas de depuração em vez de não usar nenhuma informação de depuração para unidades de tradução pesadas, como funções. #93079 (Alexey Milovidov).
- Adicionado suporte de compatibilidade com o MinIO ao SDK C++ do AWS S3 por meio da implementação do mapeamento de códigos de erro para erros específicos do MinIO. Essa alteração permite que o ClickHouse trate corretamente e repita tentativas após erros do servidor MinIO ao usar implantações do MinIO em vez do AWS S3, melhorando a confiabilidade para usuários que executam armazenamento de objetos em clusters MinIO autogerenciados. #93082 (XiaoBinMu).
- Gravar perfis simbolizados do jemalloc (eliminando a necessidade de um binário durante a geração do perfil de heap). #93099 (Azat Khuzhin).
- Restaurada a ferramenta
clickhouse git-import — ela estava com problemas em commits grandes e inválidos. Veja https://presentations.clickhouse.com/2020-matemarketing/. #93202 (Alexey Milovidov).
- Não exibir senhas do armazenamento URL no log de consultas. #93245 (Konstantin Vedernikov).
- Suporte ao tipo
Geometry em flipCoordinates. #93303 (Bharat Nallan).
- Melhora a UX do SYSTEM INSTRUMENT ADD/REMOVE: usa literais String para nomes de funções, aplica patches a todas as funções correspondentes e permite usar function_name em
REMOVE. #93345 (Pablo Marcos).
- Adiciona uma nova configuração
materialize_statistics_on_merge que habilita/desabilita a materialização de estatísticas durante o merge. O valor padrão é 1. #93379 (Han Fei).
- O ClickHouse agora pode interpretar
SELECT sem parênteses em consultas DESCRIBE SELECT. Fecha #58382. #93429 (Yarik Briukhovetskyi).
- Adiciona aleatorização às verificações de integridade do cache com determinada probabilidade. #93439 (Kseniia Sumarokova).
- Adicione a configuração
type_json_allow_duplicated_key_with_literal_and_nested_object para permitir caminhos duplicados em JSON quando um deles for um literal e o outro, um objeto aninhado, por exemplo, {"a" : 42, "a" : {"b" : 42}}. Alguns dados podem ter sido criados antes de essa restrição a caminhos duplicados ter sido adicionada em https://github.com/ClickHouse/ClickHouse/pull/79317, e outras manipulações desses dados agora podem causar erros. Com essa configuração, esses dados antigos ainda podem ser usados sem erros. #93604 (Pavel Kruglov).
- Não imprimir valores de tipos simples em linhas separadas no Pretty JSON. #93836 (Pavel Kruglov).
- Quando há muitas instruções
alter table ... modify setting ..., pode acontecer de o bloqueio não ser adquirido em até 5 segundos. É melhor retornar timeout do que logical error. #93856 (Han Fei).
- Evita saída excessiva em caso de erro de sintaxe. Antes dessa mudança, era exibido o script SQL inteiro, que podia conter muitas consultas. #93876 (Alexey Milovidov).
- Calcule corretamente o tamanho em bytes da solicitação
check com estatísticas no Keeper. #93907 (Mikhail Artemenko).
- Adicionada a configuração
use_hash_table_stats_for_join_reordering para controlar se as estatísticas, em tempo de execução, do tamanho da tabela hash são usadas na reordenação de junções. Essa configuração é ativada por padrão, preservando o comportamento existente de collect_hash_table_stats_during_joins. #93912 (Vladimir Cherkasov).
- Agora, os usuários podem visualizar parcialmente configurações globais aninhadas do servidor na tabela
system.server_settings (por exemplo, logger.level). Isso se aplica apenas a configurações com estrutura fixa (sem listas, enumerações, repetições etc.). #94001 (Hechem Selmi).
QBit agora pode ser comparado por igualdade. #94078 (Raufs Dunamalijevs).
- Quando o Keeper detectar snapshot corrompido ou changelogs inconsistentes, lançar uma exceção em vez de abortar manualmente ou limpar os arquivos automaticamente. Isso deve resultar em um comportamento mais seguro do Keeper, com dependência de intervenção manual. #94168 (Antonio Andelic).
- Corrigido problema que podia deixar resíduos caso
CREATE TABLE falhasse. #94174 (Azat Khuzhin).
- Corrige o acesso à memória não inicializada (um bug no OpenSSL) quando é usada uma chave TLS protegida por senha. #94182 (Konstantin Bogdanov).
- Atualizado o chdig para v26.1.1. #94290 (Azat Khuzhin).
- Adiciona suporte a um particionamento mais genérico no modo ordenado do S3Queue. #94321 (Bharat Nallan).
- Adicionado o alias
use_statistics para a configuração allow_statistics_optimize. Isso é mais consistente com as configurações já existentes use_primary_key e use_skip_indexes. #94366 (Robert Schulze).
- Habilitada a configuração
input_format_numbers_enum_on_conversion_error na conversão de números para Enums, para verificar se o elemento existe. #94384 (Elmi Ahmadov).
- No modo ordenado do S3(Azure)Queue, limpar os nós com falha com base nos limites de rastreamento (antes isso era feito apenas no modo não ordenado, tanto para nós com falha quanto para nós processados; agora isso também será feito no modo ordenado, mas apenas para nós com falha). #94412 (Kseniia Sumarokova).
- Habilitado o gerenciamento de acesso para o usuário
default no clickhouse-local. O usuário default no clickhouse-local não tinha o privilégio access_management, o que fazia com que operações como DROP ROW POLICY IF EXISTS falhassem com o erro ACCESS_DENIED, embora esse usuário devesse ter acesso irrestrito. #94501 (Alexey Milovidov).
- Adicionado suporte a named collection para dicionários e tabelas do YTsaurus. #94582 (MikhailBurdukov).
- Adicionar suporte a coleções nomeadas definidas por SQL em BACKUP/RESTORE para S3 e Azure Blob Storage. Fecha #94604. #94605 (Pablo Marcos).
- Suporte ao bucketing baseado na chave de partição para S3Queue no modo ordenado. #94698 (Bharat Nallan).
- Adiciona uma métrica assíncrona com o tempo decorrido do
merge em execução há mais tempo. #94825 (Raúl Marín).
- Adiciona verificação do arquivo correspondente antes de aplicar a exclusão por posição usando
IcebergBitmapPositionDeleteTransform. #94897 (Yang Jiang).
- Agora,
view_duration_ms mostra o tempo em que o grupo ficou ativo, e não a soma da duração das threads nele. #94966 (Sema Checherinda).
- Remove o limite máximo do número de tokens de busca nas funções
hasAnyTokens e hasAllTokens, que era de 64. Exemplo: SELECT count() FROM table WHERE hasAllTokens(text, ['token_1', 'token_2', [...], 'token_65']]); A consulta resultaria em um erro BAD_ARGUMENTS porque há 65 tokens de busca. Com este PR, o limite foi removido por completo, e a mesma consulta seria executada sem erro. #95152 (Elmi Ahmadov).
- Adiciona a configuração
input_format_numbers_enum_on_conversion_error para a conversão de números em enums, a fim de verificar se o elemento existe. Fecha: #56144. #56240 (Nikolay Degterinsky).
- Compartilhe recursos do parser de formato entre a leitura do arquivo de dados e do position delete file em tabelas Iceberg para reduzir as alocações de memória. #94701 (Yang Jiang).
Correção de bug (comportamento incorreto perceptível ao usuário em uma versão estável oficial)
- Corrige um bug em que handlers de consulta predefinidos interpretavam espaços em branco à direita como dados durante inserções. #83604 (Fabian Ponce).
- Corrigido o erro INCOMPATIBLE_TYPE_OF_JOIN para o armazenamento Join, com aplicação da otimização de outer join para inner join. Resolve #80794. #84292 (Vladimir Cherkasov).
- Corrigida a exceção “Número inválido de linhas no Chunk” ao usar hash join com
allow_experimental_join_right_table_sorting ativado. #86440 (yanglongwei).
- Sempre substitua nomes de arquivos por hash no MergeTree se o sistema de arquivos não diferenciar maiúsculas de minúsculas. Antes, em sistemas de arquivos que não diferenciam maiúsculas de minúsculas (como o macOS), isso podia causar corrupção de dados quando vários nomes de coluna/subcoluna diferiam apenas pelo uso de maiúsculas e minúsculas. #86559 (Pavel Kruglov).
- Adicionar uma verificação completa de permissões durante a criação da consulta subjacente em uma visão materializada. #89180 (pufit).
- Corrigido travamento na função
icebergHash ao usar argumento constante. #90335 (Michael Kolupaev).
- Corrige erro lógico quando uma mutação sem transação altera partes de uma transação ativa, que acaba sendo revertida ao final. #90469 (Shaohua Wang).
- Atualiza
system.warnings corretamente após um banco de dados ordinary ser convertido em um banco de dados atomic. #90473 (sdk2).
- Corrige uma falha de asserção ao ler um arquivo Parquet, quando parte de uma expressão prewhere é usada em outro ponto da consulta. #90635 (Max Kainov).
- Corrige um travamento em um cluster de nó único ao ler do Iceberg no modo split-by-buckets. Isso fecha #90913. #91553 (Konstantin Vedernikov).
- Corrige um possível erro lógico no mecanismo Log durante a leitura de subcolunas. Fecha #91710. #91711 (Pavel Kruglov).
- Corrigido erro lógico: ‘Storage does not support transaction’ durante ATTACH AS REPLICATED. #91772 (Shaohua Wang).
- Correção para filtros em tempo de execução que funcionavam incorretamente quando o LEFT ANTI JOIN tinha uma condição adicional aplicada posteriormente. #91824 (Alexander Gololobov).
- Corrige um erro que ocorria em uma comparação null-safe envolvendo o tipo Nothing. Fecha #91834. Fecha #84870. Fecha #91821. #91884 (Yarik Briukhovetskyi).
- Corrige bugs na decodificação de DELTA_BYTE_ARRAY no leitor nativo de Parquet que afetavam dados de texto altamente repetitivos. #91929 (Daniel Muino).
- Armazena em cache o esquema apenas do arquivo a partir do qual ele foi inferido nos globs, em vez de todos os arquivos, durante a inferência de esquema. Fecha #91745. #92006 (Pavel Kruglov).
- Corrige o erro
Couldn't pack tar archive: Failed to write all bytes causado por um cabeçalho incorreto de tamanho da entrada do arquivo. Corrige #89075. #92122 (Julia Kartseva).
- Libera o fluxo da requisição em insert select para evitar o fechamento da conexão HTTP. #92175 (Sema Checherinda).
- Corrigido erro lógico em consultas com múltiplas junções com a cláusula
USING e join_use_nulls. #92251 (Vladimir Cherkasov).
- Corrige um erro lógico na reordenação de join com join_use_nulls, fecha https://github.com/clickhouse/clickhouse/issues/90795. #92289 (Vladimir Cherkasov).
- Corrigida a formatação inconsistente da AST de arrayElement com literal negado. Fecha #92288 Fecha #92212 Fecha #91832 Fecha #91789 Fecha #91735 Fecha #88495 Fecha #92386. #92293 (Pavel Kruglov).
- Corrige uma possível falha ao usar a configuração
join_on_disk_max_files_to_merge. #92335 (Bharat Nallan).
- Problema relacionado #https://github.com/ClickHouse/support-escalation/issues/6365. #92339 (Tuan Pham Anh).
- Corrige a ausência de verificação de acesso em
SYSTEM SYNC FILE CACHE. Fecha #92101. #92372 (Kseniia Sumarokova).
- Corrigido o processamento de
count_distinct_optimization em funções de janela e com múltiplos argumentos. #92376 (Raúl Marín).
- Corrige o erro “Cannot write to finalized buffer” ao usar algumas funções de agregação com funções de janela. Fecha #91415. #92395 (Jimmy Aguilar Mena).
- Corrigido erro lógico com
CREATE TABLE ... AS urlCluster() e o mecanismo de banco de dados Replicated. Fecha #92216. #92418 (Kseniia Sumarokova).
- Herdar, durante a mutação no MergeTree, as configurações das informações de serialização da parte de origem. Isso corrige um possível resultado incorreto da consulta na parte mutada após alterações na serialização dos tipos de dados. #92419 (Pavel Kruglov).
- Corrige um possível conflito entre coluna e subcoluna com o mesmo nome, que levava ao uso da serialização incorreta e a falhas nas consultas. Fecha #90219. Fecha #85161. #92453 (Pavel Kruglov).
- Corrige
LOGICAL_ERRORs causados por modificações indesejadas no plano de consulta ao converter outer join em inner join. Também flexibiliza os requisitos da otimização para que ela possa ser aplicada nos casos em que funções injetivas são aplicadas às chaves de agregação durante junções. #92503 (János Benjamin Antal).
- Corrige o possível erro
SIZES_OF_COLUMNS_DOESNT_MATCH durante a ordenação de uma coluna de tupla vazia. Fecha #92422. #92520 (Pavel Kruglov).
- Verificação de caminhos tipados incompatíveis no tipo JSON. Fecha #91577. #92539 (Pavel Kruglov).
- Corrigido o deadlock no SHOW CREATE DATABASE para o banco de dados Backup. #92541 (Azat Khuzhin).
- Use o código de erro correto ao validar o índice hypothesis. #92559 (Raúl Marín).
- Corrige a resolução de subcolunas dinâmicas em aliases de coluna no analyzer. Antes, a subcoluna dinâmica em um alias de coluna era encapsulada em
getSubcolumn e, em alguns casos, podia nem ser resolvida. Fecha #91434. #92583 (Pavel Kruglov).
- Evita travamento em tokens() com o segundo argumento NULL. #92586 (Raúl Marín).
- Corrige uma possível falha causada por mutação in-place das colunas
const PREWHERE subjacentes. Isso poderia ter acontecido durante o encolhimento da coluna (IColumn::shrinkToFit) ou a filtragem (IColumn::filter), que poderiam ser disparados concorrentemente por várias threads. #92588 (Arsen Muk).
- A criação e a materialização de índices de texto em tabelas que contêm partes grandes (mais de 4.294.967.295 linhas) estão temporariamente desativadas. Essa limitação evita resultados incorretos de consulta, pois a implementação atual do índice ainda não oferece suporte a partes tão grandes. #92644 (Anton Popov).
- Corrige um erro lógico
Too large size (A) passed to allocator durante a execução de junções. Fecha #92043. #92667 (Yarik Briukhovetskyi).
- Corrige um bug que fazia com que índices
ngrambf_v1 com comprimento de ngrama (1º parâmetro) > 8 lançassem uma exceção. #92672 (Robert Schulze).
- Corrige uma exceção não tratada durante a recarga em segundo plano de named collections quando o armazenamento ZooKeeper é usado. Fecha https://github.com/ClickHouse/clickhouse-private/issues/44180. #92717 (Kseniia Sumarokova).
- Corrige a lógica incorreta nas verificações de grants de acesso para grants com curinga. A tentativa anterior https://github.com/ClickHouse/ClickHouse/pull/90928 corrigiu uma vulnerabilidade crítica, mas acabou sendo restritiva demais, fazendo com que algumas instruções
GRANT com curinga falhassem devido a revogações não relacionadas. #92725 (pufit).
- Corrige um bug na lógica de skipping de dados quando
not match(...) é usado na cláusula WHERE, causando resultados incorretos. Fecha #92492. #92726 (Nihal Z. Miaji).
- Não tente excluir diretórios temporários durante a inicialização se uma tabela MergeTree for criada em um disco somente de leitura. #92748 (Alexey Milovidov).
- Corrige “Não é possível adicionar uma ação a um ExpressionActionsChain vazio” em ALTER TABLE REWRITE PARTS (v2). #92754 (Azat Khuzhin).
- Evita falha ao ler de uma
Connection desconectada. #92807 (Raufs Dunamalijevs).
- Corrigido o erro lógico
Failed to set file processing within 100 retries no S3Queue no modo Ordered. Agora ele foi substituído por um aviso. Esse erro podia ocorrer antes da versão 25.10 se a sessão do Keeper expirasse; no entanto, nas versões 25.10+ ele continuará sendo apenas um aviso, já que ainda é teoricamente possível receber esse erro em caso de alta concorrência de processamento no modo Ordered. #92814 (Kseniia Sumarokova).
- Anteriormente, algumas queries que usavam sharding por PK com uma condição falsa falhavam. Agora, isso não acontece mais. Necessário para https://github.com/ClickHouse/ClickHouse/pull/89313. #92815 (Yarik Briukhovetskyi).
- Correção do cálculo dos tamanhos descompactados dos índices de texto na tabela
system.parts. #92832 (Anton Popov).
- Corrigido o uso do índice primário em atualizações leves com cláusula
IN contendo subconsultas no predicado da cláusula WHERE. #92838 (Anton Popov).
- Corrigida a criação da dica de tipo para o path ‘skip’ em JSON. Fecha #92731. #92842 (Pavel Kruglov).
- No engine de tabela S3, devemos evitar armazenar em cache a chave de partição quando houver funções não determinísticas. #92844 (Miсhael Stetsyuk).
- Corrige um possível erro
FILE_DOESNT_EXIST após a mutação de uma coluna esparsa com ratio_of_defaults_for_sparse_serialization=0.0. Fecha #92633. #92860 (Pavel Kruglov).
- Corrige a inferência de esquema do Parquet no leitor antigo de Parquet (não usado por padrão) quando uma coluna JSON vem após uma coluna Tuple. Corrige a falha do leitor antigo de Parquet (não usado por padrão) ao processar tuplas vazias. #92867 (Michael Kolupaev).
- Corrige um erro lógico em múltiplas junções com condição constante e
join_use_nulls, fecha #92640. #92892 (Vladimir Cherkasov).
- Corrige um possível erro
NOT_FOUND_COLUMN_IN_BLOCK durante a inserção em uma tabela com subcoluna na expressão de partição. Fecha #93210. Fecha #83406. #92905 (Pavel Kruglov).
- Corrige o erro
NO_SUCH_COLUMN_IN_TABLE no engine Merge em tabelas com aliases. Fecha #88665. #92910 (Pavel Kruglov).
- Corrigido o caso em que NULL != NULL no full_sorting_join da coluna LowCardinality(Nullable(T)). #92924 (Vladimir Cherkasov).
- Corrigidos vários travamentos durante merges de índices de texto em tabelas
MergeTree. #92925 (Anton Popov).
- Restaura os wrappers LowCardinality nos resultados de expressões SET, se necessário, durante a agregação TTL, para evitar exceções durante a otimização da tabela. #92971 (Seva Potapov).
- Corrige um erro lógico durante a análise de índice quando um array vazio é usado na função
has. Fecha #92906. #92995 (Nihal Z. Miaji).
- Corrige possível travamento ao finalizar o pool de agendamento em segundo plano (pode causar travamentos do servidor durante o desligamento). #93008 (Azat Khuzhin).
- Corrige um possível erro FILE_DOESNT_EXIST após uma mutação em coluna esparsa quando a configuração
ratio_of_defaults_for_sparse_serialization foi alterada para 1.0 via ALTER. #93016 (Pavel Kruglov).
- Corrige um erro na lógica de skipping de dados quando
not materialize(...) ou not CAST(...) é usado na cláusula WHERE, o que causava resultados incorretos. Fecha #88536. #93017 (Nihal Z. Miaji).
- Corrige uma possível utilização de partes desatualizadas devido a uma condição de corrida TOCTOU em partes compartilhadas. #93022 (Azat Khuzhin).
- Corrige travamento ao desserializar o estado agregado
groupConcat malformado com offsets fora dos limites. #93028 (Raufs Dunamalijevs).
- Corrigido problema que deixava a conexão em um estado inconsistente após o cancelamento preliminar de consultas distribuídas. #93029 (Azat Khuzhin).
- Corrige os resultados de join quando a chave de join do lado direito é uma coluna esparsa. Isso fecha #92920. Só consigo reproduzir o bug com
set compatibility='23.3'. Não tenho certeza se isso deve ser retroportado. #93038 (Amos Bird).
- Corrige um possível
Cannot finalize buffer after cancellation em estimateCompressionRatio(). Corrige: #87380. #93068 (Azat Khuzhin).
- Corrigidas as mesclagens de índices de texto construídos com base em expressões complexas (como
concat(col1, col2)). #93073 (Anton Popov).
- Corrige a aplicação da projeção quando o filtro contém subcolunas. Fecha #92882. #93141 (Pavel Kruglov).
- Corrige um erro lógico que, em alguns casos, era disparado quando filtros de runtime de join eram adicionados ao plano de consulta. Isso era causado pelo retorno incorreto de colunas
const duplicadas de um dos lados do join. #93144 (Alexander Gololobov).
- A função especial
__applyFilter usada por filtros de runtime de JOIN estava retornando o erro ILLEGAL_TYPE_OF_ARGUMENT em alguns casos válidos. #93187 (Alexander Gololobov).
- Evita que colunas interpoladas diferentes colapsem em uma mesma coluna em um bloco quando as colunas interpoladas forem, na prática, aliases da mesma coluna. #93197 (Yakov Olkhovskiy).
- Não adicionar filtro em tempo de execução ao fazer join com a tabela da direita já preenchida. #93211 (Alexander Gololobov).
- Corrige a limpeza de watches persistentes do Keeper após o término de uma sessão. Isso fecha #92480. #93213 (Konstantin Vedernikov).
- Corrigido o ORDER BY com tupla no Iceberg. Isso encerra #92977. #93225 (Konstantin Vedernikov).
- Corrige um bug na configuração
s3queue_migrate_old_metadata_to_buckets do S3Queue. Fecha #93392, #93196, #81739. #93232 (Kseniia Sumarokova).
- Remove colunas não utilizadas quando a projeção é reconstruída durante o merge. Isso reduz o uso de memória e cria menos partes temporárias. #93233 (Nikolai Kochetov).
- Corrige a remoção de colunas não usadas de subconsultas na presença de uma subconsulta escalar correlacionada. Antes dessa correção, a coluna poderia ser removida se fosse usada apenas na subconsulta correlacionada, e a consulta falharia com o erro
NOT_FOUND_COLUMN_IN_BLOCK. #93273 (Dmitry Novik).
- Corrigida possível subcoluna ausente na MV durante alteração da tabela de origem. Fecha #93231. #93276 (Pavel Kruglov).
- Corrige o planejamento de consultas do mecanismo de tabela
Merge com o analyzer, que podia gerar ILLEGAL_COLUMN para hostName() ao mesclar tabelas locais e remotas/Distributed. Fecha #92059. #93286 (Jinlin).
- Corrige um caso em que
NOT IN com argumentos de array não constantes retornava um valor incorreto + adiciona suporte a funções Array não constantes. Fecha #14980. #93314 (Yarik Briukhovetskyi).
- Corrige o erro
Not found column na otimização use_top_k_dynamic_filtering. Corrige #93186. #93316 (Nikolai Kochetov).
- Corrigida a reconstrução de índices de texto criados em subcolunas. #93326 (Anton Popov).
- Corrigido o tratamento de um array vazio como segundo argumento nas funções
hasAllTokens e hasAnyTokens. #93328 (Anton Popov).
- Corrige erro lógico quando filtros de runtime são usados em uma consulta com totais na tabela do lado direito. #93330 (Alexander Gololobov).
- O servidor não trava mais se a função
tokens for chamada com parâmetros não constantes do tokenizer (o 2º, 3º e 4º parâmetros), por exemplo, SELECT tokens(NULL, 1, materialize(1)). #93383 (Robert Schulze).
- Corrigida uma vulnerabilidade de estouro de inteiro na desserialização do estado de
groupConcat que poderia causar problemas de segurança de memória com estados agregados forjados. #93426 (Raufs Dunamalijevs).
- Corrigida a análise de índice de texto em colunas do tipo array quando o índice não contém tokens (todos os arrays estão vazios ou todos os tokens são ignorados pelo tokenizador). #93457 (Anton Popov).
- Evita o login via OAuth no ClickHouse Client quando o nome de usuário e a senha estão na string de conexão. #93459 (Krishna Mannem).
- Corrige o suporte a credenciais provisionadas do Azure ADLS Gen2 no DataLakeCatalog - faz o parse das chaves
adls.sas-token.* em catálogos REST do Iceberg e corrige o parse de URLs ABFSS. #93477 (Karun Anantharaman).
- Corrige o suporte a GLOBAL IN com o analyzer (antes, o Set era recriado no nó remoto). #93507 (Azat Khuzhin).
- Corrigida a extração de subcoluna durante a desserialização diretamente para colunas esparsas. #93512 (Pavel Kruglov).
- Corrigida a leitura direta a partir do índice de texto em consultas de pesquisa duplicadas. #93516 (Anton Popov).
- Correção para o erro NOT_FOUND_COLUMN_IN_BLOCK quando o runtime filter está habilitado e as tabelas em JOIN têm a mesma coluna retornada múltiplas vezes (por exemplo, SELECT a, a, a FROM t). #93526 (Alexander Gololobov).
- Corrigido um bug em que o clickhouse-client pedia a senha duas vezes ao se conectar via ssh. #93547 (Isak Ellmer).
- Garanta que o zookeeper seja encerrado no desligamento (corrige um possível travamento durante o desligamento em casos muito improváveis). #93602 (Azat Khuzhin).
- Corrige o LOGICAL_ERROR ao restaurar o ReplicatedMergeTree com condição de corrida na desduplicação. #93612 (Pablo Marcos).
- Corrigido o uso de coluna esparsa na atualização de TTL durante a desserialização direta em colunas esparsas em alguns formatos de entrada. Isso corrige o possível erro lógico
Unexpected type of result TTL column. #93619 (Pavel Kruglov).
- Corrigidas funções de índice H3 que às vezes travavam ou ficavam presas ao serem chamadas com entradas inválidas. #93657 (Michael Kolupaev).
- O uso do índice
ngram_bf em dados não UTF-8 levou a uma leitura de memória não inicializada, com valores que poderiam acabar na estrutura do índice resultante. Fecha #92576. #93663 (Alexey Milovidov).
- Verifique se o tamanho do buffer descomprimido está conforme o esperado. #93690 (Raúl Marín).
- Impedir que usuários obtenham a lista de colunas de uma tabela usando o mecanismo de tabela
merge sem que a permissão SHOW COLUMNS seja verificada. #93695 (János Benjamin Antal).
- Corrigida a materialização de índices de salto criados com base em subcolunas. #93708 (Anton Popov).
- Armazenamos os ponteiros compartilhados de
storage em QueryPipeline::resources::storage_holders para garantir que os objetos IStorage não sejam destruídos enquanto o PipelineExecutor estiver ativo. #93746 (Miсhael Stetsyuk).
- Corrigida a anexação de BDs Replicated quando o host interservidor era alterado após a reinicialização. #93779 (Tuan Pham Anh).
- Corrige a asserção
!read_until_position em ReadBufferFromS3, que ocorria quando o cache estava habilitado. #93809 (Kseniia Sumarokova).
- Corrige um erro lógico em um caso raro em que uma tupla vazia é usada com uma coluna
Map. Fecha #93784. #93814 (Nihal Z. Miaji).
- Corrigida a corrupção de
_part_offset quando as projeções são reconstruídas durante merges, e otimizado o processamento de projeções ao evitar leituras desnecessárias da coluna _part_offset e ignorar colunas desnecessárias nos cálculos de projeção. Isso dá continuidade às otimizações introduzidas em #93233. #93827 (Amos Bird).
- Remover o tratamento para ‘versão inválida’. #93843 (Anton Ivashkin).
- Correção para
optimize_inverse_dictionary_lookup, que não funcionava com consulta distribuída quando a chave era do tipo inteiro com sinal. Fecha #93259. #93848 (Nihal Z. Miaji).
- Corrige
lag/lead que não funcionavam com a consulta remote() distribuída. Fecha #90014. #93858 (Nihal Z. Miaji).
- Corrige bug no despacho da instrumentação do sistema. #93937 (Pablo Marcos).
- Em https://github.com/ClickHouse/ClickHouse/pull/89173, adicionamos um campo extra à estrutura que o
TraceSender envia por meio de um pipe interno. No entanto, o tamanho do buffer não foi atualizado (aqui), portanto estamos gravando mais dados no buffer do que o definido em buffer_size, o que resulta em múltiplos flushes. E, como TraceSender::send é chamado de diferentes threads, os flushes dessas threads podem se intercalar, o que quebra a invariante da qual o lado receptor (TraceCollector) depende. #93966 (Miсhael Stetsyuk).
- Corrige a conversão de tipos para um supertipo durante a operação de JOIN do armazenamento
Join com a cláusula USING. Corrige #91672. Corrige #78572. #94000 (Dmitry Novik).
- Correção para o caso em que o FilterStep não era adicionado corretamente quando um filtro de runtime de JOIN é aplicado à tabela Merge. #94021 (Alexander Gololobov).
- Uma consulta
SELECT que contém um predicado em várias colunas com skip indexes de filtro de Bloom e com condições OR e NOT podia retornar resultados inconsistentes. Isso já foi corrigido. #94026 (Shankar Iyer).
- Corrigido o CLEAR de coluna com índices dependentes. #94057 (Raúl Marín).
- Corrigido o uso de um valor não inicializado em
ReadWriteBufferFromHTTP. #94058 (Alexey Milovidov).
- Corrige uma verificação incorreta de caminhos tipados em JSON. A verificação foi introduzida em https://github.com/ClickHouse/ClickHouse/pull/92842 e pode causar um erro na inicialização de tabelas já existentes. #94070 (Pavel Kruglov).
- Corrige o travamento durante a análise de filtros na presença de OUTER JOIN. Corrige #90979. #94080 (Dmitry Novik).
- Corrige a precisão de
uniqTheta ao usar chaves de agregação UInt8 em paralelo (max_threads > 1 — padrão). #94095 (Azat Khuzhin).
- Corrige falha causada por uma exceção gerada por uma chamada
socket.setBlocking(true) dentro de SCOPE_EXIT. #94100 (Miсhael Stetsyuk).
- Corrige a perda de dados quando
DROP PARTITION remove partes criadas por entradas de log mais recentes no ReplicatedMergeTree. #94123 (Tuan Pham Anh).
- Corrigido um problema no leitor de Parquet v3, que tratava incorretamente arrays que atravessam limites de página. Isso acontece, por exemplo, em arquivos gravados pelo Arrow sem habilitar estatísticas de página nem índice de página. Afeta apenas colunas do tipo de dado Array. O sintoma mais provável é que um array a cada ~1 MB de dados seja truncado. Antes desta correção, use esta configuração como solução alternativa:
input_format_parquet_use_native_reader_v3 = 0. #94125 (Michael Kolupaev).
- Corrige o excesso de watches no ReplicatedMergeTree ao aguardar uma entrada de log. #94133 (Azat Khuzhin).
- Funções
arrayShuffle, arrayPartialShuffle e arrayRandomSample para materializar colunas constantes, para que linhas diferentes obtenham resultados diferentes. #94134 (Joanna Hulboj).
- Corrigida condição de corrida na avaliação de funções de tabela em visões materializadas. #94171 (Alexey Milovidov).
- Corrige a desreferenciação de
nullptr nos motores de banco de dados PostgreSQL (quando a consulta está incorreta). Fecha #92887. #94180 (Alexey Milovidov).
- Corrige vazamento de memória em views materializadas atualizáveis que usam consultas
SELECT com várias subconsultas. #94200 (Antonio Andelic).
- Corrige uma condição de corrida de dados entre
DataPartStorageOnDiskBase::remove e system.parts. Fecha #49076. #94262 (Alexey Milovidov).
- Removido o especificador
noexcept incorreto na atribuição por cópia da HashTable, que pode levar a um crash (std::terminate) em caso de exceções de memória. #94275 (Nikita Taranov).
- Anteriormente, criar uma projeção com colunas duplicadas em GROUP BY (por exemplo,
GROUP BY c0, c0) e inserir dados resultava em std::length_error se optimize_row_order estivesse habilitado. Corrige #94065. #94277 (Alexey Milovidov).
- Corrige um bug raro no cliente ZooKeeper ao se conectar, que causa travamentos e falhas. #94320 (Azat Khuzhin).
- Corrigida a otimização de funções para subcolunas, que não era aplicada a subcolunas. #94323 (Pavel Kruglov).
- Corrige um resultado possivelmente incorreto em
RIGHT JOIN aninhados quando enable_lazy_columns_replication está habilitado. O bug fazia com que todas as linhas nas colunas replicadas retornassem incorretamente o mesmo valor, em vez de seus valores distintos. Fecha #93891. #94339 (Vladimir Cherkasov).
- Corrige o pushdown de filtro em SEMI JOIN usando conjuntos de equivalência. Não aplique o pushdown do filtro se os tipos dos argumentos tiverem mudado. Corrige #93264. #94340 (Dmitry Novik).
- Corrige o uso do DeltaLake CDF com o mecanismo de banco de dados DataLake (integração com catálogos delta lake). Fecha #94122. #94342 (Kseniia Sumarokova).
- Corrige o valor incorreto da métrica atual
FilesystemCacheSizeLimit quando a política de cache SLRU era usada. #94363 (Kseniia Sumarokova).
- A criação de um engine de banco de dados Backup com menos de dois argumentos agora retorna uma mensagem de erro mais descritiva (
Wrong number of arguments em vez de std::out_of_range: InlinedVector::at(size_type) const failed bounds check.). #94374 (Robert Schulze).
- Ignora revogações impossíveis, no nível do banco de dados, de privilégios globais com opção de concessão. #94386 (pufit).
- Corrige a leitura de offsets esparsos em partes compactas. Fecha #94385. #94399 (Pavel Kruglov).
- Não impedir ALTER em colunas que usam índices implícitos, mesmo quando o modo
throw de alter_column_secondary_index_mode é usado. #94425 (Raúl Marín).
- Corrige um travamento em
TCPHandler quando várias chamadas de receivePacketsExpectQuery leem Protocol::Client::IgnoredPartUUIDs. #94434 (Miсhael Stetsyuk).
- Corrige a ocultação de dados sensíveis em
system.functions. #94436 (Vitaly Baranov).
- Corrige a desreferenciação de
nullptr com send_profile_events desabilitado. Esta funcionalidade foi introduzida recentemente no driver Python do ClickHouse. Fecha #92488. #94466 (Alexey Milovidov).
- Corrige a incompatibilidade do
.mrk do índice de texto durante os merges. #94494 (Peng Jian).
- Quando
read_in_order_use_virtual_row está habilitado, o código acessava colunas de índice com base no tamanho completo da chave primária sem verificar se o índice havia sido truncado, o que levava a uso após liberação / memória não inicializada. Fecha #85596. #94500 (Alexey Milovidov).
- Corrige um erro causado por incompatibilidade de tipos ao enviar tabelas externas para subconsultas com GLOBAL IN quando os tipos são Nullable. Fecha #94097. #94511 (Alexey Milovidov).
- Em versões anteriores, consultas com múltiplas condições de índice na mesma expressão podem, por engano, gerar a exceção
Not found column. Corrige #60660. #94515 (Alexey Milovidov).
- Corrige o tratamento incorreto de coluna Nullable em join em filtros de runtime. #94555 (Alexander Gololobov).
- A criação de uma workload dentro de outra workload que está em uso não causa mais travamento. #94599 (Sergei Trifonov).
- Corrige uma falha durante a otimização de ANY LEFT JOIN quando
isNotNull é avaliado em uma coluna inexistente. #94600 (Molly).
- Corrige a avaliação da expressão padrão ao fazer referência a outras colunas com valores padrão calculados. #94615 (Alexey Milovidov).
- Corrige problemas de permissão em operações de BACKUP/RESTORE. #94617 (Pablo Marcos).
- Corrigida a falha causada por conversão de tipo incorreta quando o tipo de dado é
Nullable(DateTime64). #94627 (Miсhael Stetsyuk).
- Corrige um bug em que certas consultas distribuídas com
ORDER BY podiam retornar colunas ALIAS com valores invertidos (ou seja, a coluna a exibindo os dados da coluna b e vice-versa). #94644 (filimonov).
- Corrigido o armazenamento dos resultados do keeper-bench em arquivo. #94654 (Antonio Andelic).
- Corrigidas estimativas incorretas com estatísticas do tipo MinMax quando a coluna contém números de ponto flutuante negativos. #94665 (zoomxi).
- Corrigida a leitura de arquivos Parquet quando a chave de um map é do tipo struct. #94670 (Konstantin Vedernikov).
- Corrige possível resultado incorreto de RIGHT join ao usar condições complexas em ON. Fecha #92913. #94680 (Vladimir Cherkasov).
- Preserva a granularidade constante do índice (use_const_adaptive_granularity) após mesclagens verticais. #94725 (Azat Khuzhin).
- Corrige um bug de mutação com subconsultas escalares e dependências de tabela. Se uma tabela tivesse dependências (índice ou projeções) em uma coluna, as subconsultas escalares poderiam ser avaliadas e armazenadas em cache sem dados, levando a alterações incorretas. #94731 (Raúl Marín).
- Corrige o fallback de cpu_pressure no AsynchronousMetrics em caso de erro. #94827 (Raúl Marín).
- A função
getURLHostRFC não tinha verificações de limites antes de desreferenciar ponteiros. Quando uma string vazia era passada para domainRFC, a função lia memória não inicializada, o que acionava erros do MSan. #94851 (Alexey Milovidov).
- Corrige o modo somente leitura em discos criptografados. #94852 (Azat Khuzhin).
- Corrige um erro lógico em
LIMIT/OFFSET fracionário ao usar o analyzer antigo com tabelas distribuídas. Fecha #94712. #94999 (Ahmed Gouda).
- Corrigido travamento em algumas condições quando os filtros de runtime de JOIN estão habilitados por padrão. #95000 (Alexander Gololobov).
- Aprimora o mascaramento de senhas na URL usada no mecanismo de tabela
URL() e na função de tabela url(). #95006 (Vitaly Baranov).
- A função
toStartOfInterval agora funciona da mesma maneira que toStartOfX, em que X é Day, Week, Month, Quarter, Year quando enable_extended_results_for_datetime_functions está ativado. #95011 (Kirill Kopnev).
- Corrigidas comparações de strings constantes que não respeitavam as configurações
cast_string_to_date_time_mode, bool_true_representation, bool_false_representation e input_format_null_as_default. Fecha #91681. #95040 (Nihal Z. Miaji).
- Corrige uma condição de corrida no cache do sistema de arquivos. #95064 (Alexey Milovidov).
- Corrige uma condição de corrida rara no leitor de Parquet. #95068 (Alexey Milovidov).
- Corrige a falha na otimização top K quando
LIMIT é zero. Fecha #93893. #95072 (Alexey Milovidov).
- A conversão de DateTime/inteiros para Time64 extrai o componente de hora do dia com
toTime, que não é monotônico. O template ToDateTimeMonotonicity afirmava incorretamente que essa conversão era monotônica, causando a exceção “Invalid binary search result in MergeTreeSetIndex” em builds de depuração. #95125 (Alexey Milovidov).
- Recriou a lista de entradas do arquivo manifest apenas quando necessário (antes, isso era feito em cada iteração). #95162 (Daniil Ivanik).
melhoria em build, teste e empacotamento
Última modificação em 25 de junho de 2026