Pular para o conteúdo principal

Sumário

lançamento do ClickHouse v24.12, 2024-12-19
lançamento do ClickHouse v24.11, 2024-11-26
lançamento do ClickHouse v24.10, 2024-10-31
lançamento do ClickHouse v24.9, 2024-09-26
lançamento do ClickHouse v24.8 LTS, 2024-08-20
lançamento do ClickHouse v24.7, 2024-07-30
lançamento do ClickHouse v24.6, 2024-07-01
lançamento do ClickHouse v24.5, 2024-05-30
lançamento do ClickHouse v24.4, 2024-04-30
lançamento do ClickHouse v24.3 LTS, 2024-03-26
lançamento do ClickHouse v24.2, 2024-02-29
lançamento do ClickHouse v24.1, 2024-01-30
Changelog de 2023

Lançamento do ClickHouse 24.12, 2024-12-19. Apresentação, Vídeo

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

  • As funções greatest e least agora passam a ignorar valores de entrada NULL, enquanto antes retornavam NULL se um dos argumentos fosse NULL. Por exemplo, SELECT greatest(1, 2, NULL) agora retorna 2. Isso torna o comportamento compatível com o PostgreSQL, mas, ao mesmo tempo, quebra a compatibilidade com o MySQL, que retorna NULL. Para manter o comportamento anterior, defina a configuração least_greatest_legacy_null_behavior (padrão: false) como true. #65519 #73344 (kevinyhzou).
  • Uma nova integração com o MongoDB agora é a padrão. Usuários que preferirem usar o driver legado do MongoDB (baseado no driver Poco) podem habilitar a configuração do servidor use_legacy_mongodb_integration. #73359 (Kirill Nikiforov.

Novo recurso

  • Tipos JSON/Dynamic/Variant passam de recursos experimentais para beta. #72294 (Pavel Kruglov). Também fizemos o backport de todas as correções, bem como dessa alteração, para a 24.11.
  • A evolução de esquema para o formato de armazenamento de dados Iceberg oferece ao usuário amplas opções para modificar o esquema da tabela. A ordem das colunas, os nomes das colunas e extensões simples de tipos podem ser alterados internamente. #69445 (Daniil Ivanik).
  • Integração com o Iceberg REST Catalog: um novo mecanismo de banco de dados, chamado Iceberg, que integra todo o catálogo ao ClickHouse. #71542 (Kseniia Sumarokova).
  • Adicionado cache do índice primário para tabelas MergeTree (pode ser habilitado pela configuração da tabela use_primary_key_cache). Se o carregamento sob demanda e o cache estiverem habilitados para o índice primário, ele será carregado no cache conforme necessário (semelhante ao mark cache), em vez de ficar em memória o tempo todo. Adicionado o pré-aquecimento do índice primário em inserts/merges/fetches de partes de dados e nas reinicializações da tabela (pode ser habilitado pela configuração prewarm_primary_key_cache). Isso reduz o uso de memória em tabelas enormes em armazenamento compartilhado, e testamos isso em tabelas com mais de um quatrilhão de registros. #72102 (Anton Popov). #72750 (Alexander Gololobov).
  • Implementado o comando SYSTEM LOAD PRIMARY KEY para carregar os índices primários de todas as partes de uma tabela especificada ou de todas as tabelas, se nenhuma tabela for especificada. Isso será útil em benchmarks e para evitar latência adicional durante a execução de consultas. #66252 #67733 (ZAWA_ll).
  • Adicionada uma consulta para anexar tabelas MergeTree como ReplicatedMergeTree e vice-versa: ATTACH TABLE ... AS REPLICATED e ATTACH TABLE ... AS NOT REPLICATED. #65401 (Kirill).
  • Uma nova configuração, http_response_headers, que permite personalizar os cabeçalhos de resposta HTTP. Por exemplo, você pode instruir o navegador a exibir uma imagem armazenada no banco de dados. Isso fecha #59620. #72656 (Alexey Milovidov).
  • Adiciona a função toUnixTimestamp64Second, que converte um DateTime64 em um valor Int64 com precisão fixa de segundos, permitindo retornar um valor negativo se a data for anterior à epoch Unix. #70597 (zhanglistar). #73146 (Robert Schulze).
  • Adiciona a nova configuração enforce_index_structure_match_on_partition_manipulation para permitir o attach quando o conjunto de projeções e índices secundários da tabela de origem for um subconjunto dos da tabela de destino. Fecha #70602. #70603 (zwy991114).
  • Foi adicionada a sintaxe ALTER USER {ADD|MODIFY|DROP SETTING}, ALTER USER {ADD|DROP PROFILE}, e o mesmo para ALTER ROLE e ALTER PROFILE. Assim, em vez de substituir todo o conjunto de configurações, você pode modificá-lo. #72050 (pufit).
  • Adicionada a função arrayPRAUC, que calcula a AUC (Área Sob a Curva) da curva de Precisão-Recall. #72073 (Emmanuel).
  • Adiciona a função indexOfAssumeSorted para tipos de array. Otimiza a busca no caso de um array ordenado em ordem não decrescente. O efeito é perceptível em arrays muito grandes (mais de 100.000 elementos). #72517 (Eric Kurbanov).
  • Permite usar um delimitador como segundo argumento opcional da função de agregação groupConcat. #72540 (Yarik Briukhovetskyi).
  • A função translate agora permite excluir caracteres se o argumento from contiver mais caracteres do que o argumento to. Exemplo: SELECT translate('clickhouse', 'clickhouse', 'CLICK') agora retorna CLICK. #71441 (shuai.xu).

Recursos experimentais

  • Uma nova configuração do MergeTree, allow_experimental_reverse_key, que habilita o suporte à ordem de classificação decrescente nas chaves de ordenação do MergeTree. Isso é útil para análise de séries temporais, especialmente para consultas TopN. Exemplo de uso: ENGINE = MergeTree ORDER BY (time DESC, key) - ordem decrescente para o campo time. #71095 (Amos Bird).

Melhoria de desempenho

  • Reordenação de JOIN. Foi adicionada uma opção para selecionar o lado do join que atuará como tabela interna (build) no plano de consulta. Isso é controlado por query_plan_join_swap_table, que pode ser definido como auto. Nesse modo, o ClickHouse tentará escolher a tabela com o menor número de linhas. #71577 (Vladimir Cherkasov).
  • Agora, o algoritmo parallel_hash será usado (quando aplicável) quando a configuração join_algorithm estiver definida como default. As duas alternativas anteriores (direct e hash) ainda serão consideradas quando não for possível usar parallel_hash. #70788 (Nikita Taranov).
  • Adiciona a opção de extrair expressões comuns de expressões WHERE e ON para reduzir o número de tabelas hash usadas durante junções. Isso faz sentido quando a condição JOIN ON tem partes em comum dentro de AND em diferentes partes de OR. Pode ser habilitado com optimize_extract_common_expressions = 1. #71537 (János Benjamin Antal).
  • Permite usar índices em SELECT quando uma coluna indexada é convertida com CAST para LowCardinality(String), o que pode ocorrer quando uma consulta é executada em uma tabela Merge com algumas tabelas usando String e outras LowCardinality(String). #71598 (Yarik Briukhovetskyi).
  • Durante a execução da consulta com réplicas paralelas e plano local ativado, não faça análise de índice nos workers. O coordenador escolherá os intervalos que os workers devem ler com base na análise de índice feita do seu lado (no iniciador da consulta). Isso faz com que consultas curtas com réplicas paralelas tenham latência tão baixa quanto a de consultas em um único nó. #72109 (Igor Nikonov).
  • O uso de memória de clickhouse disks remove --recursive foi reduzido em discos de armazenamento de objetos. #67323 (Kirill).
  • Traz de volta a otimização para a leitura de subcolunas de uma única coluna em partes compactas de #57631. Ela foi removida acidentalmente. #72285 (Pavel Kruglov).
  • Aceleração da ordenação de colunas LowCardinality(String) com a desvirtualização de chamadas no comparador. #72337 (Alexander Gololobov).
  • Otimização da função argMin/argMax para alguns tipos de dados simples. #72350 (alesapin).
  • Otimiza o bloqueio no rastreador de memória com bloqueios compartilhados para reduzir a contenção, melhorando o desempenho em sistemas com um número muito alto de CPUs. #72375 (Jiebin Sun).
  • Adicionada uma nova configuração, use_async_executor_for_materialized_views. Permite usar execução assíncrona e, potencialmente, multithread da consulta da visão materializada; isso pode acelerar o processamento das visões durante INSERT, mas também consome mais memória. #72497 (alesapin).
  • Melhorado o desempenho da deserialização dos estados de funções de agregação (no tipo de dado AggregateFunction e em consultas distribuídas). Melhorado ligeiramente o desempenho do parsing do formato RowBinary. #72818 (Anton Popov).
  • Divisão de intervalos durante a leitura com réplicas paralelas, na ordem da chave da tabela, para consumir menos memória durante a leitura. #72173 (JIaQi).
  • Acelera as inserções no MergeTree quando há um único valor de chave de partição no lote inserido. #72348 (alesapin).
  • Implementada a criação paralela de tabelas durante a restauração de um backup. Antes deste PR, o comando RESTORE sempre criava tabelas em uma thread, o que podia ser lento no caso de backups com muitas tabelas. #72427 (Vitaly Baranov).
  • Descartar o mark cache pode levar um tempo considerável se ele for grande. Se mantivermos o mutex do Context durante esse processo, isso bloqueará muitas outras atividades; nem mesmo novas conexões de cliente poderão ser estabelecidas até que ele seja liberado. Além disso, manter esse mutex não é realmente necessário para sincronização: basta ter uma referência local ao cache via shared ptr. #72749 (Alexander Gololobov).

Melhoria

  • Removida a configuração allow_experimental_join_condition, permitindo condições não equi por padrão. #69910 (Vladimir Cherkasov).
  • As configurações da config do servidor (users.xml) agora também se aplicam ao cliente. Útil para configurações de formato, por exemplo, date_time_output_format. #71178 (Michael Kolupaev).
  • Uso automático de disco para GROUP BY/ORDER BY, com base no uso de memória do servidor/usuário. Controlado pelas configurações de consulta max_bytes_ratio_before_external_group_by/max_bytes_ratio_before_external_sort. #71406 (Azat Khuzhin).
  • Adicionada uma nova lógica de cancelamento: CancellationChecker verifica os timeouts de cada consulta iniciada e as interrompe quando o timeout é atingido. #69880 (Yarik Briukhovetskyi).
  • Suporte a ALTER de Object para JSON, o que significa que agora é possível migrar facilmente do tipo Object, que está obsoleto. #71784 (Pavel Kruglov).
  • Permite valores desconhecidos em Set que não estejam presentes em Enum. Corrige #72662. #72686 (zhanglistar).
  • Adiciona suporte ao operador de busca em strings (por exemplo, LIKE) para o tipo de dado Enum, implementando #72661. #72732 (zhanglistar).
  • Algumas consultas ALTER USER inválidas foram aceitas. Corrige #71227. #71286 (Arthur Passos).
  • Respeita prefer_locahost_replica ao montar o plano para INSERT ... SELECT distribuído. #72190 (filimonov).
  • O Azure violou a especificação do Iceberg, rotulando incorretamente o Iceberg v1 como Iceberg v2. O problema é descrito aqui. O Azure Iceberg Writer cria arquivos de metadados do Iceberg (assim como arquivos de manifesto) que violam a especificação. Agora tentamos ler metadados no formato Iceberg v1 com o leitor v2 (porque eles os gravam dessa forma) e adicionamos um erro para quando eles não criam os campos correspondentes em um arquivo de manifesto. #72277 (Daniil Ivanik).
  • Agora é permitido usar CREATE MATERIALIZED VIEW com UNION [ALL] na consulta. O comportamento é o mesmo de uma visão materializada com JOIN: apenas a primeira tabela na expressão SELECT funcionará como gatilho para insert; todas as outras tabelas serão ignoradas. No entanto, se houver várias referências à primeira tabela (por exemplo, UNION com ela mesma), todas elas serão processadas como o bloco de dados inserido. #72347 (alesapin).
  • Adicionada a validação da consulta de origem quando o ClickHouse é usado como origem para um dicionário. #72548 (Alexey Katsman).
  • Garanta que o ClickHouse detecte as alterações do ZooKeeper ao recarregar a configuração. #72593 (Azat Khuzhin).
  • Melhor aproximação do uso de memória das marcas armazenadas em cache para reduzir o uso total de memória do cache. #72630 (Antonio Andelic).
  • Adicionada uma nova métrica StartupScriptsExecutionState. A métrica pode ter três valores: 0 = os scripts de inicialização ainda não terminaram, 1 = os scripts de inicialização foram executados com sucesso, 2 = os scripts de inicialização falharam. Precisamos dessa métrica para saber se os scripts de inicialização estão sendo executados com sucesso na nuvem, especialmente após releases das configurações de base. #72637 (Miсhael Stetsyuk).
  • Adicione a nova métrica MergeTreeIndexGranularityInternalArraysTotalSize ao system.metrics. Essa métrica é necessária para encontrar as instâncias com conjuntos de dados muito grandes suscetíveis à alta
  • Adiciona retentativas na criação de uma tabela replicada. #72682 (Vitaly Baranov).
  • Adicionar total_bytes_with_inactive à system.tables para contabilizar o total de bytes das partes inativas. #72690 (Kai Zhu).
  • Adicionadas configurações do MergeTree em system.settings_changes. #72694 (Raúl Marín).
  • Suporte para o tipo JSON na função notEmpty. #72741 (Pavel Kruglov).
  • Suporte ao parsing do erro GCS S3 AuthenticationRequired. #72753 (Vitaly Baranov).
  • Adicionado suporte ao tipo Dynamic nas funções ifNull e coalesce. #72772 (Pavel Kruglov).
  • Suporte a Dynamic em funções toFloat64/touInt32/etc. #72989 (Pavel Kruglov).
  • Adicionar as configurações de requisição do S3 http_max_fields, http_max_field_name_size, http_max_field_value_size e usá-las ao processar respostas da API do S3 durante a criação de backup ou a restauração. #72778 (Vitaly Baranov).
  • Excluir os metadados da tabela no Keeper em Storage S3(Azure)Queue somente após a remoção da última tabela que usa esses metadados. #72810 (Kseniia Sumarokova).
  • Foram adicionados os eventos de perfil JoinBuildTableRowCount/JoinProbeTableRowCount/JoinResultRowCount. #72842 (Vladimir Cherkasov).
  • Suporte a subcolunas na chave de ordenação do MergeTree e nos índices de salto. #72644 (Pavel Kruglov).

Correção de bug (comportamento incorreto perceptível ao usuário em uma versão estável oficial)

  • Corrige possíveis partes que se sobrepõem no MergeTree (após a falha de uma operação de mover uma parte para o diretório detached, possivelmente devido a uma operação no armazenamento de objetos). #70476 (Azat Khuzhin).
  • Corrige a detecção de erro quando um nome de tabela é longo demais. Fornece um diagnóstico informando o comprimento máximo permitido. Adiciona uma nova função getMaxTableNameLengthForDatabase. #70810 (Yarik Briukhovetskyi).
  • Corrigidos processos zumbis após a falha do clickhouse-library-bridge (este programa permite executar bibliotecas não seguras). #71301 (MikhailBurdukov).
  • Corrige o erro NoSuchKey durante o rollback da transação quando a criação de um diretório falha no disco plain_rewritable. #71439 (Julia Kartseva).
  • Corrigida a serialização de valores Dynamic nos formatos JSON Pretty. #71923 (Pavel Kruglov).
  • Adicionar o nome do formato inferido à consulta CREATE nos motores File/S3/URL/HDFS/Azure. Antes, o nome do formato era inferido toda vez que o servidor era reiniciado e, se os arquivos de dados especificados fossem removidos, isso causava erros durante a inicialização do servidor. #72108 (Pavel Kruglov).
  • Corrige bugs ao usar uma UDF na expressão JOIN ON com o analisador antigo. #72179 (Raúl Marín).
  • Corrige alguns bugs menores em StorageObjectStorage. É preciso habilitar use_hive_partitioning por padrão. #72185 (Yarik Briukhovetskyi).
  • Corrige um bug em que min_age_to_force_merge_on_partition_only ficava travado tentando mesclar repetidamente a mesma partição, que já havia sido mesclada em uma única parte, e deixava de mesclar partições com múltiplas partes. #72209 (Christoph Wurm).
  • Corrigido um travamento em SimpleSquashingChunksTransform que ocorria em casos raros ao processar colunas esparsas. #72226 (Vladimir Cherkasov).
  • Corrigida uma condição de corrida em GraceHashJoin, o que podia fazer com que algumas linhas ficassem ausentes na saída do join. #72233 (Nikita Taranov).
  • Corrigidas as consultas ALTER DELETE com a coluna _block_number materializada (se a configuração enable_block_number_column estiver habilitada). #72261 (Anton Popov).
  • Corrigida uma corrida de dados quando ColumnDynamic::dumpStructure() é chamado concorrentemente, por exemplo, no construtor de ConcurrentHashJoin. #72278 (Nikita Taranov).
  • Corrige um possível LOGICAL_ERROR com colunas duplicadas em ORDER BY ... WITH FILL. #72387 (Vladimir Cherkasov).
  • Corrigidos problemas de incompatibilidade de tipos em vários casos após aplicar optimize_functions_to_subcolumns. #72394 (Anton Popov).
  • Use AWS_CONTAINER_AUTHORIZATION_TOKEN_FILE em vez de AWS_CONTAINER_AUTHORIZATION_TOKEN_PATH. Corrigido #71074. #72397 (Konstantin Bogdanov).
  • Corrige falha ao analisar consultas BACKUP DATABASE db EXCEPT TABLES db.table. #72429 (Konstantin Bogdanov).
  • Impedir a criação de Variant vazio. #72454 (Pavel Kruglov).
  • Corrigida a formatação inválida de result_part_path em system.merges. #72567 (Konstantin Bogdanov).
  • Corrige o parsing de um glob com um elemento (como {file}). #72572 (Konstantin Bogdanov).
  • Corrige a geração da consulta para o servidor seguidor em caso de consulta distribuída com ARRAY JOIN. Corrige #69276. #72608 (Dmitry Novik).
  • Corrigido um bug em que DateTime64 IN DateTime64 não retornava nenhum resultado. #72640 (Yarik Briukhovetskyi).
  • Corrigidos metadados inconsistentes ao adicionar uma nova réplica a um banco de dados Replicated com uma tabela criada com flatten_nested=0. #72685 (Alexander Tokmakov).
  • Corrige a configuração avançada de SSL na comunicação interna do Keeper. #72730 (Antonio Andelic).
  • Corrigido o erro “No such key” no modo não ordenado do S3Queue quando a configuração tracked_files_limit é menor do que a taxa de surgimento de arquivos no S3. #72738 (Kseniia Sumarokova).
  • Corrige a exceção lançada no RemoteQueryExecutor quando um usuário não existe localmente. #72759 (Andrey Zvonov).
  • Corrigidas as mutações com a coluna _block_number materializada (se a configuração enable_block_number_column estiver habilitada). #72854 (Anton Popov).
  • Corrige backup/restauração com disco regravável simples quando há arquivos vazios no backup. #72858 (Kseniia Sumarokova).
  • Cancela corretamente inserts em DistributedAsyncInsertDirectoryQueue. #72885 (Antonio Andelic).
  • Corrigida falha ao analisar dados incorretos em colunas esparsas (isso pode acontecer com a configuração enable_parsing_to_custom_serialization habilitada). #72891 (Anton Popov).
  • Corrige uma possível falha durante a restauração de backup. #72947 (Kseniia Sumarokova).
  • Corrigido um bug no método JOIN parallel_hash que podia ocorrer quando a consulta tem uma condição complexa na cláusula ON com filtros de desigualdade. #72993 (Nikita Taranov).
  • Use as configurações padrão do formato durante o parsing de JSON para evitar falhas na desserialização. #73043 (Pavel Kruglov).
  • Corrige travamento em transações com armazenamento sem suporte. #73045 (Raúl Marín).
  • Corrige uma possível superestimação no rastreamento de memória (quando a diferença entre MemoryTracking e MemoryResident seguia aumentando). #73081 (Azat Khuzhin).
  • Verificação de chaves JSON duplicadas durante o parsing de Tuple. Antes, isso podia causar o erro lógico Invalid number of rows in Chunk durante o parsing. #73082 (Pavel Kruglov).

Melhoria em Compilação/Testes/Empacotamento

  • Todos os pequenos utilitários anteriormente armazenados na pasta /utils e que exigiam compilação manual a partir do código-fonte agora fazem parte do pacote principal do ClickHouse. Isso fecha: #72404. #72426 (Nikita Mikhaylov).
  • Reverte a remoção de /etc/systemd/system/clickhouse-server.service introduzida na versão 22.3 #39323. #72259 (Mikhail f. Shiryaev).
  • Divide grandes unidades de tradução para evitar falhas de compilação devido a limitações de memória/CPU. #72352 (Yakov Olkhovskiy).
  • OSX: Compilação com suporte a ICU, o que habilita collations, conversões de conjunto de caracteres e outros recursos de localização. #73083 (Raúl Marín).

Lançamento do ClickHouse 24.11, 2024-11-26. Apresentação, Vídeo

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

  • Removidas as tabelas de sistema generate_series e generateSeries. Elas foram adicionadas por engano aqui: #59390. #71091 (Alexey Milovidov).
  • Removido StorageExternalDistributed. Fecha #70600. #71176 (flynn).
  • Os motores de tabela Kafka, NATS e RabbitMQ agora são cobertos por grants próprios na hierarquia SOURCES. Adicione grants a todos os usuários de banco de dados não padrão que criem tabelas com esses tipos de engine. #71250 (Christoph Wurm).
  • Verifique a consulta de mutação completa antes de executá-la (incluindo subconsultas). Isso evita a execução acidental de uma consulta inválida e o acúmulo de mutações mortas que bloqueiam mutações válidas. #71300 (Christoph Wurm).
  • Renomeada a configuração do cache do filesystem skip_download_if_exceeds_query_cache para filesystem_cache_skip_download_if_exceeds_per_query_cache_write_limit. #71578 (Kseniia Sumarokova).
  • Removido o suporte a argumentos Enum, bem como UInt128 e UInt256, em deltaSumTimestamp. Removido o suporte a Int8, UInt8, Int16 e UInt16 no segundo argumento (“timestamp”) de deltaSumTimestamp. #71790 (Alexey Milovidov).
  • Ao recuperar dados diretamente de um dicionário usando o armazenamento Dictionary, a table function de dicionário ou um SELECT direto no próprio dicionário, agora basta ter a permissão SELECT ou a permissão dictGet para o dicionário. Isso está alinhado com tentativas anteriores de evitar contornos de ACL: https://github.com/ClickHouse/ClickHouse/pull/57362 e https://github.com/ClickHouse/ClickHouse/pull/65359. Isso também torna a segunda delas retrocompatível. #72051 (Nikita Mikhaylov).

Recurso experimental

  • Implementa allow_feature_tier como um mecanismo global para desabilitar todos os recursos experimentais / beta. #71841 #71145 (Raúl Marín).
  • Corrige o possível erro No such file or directory devido a símbolos especiais não escapados em arquivos de subcolunas JSON. #71182 (Pavel Kruglov).
  • Adiciona suporte a ALTER de String para JSON. Este PR também altera a serialização dos tipos JSON e Dynamic para a nova versão V2. A versão antiga V1 ainda pode ser usada ao habilitar a configuração merge_tree_use_v1_object_and_dynamic_serialization (ela pode ser usada durante a atualização para permitir reverter a versão sem problemas). #70442 (Pavel Kruglov).
  • Implementa um CAST simples de Map/Tuple/Object para o novo JSON por meio de serialização/desserialização a partir de uma string JSON. #71320 (Pavel Kruglov).
  • Não permite tipos Variant/Dynamic em ORDER BY/GROUP BY/PARTITION BY/PRIMARY KEY por padrão, porque isso pode levar a resultados inesperados. #69731 (Pavel Kruglov).
  • Proíbe tipos Dynamic/Variant em funções min/max para evitar confusão. #71761 (Pavel Kruglov).

Novo recurso

  • Adicionada sintaxe SQL para descrever workload e gerenciamento de recursos. https://clickhouse.com/docs/operations/workload-scheduling. #69187 (Sergei Trifonov).
  • Um novo tipo de dado, BFloat16, representa números de ponto flutuante de 16 bits, com expoente de 8 bits, sinal e mantissa de 7 bits. Isso encerra #44206. Isso encerra #49937. #64712 (Alexey Milovidov).
  • Adicionada a consulta CHECK GRANT para verificar se o usuário/role atual recebeu o privilégio específico e se a tabela/coluna correspondente existe na memória. #68885 (Unalian).
  • Adicionadas as funções de tabela iceberg[S3;HDFS;Azure]Cluster, deltaLakeCluster, hudiCluster. #72045 (Mikhail Artemenko).
  • Adicionada a capacidade de definir usuário/senha em http_handlers (para dynamic_query_handler/predefined_query_handler). #70725 (Azat Khuzhin).
  • Adicionado suporte à cláusula de staleness no operador ORDER BY WITH FILL. #71151 (Mikhail Artemenko).
  • Permite que cada método de autenticação tenha sua própria data de expiração, removendo essa configuração da entidade de usuário. #70090 (Arthur Passos).
  • Adicionadas as novas funções parseDateTime64, parseDateTime64OrNull e parseDateTime64OrZero. Em comparação com a função existente parseDateTime (e variantes), elas retornam um valor do tipo DateTime64 em vez de DateTime. #71581 (kevinyhzou).

Melhorias de desempenho

  • Uso de memória otimizado para os valores da granularidade do índice quando a granularidade é constante para a parte. Foi adicionada a capacidade de sempre selecionar granularidade constante para a parte (configuração use_const_adaptive_granularity), o que ajuda a garantir que ela permaneça sempre otimizada em memória. Isso ajuda, em workloads grandes (trilhões de linhas em armazenamento compartilhado), a evitar o crescimento constante do uso de memória pelos metadados (valores da granularidade do índice) das partes de dados. #71786 (Anton Popov).
  • Agora, as colunas dos blocos de entrada não são copiadas para join_algorithm = 'parallel_hash' ao distribuí-las entre threads para processamento paralelo. #67782 (Nikita Taranov).
  • Algoritmo de mesclagem Replacing otimizado para partes sem sobreposição. #70977 (Anton Popov).
  • Não listar partes detached em discos somente leitura e de gravação única nas métricas e em system.detached_parts. #71086 (Alexey Milovidov).
  • Não calcule métricas assíncronas pesadas por padrão. A funcionalidade foi introduzida em #40332, mas não é adequado ter um job pesado em segundo plano necessário para apenas um único cliente. #71087 (Alexey Milovidov).
  • Para os discos plain_rewritable: não faça chamadas à API de armazenamento de objetos ao listar diretórios, pois isso pode ser pouco eficiente em termos de custo. Em vez disso, armazene a lista de nomes de arquivo em memória. As desvantagens são o aumento no tempo de carga inicial e na memória necessária para armazenar os nomes de arquivo. #70823 (Julia Kartseva).
  • Melhore o desempenho e a precisão do intervalo de coleta de system.query_metric_log reduzindo a seção crítica. #71473 (Pablo Marcos).
  • Otimização da leitura em ordem por meio da geração de linhas virtuais, de modo que menos dados sejam lidos durante o merge sort, especialmente útil quando há várias partes. #62125 (Shichao Jin).
  • Adicionada a configuração no servidor async_load_system_database, que permite que o servidor seja iniciado com o banco de dados do sistema sem estar totalmente carregado. Isso ajuda a iniciar o ClickHouse mais rapidamente se houver muitas tabelas do sistema. #69847 (Sergei Trifonov).
  • Adicionado o parâmetro --threads ao clickhouse-compressor, o que permite compactar dados em paralelo. #70860 (Alexey Milovidov).
  • Adicionada uma configuração prewarm_mark_cache que permite carregar marcas no cache de marcas em inserts, merges, fetches de partes e na inicialização da tabela. #71053 (Anton Popov).
  • Ajusta o array index_granularity na memória ao tamanho necessário para reduzir o consumo de memória da família de motores de tabela MergeTree. #71595 (alesapin).
  • Desativa a configuração boundary_alignment do cache do sistema de arquivos para leituras sem disco, o que melhora o desempenho da leitura de arquivos remotos independentes com cache. #71827 (Kseniia Sumarokova).
  • Consultas como SELECT * FROM table LIMIT ... costumavam carregar os índices das partes, embora eles não fossem usados. #71866 (Alexander Gololobov).
  • Habilite parallel_replicas_local_plan por padrão. Criar um plano local completo no nó iniciador da consulta melhora o desempenho das réplicas paralelas com menor consumo de recursos e cria oportunidades para aplicar mais otimizações de consulta. #70171 (Igor Nikonov).

Melhoria

  • Permitir usar o clickhouse com um argumento de arquivo, como ch queries.sql. #71589 (Raúl Marín).
  • O formato Vertical (que também é ativado quando você termina sua consulta com \G) passa a contar com os recursos dos formatos Pretty, como: - destaque dos separadores de milhar em números; - exibição de uma dica numérica de fácil leitura. #71630 (Alexey Milovidov).
  • Propaga roles de usuários externos do nó de origem da consulta para outros nós do cluster. Útil quando apenas o nó de origem tem acesso ao autenticador externo (como LDAP). #70332 (Andrey Zvonov).
  • Foram adicionados os aliases anyRespectNulls, firstValueRespectNulls e anyValueRespectNulls para a função de agregação any. Também foram adicionados os aliases anyLastRespectNulls e lastValueRespectNulls para a função de agregação anyLast. Isso permite usar uma sintaxe mais natural somente com camel case, em vez de uma sintaxe mista de camel case e underscore, por exemplo: SELECT anyLastRespectNullsStateIf em vez de anyLast_respect_nullsStateIf. #71403 (Peter Nguyen).
  • Adicionado o parâmetro de configuração date_time_utc, permitindo que a formatação de logs em JSON ofereça suporte a data e hora em UTC no formato RFC 3339/ISO8601. #71560 (Ali).
  • Adicionado um novo tipo de cabeçalho para endpoints S3 para autenticação de usuário (access_header). Isso permite obter um cabeçalho de acesso com a menor prioridade, que será substituído por access_key_id de qualquer outra fonte (por exemplo, um esquema de tabela ou uma coleção nomeada). #71011 (MikhailBurdukov).
  • Funções de ordem superior com arrays constantes e argumentos capturados constantes retornarão valores constantes. #58400 (Alexey Milovidov).
  • Os nomes das etapas do plano de consulta (EXPLAIN PLAN json=1) e os nomes dos processadores do pipeline (EXPLAIN PIPELINE compact=0,graph=1) agora têm um ID exclusivo como sufixo. Isso permite correlacionar a saída do Profiler dos processadores e os traces do OpenTelemetry com a saída do EXPLAIN. #63518 (qhsong).
  • Adicionada a opção de verificar se o objeto existe após ser gravado no Azure Blob Storage; isso é controlado pela configuração check_objects_after_upload. #64847 (Smita Kulkarni).
  • Usa o banco de dados Atomic por padrão no clickhouse-local. Resolve os itens 1 e 5 de #50647. Fecha #44817. #68024 (Alexey Milovidov).
  • As exceções interrompem o protocolo HTTP para informar o cliente sobre o erro. #68800 (Sema Checherinda).
  • Passa a informar os hosts que executam consultas de DDL distribuído ao criar replica_dir e marca as réplicas como ativas no DDLWorker. #69658 (tuanpach).
  • Aguarde apenas réplicas ativas nas consultas de banco de dados ON CLUSTER se distributed_ddl_output_mode estiver definido como *_only_active. #69660 (tuanpach).
  • Melhoria no tratamento de erros e no cancelamento de backups e restaurações ON CLUSTER: - Se um backup ou uma restauração falhar em um host, será cancelado automaticamente nos outros hosts - Nenhum erro estranho deve ser gerado quando alguns hosts falharem enquanto outros continuarem o processamento - Se um backup ou uma restauração for cancelado em um host, será cancelado automaticamente nos outros hosts - Correção de problemas com test_disallow_concurrency - agora a desativação da concorrência deve funcionar melhor - Backups e restaurações agora são muito mais resistentes a desconexões do ZooKeeper. #70027 (Vitaly Baranov).
  • Adiciona suporte a ALTER TABLE ... MODIFY/RESET SETTING ... para determinadas configurações no armazenamento S3Queue. #70811 (Kseniia Sumarokova).
  • Adicionada a possibilidade de recarregar certificados de cliente da mesma forma que no procedimento de recarga dos certificados do servidor. #70997 (Roman Antonov).
  • Permita configurar o tamanho do histórico do cliente e aumente o tamanho padrão. #71014 (Jiří Kozlovský).
  • Suporte a tipos booleanos no leitor nativo de Parquet. #71055 (Arthur Passos).
  • Repetir a tentativa em mais erros ao interagir com o S3, como “Malformed message”. #71088 (Alexey Milovidov).
  • Redução do nível de log de algumas mensagens sobre S3. #71090 (Alexey Milovidov).
  • Suporte para gravar arquivos HDFS com espaços. #71105 (exmy).
  • Adicionadas configurações para limitar o número de tabelas replicadas, dicionários e views. #71179 (Kirill).
  • Use AWS_CONTAINER_AUTHORIZATION_TOKEN_FILE em vez de AWS_CONTAINER_AUTHORIZATION_TOKEN se ele estiver disponível. Corrige #71074. #71269 (Konstantin Bogdanov).
  • Remove a criação do nó metadata_version no ZooKeeper da thread de reinicialização do ReplicatedMergeTree. O único cenário em que precisamos criar esse nó é quando o usuário atualiza de uma versão anterior à 20.4 diretamente para uma posterior à 24.10. O ClickHouse não oferece suporte a atualizações que abrangem mais de um ano, portanto devemos lançar uma exceção e pedir ao usuário que atualize gradualmente, em vez de criar o nó. #71385 (Miсhael Stetsyuk).
  • Adiciona ao dashboard avançado os dashboards por host Overview (host) e Cloud overview (host). #71422 (alesapin).
  • clickhouse-local usa SELECT implícito por padrão, o que permite utilizá-lo como calculadora. Melhorado o realce de sintaxe para o modo de SELECT implícito. #71620 (Alexey Milovidov).
  • Os aplicativos de linha de comando destacarão a sintaxe mesmo em múltiplas instruções. #71622 (Alexey Milovidov).
  • Aplicações de linha de comando retornarão códigos de saída diferentes de zero em caso de erro. Em versões anteriores, a aplicação disks retornava zero em caso de erro, e outras aplicações retornavam zero para os erros 256 (PARTITION_ALREADY_EXISTS) e 512 (SET_NON_GRANTED_ROLE). #71623 (Alexey Milovidov).
  • Quando o usuário/grupo é informado como ID, o clickhouse su falha. Este patch corrige isso para também aceitar UID:GID. #71626 (Mikhail f. Shiryaev).
  • Permite desativar o aumento do buffer de memória para o cache do sistema de arquivos por meio da configuração filesystem_cache_prefer_bigger_buffer_size. #71640 (Kseniia Sumarokova).
  • Adicionada uma configuração separada background_download_max_file_segment_size para definir o tamanho máximo do segmento de arquivo em downloads em segundo plano no cache do sistema de arquivos. #71648 (Kseniia Sumarokova).
  • Melhoria sutil no parsing do tipo JSON: se o bloco atual para o caminho JSON contiver valores de vários tipos, tente escolher o tipo mais adequado testando os tipos em uma ordem especial de melhor esforço. #71785 (Pavel Kruglov).
  • Antes, ler de system.asynchronous_metrics fazia com que fosse necessário aguardar a conclusão da atualização concorrente. Isso pode levar muito tempo se o sistema estiver sob alta carga. Com essa mudança, os valores coletados anteriormente sempre podem ser lidos. #71798 (Alexander Gololobov).
  • S3Queue e AzureQueue: defina polling_max_timeout_ms como 10 minutos e polling_backoff_ms como 30 segundos. #71817 (Kseniia Sumarokova).
  • Atualiza HostResolver três vezes durante um período de history. #71863 (Sema Checherinda).
  • Na página HTML do Advanced dashboard, foi adicionado um seletor suspenso para escolher o dashboard a partir da tabela system.dashboards. #72081 (Sergei Trifonov).
  • Verifique se o banco de dados padrão está disponível após a autorização. Corrige #71097. #71140 (Konstantin Bogdanov).

Correção de bug (comportamento incorreto perceptível ao usuário em uma versão estável oficial)

  • As partes deduplicadas durante a consulta ATTACH PART não ficam mais com o prefixo attaching_. #65636 (Kirill).
  • Correção de um bug em que o DateTime64 perdia precisão na função IN. #67230 (Yarik Briukhovetskyi).
  • Corrige um possível erro lógico ao usar funções com IGNORE/RESPECT NULLS em ORDER BY ... WITH FILL; fecha #57609. #68234 (Vladimir Cherkasov).
  • Corrigidos erros lógicos raros em inserções assíncronas com o formato Native quando o limite de memória é atingido. #68965 (Anton Popov).
  • Corrigido COMMENT em CREATE TABLE para coluna EPHEMERAL. #70458 (Yakov Olkhovskiy).
  • Corrige um erro lógico em JSONExtract com LowCardinality(Nullable). #70549 (Pavel Kruglov).
  • Permitir system drop replica zkpath quando houver outra réplica com o mesmo caminho no zk. #70642 (MikhailBurdukov).
  • Corrige um crash e um vazamento de memória em AggregateFunctionGroupArraySorted. #70820 (Michael Kolupaev).
  • Adicionada a capacidade de substituir o Content-Type por meio de cabeçalhos do usuário no engine URL. #70859 (Artem Iurin).
  • Corrigido erro lógico em StorageS3Queue “Não é possível criar um nó persistente em /processed porque ele já existe”. #70984 (Kseniia Sumarokova).
  • Corrigido o problema em que sessões nomeadas não eram encerradas e permaneciam travadas indefinidamente em determinadas circunstâncias. #70998 (Márcio Martins).
  • Corrige o bug que não levava em conta a coluna _row_exists na opção de reconstrução da exclusão leve de projeções. #71089 (Shichao Jin).
  • Corrige o problema AT_* is out of range ao rodar no Oracle Linux UEK 6.10. #71109 (Örjan Fors).
  • Corrige valor incorreto no system.query_metric_log devido a uma condição de corrida inesperada. #71124 (Pablo Marcos).
  • Corrige o nome incorreto da função de agregação quantileExactWeightedInterpolated. O bug foi introduzido em https://github.com/ClickHouse/ClickHouse/pull/69619. cc @Algunenano. #71168 (李扬).
  • Corrigida a exceção bad_weak_ptr com Dynamic na comparação de funções. #71183 (Pavel Kruglov).
  • Verifica se o arquivo 7z lido está na máquina local. #71184 (Daniil Ivanik).
  • Corrigido problema em que as configurações de formato eram ignoradas no Native format via HTTP e em Async Inserts. #71193 (Pavel Kruglov).
  • Consultas SELECT executadas com a configuração use_query_cache = 1 não são mais rejeitadas se o nome de uma tabela de sistema aparecer como literal; por exemplo, SELECT * FROM users WHERE name = 'system.metrics' SETTINGS use_query_cache = true; agora funciona. #71254 (Robert Schulze).
  • Corrige o bug de aumento no uso de memória quando enable_filesystem_cache=1 está habilitado, mas o disco na configuração de armazenamento não tem nenhuma configuração de cache. #71261 (Kseniia Sumarokova).
  • Corrige o possível erro “Cannot read all data” durante a desserialização do Dicionário LowCardinality da coluna Dynamic. #71299 (Pavel Kruglov).
  • Corrigida a limpeza incompleta do formato de saída paralelo no cliente. #71304 (Raúl Marín).
  • Adicionada a desescapagem que faltava em named collections. Sem essa correção, o clickhouse-server não consegue iniciar. #71308 (MikhailBurdukov).
  • Corrige inserts assíncronos com blocos vazios via protocolo nativo. #71312 (Anton Popov).
  • Corrige a formatação inconsistente da AST ao conceder privilégios curingas incorretos #71309. #71332 (pufit).
  • Adiciona try/catch aos destrutores das partes de dados para evitar std::terminate. #71364 (alesapin).
  • Verificação de tipos suspeitos e experimentais nas indicações de tipo em JSON. #71369 (Pavel Kruglov).
  • Inicia também a thread worker de memória em sistemas operacionais que não sejam Linux (corrige #71051). #71384 (Alexandre Snarskii).
  • Corrige o erro Invalid number of rows in Chunk na coluna Variant. #71388 (Pavel Kruglov).
  • Corrige o erro de coluna “attgenerated” inexistente em versões mais antigas do PostgreSQL; corrige #60651. #71396 (0xMihalich).
  • Para evitar poluir os logs do servidor, as tentativas de autenticação malsucedidas agora são registradas no nível DEBUG em vez de ERROR. #71405 (Robert Schulze).
  • Corrigido crash na função de tabela mongodb ao passar argumentos incorretos (por exemplo, NULL). #71426 (Vladimir Cherkasov).
  • Corrigida falha com optimize_rewrite_array_exists_to_has. #71432 (Raúl Marín).
  • Corrigido o uso da configuração max_insert_delayed_streams_for_parallel_write em inserções. Antes, ela funcionava de forma incorreta, o que podia levar a alto uso de memória em inserções que gravam dados em várias partições. #71474 (Anton Popov).
  • Corrige um possível erro Argument for function must be constant (analisador antigo) no caso em que arrayJoin aparentemente pode aparecer na condição WHERE. Regressão após https://github.com/ClickHouse/ClickHouse/pull/65414. #71476 (Nikolai Kochetov).
  • Evita falha no SortCursor com 0 colunas (analisador antigo). #71494 (Raúl Marín).
  • Corrige Date32 fora do intervalo causado por dados ORC não inicializados. Para mais detalhes, consulte https://github.com/apache/incubator-gluten/issues/7823. #71500 (李扬).
  • Corrige a contagem do tamanho da coluna na parte wide para os tipos Dynamic e JSON. #71526 (Pavel Kruglov).
  • Correção no analisador quando a consulta em uma visão materializada usa IN com CTE. Fecha #65598. #71538 (Maksim Kita).
  • Evita travamento ao usar uma UDF em uma restrição. #71541 (Raúl Marín).
  • Retorna 0 ou o caractere padrão em vez de gerar um erro nas funções bitShift em caso de acesso fora dos limites. #71580 (Pablo Marcos).
  • Corrigidas falhas no servidor ao usar visão materializada com certos motores. #71593 (Pervakov Grigorii).
  • Array join com uma estrutura de dados aninhada que contém um alias para um array constante estava causando uma desreferenciação de ponteiro nulo. Isso encerra #71677. #71678 (Alexey Milovidov).
  • Corrige LOGICAL_ERROR ao executar ALTER com uma tupla vazia. Isso corrige #71647. #71679 (Amos Bird).
  • Não transforme um conjunto constante em predicados sobre colunas de partição no caso do operador NOT IN. #71695 (Eduard Karacharov).
  • Corrige a mensagem de log de falha do script de inicialização do Docker para ficar mais clara. #71734 (Андрей).
  • Corrige CAST de LowCardinality(Nullable) para Dynamic. Antes, isso podia causar o erro Bad cast from type DB::ColumnVector<int> to DB::ColumnNullable. #71742 (Pavel Kruglov).
  • Corrigida a exceção em toDayOfWeek na cláusula WHERE com chave primária do tipo DateTime64. #71849 (Yakov Olkhovskiy).
  • Corrigido o preenchimento de valores padrão após o parsing para colunas esparsas. #71854 (Anton Popov).
  • Corrige erro na função GROUPING quando a entrada é um ALIAS em tabela distribuída, fecha #68602. #71855 (Vladimir Cherkasov).
  • Corrige possível travamento ao usar allow_experimental_join_condition, fecha #71693. #71857 (Vladimir Cherkasov).
  • Corrigidas instruções SELECT que usam a cláusula WITH TIES e podem não retornar linhas suficientes. #71886 (wxybear).
  • Corrige a exceção TOO_LARGE_ARRAY_SIZE causada quando uma coluna resultante da avaliação de arrayWithConstant é erroneamente considerada como excedendo o limite de tamanho do array. #71894 (Udi).
  • clickhouse-benchmark apresentou métricas incorretas para consultas que demoravam mais de um segundo. #71898 (Alexey Milovidov).
  • Corrige a corrida de dados entre o indicador de progresso e a tabela de progresso no clickhouse-client. Esse problema fica visível quando FROM INFILE é usado. Intercepta teclas pressionadas durante consultas INSERT para alternar a exibição da tabela de progresso. #71901 (Julia Kartseva).
  • Use Keepers auxiliares para a autodescoberta de clusters. #71911 (Anton Ivashkin).
  • Corrigida a coluna rows_processed em system.s3/azure_queue_log, que estava com problema na versão 24.6. Fecha #69975. #71946 (Kseniia Sumarokova).
  • Corrigido o caso em que as funções s3/s3Cluster podiam retornar um resultado incompleto ou lançar uma exceção. Isso ocorria ao usar um glob pattern na URI do S3 (como pattern/*) e quando existia um objeto vazio com a chave pattern/ (esses objetos são criados automaticamente pelo S3 Console). Além disso, o valor padrão da configuração s3_skip_empty_files mudou de false para true. #71947 (Nikita Taranov).
  • Corrige um travamento no realce de sintaxe do clickhouse-client. Fecha #71864. #71949 (Nikolay Degterinsky).
  • Corrige o erro Illegal type em tabelas MergeTree com função monotônica binária em ORDER BY quando o primeiro argumento é constante. Corrige #71941. #71966 (Nikolai Kochetov).
  • Permitir apenas consultas SELECT em EXPLAIN AST quando usado dentro de subconsulta. Outros tipos de consultas levam ao erro lógico: ‘Bad cast from type DB::ASTCreateQuery to DB::ASTSelectWithUnionQuery’ ou Inconsistent AST formatting. #71982 (Pavel Kruglov).
  • Ao inserir um registro com clickhouse-client, o cliente lê as descrições das colunas do servidor. Mas havia um bug: gravávamos as descrições na ordem errada; o correto é [statistics, ttl, settings]. #71991 (Han Fei).
  • Corrige a formatação dos comandos ALTER MOVE PARTITION ... TO TABLE ... quando format_alter_commands_with_parentheses está habilitado. #72080 (János Benjamin Antal).
  • Corrige junções RIGHT / FULL em consultas com réplicas paralelas. Agora, junções RIGHT podem ser executadas com réplicas paralelas (a leitura da tabela à direita é distribuída). Junções FULL n’ão podem ser paralelizadas entre os nós e são executadas localmente. #71162 (Igor Nikonov).
  • Corrige o problema em que o ClickHouse em contêineres Docker escrevia “get_mempolicy: Operation not permitted” na stderr devido a chamadas de sistema restritas. #70900 (filimonov).
  • Corrige o registro metadata_version no ZooKeeper na thread de reinicialização, em vez da thread de attach. #70297 (Miсhael Stetsyuk).
  • Esta é uma correção para a replicação “zero-copy”, que não tem suporte e será removida por completo. Não exclua um blob quando houver nós usando esse blob no ReplicatedMergeTree com replicação “zero-copy”. #71186 (Antonio Andelic).
  • Esta é uma correção para a replicação “zero-copy”, que não é compatível e será removida por completo. Aquisição de um bloqueio compartilhado zero-copy antes de mover uma parte para um disco zero-copy, para evitar possível perda de dados se o Keeper estiver indisponível. #71845 (Aleksei Filatov).

Lançamento do ClickHouse 24.10, 2024-10-31. Apresentação, Vídeo

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

  • Agora é possível escrever SETTINGS antes de FORMAT em uma cadeia de consultas com UNION quando as subconsultas estiverem entre parênteses. Isso fecha #39712. O comportamento também muda quando uma consulta tem a cláusula SETTINGS especificada duas vezes em sequência. A cláusula SETTINGS mais próxima terá preferência para a subconsulta correspondente. Nas versões anteriores, a cláusula SETTINGS mais externa podia ter preferência sobre a interna. #68614 (Alexey Milovidov).
  • A reordenação das condições de filtro da cláusula [PRE]WHERE agora é permitida por padrão. Isso pode ser desativado definindo allow_reorder_prewhere_conditions como false. #70657 (Nikita Taranov).
  • Remove a biblioteca idxd-config, que tem uma licença incompatível. Isso também remove o codec Intel DeflateQPL experimental. #70987 (Alexey Milovidov).

Novo recurso

  • Permite conceder acesso a prefixos com caractere curinga. GRANT SELECT ON db.table_pefix_* TO user. #65311 (pufit).
  • Se você pressionar a barra de espaço durante a execução da consulta, o cliente exibirá uma tabela em tempo real com métricas detalhadas. Você pode habilitá-la globalmente com a nova opção --progress-table no clickhouse-client; a nova opção --enable-progress-table-toggle está associada à opção --progress-table e alterna a exibição da tabela de progresso ao pressionar a tecla de controle (Space). #63689 (Maria Khristenko), #70423 (Julia Kartseva).
  • Permite usar cache para arquivos lidos em motores de tabela com armazenamento de objetos e lagos de dados, usando o hash de ETag + caminho do arquivo como chave de cache. #70135 (Kseniia Sumarokova).
  • Suporte à criação de uma tabela com uma consulta: CREATE TABLE ... CLONE AS .... Isso clona o esquema da tabela de origem e depois anexa todas as partições à tabela recém-criada. Esse recurso é compatível apenas com tabelas da família MergeTree. Fecha #65015. #69091 (tuanpach).
  • Adiciona uma nova tabela de sistema, system.query_metric_log, que contém o histórico dos valores de memória e de métricas da tabela system.events para consultas individuais, gravados em disco periodicamente. #66532 (Pablo Marcos).
  • Uma consulta SELECT simples pode ser escrita usando SELECT implícito para permitir expressões em estilo de calculadora, por exemplo, ch "1 + 2". Isso é controlado por uma nova configuração, implicit_select. #68502 (Alexey Milovidov).
  • Suporte ao modo --copy no clickhouse local como atalho para conversão de formato #68503. #68583 (Denis Hananein).
  • Adiciona uma página HTML integrada para visualizar merges, disponível no caminho /merges. #70821 (Alexey Milovidov).
  • Adicionado suporte à função arrayUnion. #68989 (Peter Nguyen).
  • Permitir aliases SQL com parâmetros. #50665 (Anton Kozlov).
  • Uma nova função de agregação quantileExactWeightedInterpolated, que é uma versão interpolada baseada em quantileExactWeighted. Algumas pessoas podem se perguntar por que precisamos de uma nova quantileExactWeightedInterpolated, já que já temos quantileExactInterpolatedWeighted. O motivo é que a nova é mais precisa que a antiga. Isso é para compatibilidade com o Spark. #69619 (李扬).
  • Uma nova função arrayElementOrNull. Ela retorna NULL se o índice do array estiver fora do intervalo ou se uma chave do map não for encontrada. #69646 (李扬).
  • Permite que os usuários especifiquem expressões regulares por meio dos novos campos message_regexp e message_regexp_negative no arquivo config.xml para filtrar o logging. O logging é aplicado ao texto formatado sem cores para proporcionar uma experiência mais intuitiva aos desenvolvedores. #69657 (Peter Nguyen).
  • Adicionada a função RIPEMD160, que calcula o hash criptográfico RIPEMD-160 de uma string. Exemplo: SELECT HEX(RIPEMD160('The quick brown fox jumps over the lazy dog')) retorna 37F332F68DB77BD9D7EDD4969571AD671CF9DD3B. #70087 (Dergousov Maxim).
  • Suporte à leitura de tabelas Iceberg em HDFS. #70268 (flynn).
  • Suporte a CTE no formato WITH ... INSERT, já que anteriormente só havia suporte para INSERT ... WITH .... #70593 (Shichao Jin).
  • Integração com MongoDB: suporte a todos os tipos do MongoDB, às instruções WHERE e ORDER BY no lado do MongoDB, com restrição para expressões não suportadas pelo MongoDB. Observe que a nova integração está desabilitada por padrão; para usá-la, defina <use_legacy_mongodb_integration> como false na configuração do servidor. #63279 (Kirill Nikiforov).
  • Uma nova função getSettingOrDefault foi adicionada para retornar o valor padrão e evitar uma exceção caso uma configuração personalizada não seja encontrada no perfil atual. #69917 (Shankar).

Recurso experimental

  • Views materializadas atualizáveis estão prontas para produção. #70550 (Michael Kolupaev). Views materializadas atualizáveis agora têm suporte em bancos de dados Replicated. #60669 (Michael Kolupaev).
  • Réplicas paralelas passaram de experimental para beta. As configurações que controlam o comportamento dos algoritmos de réplicas paralelas foram reformuladas. Resumindo: o ClickHouse tem quatro algoritmos diferentes para leitura paralela envolvendo várias réplicas, o que se reflete na configuração parallel_replicas_mode; o valor padrão é read_tasks. Além disso, foi adicionada a configuração de alternância enable_parallel_replicas. #63151 (Alexey Milovidov), (Nikita Mikhaylov).
  • Suporte ao tipo Dynamic na maioria das funções, executando-as sobre tipos internos dentro de Dynamic. #69691 (Pavel Kruglov).
  • Permite ler/gravar o tipo JSON como uma string binária no formato RowBinary com as configurações input_format_binary_read_json_as_string/output_format_binary_write_json_as_string. #70288 (Pavel Kruglov).
  • Permite serializar/desserializar a coluna JSON como uma única coluna String no Native format. Para saída, use a configuração output_format_native_write_json_as_string. Para entrada, use a versão de serialização 1 antes dos dados da coluna. #70312 (Pavel Kruglov).
  • Foi introduzido um modo especial (experimental) de merge selector para tabelas MergeTree, que o torna mais agressivo para partições próximas do limite de número de partes. Ele é controlado pela configuração em nível de MergeTree merge_selector_use_blurry_base. #70645 (Nikita Mikhaylov).
  • Implementa ser/de genérico entre os tipos Union do Avro e Variant do ClickHouse. Resolve #69713. #69712 (Jiří Kozlovský).

Melhorias de desempenho

  • Refatoração de IDisk e IObjectStorage para melhorar o desempenho. As tabelas dos armazenamentos de objetos plain e plain_rewritable serão inicializadas mais rapidamente. #68146 (Alexey Milovidov, Julia Kartseva). A API LIST do armazenamento de objetos não é mais chamada ao determinar se um arquivo ou diretório existe no disco plain_rewritable, pois isso pode gerar custos desnecessários. #70852 (Julia Kartseva). Redução do número de requisições à API HEAD do armazenamento de objetos no disco plain_rewritable. #70915 (Julia Kartseva).
  • Adicionada a capacidade de interpretar dados diretamente em colunas esparsas. #69828 (Anton Popov).
  • Melhorado o desempenho do parsing de formatos com um grande número de valores ausentes (por exemplo, JSONEachRow). #69875 (Anton Popov).
  • Oferece suporte à leitura paralela de grupos de linhas do Parquet e ao pré-carregamento de grupos de linhas no modo de execução com uma única thread. #69862 (LiuNeng).
  • Adicionado suporte ao índice minmax para pointInPolygon. #62085 (JackyWoo).
  • Usa filtros de Bloom na leitura de arquivos Parquet. #62966 (Arthur Passos).
  • Renomeação sem bloqueio das partes para evitar que INSERT afete SELECT (devido ao bloqueio das partes) (em condições normais com fsync_part_directory, o QPS de SELECT com INSERT em paralelo aumentou 2x; sob carga elevada, o efeito é ainda maior). Observe que, por enquanto, isso se aplica apenas a ReplicatedMergeTree. #64955 (Azat Khuzhin).
  • Passa a respeitar ttl_only_drop_parts em materialize ttl; lê apenas as colunas necessárias para recalcular o TTL e remove as partes substituindo-as por uma vazia. #65488 (Andrey Zvonov).
  • Otimizada a criação de threads no ThreadPool para minimizar a contenção em locks. A criação de threads agora é feita fora da seção crítica para evitar atrasos no agendamento de tarefas e no gerenciamento de threads em cenários de alta carga. Isso deixa o ClickHouse muito mais responsivo sob alta carga concorrente. #68694 (filimonov).
  • Habilita a leitura de colunas de texto LowCardinality a partir de ORC. #69481 (李扬).
  • Use LowCardinality para ProfileEvents em logs do sistema, como part_log, query_views_log, filesystem_cache_log. #70152 (Alexey Milovidov).
  • Melhora no desempenho das funções fromUnixTimestamp/toUnixTimestamp. #71042 (kevinyhzou).
  • Não desative a leitura não bloqueante do cache de páginas para o servidor inteiro ao ler a partir de uma E/S bloqueante. Isso causava piora no desempenho quando um único sistema de arquivos (por exemplo, tmpfs) não oferecia suporte à syscall preadv2, enquanto outros ofereciam. #70299 (Antonio Andelic).
  • ALTER TABLE .. REPLACE PARTITION não espera mais por mutações/merges que ocorram em outras partições. #59138 (Vasily Nemkov).
  • Não validar as ACLs ao sincronizá-las do Keeper. A validação já é feita durante a criação. Isso não deve fazer tanta diferença, mas há instalações com dezenas de milhares ou até mais usuários criados, e a validação desnecessária de hash pode levar muito tempo para ser concluída durante a inicialização do servidor (ele sincroniza tudo do Keeper). #70644 (Raúl Marín).

Melhoria

  • CREATE TABLE AS copiará a PRIMARY KEY, ORDER BY e cláusulas semelhantes (de tabelas MergeTree). #69739 (sakulali).
  • Suporte a XID de 64 bits no Keeper. Isso pode ser habilitado com o valor de configuração use_xid_64. #69908 (Antonio Andelic).
  • Argumentos de linha de comando para configurações Bool passam a ser definidos como true quando nenhum valor é fornecido para o argumento (por exemplo, clickhouse-client --optimize_aggregation_in_order --query "SELECT 1"). #70459 (davidtsuk).
  • Adicionadas configurações no nível do usuário min_free_disk_bytes_to_perform_insert e min_free_disk_perform_to_throw_insert para evitar inserções em discos quase cheios. #69755 (Marco Vilas Boas).
  • A documentação embutida das configurações será muito mais detalhada e completa do que a documentação no site. Este é o primeiro passo para que a documentação do site passe a ser sempre gerada automaticamente a partir do código-fonte. Isso tem implicações duradouras: - ficará garantido que todas as configurações estejam incluídas; - não haverá risco de os valores padrão ficarem obsoletos; - poderemos gerar essa documentação para cada versão do ClickHouse; - a documentação poderá ser exibida pelo próprio servidor mesmo sem acesso à Internet. Gerar a documentação do site a partir do código-fonte. #70289 (Alexey Milovidov).
  • Permitir needle vazio na função replace, com o mesmo comportamento do PostgreSQL. #69918 (zhanglistar).
  • Permitir needle vazio nas funções replaceRegexp*. #70053 (zhanglistar).
  • Links simbólicos para tabelas no diretório data/database_name/ passam a ser criados para os caminhos reais dos dados da tabela, de acordo com a política de armazenamento, em vez do diretório store/... no disco padrão. #61777 (Kirill).
  • Ao fazer o parsing de um campo Enum de JSON, uma string que contém um inteiro será interpretada como o elemento Enum correspondente. Isso fecha #65119. #66801 (scanhex12).
  • Permite usar TRIM com string vazia em LEADING ou TRAILING sem efeito. Fecha #67792. #68455 (Peter Nguyen).
  • Melhorada a compatibilidade de cast(timestamp as String) com o Spark. #69179 (Wenzheng Liu).
  • Sempre use o novo analisador para calcular expressões constantes quando enable_analyzer estiver definido como true. Suporte para calcular argumentos da função de tabela executable sem usar a consulta SELECT para expressões constantes. #69292 (Dmitry Novik).
  • Adiciona a configuração enable_secure_identifiers para impedir identificadores com caracteres especiais. #69411 (tuanpach).
  • Adiciona show_create_query_identifier_quoting_rule para definir o comportamento de aspas em identificadores no resultado da consulta SHOW CREATE TABLE. Valores possíveis: - user_display: Quando os identificadores forem palavras-chave. - when_necessary: Quando os identificadores forem um de {"distinct", "all", "table"} e quando isso puder gerar ambiguidade: nomes de coluna, nomes de atributos de Dicionário. - always: Sempre colocar aspas nos identificadores. #69448 (tuanpach).
  • Melhora na restauração das dependências das entidades de acesso #69563 (Vitaly Baranov).
  • Se você executar o clickhouse-client ou outro aplicativo de CLI, e ele demorar para iniciar devido a um servidor sobrecarregado, e você começar a digitar sua consulta, como SELECT, as versões anteriores exibirão o restante do conteúdo do terminal ecoado antes de imprimir a mensagem de saudação, como SELECTClickHouse local version 24.10.1.1. em vez de ClickHouse local version 24.10.1.1.. Agora isso foi corrigido. Isso encerra #31696. #69856 (Alexey Milovidov).
  • Adicionada a nova coluna readonly_duration à tabela system.replicas. Necessária para distinguir réplicas realmente em somente leitura das réplicas sentinela nos alertas. #69871 (Miсhael Stetsyuk).
  • Altere o tipo da configuração join_output_by_rowlist_perkey_rows_threshold para um inteiro sem sinal. #69886 (kevinyhzou).
  • Melhora o logging de spans do OpenTelemetry para incluir as configurações da consulta. #70011 (sharathks118).
  • Adicionar informações de diagnóstico sobre funções de array de ordem superior quando o tipo de resultado da lambda for inesperado. #70093 (ttanay).
  • Melhoria no Keeper: menos bloqueios durante alterações no cluster. #70275 (Antonio Andelic).
  • Adicionadas as palavras-chave WITH IMPLICIT e FINAL ao comando SHOW GRANTS. Corrigido um pequeno bug relacionado a privilégios implícitos: #70094. #70293 (pufit).
  • Passa a respeitar compatibility nas configurações do MergeTree. O valor de compatibility é obtido do perfil default na inicialização do servidor, e as configurações padrão do MergeTree são ajustadas de acordo. Alterações posteriores na configuração compatibility não afetam as configurações do MergeTree. #70322 (Nikolai Kochetov).
  • Evite encher os logs com corpos grandes de resposta HTTP em caso de erros durante a comunicação entre servidores. #70487 (Vladimir Cherkasov).
  • Foi adicionada uma nova configuração max_parts_to_move para controlar o número máximo de partes que podem ser movidas de uma vez. #70520 (Vladimir Cherkasov).
  • Limita a frequência de determinadas mensagens de log. #70601 (Alexey Milovidov).
  • CHECK TABLE com o modificador PART foi formatado incorretamente no cliente. #70660 (Alexey Milovidov).
  • Suporte à gravação do índice de coluna e do índice de deslocamento usando o gravador nativo do Parquet. #70669 (LiuNeng).
  • Suporte ao parsing de DateTime64 com microssegundos e fuso horário na sintaxe Joda (“joda” é uma biblioteca Java popular para data e hora, e a “sintaxe Joda” é o estilo dessa biblioteca). #70737 (kevinyhzou).
  • Foi alterada a forma de determinar se um armazenamento em nuvem oferece suporte à exclusão em lote ou não. #70786 (Vitaly Baranov).
  • Suporte à página v2 do Parquet no leitor nativo. #70807 (Arthur Passos).
  • Uma verificação para conferir se a tabela tem storage_policy e disk definidos. Foi adicionada uma verificação para conferir se uma nova política de armazenamento é compatível com a anterior ao usar a configuração disk. #70839 (Kirill).
  • Adicionados system.s3_queue_settings e system.azure_queue_settings. #70841 (Kseniia Sumarokova).
  • As funções base58Encode e base58Decode agora aceitam argumentos do tipo FixedString. Exemplo: SELECT base58Encode(toFixedString('plaintext', 9));. #70846 (Faizan Patel).
  • Adiciona a coluna partition a todos os tipos de entrada do log de partes. Anteriormente, ela era preenchida apenas para algumas entradas. Isso fecha #70819. #70848 (Alexey Milovidov).
  • Adiciona os eventos MergeStart e MutateStart ao system.part_log, o que ajuda na análise e na visualização de merges. #70850 (Alexey Milovidov).
  • Adicionado um evento de perfil sobre o número de partes de origem mescladas. Isso permite monitorar o fanout da MergeTree em produção. #70908 (Alexey Milovidov).
  • Os downloads em segundo plano para o cache do sistema de arquivos foram habilitados novamente. #70929 (Nikita Taranov).
  • Adiciona um novo algoritmo seletor de merge, chamado Trivial, apenas para uso profissional. Ele é inferior ao seletor de merge Simple. #70969 (Alexey Milovidov).
  • Suporte a CREATE OR REPLACE VIEW atômico. #70536 (tuanpach)
  • Adicionado o modo strict_once à função de agregação windowFunnel para evitar contar o mesmo evento várias vezes caso ele corresponda a várias condições, resolvendo #21835. #69738 (Vladimir Cherkasov).

Correção de bug (comportamento incorreto visível ao usuário em uma versão estável oficial)

  • Aplicar atualizações de configuração ao objeto de contexto global. Isso corrige problemas como o #62308. #62944 (Amos Bird).
  • Correção de ReadSettings, que não usava os valores definidos pelo usuário, pois apenas os valores padrão eram usados. #65625 (Kseniia Sumarokova).
  • Corrige a incompatibilidade de tipos em sumMapFiltered ao usar argumentos com sinal. #58408 (Chen768959).
  • Correção na monotonicidade de funções de conversão como toHour quando um argumento opcional de fuso horário é fornecido. #60264 (Amos Bird).
  • Verificação supportsPrewhere flexibilizada para tabelas Merge. Isso corrige #61064. Ela havia sido reforçada desnecessariamente em #60082. #61091 (Amos Bird).
  • Corrige o tratamento da configuração use_concurrency_control para garantir a aplicação correta do limite concurrent_threads_soft_limit_num. Isso ativa o controle de concorrência por padrão, porque antes ele não funcionava corretamente. #61473 (Sergei Trifonov).
  • Corrige a otimização incorreta da cláusula JOIN ON no caso de verificação de IS NULL sob qualquer outra função (como NOT), o que pode levar a resultados incorretos. Fecha #67915. #68049 (Vladimir Cherkasov).
  • Impedir consultas ALTER que invalidariam a consulta CREATE das tabelas. #68574 (János Benjamin Antal).
  • Corrige a formatação inconsistente da AST para as funções negate (-) e NOT com tuplas e arrays. #68600 (Vladimir Cherkasov).
  • Corrige a inserção de um tipo incompleto em Dynamic durante a desserialização. Isso pode levar a erros Parameter out of bound. #69291 (Pavel Kruglov).
  • Replicação zero-copy, que é experimental e não deve ser usada em produção: corrige loop infinito após restore replica na MergeTree replicada com zero-copy. #69293 (MikhailBurdukov).
  • Restaura o valor padrão de processing_threads_num para o número de núcleos da CPU no armazenamento S3Queue. #69384 (Kseniia Sumarokova).
  • Contorna o fluxo de try/catch ao de/serializar protobuf aninhado repetido em colunas aninhadas (corrige #41971). #69556 (Eliot Hautefeuille).
  • Corrigida uma falha ao inserir em uma coluna FixedString no mecanismo PostgreSQL. #69584 (Pavel Kruglov).
  • Corrigida a falha ao executar create view t as (with recursive 42 as ttt select ttt);. #69676 (Han Fei).
  • Corrigido maxMapState, que gerava ‘Bad get’ quando o tipo do valor era DateTime64. #69787 (Michael Kolupaev).
  • Corrige getSubcolumn em colunas LowCardinality, sobrescrevendo useDefaultImplementationForLowCardinalityColumns para retornar true. #69831 (Miсhael Stetsyuk).
  • Corrigido o bloqueio permanente de envios distribuídos caso um DROP de tabela distribuída falhasse. #69843 (Azat Khuzhin).
  • Corrige consultas não canceláveis com WITH FILL e chaves NaN. Isso fecha #69261. #69845 (Alexey Milovidov).
  • Ajusta o valor padrão do analyzer para o valor de compatibilidade antigo. #69895 (Raúl Marín).
  • Não verificar dependências durante CREATE OR REPLACE VIEW ao executar DROP da tabela antiga. Antes, a consulta CREATE OR REPLACE falhava quando havia tabelas dependentes da view recriada. #69907 (Pavel Kruglov).
  • Ajuste para Decimal. Corrige #69730. #69978 (Arthur Passos).
  • Agora, DEFINER/INVOKER passarão a funcionar com views parametrizadas. #69984 (pufit).
  • Corrige o parsing dos definidores de view. #69985 (pufit).
  • Corrigido um bug em que o fuso horário podia alterar o resultado da consulta com argumentos do tipo Date ou Date32. #70036 (Yarik Briukhovetskyi).
  • Corrige Block structure mismatch em consultas com views aninhadas e cláusula WHERE. Corrige #66209. #70054 (Nikolai Kochetov).
  • Evite reutilizar colunas em diferentes tuplas nomeadas ao avaliar funções tuple. Isso corrige #70022. #70103 (Amos Bird).
  • Correção de LOGICAL_ERROR incorreto ao substituir literais em intervalos. #70122 (Pablo Marcos).
  • Verificação do tipo Nullable(Nothing) em ALTER TABLE MODIFY COLUMN/QUERY para evitar tabelas com esse tipo de dado. #70123 (Pavel Kruglov).
  • Mensagem de erro apropriada para a consulta ilegal JOIN ... ON * , fecha #68650. #70124 (Vladimir Cherkasov).
  • Corrigido resultado incorreto com índice de skipping. #70127 (Raúl Marín).
  • Corrigida uma condição de corrida no método de descompressão de ColumnObject/ColumnTuple que poderia levar ao uso de memória heap após a liberação. #70137 (Pavel Kruglov).
  • Corrige possível travamento no ALTER COLUMN com o tipo Dynamic. #70144 (Pavel Kruglov).
  • Agora, o ClickHouse passará a considerar mais erros como passíveis de nova tentativa e não marcará as partes de dados como corrompidas em caso de erros desse tipo. #70145 (alesapin).
  • Use o parâmetro max_types adequado ao criar o tipo Dynamic para a subcoluna JSON. #70147 (Pavel Kruglov).
  • Corrigido o problema de exibição da senha em system.query_log para usuários com método de autenticação por senha bcrypt. #70148 (Nikolay Degterinsky).
  • Corrigido o contador de eventos da interface nativa (InterfaceNativeSendBytes). #70153 (Yakov Olkhovskiy).
  • Corrige possível travamento relacionado a colunas JSON. #70172 (Pavel Kruglov).
  • Corrige diversos problemas no arrayMin e no arrayMax. #70207 (Raúl Marín).
  • Respeita a configuração allow_simdjson no parser do tipo JSON. #70218 (Pavel Kruglov).
  • Corrige uma desreferenciação de ponteiro nulo ao criar uma visão materializada com dois SELECTs e um INTERSECT, por exemplo CREATE MATERIALIZED VIEW v0 AS (SELECT 1) INTERSECT (SELECT 1);. #70264 (Konstantin Bogdanov).
  • Não modifique as configurações globais com scripts de inicialização. Antes, alterar uma configuração em um script de inicialização fazia com que ela fosse alterada globalmente. #70310 (Antonio Andelic).
  • Corrige o ALTER do tipo Dynamic ao reduzir o parâmetro max_types, o que poderia causar uma falha no servidor. #70328 (Pavel Kruglov).
  • Corrige uma falha ao usar WITH FILL incorretamente. #70338 (Raúl Marín).
  • Corrige um possível use-after-free em SYSTEM DROP FORMAT SCHEMA CACHE FOR Protobuf. #70358 (Azat Khuzhin).
  • Corrigido travamento durante GROUP BY de subcoluna de subobjeto JSON. #70374 (Pavel Kruglov).
  • Não faça o pré-carregamento de partes para mesclagens verticais se a parte não tiver linhas. #70452 (Antonio Andelic).
  • Corrigida falha em WHERE com funções lambda. #70464 (Raúl Marín).
  • Corrigida a criação de tabelas com CREATE ... AS table_function(...) em banco de dados Replicated, quando a fonte da função de tabela está indisponível na réplica secundária. #70511 (Kseniia Sumarokova).
  • Ignore toda a saída do async insert com wait_for_async_insert=1. Fecha #62644. #70530 (Konstantin Bogdanov).
  • Ignora frozen_metadata.txt ao percorrer o diretório shadow em system.remote_data_paths. #70590 (Aleksei Filatov).
  • Corrigida a criação de funções de janela com estado em memória desalinhada. #70631 (Raúl Marín).
  • Corrigidas falhas raras em SELECT-s e merges após adicionar uma coluna do tipo Array com expressão padrão não vazia. #70695 (Anton Popov).
  • A inserção na função de tabela s3 respeitará as configurações da consulta. #70696 (Vladimir Cherkasov).
  • Corrige a recursão infinita ao inferir o esquema protobuf quando a opção de ignorar campos sem suporte está habilitada. #70697 (Raúl Marín).
  • Desativa enable_named_columns_in_function_tuple por padrão. #70833 (Raúl Marín).
  • Corrige a configuração processing_threads_num do engine de tabela S3Queue, que não surtia efeito quando era inferida a partir do número de núcleos de CPU no servidor. #70837 (Kseniia Sumarokova).
  • Normaliza argumentos de tupla nomeada em estados de agregação. Isso corrige #69732. #70853 (Amos Bird).
  • Corrige um erro lógico causado por zeros negativos na tabela hash de dois níveis. Isso fecha #70973. #70979 (Alexey Milovidov).
  • Corrige limit by e limit with ties em ambientes distribuídos e com réplicas paralelas. #70880 (Nikita Taranov).

Lançamento do ClickHouse 24.9, 2024-09-26. Apresentação, Vídeo

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

  • Expressões como a[b].c agora são suportadas para tuplas nomeadas, assim como subscritos nomeados em expressões arbitrárias, por exemplo, expr().name. Isso é útil para processar JSON. Isso fecha #54965. Em versões anteriores, uma expressão na forma expr().name era interpretada como tupleElement(expr(), name), e o analisador de consultas procurava uma coluna name em vez do elemento de tupla correspondente; na nova versão, isso foi alterado para tupleElement(expr(), 'name'). Na maioria dos casos, a versão anterior não funcionava, mas é possível imaginar um cenário bastante incomum em que essa alteração poderia causar incompatibilidade: se você armazenasse nomes de elementos de tupla em uma coluna ou alias com um nome diferente do nome do elemento da tupla: SELECT 'b' AS a, CAST([tuple(123)] AS 'Array(Tuple(b UInt8))') AS t, t[1].a. É muito improvável que você tenha usado consultas desse tipo, mas ainda assim precisamos marcar essa alteração como potencialmente incompatível com versões anteriores. #68435 (Alexey Milovidov).
  • Quando a configuração print_pretty_type_names está habilitada, ela imprime o tipo de dado Tuple em uma forma Pretty nas Instruções SHOW CREATE TABLE, na função formatQuery e no modo interativo do clickhouse-client e do clickhouse-local. Em versões anteriores, essa configuração era aplicada apenas a consultas DESCRIBE e a toTypeName. Isso fecha #65753. #68492 (Alexey Milovidov).
  • Não permitir a especificação explícita de UUID ao criar uma tabela em bancos de dados Replicated. Além disso, não permitir a especificação explícita do caminho do Keeper e do nome da réplica para tabelas *MergeTree em bancos de dados Replicated. Isso introduz uma nova configuração database_replicated_allow_explicit_uuid e altera o tipo de database_replicated_allow_replicated_engine_arguments de Bool para UInt64 #66104 (Alexander Tokmakov).

Novo recurso

  • Permite que um usuário tenha vários métodos de autenticação, em vez de apenas um. Permite redefinir os métodos de autenticação para o método adicionado mais recentemente. Se você quiser executar instâncias na versão 24.8 e uma na 24.9 por algum tempo, é melhor definir max_authentication_methods_per_user = 1 nesse período para evitar possíveis incompatibilidades. #65277 (Arthur Passos).
  • Adicionado suporte a ATTACH PARTITION ALL FROM. #61987 (Kirill Nikiforov).
  • Adiciona a configuração input_format_json_empty_as_default, que, quando habilitada, trata campos vazios em entradas JSON como valores padrão. Fecha #59339. #66782 (Alexis Arnaud).
  • Adicionadas as funções overlay e overlayUTF8, que substituem trechos de uma string por outra. Exemplo: SELECT overlay('Hello New York', 'Jersey', 11) retorna Hello New Jersey. #66933 (李扬).
  • Adicionar suporte a exclusões leves em partições DELETE FROM [db.]table [ON CLUSTER cluster] [IN PARTITION partition_expr] WHERE expr; #67805 (sunny).
  • Implementada a comparação de valores do tipo de dado Interval de diferentes domínios (como segundos e minutos), que agora são convertidos para o menor supertipo comum. #68057 (Yarik Briukhovetskyi).
  • Adiciona a configuração create_if_not_exists para adotar por padrão o comportamento IF NOT EXISTS em instruções CREATE. #68164 (Peter Nguyen).
  • Agora é possível ler tabelas Iceberg no Azure e localmente. #68210 (Daniil Ivanik).
  • Agora é possível remover entradas do cache de consultas por tag. Por exemplo, a entrada do cache de consultas criada por SELECT 1 SETTINGS use_query_cache = true, query_cache_tag = 'abc' agora pode ser removida com SYSTEM DROP QUERY CACHE TAG 'abc'. #68477 (Michał Tabaszewski).
  • Adicionada criptografia de armazenamento para named collections. #68615 (Pablo Marcos).
  • Adicionada a coluna virtual _headers ao mecanismo de tabela URL. Fecha #65026. #68867 (flynn).
  • Adicionada a tabela system.projections para acompanhar as projeções disponíveis. #68901 (Jordi Villar).
  • Adiciona a nova função arrayZipUnaligned para compatibilidade com o Spark (onde ela se chama arrays_zip), permitindo arrays não alinhados com base na arrayZip original. #69030 (李扬).
  • Adicionados os comandos cp/mv ao aplicativo de linha de comando do cliente Keeper, para copiar/mover nós atomicamente. #69034 (Mikhail Artemenko).
  • Adiciona o argumento scale (padrão: true) à função arrayAUC, o que permite pular a etapa de normalização (issue #69609). #69717 (gabrielmcg44).

Funcionalidade experimental

  • Adiciona a configuração input_format_try_infer_variants, que permite inferir o tipo Variant durante a inferência de esquema para formatos de texto quando há mais de um tipo possível para elementos de coluna/array. #63798 (Shaun Struwig).
  • Adiciona as funções agregadas distinctDynamicTypes/distinctJSONPaths/distinctJSONPathsAndTypes para melhor introspecção do conteúdo do tipo de coluna JSON. #68463 (Kruglov Pavel).
  • Novo algoritmo para determinar a unidade de distribuição de marcas entre réplicas paralelas por meio de um hash consistente. Quantidades diferentes de marcas são escolhidas para diferentes padrões de leitura para melhorar o desempenho. #68424 (Nikita Taranov).
  • Anteriormente, a complexidade algorítmica da lógica de desduplicação de partes no processamento de anúncios de réplicas paralelas era O(n^2), o que podia levar um tempo considerável em tabelas com muitas partes (ou partições). Esta alteração reduz a complexidade para O(n*log(n)). #69596 (Alexander Gololobov).
  • Melhorias em view materializada atualizável: modo append (... REFRESH EVERY 1 MINUTE APPEND ...) para adicionar linhas à tabela existente em vez de sobrescrever a tabela inteira, novas tentativas (desabilitadas por padrão, configuradas na seção SETTINGS da consulta), consulta SYSTEM WAIT VIEW <name> que aguarda a atualização em execução no momento, além de algumas correções. #58934 (Michael Kolupaev).
  • Adicionado min_max como um novo tipo de estatística (experimental). Ele oferece suporte à estimativa de predicados de intervalo em colunas numéricas, por exemplo x < 100. #67013 (JackyWoo).
  • Melhora o castOrDefault em colunas Variant/Dynamic para que funcione quando os tipos internos não forem conversíveis de forma alguma. #67150 (Kruglov Pavel).
  • A replicação de um subconjunto de colunas agora está disponível por meio do MaterializedPostgreSQL. Fecha #33748. #69092 (Kruglov Kirill).

Melhoria de desempenho

  • Implementada a leitura apenas dos arquivos necessários para o particionamento Hive. #68963 (Yarik Briukhovetskyi).
  • Melhora o desempenho de JOIN reorganizando a tabela da direita pelas chaves quando as chaves da tabela são densas em hash joins LEFT ou INNER. #60341 (kevinyhzou).
  • Melhora o desempenho de ALL JOIN ao acrescentar a lista de linhas de forma lazy. #63677 (kevinyhzou).
  • Carrega os metadados do cache do sistema de arquivos de forma assíncrona durante a inicialização, para tornar as reinicializações mais rápidas (controlado pela configuração load_metadata_asynchronously). #65736 (Daniel Pozo Escalona).
  • As funções array e map foram otimizadas para processar certos casos comuns muito mais rapidamente. #67707 (李扬).
  • Otimização simples na leitura de strings ORC, especialmente quando uma coluna não contém NULLs. #67794 (李扬).
  • Melhorado o desempenho geral das mesclagens ao reduzir a sobrecarga do agendamento de suas etapas. #68016 (Anton Popov).
  • Acelera as solicitações ao S3 quando nenhum profile está definido, as credenciais não estão definidas e o IMDS não está disponível (por exemplo, quando você está consultando um bucket público em uma máquina fora da Cloud). Isso fecha #52771. #68082 (Alexey Milovidov).
  • Desvirtualiza o leitor de formato em RowInputFormatWithNamesAndTypes para obter algum ganho de desempenho. #68437 (李扬).
  • Adiciona a mesclagem paralela para a função de agregação uniq ao agregar com GROUP BY por chave, para maximizar a utilização da CPU. #68441 (Jiebin Sun).
  • Adiciona a configuração output_format_orc_dictionary_key_size_threshold para permitir que o usuário habilite a codificação por dicionário para colunas string no formato de saída ORC. Isso ajuda a reduzir significativamente o tamanho do arquivo ORC de saída e a melhorar o desempenho de leitura. #68591 (李扬).
  • Introduz a nova requisição RemoveRecursive do Keeper, que remove um nó com toda a sua subárvore. #69332 (Mikhail Artemenko).
  • Acelera o desempenho de inserção em uma tabela com índice de similaridade vetorial ao adicionar dados ao índice vetorial em paralelo. #69493 (flynn).
  • Reduz o uso de memória de inserções em JSON usando um tamanho adaptativo para o buffer de escrita. Muitos arquivos criados por uma coluna JSON em uma parte wide contêm pouca quantidade de dados, e não faz sentido alocar um buffer de 1 MB para eles. #69272 (Kruglov Pavel).
  • Evita devolver uma thread ao thread pool da junção hash concorrente, para evitar que a consulta crie threads em excesso. #69406 (Duc Canh Le).

Melhoria

  • CREATE TABLE AS agora também copia PRIMARY KEY, ORDER BY e cláusulas semelhantes. No momento, isso é compatível apenas com a família MergeTree de motores de tabela. #69076 (sakulali).
  • Foram reforçadas as partes do código relacionadas à análise sintática de pequenas entidades. Os seguintes bugs (menores) foram encontrados e corrigidos: - se uma tabela DeltaLake estiver particionada por Bool, o valor da partição será sempre interpretado como false; - a tabela ExternalDistributed estava usando apenas um shard entre os endereços fornecidos; o valor da configuração max_threads e de configurações semelhantes era impresso como 'auto(N)' em vez de auto(N). #52503 (Alexey Milovidov).
  • Use métricas específicas de cgroup para contabilizar o uso de CPU, em vez de métricas de todo o sistema. #62003 (Nikita Taranov).
  • O agendamento de E/S para discos S3 remotos agora é feito no nível dos fluxos dos sockets HTTP (em vez de requisições S3 inteiras) para resolver problemas de throttling com bandwidth_limit. #65182 (Sergei Trifonov).
  • As funções upperUTF8 e lowerUTF8 anteriormente só conseguiam converter caracteres cirílicos para maiúsculas / minúsculas. Essa limitação foi removida, e agora caracteres de qualquer idioma são convertidos para maiúsculas/minúsculas. Exemplo: SELECT upperUTF8('Süden') agora retorna SÜDEN. #65761 (李扬).
  • Quando ocorre uma exclusão leve em uma tabela com projeção(ões), embora os usuários possam optar por gerar uma exceção (por padrão) ou descartar a projeção quando a exclusão leve ocorrer, agora há uma terceira opção: manter a exclusão leve e depois reconstruir a(s) projeção(ões). #66169 (jsc0218).
  • Duas opções (dns_allow_resolve_names_to_ipv4 e dns_allow_resolve_names_to_ipv6) foram adicionadas para permitir o bloqueio de conexões por família de IP. #66895 (MikhailBurdukov).
  • Tornar configurável a opção de ignorar Ctrl-Z (ignore_shell_suspend) no clickhouse-client. #67134 (Azat Khuzhin).
  • Aprimora a validação de UTF-8 em formatos JSON de saída. Garante que JSON válido seja gerado em caso de determinadas sequências de bytes nos dados de resultado. #67938 (mwoenker).
  • Adicionados eventos de perfil para merges e mutações, melhorando a introspecção. #68015 (Anton Popov).
  • ODBC: obter http_max_tries a partir da configuração do servidor. #68128 (Rodolphe Dugé de Bernonville).
  • Adicionado suporte a curingas para identificação de usuários na extensão SubjectAltName do X.509. #68236 (Marco Vilas Boas).
  • Aprimorada a inferência de esquema para datas e horas. Agora, DateTime64 é usado apenas quando a data e hora têm parte fracionária; caso contrário, é usado o DateTime normal. A inferência de Date/DateTime agora está mais rigorosa, especialmente quando date_time_input_format='best_effort', para evitar inferir datas e horas a partir de strings em casos limítrofes. #68382 (Kruglov Pavel).
  • Removido o código antigo de named collections de dictionaries e substituído pelo novo, que permite usar named collections criadas com DDL em dictionaries. Fecha #60936, fecha #36890. #68412 (Kseniia Sumarokova).
  • Use HTTP/1.1 em vez de HTTP/1.0 (padrão) para autenticadores HTTP externos. #68456 (Aleksei Filatov).
  • Adicionado um novo conjunto de métricas para introspecção do pool de threads, oferecendo informações mais detalhadas sobre o desempenho e o comportamento desse pool de threads. #68674 (filimonov).
  • Adicionado suporte a parâmetros de consulta em inserts assíncronos com o formato Values. #68741 (Anton Popov).
  • Suporte para Date32 em dateTrunc e toStartOfInterval. #68874 (LiuNeng).
  • Adicionar as colunas plan_step_name e plan_step_description à system.processors_profile_log. #68954 (Alexander Gololobov).
  • Suporte ao idioma espanhol nos dicionários embutidos. #69035 (Vasily Okunev).
  • Adiciona a arquitetura da CPU à mensagem curta com informações sobre falha. #69037 (Konstantin Bogdanov).
  • As consultas falharão mais rapidamente se não for possível estabelecer uma nova conexão com o Keeper durante as tentativas. #69148 (Raúl Marín).
  • Atualizar o Database Factory para permitir que motores de banco de dados definidos pelo usuário tenham argumentos, configurações e sobrescritas de tabela (semelhante ao StorageFactory). #69201 (NikBarykin).
  • O modo de restauração que substitui todos os motores de tabela externos e funções pelo motor Null (configurações restore_replace_external_engines_to_null, restore_replace_external_table_functions_to_null) falhava se a tabela tivesse SETTINGS. Agora, nesse caso, ele remove os SETTINGS da definição da tabela e permite restaurar essas tabelas. #69253 (Ilya Yatsishin).
  • CLICKHOUSE_PASSWORD está corretamente escapado para XML no entrypoint da imagem do ClickHouse. #69301 (aohoyd).
  • Permitir argumentos vazios para arrayZip/arrayZipUnaligned, como já ocorreu com concat em https://github.com/ClickHouse/ClickHouse/pull/65887. Isso serve para compatibilidade com o Spark no backend CH do Gluten. #69576 (李扬).
  • Suporte a opções de SSL mais avançadas para a comunicação interna do Keeper (por exemplo, chaves privadas protegidas por senha). #69582 (Antonio Andelic).
  • A análise de índices pode levar um tempo considerável em tabelas grandes com muitas partes ou partições. Essa mudança deve possibilitar interromper uma consulta pesada nessa etapa. #69606 (Alexander Gololobov).
  • Mascaramento de informações sensíveis na função de tabela gcs. #69611 (Vitaly Baranov).
  • Reconstrução da projeção para mesclagens que reduzem o número de linhas. #62364 (cangyin).

Correção de bug (mau funcionamento perceptível ao usuário em uma release estável oficial)

  • Corrige a anexação de tabela quando o dbname do PostgreSQL contém ”-” no engine MaterializedPostgreSQL, que é experimental e sem suporte. #62730 (takakawa).
  • Corrigido erro em colunas geradas no engine MaterializedPostgreSQL experimental e totalmente sem suporte quando a ordenação de adnum está quebrada #63161. Corrigido erro na coluna id com a expressão nextval como padrão no MaterializedPostgreSQL experimental e totalmente sem suporte quando há colunas geradas na tabela. Corrigido erro ao remover a publication com símbolos fora de [a-z1-9-]. #67664 (Kruglov Kirill).
  • Storage Join com suporte a colunas Nullable na tabela da esquerda, corrige #61247. #66926 (vdimir).
  • Resultado incorreto de consulta com réplicas paralelas (também ao distribuir consultas) quando o operador IN contém conversão para Decimal(). O bug foi introduzido com o novo analisador. #67234 (Igor Nikonov).
  • Corrige o problema em que alter modify order by gera metadados inconsistentes. #67436 (iceFireser).
  • Corrige o limite superior da função fromModifiedJulianDay. O valor correto deveria ser 9999-12-31, mas foi definido incorretamente como 9999-01-01. #67583 (PHO).
  • Correção de um problema em que o índice não estava no início da tupla durante a consulta IN. #67626 (Yarik Briukhovetskyi).
  • Corrigida a expiração no RoleCache. #67748 (Vitaly Baranov).
  • Corrige blocos ausentes na window view devido à lentidão ao gravar na view. #67983 (Raúl Marín).
  • Corrige um problema no MSan causado por um formato de data incorreto. #68105 (JackyWoo).
  • Corrigida uma falha na filtragem de Parquet quando os tipos de dados no arquivo diferem substancialmente dos tipos solicitados (por exemplo, ... FROM file('a.parquet', Parquet, 'x String'), mas o arquivo contém x Int64). Sem essa correção, use input_format_parquet_filter_push_down = 0 como solução alternativa. #68131 (Michael Kolupaev).
  • Corrige travamento em lag/lead introduzido em #67091. #68262 (lgbo).
  • Tentativa de corrigir falha no Postgres quando a consulta é cancelada. #68288 (Kseniia Sumarokova).
  • Após https://github.com/ClickHouse/ClickHouse/pull/61984, schema_inference_make_columns_nullable=0 ainda pode fazer com que colunas se tornem Nullable nos formatos Parquet/Arrow. A mudança não era compatível com versões anteriores, e os usuários notaram as alterações no comportamento. Este PR faz com que schema_inference_make_columns_nullable=0 volte a funcionar como antes (nenhuma coluna Nullable será inferida) e introduz o novo valor auto para essa configuração, que fará com que as colunas sejam Nullable apenas se os dados contiverem informações sobre nulabilidade. #68298 (Kruglov Pavel).
  • Corrige #50868. Pequenos valores constantes de DateTime64 retornados por uma subconsulta aninhada em uma consulta distribuída eram incorretamente convertidos em NULL, causando erros e possivelmente resultados incorretos de consulta. #68323 (Shankar).
  • Corrige a falta do modo de sincronização de réplica na consulta SYSTEM SYNC REPLICA. #68326 (Duc Canh Le).
  • Corrige um erro na condição de chave. #68354 (Han Fei).
  • Corrige falha ao remover ou renomear uma role usada no diretório externo de usuários LDAP. #68355 (Andrey Zvonov).
  • Corrige o valor da coluna Progress de system.view_refreshes quando maior que 1 #68377. #68378 (megao).
  • Processar corretamente as flags de regexp. #68389 (Han Fei).
  • O operador de conversão de tipo no estilo PostgreSQL (::) funciona corretamente até mesmo com literais hexadecimais e de strings binárias no estilo SQL (por exemplo, SELECT x'414243'::String). Isso corrige #68324. #68482 (Alexey Milovidov).
  • Pequena correção para https://github.com/ClickHouse/ClickHouse/pull/68131. #68494 (Chang chen).
  • Corrige #68239 SAMPLE n, em que n é um inteiro. #68499 (Denis Hananein).
  • Corrigido um bug em mann-whitney-utest quando os tamanhos de duas distribuições não são iguais. #68556 (Han Fei).
  • Após uma reinicialização inesperada, a replicação do ReplicatedMergeTree não inicia devido ao tratamento anormal da parte marcada como covered-by-broken. #68584 (baolin).
  • Corrige LOGICAL_ERRORs quando as funções sipHash64Keyed, sipHash128Keyed ou sipHash128ReferenceKeyed são aplicadas a arrays ou tuplas vazios. #68630 (Robert Schulze).
  • O índice de texto completo pode filtrar colunas incorretas ao indexar várias colunas, pois não redefinia o row_id entre colunas diferentes; o procedimento para reproduzir o problema está em tests/queries/0_stateless/03228_full_text_with_multi_col.sql. Sem isso. #68644 (siyuan).
  • Corrige os caracteres inválidos ‘\t’ e ‘\n’ em replica_name ao criar uma tabela Replicated, o que causa a interpretação incorreta de ‘réplica de origem’ em LogEntry. Mencionado na issue #68640. #68645 (Zhigao Hong).
  • Adicionadas novamente as colunas virtuais _table e _database às tabelas distribuídas. Elas estavam disponíveis até a versão 24.3. #68672 (Anton Popov).
  • Corrige possível erro Size of permutation (0) is less than required (...) durante a permutação da coluna Variant. #68681 (Kruglov Pavel).
  • Corrige possível erro DB::Exception: Block structure mismatch in joined block stream: different columns: com a nova coluna JSON. #68686 (Kruglov Pavel).
  • Corrige um problema com chaves constantes materializadas ao calcular o hash de maps com arrays como chaves nas funções sipHash(64/128)Keyed. #68731 (Salvatore Mesoraca).
  • Faça com que ColumnsDescription::toString formate cada coluna usando o mesmo objeto IAST::FormatState. Isso resulta na gravação, em disco e no ZooKeeper, de metadados de colunas uniformes. #68733 (Miсhael Stetsyuk).
  • Corrige a mesclagem de dados agregados em grouping sets. #68744 (Nikolai Kochetov).
  • Corrige um erro lógico ao criar uma MergeTree replicada, alterar uma coluna e depois executar MODIFY STATISTICS. #68820 (Han Fei).
  • Corrigida a resolução de subcolunas dinâmicas de subconsultas no analisador. #68824 (Kruglov Pavel).
  • Corrige o parsing dos metadados de tipos complexos no DeltaLake. Fecha #68739. #68836 (Kseniia Sumarokova).
  • Corrigidas as inserções assíncronas nos casos em que os metadados da tabela são alterados (por consultas ALTER ADD/MODIFY COLUMN) após a inserção, mas antes de serem gravadas na tabela. #68837 (Anton Popov).
  • Corrige uma exceção inesperada ao passar uma tupla vazia para um array. Isso corrige #68618. #68848 (Amos Bird).
  • Corrigido o parsing de comandos de mutações que afetam apenas metadados. #68935 (János Benjamin Antal).
  • Corrige um possível resultado incorreto durante a mesclagem do estado anyHeavy. #68950 (Raúl Marín).
  • Corrigida a escrita em visões materializadas com a configuração optimize_functions_to_subcolumns habilitada. #68951 (Anton Popov).
  • Não use o cache de serializações em métodos const da coluna Dynamic. Isso poderia levar ao uso de um valor não inicializado ou até mesmo a uma condição de corrida durante agregações. #68953 (Kruglov Pavel).
  • Corrigido erro de parsing em que NULL deveria ser inserido como valor padrão em alguns casos durante o parsing do tipo JSON. #68955 (Kruglov Pavel).
  • Correção de Content-Encoding, que não era enviado em algumas respostas compactadas. #64802. #68975 (Konstantin Bogdanov).
  • Houve casos em que o caminho era concatenado incorretamente e continha a parte //; esse problema foi resolvido com a normalização do caminho. #69066 (Yarik Briukhovetskyi).
  • Corrigido erro lógico quando há async insert vazio. #69080 (Han Fei).
  • Corrigida uma condição de corrida na exibição do progresso no clickhouse-client durante o cancelamento da consulta. #69081 (Sergei Trifonov).
  • Corrige um bug em que o índice de similaridade vetorial (atualmente experimental) não era utilizado ao usar a distância de cosseno como função de distância. #69090 (flynn).
  • Esta alteração corrige um problema em que tentar criar novamente um banco de dados Replicated após uma falha do servidor durante o processo inicial de criação podia resultar em erro. #69102 (Miсhael Stetsyuk).
  • Não inferir o tipo Bool a partir de String em CSV quando input_format_csv_try_infer_numbers_from_strings = 1, porque não permitimos a leitura de valores bool a partir de strings. #69109 (Kruglov Pavel).
  • Corrige erros de análise sintática no cliente ao processar consultas EXPLAIN AST INSERT quando --multiquery está habilitado. #69123 (wxybear).
  • A cláusula UNION em subconsultas não era tratada corretamente em consultas com réplicas paralelas e causava o LOGICAL_ERROR Duplicate announcement received for replica. #69146 (Igor Nikonov).
  • Corrigida a propagação do argumento de estrutura no s3Cluster. Anteriormente, a expressão DEFAULT da coluna podia se perder ao enviar a consulta para as réplicas no s3Cluster. #69147 (Kruglov Pavel).
  • Respeitar as configurações do formato Values durante a conversão de uma expressão para o tipo de destino. #69149 (Kruglov Pavel).
  • Corrige o clickhouse-client --queries-file para usuários com acesso somente leitura (antes falhava com Cannot modify 'log_comment' setting in readonly mode). #69175 (Azat Khuzhin).
  • Corrigida uma condição de corrida no clickhouse-client quando ele é redirecionado via pipe para um processo que termina antecipadamente. #69186 (vdimir).
  • Corrige resultados incorretos de uniq e GROUP BY para tipos JSON/Dynamic. #69203 (Kruglov Pavel).
  • Corrigida a detecção do formato no INFILE para inserts assíncronos. Se o formato não for explicitamente definido na cláusula FORMAT, ele poderá ser detectado pela extensão do arquivo INFILE. #69237 (Julia Kartseva).
  • Após este problema, há várias réplicas de tabelas em produção em que o valor do nó metadata_version é igual a 0 e, ao mesmo tempo, difere da versão do nó metadata da respectiva tabela. Isso faz com que consultas alter falhem nessas réplicas. #69274 (Miсhael Stetsyuk).
  • Marcar o tipo Dynamic como um tipo não seguro para chave primária, para evitar problemas com Fields. #69311 (Kruglov Pavel).
  • Melhora a restauração das dependências de entidades de acesso. #69346 (Vitaly Baranov).
  • Corrige o comportamento indefinido quando falham todas as tentativas de obter uma conexão para inserções. #69390 (Pablo Marcos).
  • Fecha #69135. Se tentarmos reutilizar dados de join para cross join, isso não é possível no ClickHouse no momento. É melhor manter have_compressed em reuseJoinedData. #69404 (lgbo).
  • Faz a função materialize() retornar uma coluna completa quando o parâmetro é uma coluna esparsa. #69429 (Alexander Gololobov).
  • Corrigido o LOGICAL_ERROR na função sqidDecode (#69450). #69451 (Robert Schulze).
  • Correção rápida para o problema do s3queue no 24.6 ou para consulta CREATE com banco de dados replicado. #69454 (Kseniia Sumarokova).
  • Corrigido um caso em que o consumo de memória ficava excessivamente alto devido ao squashing em consultas INSERT INTO ... SELECT ou CREATE TABLE AS SELECT. #69469 (Yarik Briukhovetskyi).
  • As instruções SHOW COLUMNS e SHOW INDEX agora funcionam corretamente caso a tabela tenha pontos no nome. #69514 (Salvatore Mesoraca).
  • O uso do cache de consultas para consultas com modo de overflow != ‘throw’ agora é proibido. Isso evita situações em que resultados de consulta potencialmente truncados e incorretos poderiam ser armazenados no cache de consultas. (issue #67476). #69549 (Robert Schulze).
  • Mantenha a ordem original das condições ao movê-las para prewhere. Anteriormente, a ordem podia mudar, o que podia levar à falha de consultas quando ela é importante. #69560 (Kruglov Pavel).
  • Corrige o pré-processamento de várias solicitações do Keeper após o erro ZNOAUTH. #69627 (Antonio Andelic).
  • Corrige o METADATA_MISMATCH que pode ter ocorrido devido a TTL com cláusula WHERE em DatabaseReplicated ao criar uma nova réplica. #69736 (Nikolay Degterinsky).
  • Corrigidas as configurações tracked_file_ttl_sec de StorageS3(Azure)Queue. Ela era gravada no Keeper com a chave tracked_file_ttl_sec, mas lida como tracked_files_ttl_sec, o que era um erro de digitação. #69742 (Kseniia Sumarokova).
  • Use tryconvertfieldtotype em gethyperrectangleforrowgroup. #69745 (Miсhael Stetsyuk).
  • Reverte “Corrigir prewhere sem colunas e sem granularidade adaptativa do índice (quase sem nada)”’. Devido a essa reversão, alguns erros podem ocorrer ao ler partes de dados produzidas por versões antigas do CH (provavelmente de 2021 ou anteriores). #68897 (Alexander Gololobov).

Lançamento do ClickHouse 24.8 LTS, 2024-08-20. Apresentação, Vídeo

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

  • clickhouse-client e clickhouse-local agora usam por padrão o modo de múltiplas consultas (em vez do modo de consulta única). Por exemplo, clickhouse-client -q "SELECT 1; SELECT 2" agora funciona, enquanto antes os usuários precisavam adicionar --multiquery (ou -n). A opção --multiquery/-n tornou-se obsoleta. Consultas INSERT em instruções com múltiplas consultas recebem tratamento especial com base na cláusula FORMAT: se o FORMAT for VALUES (o caso mais comum), o fim da instrução INSERT é representado por um ponto e vírgula ; ao final da consulta. Para todos os outros FORMATs (por exemplo, CSV ou JSONEachRow), o fim da instrução INSERT é representado por duas quebras de linha \n\n ao final da consulta. #63898 (FFish).
  • Em versões anteriores, era possível usar uma sintaxe alternativa para os tipos de dados LowCardinality, acrescentando WithDictionary ao nome do tipo de dado. Era uma implementação funcional inicial, e nunca foi documentada nem exposta ao público. Agora, ela está obsoleta. Se você usou essa sintaxe, precisa executar ALTER em suas tabelas e renomear os tipos de dados para LowCardinality. #66842 (Alexey Milovidov).
  • Corrige erros lógicos no armazenamento Buffer usado com tabela de destino distribuída. Esta é uma alteração incompatível com versões anteriores: consultas que usam Buffer com uma tabela de destino distribuída podem deixar de funcionar se a tabela aparecer mais de uma vez na consulta (por exemplo, em um self-join). #67015 (vdimir).
  • Em versões anteriores, chamar funções para distribuições aleatórias baseadas na função gama (como Chi-Squared, Student e Fisher) com argumentos negativos próximos de zero levava a um tempo de computação muito longo ou a um loop infinito. Na nova versão, chamar essas funções com argumentos nulos ou negativos produzirá uma exceção. Isto encerra #67297. #67326 (Alexey Milovidov).
  • A tabela de sistema text_log está habilitada por padrão. Isso é totalmente compatível com versões anteriores, mas você pode notar um aumento sutil no uso do disco local (essa tabela de sistema ocupa uma quantidade mínima de espaço em disco). #67428 (Alexey Milovidov).
  • Em versões anteriores, arrayWithConstant podia ser lenta quando solicitada a gerar arrays muito grandes. Na nova versão, ela está limitada a 1 GB por array. Isto encerra #32754. #67741 (Alexey Milovidov).
  • Corrige a formatação do modificador REPLACE (proíbe omitir os parênteses). #67774 (Azat Khuzhin).
  • Backport em #68349: reimplementa o tipo Dynamic. Agora, quando o limite de tipos de dados dinâmicos é atingido, novos tipos não são convertidos para String, mas armazenados em uma estrutura de dados especial em formato binário, com o tipo de dado codificado em binário. Agora, qualquer tipo já inserido na coluna Dynamic pode ser lido dela como subcoluna. #68132 (Kruglov Pavel).

Novo recurso

  • Adicionada uma nova configuração do MergeTree, deduplicate_merge_projection_mode, para controlar as projeções durante as mesclagens (para motores específicos) e a consulta OPTIMIZE DEDUPLICATE. Opções compatíveis: throw (gera uma exceção caso a projeção não tenha suporte completo para o motor *MergeTree), drop (remove a projeção durante a mesclagem se ela própria não puder ser mesclada de forma consistente) e rebuild (reconstrói a projeção do zero, o que é uma operação pesada). #66672 (jsc0218).
  • Adiciona a coluna virtual _etag ao mecanismo de tabela S3. Corrige #65312. #65386 (skyoct).
  • Foi adicionado um mecanismo de marcação (namespace) ao cache de consultas. As mesmas consultas com tags diferentes são consideradas distintas pelo cache de consultas. Exemplo: SELECT 1 SETTINGS use_query_cache = 1, query_cache_tag = 'abc' e SELECT 1 SETTINGS use_query_cache = 1, query_cache_tag = 'def' agora criam entradas distintas no cache de consultas. #68235 (sakulali).
  • Agora há suporte a mais variantes de strictness de JOIN (LEFT/RIGHT SEMI/ANTI/ANY JOIN) com condições de desigualdade que envolvem colunas das tabelas da esquerda e da direita. Ex.: t1.y < t2.y (consulte a configuração allow_experimental_join_condition). #64281 (lgbo).
  • Interpretar o particionamento no estilo Hive para diferentes motores (File, URL, S3, AzureBlobStorage, HDFS). O particionamento no estilo Hive organiza os dados em subdiretórios particionados, tornando mais eficiente consultar e gerenciar grandes volumes de dados. Atualmente, ele cria apenas colunas virtuais com o nome e os dados correspondentes. O próximo PR introduzirá a filtragem de dados adequada (ganho de desempenho). #65997 (Yarik Briukhovetskyi).
  • Adicionada a função printf para compatibilidade com o Spark (mas você pode usar a função format já existente). #66257 (李扬).
  • Adicionadas as opções restore_replace_external_engines_to_null e restore_replace_external_table_functions_to_null para substituir motores externos e table_engines pelo motor Null, o que pode ser útil para testes. Deve funcionar com RESTORE e com a criação explícita de tabelas. #66536 (Ilya Yatsishin).
  • Adicionado suporte à leitura da geometria MULTILINESTRING no formato WKT usando a função readWKTLineString. #67647 (Jacob Reckhard).
  • Adiciona uma nova função de tabela fuzzQuery. Essa função permite modificar uma string de consulta específica com variações aleatórias. Exemplo: SELECT query FROM fuzzQuery('SELECT 1') LIMIT 5;. #67655 (pufit).
  • Adiciona a consulta ALTER TABLE ... DROP DETACHED PARTITION ALL para remover todas as partições em estado detached. #67885 (Duc Canh Le).
  • Adiciona a estatística rows_before_aggregation_at_least à resposta da consulta quando uma nova configuração, rows_before_aggregation, está habilitada. Essa estatística representa o número de linhas lidas antes da agregação. No contexto de uma consulta distribuída, ao usar group by ou a função de agregação max sem um limit, rows_before_aggregation_at_least pode refletir o número de linhas acessadas pela consulta. #66084 (morning-color).
  • Suporte à consulta OPTIMIZE em tabelas Join para reduzir o uso de memória. #67883 (Duc Canh Le).
  • Permite executar a consulta instantaneamente no play ao adicionar &run=1 à URL #66457 (Aleksandr Musorin).

Recurso experimental

  • Implementado um novo tipo de dado JSON. #66444 (Kruglov Pavel).
  • Adicionado o novo engine de tabela TimeSeries. #64183 (Vitaly Baranov).
  • Adicionado um novo engine de armazenamento experimental Kafka para armazenar offsets no Keeper em vez de depender do commit deles no Kafka. Isso torna atômico o commit nas tabelas do ClickHouse em relação ao consumo da fila. #57625 (János Benjamin Antal).
  • Passa a usar um método adaptativo para calcular o tamanho da tarefa de leitura (adaptativo significa que ele depende dos tamanhos das colunas lidas) para réplicas paralelas. #60377 (Nikita Taranov).
  • Adicionado o tipo de estatística count_min (count-min sketches), que fornece estimativas de seletividade para predicados de igualdade, como col = 'val'. Os tipos de dados compatíveis são string, date, datetime e tipos numéricos. #65521 (JackyWoo).

Melhoria de desempenho

  • A configuração optimize_functions_to_subcolumns vem habilitada por padrão. #68053 (Anton Popov).
  • Armazena os metadados do diretório de disco plain_rewritable no layout __meta, separadamente dos dados do MergeTree no armazenamento de objetos. Move o disco plain_rewritable para uma estrutura plana de diretórios. #65751 (Julia Kartseva).
  • Melhora o squashing de colunas (uma operação que ocorre em consultas INSERT) para os tipos String/Array/Map/Variant/Dynamic, reservando antecipadamente a memória necessária para todas as subcolunas. #67043 (Kruglov Pavel).
  • Acelera SYSTEM FLUSH LOGS e faz flush dos logs no desligamento. #67472 (Sema Checherinda).
  • Melhora o desempenho geral das merges ao reduzir a sobrecarga das etapas de agendamento. #68016 (Anton Popov).
  • Acelera a remoção de tabelas na consulta DROP DATABASE, aumentando o valor padrão de database_catalog_drop_table_concurrency para 16. #67228 (Nikita Mikhaylov).
  • Evita alocar capacidade excessiva para a coluna de array ao gravar em ORC. O desempenho aumenta em 15% para uma coluna Array. #67879 (李扬).
  • Acelera significativamente as mutações em MergeTree não replicado #66911 #66909 (Alexey Milovidov).

Melhoria

  • A configuração allow_experimental_analyzer foi renomeada para enable_analyzer. O nome antigo é mantido como um alias. Isso significa que o Analyzer não está mais em beta e foi oficialmente promovido para produção. #66438 (Nikita Mikhaylov).
  • Melhoria na inferência de esquema de valores de data e hora. Agora, DateTime64 é usado apenas quando a data e hora tem parte fracionária; caso contrário, usa-se o DateTime comum. A inferência de Date/DateTime agora está mais rigorosa, especialmente quando date_time_input_format='best_effort', para evitar inferir valores de data e hora a partir de strings em casos-limite. #68382 (Kruglov Pavel).
  • O servidor ClickHouse agora oferece suporte à nova configuração max_keep_alive_requests. Para conexões HTTP keep-alive com o servidor, ela funciona em conjunto com keep_alive_timeout — se o tempo limite de inatividade não tiver expirado, mas já tiverem sido feitas mais de max_keep_alive_requests solicitações por essa conexão, ela será fechada pelo servidor. #61793 (Nikita Taranov).
  • Várias melhorias no dashboard avançado. Fecha #67697. Fecha #63407. Fecha #51129. Fecha #61204. #67701 (Alexey Milovidov).
  • Não exigir privilégio para REMOTE ao criar uma tabela distribuída: basta um privilégio para o mecanismo Distributed. #65419 (jsc0218).
  • Não inclua explicitamente os logs do Keeper na imagem Docker, para permitir sobrescrita. #65564 (Azat Khuzhin).
  • Foi introduzida a configuração use_same_password_for_base_backup para as consultas BACKUP e RESTORE, permitindo criar e restaurar backups incrementais em/de arquivos protegidos por senha. #66214 (Samuele).
  • Ignora async_load_databases para a consulta ATTACH (anteriormente, era possível que ATTACH retornasse antes que as tabelas fossem anexadas). #66240 (Azat Khuzhin).
  • Adicionados logs e métricas para conexões recusadas (quando não há recursos suficientes). #66410 (Alexander Tokmakov).
  • Suporte adequado ao tipo UUID para o engine MongoDB. #66671 (Azat Khuzhin).
  • Adicionadas métricas de latência de replicação e de tempo de recuperação. #66703 (Miсhael Stetsyuk).
  • Adicionada a métrica DiskS3NoSuchKeyErrors. #66704 (Miсhael Stetsyuk).
  • Garante que a cláusula COMMENT funcione em todos os motores de tabela. #66832 (Joe Lynch).
  • A função mapFromArrays agora aceita Map(K, V) como primeiro argumento. Por exemplo, SELECT mapFromArrays(map('a', 4, 'b', 4), ['aa', 'bb']) agora funciona e retorna {('a',4):'aa',('b',4):'bb'}. Além disso, se o 1º argumento for um Array, ele agora também pode ser do tipo Array(Nullable(T)) ou Array(LowCardinality(Nullable(T))), desde que os valores reais do array não sejam NULL. #67103 (李扬).
  • Passa a ler a configuração do clickhouse-local a partir de ~/.clickhouse-local. #67135 (Azat Khuzhin).
  • Renomeie a configuração input_format_orc_read_use_writer_time_zone para input_format_orc_reader_timezone e permita que o usuário defina o fuso horário do leitor. #67175 (kevinyhzou).
  • Reduzido o nível do erro Socket is not connected quando a conexão HTTP é imediatamente resetada pela outra ponta após ser estabelecida, fecha #34218. #67177 (vdimir).
  • Adicionada a capacidade de carregar dashboards de system.dashboards a partir da configuração (uma vez definidos, eles substituem o conjunto padrão de dashboards). #67232 (Azat Khuzhin).
  • As window functions em SQL tradicionalmente usam snake case. O ClickHouse usa camelCase, então foram criados novos aliases: denseRank() e percentRank(). Essas novas funções podem ser chamadas exatamente da mesma forma que as funções originais dense_rank() e percent_rank(). Tanto a sintaxe em snake case quanto a em camelCase continuam disponíveis. Um novo teste para cada uma dessas funções também foi adicionado. Isso fecha #67042. #67334 (Peter Nguyen).
  • Detecta automaticamente o formato do arquivo de configuração se ele não for .xml, .yml ou .yaml. Se o arquivo começar com <, pode ser XML; caso contrário, pode ser YAML. Isso é útil ao fornecer um arquivo de configuração por um pipe: clickhouse-server --config-file <(echo "hello: world"). #67391 (sakulali).
  • As funções formatDateTime e formatDateTimeInJodaSyntax agora consideram o parâmetro de formato opcional. Se ele não for especificado, assumem-se as strings de formato %Y-%m-%d %H:%i:%s e yyyy-MM-dd HH:mm:ss. Exemplo: SELECT parseDateTime('2021-01-04 23:12:34') agora retorna o valor DateTime 2021-01-04 23:12:34 (antes, isso gerava uma exceção). #67399 (Robert Schulze).
  • Repetir automaticamente as solicitações ao Keeper no KeeperMap quando falharem por timeout ou perda de conexão. #67448 (Antonio Andelic).
  • Adicionado -no-pie às compilações do Linux Aarch64 para permitir a introspecção adequada e a simbolização dos stacktraces após a reinicialização do ClickHouse. #67916 (filimonov).
  • Adicionados eventos de perfil para merges e mutações, para facilitar a introspecção. #68015 (Anton Popov).
  • Remoção de logs desnecessários para MergeTree não replicado. #68238 (Daniil Ivanik).

Melhoria em Build/Testes/Empacotamento

  • A verificação de instabilidade dos testes de integração não executará cada caso de teste várias vezes para encontrar mais problemas nos testes e torná-los mais confiáveis. Ela usa a biblioteca pytest-repeat para executar o caso de teste várias vezes no mesmo ambiente. É importante limpar tabelas e outras entidades ao final de um caso de teste para que ele seja aprovado. A repetição é muito mais rápida do que várias execuções do pytest, pois inicia os contêineres necessários apenas uma vez. #66986 (Ilya Yatsishin).
  • Desbloqueado o uso do CLion com ClickHouse. Em versões anteriores, o CLion congelava por um minuto a cada tecla pressionada. Isso fecha #66994. #66995 (Alexey Milovidov).
  • getauxval: evita uma falha durante um re-exec do sanitizer devido à alta entropia de ASLR em kernels Linux mais recentes. #67081 (Raúl Marín).
  • Algumas partes do código do cliente foram extraídas para um único arquivo, e o nível mais alto possível de otimização é aplicado a elas mesmo em builds de depuração. Isso fecha: #65745. #67215 (Nikita Mikhaylov).

correção de bug

  • Aplicável apenas ao tipo de dados Variant experimental. Corrige falha com o tipo Variant + AggregateFunction. #67122 (Kruglov Pavel).
  • Corrige travamento no DistributedAsyncInsert quando a conexão está vazia. #67219 (Pablo Marcos).
  • Corrige o travamento de uniq e uniqTheta com o argumento tuple(). Fecha #67303. #67306 (flynn).
  • Corrige #66026. Evita percorrer argumentos não resolvidos de função de tabela em ReplaceTableNodeToDummyVisitor. #67522 (Dmitry Novik).
  • Corrigido um possível estouro de pilha na função JSONMergePatch. Essa função foi renomeada de jsonMergePatch para JSONMergePatch porque o nome anterior estava incorreto. O nome anterior ainda é mantido por compatibilidade. Melhorado o diagnóstico de erros na função. Isso encerra #67304. #67756 (Alexey Milovidov).
  • Corrigida uma desreferenciação de ponteiro NULL, acionada por uma consulta especialmente elaborada, que derrubava o servidor por meio de hopEnd, hopStart, tumbleEnd e tumbleStart. #68098 (Salvatore Mesoraca).
  • Corrigido Not-ready Set em algumas tabelas de sistema ao aplicar filtros com subconsultas. #66018 (Michael Kolupaev).
  • Corrigida a leitura das subcolunas após a consulta ALTER ADD COLUMN. #66243 (Anton Popov).
  • Corrige literais booleanos na consulta enviada para o banco de dados externo (para motores como PostgreSQL). #66282 (vdimir).
  • Corrige a formatação da consulta com expressão JOIN ON com alias, por exemplo, ... JOIN t2 ON (x = y) AS e ORDER BY x deve ser formatada como ... JOIN t2 ON ((x = y) AS e) ORDER BY x. #66312 (vdimir).
  • Corrigido cluster() para o segredo entre servidores (preserva o usuário inicial como antes). #66364 (Azat Khuzhin).
  • Corrige um possível erro em tempo de execução ao converter um campo Array com valores nulos para Array(Variant). #66727 (Kruglov Pavel).
  • Correção de deadlock ocasional em Context::getDDLWorker. #66843 (Alexander Gololobov).
  • Corrige a criação da tabela KeeperMap após um drop incompleto. #66865 (Antonio Andelic).
  • Corrigido o erro de parte corrompida ao restaurar para um disco s3_plain_rewritable. #66881 (Vitaly Baranov).
  • Em casos raros, o ClickHouse podia considerar as partes corrompidas devido a algumas projeções inesperadas no disco. Agora isso foi corrigido. #66898 (alesapin).
  • Corrige a detecção incorreta de formato na inferência de esquema, que poderia levar ao erro lógico Format doesn’t support schema inference. #66899 (Kruglov Pavel).
  • Corrige um possível deadlock ao cancelar uma consulta com réplicas paralelas. #66905 (Nikita Taranov).
  • Proíbe create as select mesmo quando database_replicated_allow_heavy_create está definido. Isso foi proibido incondicionalmente na 23.12 e acidentalmente permitido por essa configuração na 24.7, que não chegou a ser lançada. #66980 (vdimir).
  • A leitura de numbers podia, incorretamente, gerar uma exceção quando o limite max_rows_to_read estava definido. Isso fecha #66992. #66996 (Alexey Milovidov).
  • Adicionada a conversão adequada de tipos às funções de janela lagInFrame e leadInFrame - corrige o teste do msan. #67091 (Yakov Olkhovskiy).
  • TRUNCATE DATABASE era usado para interromper a replicação como se fosse uma consulta DROP DATABASE; isso foi corrigido. #67129 (Alexander Tokmakov).
  • Use um contexto de cliente separado em clickhouse-local. #67133 (Vitaly Baranov).
  • Corrigido o erro Cannot convert column because it is non constant in source stream but must be constant in result. em uma consulta que lê da tabela Merge sobre a tabela Distriburted com um shard. #67146 (Nikolai Kochetov).
  • Funcionamento correto de ORDER BY all com enable_order_by_all desabilitado e réplicas paralelas (inclusive em consultas distribuídas). #67153 (Igor Nikonov).
  • Corrige o uso incorreto de input_format_max_bytes_to_read_for_schema_inference no cache de schema. #67157 (Kruglov Pavel).
  • Corrigido o vazamento de memória em count distinct quando uma exceção era gerada durante o group by com uma única chave Nullable. #67171 (Jet He).
  • Corrige um erro na otimização que converte OUTER JOIN em INNER JOIN. Isso encerra #67156. Isso encerra #66447. O bug foi introduzido em https://github.com/ClickHouse/ClickHouse/pull/62907. #67178 (Maksim Kita).
  • Corrige o erro Conversion from AggregateFunction(name, Type) to AggregateFunction(name, Nullable(Type)) is not supported. O problema era causado pela otimização optimize_rewrite_aggregate_function_with_if. Corrige #67112. #67229 (Nikolai Kochetov).
  • Corrige o travamento de consulta ao usar tupla vazia como lhs da função IN. #67295 (Duc Canh Le).
  • Era possível criar um JSON com aninhamento muito profundo que acionava um estouro de pilha ao ignorar campos desconhecidos. Isso encerra #67292. #67324 (Alexey Milovidov).
  • Corrigido o problema ao anexar a tabela ReplicatedMergeTree após uma exceção durante a inicialização. #67360 (Antonio Andelic).
  • Corrige falha de segmentação causada por desvinculação incorreta do grupo de threads em Aggregator. #67385 (Antonio Andelic).
  • Corrigido mais um caso em que uma função não determinística é especificada na PK. #67395 (Nikolai Kochetov).
  • Corrigido um problema em que o índice bloom_filter quebrava consultas com condições um pouco incomuns, como (k=2)=(k=2) ou has([1,2,3], k). #67423 (Michael Kolupaev).
  • Interpretar corretamente o nome de arquivo/URI que contém :: se não for um arquivo compactado. #67433 (Antonio Andelic).
  • Corrigida a espera pelas tarefas em ~WriteBufferFromS3 caso WriteBuffer fosse cancelado. #67459 (Kseniia Sumarokova).
  • Proteção dos diretórios temporários das partes contra remoção durante o RESTORE. #67491 (Vitaly Baranov).
  • Corrigida a execução de funções aninhadas com curto-circuito. #67520 (Kruglov Pavel).
  • Corrigido Logical error: Expected the argument №N of type T to have X rows, but it has 0. O erro podia ocorrer em uma consulta remota com expressão constante em GROUP BY (com o novo analisador). #67536 (Nikolai Kochetov).
  • Correção de join em tupla com NULLs: algumas consultas com o novo analisador e NULL dentro da tupla na cláusula JOIN ON retornavam resultados incorretos. #67538 (vdimir).
  • Corrigido o reagendamento redundante de FileCache::freeSpaceRatioKeepingThreadFunc() no caso de cache cheio e sem possibilidade de evicção. #67540 (Kseniia Sumarokova).
  • Corrige a inserção em motores do tipo stream (Kafka, RabbitMQ, NATS) por meio da interface HTTP. #67554 (János Benjamin Antal).
  • Correção da função toStartOfWeek, que retornava um resultado incorreto com um valor pequeno de DateTime64. #67558 (Yarik Briukhovetskyi).
  • Corrigida a criação de view com CTE recursiva. #67587 (Yakov Olkhovskiy).
  • Corrige Logical error: 'file_offset_of_buffer_end <= read_until_position' no cache do filesystem. Fecha #57508. #67623 (Kseniia Sumarokova).
  • Corrige #62282. A chamada para convertFieldToString() foi removida, e foi adicionado código de serialização específico para cada tipo de dado. A substituição em view parametrizada não funcionava para vários tipos de dados quando o valor do parâmetro era uma função ou expressão que retornava uma instância de tipo de dado. #67654 (Shankar).
  • Corrige travamento em percent_rank. O tipo de frame padrão de percent_rank foi alterado para range unbounded preceding and unbounded following. O frame de janela padrão de IWindowFunction passa a ser considerado, e agora funções de janela sem definição de frame de janela em SQL podem ser corretamente alocadas em diferentes WindowTransfomers. #67661 (lgbo).
  • Corrigido o recarregamento de UDFs SQL com UNION. Antes, reiniciar o servidor podia invalidar uma UDF. #67665 (Antonio Andelic).
  • Corrige um possível erro lógico “Unexpected return type from if” com o tipo Variant experimental e com a configuração use_variant_as_common_type habilitada na função if com Tuples e Maps. #67687 (Kruglov Pavel).
  • Devido a um bug no kernel do Linux, uma consulta pode travar em TimerDescriptor::drain. Isso fecha #37686. #67702 (Alexey Milovidov).
  • Corrigida a finalização do comando RESTORE ON CLUSTER. #67720 (Vitaly Baranov).
  • Corrige o travamento do dicionário em caso de CANNOT_SCHEDULE_TASK durante o carregamento. #67751 (Azat Khuzhin).
  • Consultas como SELECT count() FROM t WHERE cast(c = 1 or c = 9999 AS Bool) SETTINGS use_skip_indexes=1, com índices de filtro de Bloom em c, agora funcionam corretamente. #67781 (jsc0218).
  • Corrige um resultado de agregação incorreto em algumas consultas com agregação sem chaves e com filtro, fecha #67419. #67804 (vdimir).
  • Validar tipos de dados experimentais/suspeitos em ALTER ADD/MODIFY COLUMN. #67911 (Kruglov Pavel).
  • Corrige o parsing de DateTime64 após constant folding em consultas distribuídas; fecha #66773. #67920 (vdimir).
  • Corrige o resultado incorreto de count() quando há uma função não determinística no predicado. #67922 (János Benjamin Antal).
  • Corrigido o cálculo do soft limit máximo de threads em ambientes containerizados em que o número de CPUs utilizáveis é limitado. #67963 (Robert Schulze).
  • Agora, o ClickHouse não considera a part corrompida se a projeção não existir em disco, mas existir em checksums.txt. #68003 (alesapin).
  • Corrigido o ignoramento de partes não afetadas em mutações com o novo analisador. Antes, com o analisador habilitado, os dados em uma parte podiam ser reescritos por uma mutação, mesmo que ela não afetasse essa parte de acordo com o predicado. #68052 (Anton Popov).
  • Remove uma otimização incorreta de eliminação da ordenação em subconsultas que usam OFFSET. Corrige #67906. #68099 (Graham Campbell).
  • Tentativa de corrigir Block structure mismatch in AggregatingStep stream: different types na otimização de projeções agregadas. #68107 (Nikolai Kochetov).
  • Tentativa de corrigir falha do postgres quando a consulta é cancelada. #68288 (Kseniia Sumarokova).
  • Corrige a ausência do modo de sincronização de réplica na consulta SYSTEM SYNC REPLICA. #68326 (Duc Canh Le).

Lançamento do ClickHouse 24.7, 2024-07-30. Apresentação, Vídeo

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

  • Proibir CRATE MATERIALIZED VIEW ... ENGINE Replicated*MergeTree POPULATE AS SELECT ... com bancos de dados Replicated. #63963 (vdimir).
  • clickhouse-keeper-client aceitará apenas caminhos em literais de string, como ls '/hello/world', e não strings sem aspas, como ls /hello/world. #65494 (Alexey Milovidov).
  • A métrica KeeperOutstandingRequets foi renomeada para KeeperOutstandingRequests. #66206 (Robert Schulze).
  • Remove o campo is_deterministic da tabela system.functions. #66630 (Alexey Milovidov).
  • A função tuple agora tentará construir tuplas nomeadas na consulta (controlado por enable_named_columns_in_function_tuple). Introduz a função tupleNames para extrair nomes de tuplas. #54881 (Amos Bird).
  • Altera a forma como a desduplicação de visões materializadas funciona. Corrige vários casos, como: - na tabela de destino: os dados são divididos em 2 ou mais blocos, e esses blocos são considerados duplicados quando são inseridos em paralelo. - na tabela de destino da MV: blocos iguais são desduplicados; isso acontece quando a MV frequentemente produz dados iguais como resultado de dados de entrada diferentes devido à agregação. - na tabela de destino da MV: blocos iguais vindos de MVs diferentes são desduplicados. #61601 (Sema Checherinda).
  • As funções bitShiftLeft e bitShitfRight retornam um erro para posições de shift fora dos limites. #65838 (Pablo Marcos).

Novo recurso

  • Adiciona suporte a ASOF JOIN para o algoritmo full_sorting_join. #55051 (vdimir).
  • Adiciona suporte à autenticação JWT no clickhouse-client (estará disponível apenas no ClickHouse Cloud). #62829 (Konstantin Bogdanov).
  • Adiciona as funções SQL changeYear, changeMonth, changeDay, changeHour, changeMinute, changeSecond. Por exemplo, SELECT changeMonth(toDate('2024-06-14'), 7) retorna a data 2024-07-14. #63186 (cucumber95).
  • Introduz scripts de inicialização, que permitem executar consultas pré-configuradas na etapa de inicialização. #64889 (pufit).
  • Adiciona suporte a accept_invalid_certificate na configuração do cliente para permitir que ele se conecte via TCP seguro a um servidor em execução com certificado autoassinado — pode ser usado como forma abreviada das configurações correspondentes do cliente openSSL: verificationMode=none + invalidCertificateHandler.name=AcceptCertificateHandler. #65238 (peacewalker122).
  • Adiciona system.error_log, que contém o histórico de valores de erro da tabela system.errors, gravados periodicamente em disco. #65381 (Pablo Marcos).
  • Adiciona a função de agregação groupConcat. É praticamente igual a arrayStringConcat( groupArray(column), ','). Pode receber 2 parâmetros: um delimitador de string e o número de elementos a serem processados. #65451 (Yarik Briukhovetskyi).
  • Adiciona o armazenamento AzureQueue. #65458 (Kseniia Sumarokova).
  • Adiciona uma nova configuração para desabilitar/habilitar a gravação do índice de página em arquivos Parquet. #65475 (lgbo).
  • Introduz a configuração do servidor logger.console_log_level para controlar o nível de log no console (se habilitado). #65559 (Azat Khuzhin).
  • Anexa automaticamente um caractere curinga * ao final de um caminho de diretório com a função de tabela file. #66019 (Zhidong (David) Guo).
  • Adiciona a opção --memory-usage ao cliente no modo não interativo. #66393 (vdimir).
  • Torna o clickhouse-disks um cliente interativo e adiciona disco local a partir do diretório local. #64446 (Daniil Ivanik).
  • Quando ocorre uma exclusão leve em uma tabela com projeção(ões), os usuários podem optar por lançar uma exceção (padrão) ou remover a projeção #65594 (jsc0218).
  • Adiciona tabelas de sistema com as principais informações sobre todas as tabelas detached. #65400 (Konstantin Morozov).

Recurso Experimental

  • Altera a serialização binária do tipo de dado Variant: adiciona o modo compact para evitar gravar o mesmo discriminador várias vezes em grânulos com uma única variante ou apenas valores NULL. Adiciona a configuração do MergeTree use_compact_variant_discriminators_serialization, habilitada por padrão. Observe que o tipo Variant ainda é experimental, e uma mudança incompatível com versões anteriores na serialização é aceitável. #62774 (Kruglov Pavel).
  • Adiciona suporte a armazenamento backend em disco para o clickhouse-keeper. #56626 (Han Fei).
  • Refatora as funções JSONExtract, com suporte a mais tipos, incluindo o tipo Dynamic experimental. #66046 (Kruglov Pavel).
  • Adiciona suporte a subcoluna map nula para subcolunas Variant e Dynamic. #66178 (Kruglov Pavel).
  • Corrige a leitura de subcolunas Dynamic de uma tabela Memory alterada. Antes, se o parâmetro max_types de um tipo Dynamic fosse alterado na tabela Memory via alter, leituras subsequentes das subcolunas poderiam retornar resultados incorretos. #66066 (Kruglov Pavel).
  • Adiciona suporte a cluster_for_parallel_replicas ao usar réplicas paralelas com chave personalizada. Isso permite usar réplicas paralelas com chave personalizada em tabelas MergeTree. #65453 (Antonio Andelic).

Melhoria de desempenho

  • Substituído o algoritmo de conversão de int para string por uma versão mais rápida (de um amdn/itoa modificado para um jeaiii/itoa modificado). #61661 (Raúl Marín).
  • Os tamanhos das tabelas hash criadas por join (algoritmo parallel_hash) agora são coletados e armazenados em cache. Essas informações serão usadas para pré-alocar espaço nas tabelas hash em execuções subsequentes de consultas e economizar tempo com redimensionamentos de tabela hash. #64553 (Nikita Taranov).
  • Otimizadas consultas com ORDER BY na chave primária e WHERE com condição de alta seletividade usando buffering. Isso é controlado pela configuração read_in_order_use_buffering (habilitada por padrão) e pode aumentar o uso de memória da consulta. #64607 (Anton Popov).
  • Melhorado o desempenho do carregamento de metadados plain_rewritable. #65634 (Alexey Milovidov).
  • O Attach de tabelas em discos read-only usará menos recursos por não carregar partes desatualizadas. #65635 (Alexey Milovidov).
  • Suporte a hiperetângulo minmax para índices Set. #65676 (AntiTopQuark).
  • Descarrega o índice primário de partes desatualizadas para reduzir o uso total de memória. #65852 (Anton Popov).
  • As funções replaceRegexpAll e replaceRegexpOne agora são significativamente mais rápidas quando o pattern é trivial, ou seja, não contém metacaracteres, classes de padrão, flags, caracteres de agrupamento etc. (Agradecimentos a Taiyang Li). #66185 (Robert Schulze).
  • Requisições ao S3: redução do tempo de retry para consultas e aumento da quantidade de retries para backups. 8,5 minutos e 100 retries para consultas; 1,2 horas e 1000 retries para restore de backup. #65232 (Sema Checherinda).
  • Suporte à otimização de LIMIT no plano de consulta. Suporte a pushdown de LIMIT para o mecanismo PostgreSQL e table function. #65454 (Maksim Kita).
  • Melhorado o balanceamento de carga do ZooKeeper. A sessão atual não expira até que os nós ideais fiquem disponíveis, apesar de fallback_session_lifetime. Adicionado suporte a balanceamento com reconhecimento de AZ. #65570 (Alexander Tokmakov).
  • O DatabaseCatalog remove tabelas mais rapidamente usando até database_catalog_drop_table_concurrency threads. #66065 (Sema Checherinda).

Melhoria

  • Balanceamento de carga do ZooKeeper aprimorado. A sessão atual não expira até que os nós ideais voltem a ficar disponíveis, apesar de fallback_session_lifetime. Adicionado suporte a balanceamento com reconhecimento de zonas de disponibilidade (AZ). #65570 (Alexander Tokmakov).
  • A configuração optimize_trivial_insert_select é desabilitada por padrão. Na maioria dos casos, isso deve ser vantajoso. Ainda assim, se você estiver observando um INSERT SELECT mais lento ou aumento no uso de memória, poderá reabilitá-la ou usar SET compatibility = '24.6'. #58970 (Alexey Milovidov).
  • Imprimir o stack trace e informações de diagnóstico se clickhouse-client ou clickhouse-local travar. #61109 (Alexander Tokmakov).
  • O resultado de SHOW INDEX | INDEXES | INDICES | KEYS era anteriormente ordenado pelos nomes das colunas da chave primária. Como isso não era intuitivo, agora o resultado é ordenado pela posição das colunas dentro da chave primária. #61131 (Robert Schulze).
  • Altera a forma como a desduplicação em visões materializadas funciona. Foram corrigidos vários casos, como: - na tabela de destino: os dados são divididos em 2 ou mais blocos, e esses blocos são considerados duplicados quando são inseridos em paralelo. - na tabela de destino da MV: blocos iguais são desduplicados; isso acontece quando a MV frequentemente produz dados iguais como resultado de dados de entrada diferentes devido à agregação. - na tabela de destino da MV: blocos iguais provenientes de MVs diferentes são desduplicados. #61601 (Sema Checherinda).
  • Suporte à leitura de dados DeltaLake particionados. Inferência do esquema do DeltaLake pela leitura dos metadados, em vez dos dados. #63201 (Kseniia Sumarokova).
  • Na camada TLS dos protocolos composáveis, apenas os parâmetros certificateFile e privateKeyFile eram aceitos. https://clickhouse.com/docs/operations/settings/composable-protocols. #63985 (Anton Ivashkin).
  • Adicionado o evento de perfil SelectQueriesWithPrimaryKeyUsage, que indica quantas consultas SELECT usam a chave primária para avaliar a cláusula WHERE. #64492 (0x01f).
  • Correções e melhorias relacionadas ao StorageS3Queue. Determinar o valor padrão de s3queue_processing_threads_num com base no número de núcleos físicos de CPU no servidor (em vez do valor padrão anterior, que era 1). Definir o valor padrão de s3queue_loading_retries como 10. Corrigir a possível exceção vaga “Uncaught exception” na coluna de exceção de system.s3queue. Não incrementar o contador de tentativas na exceção MEMORY_LIMIT_EXCEEDED. Mover o commit dos arquivos para uma etapa posterior à conclusão total da inserção na tabela, para evitar que arquivos sejam comitados sem terem sido inseridos. Adicionar as configurações s3queue_max_processed_files_before_commit, s3queue_max_processed_rows_before_commit, s3queue_max_processed_bytes_before_commit, s3queue_max_processing_time_sec_before_commit para controlar melhor o commit e o tempo de flush. #65046 (Kseniia Sumarokova).
  • Suporte a aliases em funções de views parametrizadas (apenas no novo analisador). #65190 (Kseniia Sumarokova).
  • Atualizado para mascarar a chave da conta nos logs do azureBlobStorage. #65273 (SmitaRKulkarni).
  • Poda de partições em predicados IN quando a expressão de filtro faz parte da expressão PARTITION BY. #65335 (Eduard Karacharov).
  • arrayMin/arrayMax podem ser aplicados a todos os tipos de dados comparáveis. #65455 (pn).
  • Melhorada a contabilização de memória para cgroups v2 para excluir a parcela ocupada pelo cache de páginas. #65470 (Nikita Taranov).
  • Não crie configurações de formato para cada linha ao serializar fragmentos para inserção na tabela EmbeddedRocksDB. #65474 (Duc Canh Le).
  • Reduza o prompt do clickhouse-local para apenas :). getFQDNOrHostName() demora muito no macOS e, de qualquer forma, não queremos um hostname no prompt do clickhouse-local. #65510 (Konstantin Bogdanov).
  • Evita a exibição de uma mensagem do jemalloc sobre arenas por CPU em máquinas virtuais de baixo desempenho. #65532 (Alexey Milovidov).
  • Desativa o download em segundo plano do cache do sistema de arquivos por padrão. Ele será reativado quando corrigirmos o problema do possível “Memory limit exceeded”, porque a desalocação de memória é feita fora do contexto da consulta (enquanto o buffer é alocado dentro do contexto da consulta) se usarmos threads de download em segundo plano. Além disso, precisamos adicionar uma configuração separada para definir o tamanho máximo de download para os workers em segundo plano (atualmente, ele é limitado por max_file_segment_size, que pode ser grande demais). #65534 (Kseniia Sumarokova).
  • Adicionada uma nova opção à configuração <config_reload_interval_ms>, que permite especificar com que frequência o ClickHouse recarregará a configuração. #65545 (alesapin).
  • Implemente a codificação binária para os tipos de dados do ClickHouse e adicione sua especificação à documentação. Use-a na serialização binária de Dynamic e permita seu uso nos formatos RowBinaryWithNamesAndTypes e Native por meio de configurações. #65546 (Kruglov Pavel).
  • As configurações de servidor compiled_expression_cache_size e compiled_expression_cache_elements_size agora são exibidas em system.server_settings. #65584 (Robert Schulze).
  • Adicionado suporte à identificação de usuários com base na extensão SubjectAltName do x509. #65626 (Anton Kozlov).
  • clickhouse-local respeitará max_server_memory_usage e max_server_memory_usage_to_ram_ratio do arquivo de configuração. Ele também definirá, por padrão, o uso máximo de memória como 90% da memória do sistema, assim como o clickhouse-server. #65697 (Alexey Milovidov).
  • Adicione um script para fazer backup dos seus arquivos no ClickHouse. #65699 (Alexey Milovidov).
  • Origem PostgreSQL com suporte a cancelamento de consultas. #65722 (Maksim Kita).
  • Faz com que allow_experimental_analyzer seja controlado pelo nó iniciador nas consultas distribuídas. Isso garante compatibilidade e comportamento correto durante operações em clusters com versões mistas. #65777 (Nikita Mikhaylov).
  • Respeita o limite de CPU do cgroup no Keeper. #65819 (Antonio Andelic).
  • Permite o uso da função concat com argumentos vazios :) select concat();. #65887 (李扬).
  • Permite controlar as named collections no clickhouse-local. #65973 (Alexey Milovidov).
  • Melhora nos eventos de perfil relacionados ao Azure. #65999 (alesapin).
  • Suporte à leitura de arquivos ORC com base no fuso horário do gravador. #66025 (kevinyhzou).
  • Adiciona configurações para controlar as conexões com o PostgreSQL. A configuração postgresql_connection_attempt_timeout especifica o valor passado para o parâmetro connect_timeout da URL de conexão. A configuração postgresql_connection_pool_retries especifica o número de tentativas para estabelecer uma conexão com o endpoint do PostgreSQL. #66232 (Dmitry Novik).
  • Reduz a imprecisão de input_wait_elapsed_us/elapsed_us em system.processors_profile_log. #66239 (Azat Khuzhin).
  • Aprimora os ProfileEvents do cache do sistema de arquivos. #66249 (zhukai).
  • Adicionadas configurações para ignorar a cláusula ON CLUSTER nas consultas de gerenciamento de coleção nomeada com armazenamento replicado. #66288 (MikhailBurdukov).
  • A função generateSnowflakeID agora permite especificar um ID de máquina como parâmetro para evitar colisões em clusters de grande porte. #66374 (ZAWA_ll).
  • Desabilitar a suspensão com Ctrl+Z no modo interativo. Essa é uma armadilha comum e não é o comportamento esperado para quase nenhum usuário. Imagino que apenas alguns usuários avançados mais extremos possam achar útil suspender aplicativos de terminal em segundo plano, mas não conheço nenhum. #66511 (Alexey Milovidov).
  • Adicionada uma opção para validar o tipo da chave primária em Dictionaries. Sem essa opção, em layouts simples, qualquer tipo de coluna será convertido implicitamente para UInt64. #66595 (MikhailBurdukov).

Correção de bug (mau funcionamento perceptível ao usuário em uma versão estável oficial)

  • Verifica dependências cíclicas em consultas CREATE/REPLACE/RENAME/EXCHANGE e lança uma exceção se houver dependência cíclica. Antes, essas dependências cíclicas podiam causar um deadlock durante a inicialização do servidor. Também corrige alguns bugs na criação de dependências. #65405 (Kruglov Pavel).
  • Corrige tamanhos inesperados em colunas LowCardinality em chamadas de função. #65298 (Raúl Marín).
  • Corrige um travamento em maxIntersections. #65689 (Raúl Marín).
  • Corrigido o problema em que a cláusula VALID UNTIL na definição do usuário era redefinida após uma reinicialização. #66409 (Nikolay Degterinsky).
  • Corrigida a coluna de tempo restante em SHOW MERGES. #66735 (Alexey Milovidov).
  • Query was cancelled pode ter sido impresso duas vezes no clickhouse-client. Esse comportamento foi corrigido. #66005 (Nikita Mikhaylov).
  • Corrigido um travamento ao usar MaterializedMySQL (que é um recurso experimental sem suporte) com TABLE OVERRIDE que mapeia um campo MySQL NULL para um campo ClickHouse NOT NULL. #54649 (Filipp Ozinov).
  • Corrigido erro lógico quando a expressão PREWHERE não lê nenhuma coluna e a tabela não tem granularidade adaptativa de índice (tabela muito antiga). #59173 (Alexander Gololobov).
  • Corrigido bug no buffer de cancelamento ao cancelar uma consulta. #64478 (Sema Checherinda).
  • Corrigido o preenchimento das colunas das partes a partir dos metadados (quando columns.txt não existe). #64757 (Azat Khuzhin).
  • Corrige falha em ALTER TABLE ... ON CLUSTER ... MODIFY SQL SECURITY. #64957 (pufit).
  • Corrige falha ao destruir o AccessControl: adiciona encerramento explícito. #64993 (Vitaly Baranov).
  • Eliminar recursivamente funções injetivas nos argumentos das funções uniq*. Isso costumava funcionar corretamente, mas foi quebrado no novo analisador. #65140 (Duc Canh Le).
  • Corrige nome de projeção inesperado em consulta com CTE. #65267 (wudidapaopao).
  • Exigir o privilégio dictGet para acessar dicionários por consulta direta ou pelo mecanismo de tabela Dictionary. #65359 (Joe Lynch).
  • Corrige a autenticação do S3 por usuário com backups incrementais. #65481 (Antonio Andelic).
  • Desabilite a otimização non-intersecting-parts para consultas com FINAL caso a otimização read-in-order esteja habilitada. Isso pode levar a um resultado incorreto da consulta. Como solução alternativa, desabilite do_not_merge_across_partitions_select_final e split_parts_ranges_into_intersecting_and_non_intersecting_final antes que essa correção seja incorporada. #65505 (Nikolai Kochetov).
  • Corrigida a ocorrência da exceção Index out of bound for blob metadata caso todos os arquivos do lote da lista fossem filtrados. #65523 (Kseniia Sumarokova).
  • Corrige NOT_FOUND_COLUMN_IN_BLOCK no merge de desduplicação de projeção. #65573 (Yakov Olkhovskiy).
  • Corrigido um bug no MergeJoin. Uma coluna na serialização esparsa poderia ser tratada como uma coluna do seu tipo aninhado, embora a conversão necessária não fosse realizada. #65632 (Nikita Taranov).
  • Corrigido um bug que impedia a aplicação correta do nível de compatibilidade ‘23.4’. #65737 (cw5121).
  • Corrige a tabela ODBC com campos Nullable. #65738 (Rodolphe Dugé de Bernonville).
  • Corrige uma condição de corrida em TCPHandler, que poderia ocorrer em caso de erro fatal. #65744 (Kseniia Sumarokova).
  • Corrigidas exceções incorretas na função parseDateTime com os placeholders %F e %D. #65768 (Antonio Andelic).
  • Para consultas que leem do PostgreSQL, cancele a consulta interna no PostgreSQL se a consulta do ClickHouse já tiver sido concluída. Caso contrário, a consulta do ClickHouse não poderá ser cancelada até que a consulta interna no PostgreSQL seja concluída. #65771 (Maksim Kita).
  • Corrige um bug na lógica de curto-circuito quando são usados o analisador antigo e dictGetOrDefault. #65802 (jsc0218).
  • Corrige um bug que fazia com que o EmbeddedRocksDB com escrita TTL corrompesse arquivos SST. #65816 (Duc Canh Le).
  • As funções bitTest, bitTestAll e bitTestAny agora retornam um erro se o índice de bit especificado estiver fora do intervalo válido #65818 (Pablo Marcos).
  • A configuração join_any_take_last_row é compatível com qualquer consulta que use hash join. #65820 (vdimir).
  • Melhor tratamento de condições de join que envolvem verificações IS NULL (por exemplo, ON (a = b AND (a IS NOT NULL) AND (b IS NOT NULL) ) OR ( (a IS NULL) AND (b IS NULL) ) é reescrita como ON a <=> b), corrigindo a otimização incorreta quando há condições diferentes de IS NULL. #65835 (vdimir).
  • Corrigido o aumento do uso de memória no S3Queue. #65839 (Kseniia Sumarokova).
  • Corrigido o tratamento de empates em arrayAUC para corresponder ao sklearn. #65840 (gabrielmcg44).
  • Corrige possíveis problemas nas conexões TLS do protocolo de servidor MySQL. #65917 (Azat Khuzhin).
  • Corrige possíveis problemas nas conexões TLS do protocolo de cliente MySQL. #65938 (Azat Khuzhin).
  • Corrigido o tratamento de SSL_ERROR_WANT_READ/SSL_ERROR_WANT_WRITE com timeout zero. #65941 (Azat Khuzhin).
  • Adiciona as configurações ausentes input_format_csv_skip_first_lines/input_format_tsv_skip_first_lines/input_format_csv_try_infer_numbers_from_strings/input_format_csv_try_infer_strings_from_quoted_tuples ao cache de inferência de esquema, pois elas podem alterar o esquema resultante. Isso evita resultados incorretos da inferência de esquema quando essas configurações são alteradas. #65980 (Kruglov Pavel).
  • A coluna _size no engine S3 e na função de tabela S3 indica o tamanho de um arquivo dentro do arquivo compactado, não o tamanho do próprio arquivo compactado. #65993 (Daniil Ivanik).
  • Corrigida a resolução de subcolunas dinâmicas no analisador, evitando a leitura da coluna inteira ao ler subcolunas dinâmicas. #66004 (Kruglov Pavel).
  • Corrige a mesclagem de configurações do from_env com sobrescritas de replace. #66034 (Azat Khuzhin).
  • Corrige um possível travamento no GRPCServer durante o desligamento. #66061 (Vitaly Baranov).
  • Foram corrigidos vários casos na função has com argumentos LowCardinality não constantes. #66088 (Anton Popov).
  • Correção para groupArrayIntersect. Havia um comportamento incorreto na função merge(). Além disso, foi corrigido o comportamento em deserialise() para dados numéricos e dados em geral. #66103 (Yarik Briukhovetskyi).
  • Corrigido bug de overflow de buffer na implementação de unbin/unhex. #66106 (Nikita Taranov).
  • Desabilita a otimização merge-filters, introduzida em #64760. Ela pode causar uma exceção se a otimização mesclar duas expressões de filtro sem aplicar avaliação de curto-circuito. #66126 (Nikolai Kochetov).
  • Corrigido o problema em que o servidor não conseguia interpretar arquivos Avro com arrays codificados com bloco de tamanho negativo, o que agora é permitido pela especificação do Avro. #66130 (Serge Klochkov).
  • Corrigido um bug no cliente ZooKeeper: uma sessão podia ficar travada em um estado inutilizável após receber um erro de hardware do ZooKeeper. Por exemplo, isso podia acontecer devido ao “soft memory limit” no ClickHouse Keeper. #66140 (Alexander Tokmakov).
  • Corrigido problema no SumIfToCountIfVisitor e em inteiros com sinal. #66146 (Raúl Marín).
  • Corrige um caso raro de ausência de dados no resultado de uma consulta distribuída. #66174 (vdimir).
  • Corrigida a ordem de parsing dos campos de metadados no StorageDeltaLake. #66211 (Kseniia Sumarokova).
  • Não gere TIMEOUT_EXCEEDED para o modo none_only_active de distributed_ddl_output_mode. #66218 (Alexander Tokmakov).
  • Corrigido o tratamento do limite em system.numbers_mt quando nenhum índice pode ser usado. #66231 (János Benjamin Antal).
  • Corrigida a forma como o servidor ClickHouse detecta o número máximo de núcleos de CPU utilizáveis, conforme especificado pelo cgroups v2, quando o servidor é executado em um contêiner, como o Docker. Mais especificamente, os contêineres frequentemente executam seus processos no cgroup raiz, que tem um nome vazio. Nesse caso, o ClickHouse ignorava os limites de CPU definidos pelo cgroups v2. #66237 (filimonov).
  • Corrige o erro Not-ready set ao usar uma subconsulta com IN na restrição. #66261 (Nikolai Kochetov).
  • Corrige o reporte de erros durante a cópia para S3 ou AzureBlobStorage. #66295 (Vitaly Baranov).
  • Impedir que o watchdog mantenha descritores de arquivos de log já desvinculados (rotacionados). #66334 (Aleksei Filatov).
  • Corrige o bug em que o logicalexpressionoptimizerpass perdia o tipo lógico de uma constante. #66344 (pn).
  • Corrige o erro Column identifier is already registered ao usar group_by_use_nulls=true e o novo analisador. #66400 (Nikolai Kochetov).
  • Corrige possíveis resultados incorretos em consultas que fazem join e filtram tabelas com engine externa (como PostgreSQL), devido a um pushdown de filtro excessivamente agressivo. A partir de agora, as condições da seção WHERE não serão enviadas ao banco de dados externo no caso de outer join com tabela externa. #66402 (vdimir).
  • Adicionada a materialização da coluna ausente para CROSS JOIN. #66413 (lgbo).
  • Corrige o erro Cannot find column em consultas com expressão constante na chave GROUP BY e com o novo analisador ativado. #66433 (Nikolai Kochetov).
  • Evita um possível erro lógico na importação do formato Npy em caso de nível incorreto de aninhamento de array e corrige os testes para outros tipos de erro. #66461 (Yarik Briukhovetskyi).
  • Corrige o resultado incorreto de count() quando há uma função não determinística no predicado. #66510 (Duc Canh Le).
  • Rastrear corretamente o uso de memória em Allocator::realloc. #66548 (Antonio Andelic).
  • Corrige a leitura de memória não inicializada ao calcular o hash de tuplas vazias. #66562 (Alexey Milovidov).
  • Corrige um resultado inválido em consultas com WINDOW. Isso podia acontecer quando as colunas de PARTITION têm serialização esparsa e funções de janela são executadas em paralelo. #66579 (Nikolai Kochetov).
  • Correção na remoção de coleções nomeadas do armazenamento local. #66599 (János Benjamin Antal).
  • Corrigido: column_length não é atualizado em ColumnTuple::insertManyFrom. #66626 (lgbo).
  • Corrige os erros Unknown identifier e Column is not under aggregate function em consultas com a expressão (column IS NULL). O bug era acionado apenas por #65088, com o analisador desativado. #66654 (Nikolai Kochetov).
  • Corrige o erro Method getResultType is not supported for QUERY query node quando uma subconsulta escalar era usada como primeiro argumento de IN (com o novo analisador). #66655 (Nikolai Kochetov).
  • Corrige possível erro PARAMETER_OUT_OF_BOUND ao ler a subcoluna Variant. #66659 (Kruglov Pavel).
  • Corrige um caso raro em que o merge fica travado após excluir uma coluna. #66707 (Raúl Marín).
  • Corrigida a asserção isUniqTypes ao fazer insert select a partir de fontes remotas. #66722 (Sema Checherinda).
  • Corrigido um erro lógico em PrometheusRequestHandler. #66621 (Vitaly Baranov).
  • Corrige um caso na função indexHint encontrado pelo fuzzer. #66286 (Anton Popov).
  • Corrigida a formatação da AST de ‘create table b empty as a’. #64951 (Michael Kolupaev).

lançamento do ClickHouse 24.6, 2024-07-01. Apresentação, Vídeo

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

  • Habilita o carregamento assíncrono de bancos de dados e tabelas por padrão. Veja async_load_databases em config.xml. Embora essa alteração seja totalmente compatível, ela pode introduzir uma diferença de comportamento. Quando async_load_databases é false, como nas versões anteriores, o servidor não aceitará conexões até que todas as tabelas sejam carregadas. Quando async_load_databases é true, como na nova versão, o servidor pode aceitar conexões antes que todas as tabelas sejam carregadas. Se uma consulta for feita a uma tabela que ainda não foi carregada, ela aguardará o carregamento da tabela, o que pode levar um tempo considerável. Isso pode alterar o comportamento do servidor se ele fizer parte de um grande sistema distribuído atrás de um balanceador de carga. No primeiro caso, o balanceador de carga pode receber uma recusa de conexão e fazer failover rapidamente para outro servidor. No segundo caso, o balanceador de carga pode se conectar a um servidor que ainda está carregando as tabelas, e a consulta terá latência maior. Além disso, se muitas consultas se acumularem no estado de espera, isso pode levar a um problema de “thundering herd” quando começarem a ser processadas simultaneamente. Isso só pode fazer diferença para backends distribuídos com alta carga. Você pode definir o valor de async_load_databases como false para evitar esse problema. #57695 (Alexey Milovidov).
  • A setting replace_long_file_name_to_hash é habilitada por padrão para tabelas MergeTree. #64457 (Anton Popov). Essa setting é totalmente compatível, e nenhuma ação é necessária durante a atualização. O novo formato de dados é suportado por todas as versões a partir da 23.9. Depois de habilitar essa setting, você não poderá mais fazer downgrade para a versão 23.8 ou anterior.
  • Algumas consultas inválidas falharão mais cedo durante o parsing. Observação: foi desabilitado o suporte a expressões KQL inline (a linguagem Kusto experimental) quando elas são colocadas em uma table function kql sem um literal de string, por exemplo kql(garbage | trash) em vez de kql('garbage | trash') ou kql($$garbage | trash$$). Esse recurso foi introduzido sem intenção e não deveria existir. #61500 (Alexey Milovidov).
  • Reformula o processamento paralelo no modo Ordered do armazenamento S3Queue. Este PR é incompatível com versões anteriores para o modo Ordered se você usava as settings s3queue_processing_threads_num ou s3queue_total_shards_num. A setting s3queue_total_shards_num foi removida; anteriormente, era permitido usá-la apenas com s3queue_allow_experimental_sharded_mode, que agora está deprecated. Uma nova setting foi adicionada - s3queue_buckets. #64349 (Kseniia Sumarokova).
  • Foram adicionadas novas funções snowflakeIDToDateTime, snowflakeIDToDateTime64, dateTimeToSnowflakeID e dateTime64ToSnowflakeID. Diferentemente das funções existentes snowflakeToDateTime, snowflakeToDateTime64, dateTimeToSnowflake e dateTime64ToSnowflake, as novas funções são compatíveis com a função generateSnowflakeID, ou seja, aceitam os Snowflake ID gerados por generateSnowflakeID e produzem Snowflake ID do mesmo tipo que generateSnowflakeID (isto é, UInt64). Além disso, as novas funções usam por padrão a epoch UNIX (isto é, 1970-01-01), assim como generateSnowflakeID. Se necessário, uma epoch diferente, por exemplo a epoch do Twitter/X de 2010-11-04, também conhecida como 1288834974657 msec desde a epoch UNIX, pode ser informada. As antigas funções de conversão estão deprecated e serão removidas após um período de transição: para usá-las mesmo assim, habilite a setting allow_deprecated_snowflake_conversion_functions. #64948 (Robert Schulze).

Novo recurso

  • Permite armazenar coleções nomeadas no ClickHouse Keeper. #64574 (Kseniia Sumarokova).
  • Adicionado suporte a tuplas vazias. #55061 (Amos Bird).
  • Adicionadas funções de codificação e decodificação da curva de Hilbert. #60156 (Artem Mustafin).
  • Adicionar suporte à análise de índice com hilbertEncode. #64662 (Artem Mustafin).
  • Adicionado suporte à leitura da geometria LINESTRING no formato WKT usando a função readWKTLineString. #62519 (Nikita Mikhaylov).
  • Permite anexar partes de um disco diferente. #63087 (Unalian).
  • Adicionadas novas funções SQL generateSnowflakeID para gerar IDs Snowflake no estilo do Twitter. #63577 (Danila Puzov).
  • Adicionadas as configurações merge_workload e mutation_workload para regular como os recursos são utilizados e compartilhados entre operações de merge, mutações e outras cargas de trabalho. #64061 (Sergei Trifonov).
  • Adicionado suporte à comparação entre os tipos IPv4 e IPv6 usando o operador =. #64292 (Francisco J. Jurado Moreno).
  • Suporte a argumentos do tipo Decimal em funções matemáticas binárias (pow, atan2, max2, min2, hypot). #64582 (Mikhail Gorshkov).
  • Adicionadas as funções SQL parseReadableSize (bem como as variantes OrNull e OrZero). #64742 (Francisco J. Jurado Moreno).
  • Adiciona as configurações de servidor max_table_num_to_throw e max_database_num_to_throw para limitar o número de bancos de dados ou de tabelas em consultas CREATE. #64781 (Xu Jia).
  • Adicionada a coluna virtual _time a armazenamentos do tipo arquivo (s3/file/hdfs/url/azureBlobStorage). #64947 (Ilya Golshtein).
  • Adicionadas as novas funções base64URLEncode, base64URLDecode e tryBase64URLDecode. #64991 (Mikhail Gorshkov).
  • Adiciona a nova função editDistanceUTF8, que calcula a distância de edição entre duas strings UTF-8. #65269 (LiuNeng).
  • Adiciona a configuração http_response_headers para dar suporte a cabeçalhos de resposta personalizados em handlers HTTP personalizados. #63562 (Grigorii).
  • Adicionada uma nova função de tabela loop para permitir o retorno dos resultados da consulta em loop infinito. #63452 (Sariel). Isso é útil para testes.
  • Foram adicionadas duas colunas ao system.query_log: used_privileges e missing_privileges. used_privileges é preenchida com os privilégios verificados durante a execução da consulta, e missing_privileges contém os privilégios obrigatórios que estão faltando. #64597 (Alexey Katsman).
  • Foi adicionada a configuração output_format_pretty_display_footer_column_names que, quando habilitada, exibe os nomes das colunas no rodapé da tabela em tabelas longas (50 linhas por padrão), com o limite mínimo de linhas controlado por output_format_pretty_display_footer_column_names_min_rows. #65144 (Shaun Struwig).

Funcionalidade Experimental

  • Adiciona estatísticas do tipo “número de valores distintos”. #59357 (Han Fei).
  • Adiciona suporte a estatísticas com ReplicatedMergeTree. #64934 (Han Fei).
  • Se “grupo de réplicas” estiver configurado para um banco de dados Replicated, cria automaticamente um cluster que inclui réplicas de todos os grupos. #64312 (Alexander Tokmakov).
  • Adiciona as configurações parallel_replicas_custom_key_range_lower e parallel_replicas_custom_key_range_upper para controlar como as réplicas paralelas com shards dinâmicos paralelizam as consultas ao usar um filtro de intervalo. #64604 (josh-hildred).

Melhorias de desempenho

  • Adiciona a possibilidade de reordenar linhas durante a inserção para otimizar o tamanho sem violar a ordem definida pela PRIMARY KEY. Isso é controlado pela configuração optimize_row_order (desativada por padrão). #63578 (Igor Markelov).
  • Adiciona um leitor nativo de Parquet, capaz de ler dados binários em Parquet diretamente em colunas do ClickHouse. Ele é controlado pela configuração input_format_parquet_use_native_reader (desabilitada por padrão). #60361 (ZhiHong Zhang).
  • Suporte à otimização parcial da contagem trivial quando o filtro da consulta consegue selecionar intervalos exatos em tabelas MergeTree. #60463 (Amos Bird).
  • Reduz o pico de uso de memória de INSERTs multithread ao reunir fragmentos de várias threads em uma única transformação. #61047 (Yarik Briukhovetskyi).
  • Reduz o uso de memória ao usar o armazenamento de objetos do Azure com alocação fixa de memória, evitando a alocação de um buffer extra. #63160 (SmitaRKulkarni).
  • Reduz o número de chamadas de função virtual em ColumnNullable::size. #60556 (HappenLee).
  • Otimização do splitByRegexp quando o argumento de expressão regular é um único caractere. #62696 (Robert Schulze).
  • Acelera a agregação por chaves de 8 e 16 bits ao manter o controle das chaves mínima e máxima utilizadas. Isso permite reduzir o número de células que precisam ser verificadas. #62746 (Jiebin Sun).
  • Otimiza o operador IN quando o lado esquerdo é LowCardinality e o lado direito é um conjunto de constantes. #64060 (Zhiguo Zhou).
  • Use um pool de threads para inicializar e destruir tabelas hash no ConcurrentHashJoin. #64241 (Nikita Taranov).
  • Mesclagens verticais otimizadas em tabelas com colunas esparsas. #64311 (Anton Popov).
  • Foi habilitado o pré-carregamento de dados do sistema de arquivos remoto durante mesclagens verticais. Isso melhora a latência das mesclagens verticais em tabelas com dados armazenados em sistema de arquivos remoto. #64314 (Anton Popov).
  • Redução de chamadas redundantes a isDefault em ColumnSparse::filter para melhorar o desempenho. #64426 (Jiebin Sun).
  • Aumento de velocidade dos comandos find_super_nodes e find_big_family do keeper-client ao fazer várias solicitações assíncronas de getChildren. #64628 (Alexander Gololobov).
  • Melhoria na função least/greatest para argumentos numéricos Nullable. #64668 (KevinyhZou).
  • Permite mesclar duas etapas consecutivas de filtragem de um plano de consulta. Isso melhora a otimização de filter-push-down se a condição de filtro puder ser propagada da etapa pai para baixo. #64760 (Nikolai Kochetov).
  • Remova a otimização problemática na implementação vertical do FINAL e reative o algoritmo vertical do FINAL por padrão. #64783 (Duc Canh Le).
  • Remova os nós ALIAS da expressão de filtro. Isso melhora ligeiramente o desempenho de consultas que usam PREWHERE (com o novo analisador). #64793 (Nikolai Kochetov).
  • Reativado o cache de sessão do OpenSSL. #65111 (Robert Schulze).
  • Adicionadas configurações para desabilitar a materialização de skip indexes e estatísticas durante as inserções (materialize_skip_indexes_on_insert e materialize_statistics_on_insert). #64391 (Anton Popov).
  • Use o tamanho da memória alocada para calcular o tamanho do grupo de linhas e reduzir o pico de memória do gravador de Parquet no modo de thread única. #64424 (LiuNeng).
  • Melhora o iterador da coluna esparsa para reduzir as chamadas a size. #64497 (Jiebin Sun).
  • Atualizada a condição para usar cópia do lado do servidor para backups no Azure Blob Storage. #64518 (SmitaRKulkarni).
  • Uso de memória das mesclagens verticais otimizado para tabelas com um grande número de skip indexes. #64580 (Anton Popov).

Melhoria

  • SHOW CREATE TABLE executado em tabelas de sistema agora mostrará o comentário, extremamente útil e exclusivo de cada tabela, que explicará por que essa tabela é necessária. #63788 (Nikita Mikhaylov).
  • O segundo argumento (escala) das funções round(), roundBankers(), floor(), ceil() e trunc() agora pode ser não constante. #64798 (Mikhail Gorshkov).
  • Recarregamento a quente da política de armazenamento para tabelas Distributed ao adicionar um novo disco. #58285 (Duc Canh Le).
  • Evita um possível deadlock durante a análise de índices do MergeTree ao agendar threads em um serviço sobrecarregado. #59427 (Sean Haynes).
  • Várias pequenas correções em casos extremos no suporte a proxy S3 & tunelamento. #63427 (Arthur Passos).
  • Melhora a visibilidade dos reenvios do io_uring. Renomeia o evento de perfil IOUringSQEsResubmits -> IOUringSQEsResubmitsAsync e adiciona um novo, IOUringSQEsResubmitsSync. #63699 (Tomer Shafir).
  • Adicionada uma nova configuração, metadata_keep_free_space_bytes, para manter espaço livre no disco de armazenamento de metadados. #64128 (MikhailBurdukov).
  • Adiciona métricas para acompanhar o número de diretórios criados e removidos pelo armazenamento de metadados plain_rewritable, e o número de entradas no mapa em memória de local para remoto. #64175 (Julia Kartseva).
  • O cache de consultas agora considera consultas idênticas com configurações diferentes como sendo distintas. Isso aumenta a robustez nos casos em que configurações diferentes (por exemplo, limit ou additional_table_filters) afetam o resultado da consulta. #64205 (Robert Schulze).
  • Suporte ao código de erro não padrão QpsLimitExceeded no armazenamento de objetos como erro passível de repetição. #64225 (Sema Checherinda).
  • Impedir a conversão de uma tabela MergeTree em replicada se o caminho do ZooKeeper dessa tabela já existir. #64244 (Kirill).
  • Foi adicionada uma nova configuração input_format_parquet_prefer_block_bytes para controlar a média de bytes dos blocos de saída, e o valor padrão de input_format_parquet_max_block_size foi alterado para 65409. #64427 (LiuNeng).
  • Permitir ignorar o proxy para hosts especificados na variável de ambiente no_proxy e na configuração de proxy do ClickHouse. #63314 (Arthur Passos).
  • Sempre inicie o Keeper com uma quantidade suficiente de threads no pool global de threads. #64444 (Duc Canh Le).
  • As configurações definidas no arquivo de configuração do usuário não afetam os merges e as mutações do MergeTree com armazenamento de objetos. #64456 (alesapin).
  • Suporte ao código de erro não padrão TotalQpsLimitExceeded no armazenamento de objetos como erro passível de nova tentativa. #64520 (Sema Checherinda).
  • Dashboard Avançado atualizado nas versões open-source e ClickHouse Cloud para incluir um gráfico de ‘Número máximo de conexões de rede simultâneas’. #64610 (Thom O’Connor).
  • Melhorado o relatório de progresso em zeros_mt e generateRandom. #64804 (Raúl Marín).
  • Adiciona uma métrica assíncrona jemalloc.profile.active para indicar se a amostragem está ativa no momento. Este é um mecanismo de ativação adicional ao prof.active; ambos devem estar ativos para que a thread chamadora faça a amostragem. #64842 (Unalian).
  • Removida a marcação de allow_experimental_join_condition como importante. Essa marcação pode ter impedido a execução bem-sucedida de consultas distribuídas em um cluster com versões mistas. #65008 (Nikita Mikhaylov).
  • Adicionadas métricas assíncronas do servidor DiskGetObjectThrottler* e DiskGetObjectThrottler*, que refletem o limite de taxa de solicitações por segundo definido pelas configurações de disco s3_max_get_rps e s3_max_put_rps, bem como a quantidade de solicitações atualmente disponível que ainda pode ser enviada sem atingir o limite de throttling do disco. As métricas são definidas para cada disco com um limite configurado. #65050 (Sergei Trifonov).
  • Inicializado o coletor global de traces para Poco::ThreadPool (necessário para Keeper, etc.). #65239 (Kseniia Sumarokova).
  • Adicionada uma validação ao criar um usuário com bcrypt_hash. #65242 (Raúl Marín).
  • Adiciona eventos de profile para o número de linhas lidas durante/após PREWHERE. #64198 (Nikita Taranov).
  • Exibe a consulta no EXPLAIN PLAN com réplicas paralelas. #64298 (vdimir).
  • Renomeado allow_deprecated_functions para allow_deprecated_error_prone_window_functions. #64358 (Raúl Marín).
  • Respeitar a configuração max_read_buffer_size também para descritores de arquivo na função de tabela file. #64532 (Azat Khuzhin).
  • Desabilita transações para mecanismos de armazenamento sem suporte, mesmo para visões materializadas. #64918 (alesapin).
  • Proibir a cláusula QUALIFY no analisador antigo. Como o analisador antigo ignorava QUALIFY, isso podia levar à remoção inesperada de dados em mutações. #65356 (Dmitry Novik).

Correção de bug (comportamento incorreto perceptível ao usuário em uma versão estável oficial)

  • Um bug na biblioteca Apache ORC foi corrigido: corrigido o cálculo das estatísticas do ORC durante a gravação para tipos sem sinal em todas as plataformas e para Int8 em ARM. #64563 (Michael Kolupaev).
  • Restaurado o comportamento original de como o ClickHouse funciona e interpreta Tuples no formato CSV. Essa mudança efetivamente reverte https://github.com/ClickHouse/ClickHouse/pull/60994 e o disponibiliza apenas sob algumas configurações: output_format_csv_serialize_tuple_into_separate_columns, input_format_csv_deserialize_separate_columns_into_tuple e input_format_csv_try_infer_strings_from_quoted_tuples. #65170 (Nikita Mikhaylov).
  • Corrige um erro de permissão em que, em uma situação específica, um usuário pode elevar seus privilégios no banco de dados padrão sem as grants necessárias. #64769 (pufit).
  • Corrigida falha com UniqInjectiveFunctionsEliminationPass e uniqCombined. #65188 (Raúl Marín).
  • Corrige um bug no ClickHouse Keeper que causa divergência de digest durante o encerramento da sessão. #65198 (Aleksei Filatov).
  • Use o alinhamento de memória correto para o combinator Distinct. Antes, podia ocorrer uma falha devido a uma alocação de memória inválida quando o combinator era usado. #65379 (Antonio Andelic).
  • Corrigida falha ao usar DISTINCT e funções de janela. #64767 (Igor Nikonov).
  • Corrigido o problema em que o índice de omissão ‘set’ não funcionava com IN e indexHint(). #62083 (Michael Kolupaev).
  • Adicionado suporte à execução de funções ao atribuir valores a views parametrizadas. #63502 (SmitaRKulkarni).
  • Corrigido o rastreamento de memória do Parquet. #63584 (Michael Kolupaev).
  • Corrigida a leitura de colunas do tipo Tuple(Map(LowCardinality(String), String), ...). #63956 (Anton Popov).
  • Corrige o erro Cyclic aliases em aliases cíclicos de tipos diferentes (expressão e função). #63993 (Nikolai Kochetov).
  • Essa correção usará um contexto redefinido corretamente, com o definidor adequado para cada view individual no pipeline da consulta. #64079 (pufit).
  • Correção no analyzer: o erro “coluna não encontrada” ao usar INTERPOLATE foi corrigido. #64096 (Yakov Olkhovskiy).
  • Corrige a criação de backups em buckets do S3 com credenciais diferentes das usadas no disco que contém o arquivo. #64153 (Antonio Andelic).
  • O cache de consultas agora considera duas consultas idênticas em bancos de dados diferentes como distintas. O comportamento anterior podia ser usado para contornar a ausência de privilégios para ler de uma tabela. #64199 (Robert Schulze).
  • Corrige uma possível interrupção causada por uma exceção não capturada em ~WriteBufferFromFileDescriptor no StatusFile. #64206 (Kruglov Pavel).
  • Corrige o erro duplicate alias em consultas distribuídas com ARRAY JOIN. #64226 (Nikolai Kochetov).
  • Corrige o accurateCast inesperado de string para inteiro. #64255 (wudidapaopao).
  • Corrigida a simplificação de CNF quando algum grupo OR contém átomos mutuamente exclusivos. #64256 (Eduard Karacharov).
  • Corrigida a validação do tamanho da Query Tree. #64377 (Dmitry Novik).
  • Corrigido o Logical error: Bad cast na tabela Buffer com PREWHERE. #64388 (Nikolai Kochetov).
  • Evitar logging recursivo em blob_storage_log quando armazenado em armazenamento de objetos. #64393 (vdimir).
  • Corrigidas as consultas CREATE TABLE AS para tabelas com expressões padrão. #64455 (Anton Popov).
  • Corrigido o comportamento de optimize_read_in_order para ORDER BY … NULLS FIRST / LAST em tabelas com chaves Nullable. #64483 (Eduard Karacharov).
  • Corrige os erros Expression nodes list expected 1 projection names e Unknown expression or identifier em consultas que usam aliases para GLOBAL IN.. #64517 (Nikolai Kochetov).
  • Corrige um erro Cannot find column em consultas distribuídas com CTE constante na chave de GROUP BY. #64519 (Nikolai Kochetov).
  • Corrigido o loop de falhas quando a restauração de backup é bloqueada pela criação de uma MV com um definidor que ainda não foi restaurado. #64595 (pufit).
  • Corrige a saída da função formatDateTimeInJodaSyntax quando um formatter gera uma quantidade ímpar de caracteres e o último caractere é 0. Por exemplo, SELECT formatDateTimeInJodaSyntax(toDate('2012-05-29'), 'D') agora retorna corretamente 150, em vez de 15 como antes. #64614 (LiuNeng).
  • Não reescreva a agregação se o combinador -If já estiver sendo usado. #64638 (Dmitry Novik).
  • Corrige a inferência de tipo de float (no caso de buffer pequeno, ou seja, --max_read_buffer_size 1). #64641 (Azat Khuzhin).
  • Corrigido um bug que poderia fazer com que TTLs com expressões deixassem de funcionar. #64694 (alesapin).
  • Corrigida a remoção das expressões WHERE e PREWHERE que são sempre verdadeiras (no novo analisador). #64695 (Nikolai Kochetov).
  • Corrigida a eliminação excessiva de partes causada por índices de texto baseados em tokens (ngrambf , full_text) ao filtrar com base no resultado de startsWith, endsWith, match, multiSearchAny. #64720 (Eduard Karacharov).
  • Corrige o comportamento incorreto no escapamento ANSI CSI na função UTF8::computeWidth. #64756 (Shaun Struwig).
  • Corrige um caso de remoção indevida de ORDER BY / LIMIT BY em subconsultas. #64766 (Raúl Marín).
  • Correção (experimental) de JOIN desigual com subconsultas para conjuntos presentes nas condições mistas de JOIN. #64775 (lgbo).
  • Corrige um travamento em um cache local no disco plain_rewritable. #64778 (Julia Kartseva).
  • Correção no Keeper: retorna o valor correto para zk_latest_snapshot_size no comando mntr. #64784 (Antonio Andelic).
  • Corrigido Cannot find column em consulta distribuída com ARRAY JOIN ao usar a coluna Nested. Corrige #64755. #64801 (Nikolai Kochetov).
  • Corrigido um vazamento de memória na política de cache SLRU. #64803 (Kseniia Sumarokova).
  • Corrigida uma possível contabilização incorreta de memória em vários tipos de consultas: consultas que leem dados do S3, consultas via protocolo HTTP, inserts assíncronos. #64844 (Anton Popov).
  • Corrige o erro Block structure mismatch em consultas que leem da visão materializada com PREWHERE quando a visão materializada tem colunas de tipos diferentes da tabela de origem. Corrige #64611. #64855 (Nikolai Kochetov).
  • Corrige um travamento raro quando a tabela tem TTL com subconsulta + banco de dados replicado + réplicas paralelas + analyzer. É realmente muito raro, mas, por favor, não use TTLs com subconsultas. #64858 (alesapin).
  • Corrige a duplicação de eventos Delete em blob_storage_log no caso de um lote grande de exclusão. #64924 (vdimir).
  • Corrigido o erro Session moved to another server do [Zoo]Keeper, que podia ocorrer após a inicialização do servidor quando a configuração continha includes do [Zoo]Keeper. #64986 (Alexander Tokmakov).
  • Corrige a consulta ALTER MODIFY COMMENT, que estava com problema em VIEWs parametrizadas, em https://github.com/ClickHouse/ClickHouse/pull/54211. #65031 (Nikolay Degterinsky).
  • Corrige o host_id no DatabaseReplicated quando o parâmetro cluster_secure_connection está habilitado. Antes, todas as conexões dentro do cluster criadas pelo DatabaseReplicated não eram seguras, mesmo com o parâmetro habilitado. #65054 (Nikolay Degterinsky).
  • Correção do erro Not-ready Set após a otimização PREWHERE no StorageMerge. #65057 (Nikolai Kochetov).
  • Evite gravar em um buffer já finalizado em armazenamentos do tipo File. #65063 (Kruglov Pavel).
  • Corrige a possível duração infinita de consulta no caso de aliases cíclicos. Corrige #64849. #65081 (Nikolai Kochetov).
  • Corrige o erro Unknown expression identifier em consultas remotas com INTERPOLATE (alias) (novo analisador). Corrige #64636. #65090 (Nikolai Kochetov).
  • Corrigido o problema ao mover operações aritméticas para fora da agregação. No novo analisador, a otimização era aplicada apenas uma vez. #65104 (Dmitry Novik).
  • Corrigida a reescrita do nome da função de agregação no novo analisador. #65110 (Dmitry Novik).
  • Responder com 5xx em vez de 200 OK em caso de timeout de recebimento ao ler (partes de) o corpo da solicitação do socket do cliente. #65118 (Julian Maicher).
  • Corrige possível travamento em requisições hedged. #65206 (Azat Khuzhin).
  • Corrige o bug na avaliação de curto-circuito dos dicionários Hashed e Hashed_Array, que pode ler um número não inicializado e causar vários erros. #65256 (jsc0218).
  • Este PR garante que o tipo da constante (o segundo parâmetro do operador IN) permaneça sempre visível durante o processo de conversão de tipos do operador IN. Caso contrário, a perda de informações de tipo pode fazer com que algumas conversões falhem, como a conversão de DateTime para Date. Isso corrige (#64487). #65315 (pn).

melhoria em compilação/testes/empacotamento

  • Adicionado suporte ao LLVM XRay. #64592 #64837 (Tomer Shafir).
  • Unificadas as implementações de armazenamento s3/hdfs/azure em uma única classe que funciona com IObjectStorage. O mesmo vale para os armazenamentos *Cluster, lago de dados e Queue. #59767 (Kseniia Sumarokova).
  • Refatorado o gravador de data part para remover dependências de MergeTreeData e DataPart. #63620 (Alexander Gololobov).
  • Refatorados KeyCondition e a análise de key para melhorar o PartitionPruner e a otimização de contagem trivial. Isso foi separado de #60463. #61459 (Amos Bird).
  • Introduzidas asserções para verificar se todas as funções são chamadas com colunas do tamanho correto. #63723 (Raúl Marín).
  • O serviço network passa a ser obrigatório ao usar o script de init rc para iniciar o daemon do servidor ClickHouse. #60650 (Chun-Sheng, Li).
  • Reduzido o tamanho de alguns testes lentos. #64387 #64452 (Raúl Marín).
  • Reprodução de logs do ZooKeeper usando keeper-bench. #62481 (Antonio Andelic).

lançamento do ClickHouse 24.5, 2024-05-30. Apresentação, Vídeo

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

  • “inverted indexes” foram renomeados para “full-text indexes”, um nome menos técnico e mais amigável para o usuário. Isso também altera os metadados internos da tabela e torna incompatíveis as tabelas com inverted indexes (experimentais) já existentes. Certifique-se de remover esses índices antes da atualização e recriá-los após a atualização. #62884 (Robert Schulze).
  • O uso das funções neighbor, runningAccumulate, runningDifferenceStartingWithFirstValue e runningDifference foi descontinuado (por ser propenso a erros). Em vez disso, devem ser usadas window functions adequadas. Para reativá-las, defina allow_deprecated_error_prone_window_functions = 1 ou compatibility = '24.4' ou inferior. #63132 (Nikita Taranov).
  • As consultas em system.columns funcionarão mais rapidamente quando houver um grande número de colunas, mas muitos bancos de dados ou tabelas não tiverem a permissão SHOW TABLES concedida. Observe que, em versões anteriores, se você concedesse SHOW COLUMNS a colunas individuais sem conceder SHOW TABLES às tabelas correspondentes, a tabela system.columns mostraria essas colunas; na nova versão, porém, ela ignorará a tabela por completo. Também foram removidas as mensagens de log de trace “Access granted” e “Access denied”, que deixavam as consultas mais lentas. #63439 (Alexey Milovidov).

Novo recurso

  • Adiciona o formato Form para ler e gravar um único registro no formato application/x-www-form-urlencoded. #60199 (Shaun Struwig).
  • Adicionada a possibilidade de usar compressão em CROSS JOIN. #60459 (p1rattttt).
  • Adicionada a possibilidade de fazer CROSS JOIN usando arquivos temporários se o tamanho exceder os limites. #63432 (p1rattttt).
  • Suporte a join com condições de desigualdade envolvendo colunas tanto da tabela à esquerda quanto da tabela à direita. Ex.: t1.y < t2.y. Para habilitar, SET allow_experimental_join_condition = 1. #60920 (lgbo).
  • Maps agora podem usar Float32, Float64, Array(T), Map(K, V) e Tuple(T1, T2, ...) como chaves. Fecha #54537. #59318 (李扬).
  • Introduz o carregamento em massa no EmbeddedRocksDB por meio da criação e ingestão de arquivo SST, em vez de depender da memtable interna do rocksdb. Isso ajuda a aumentar a velocidade de importação, especialmente para consultas insert de longa duração em tabelas StorageEmbeddedRocksDB. Além disso, adiciona configurações de tabela para o EmbeddedRocksDB. #59163 #63324 (Duc Canh Le).
  • Agora, é possível processar CRLF no formato TSV usando a configuração input_format_tsv_crlf_end_of_line. Fecha #56257. #59747 (Shaun Struwig).
  • Uma nova configuração input_format_force_null_for_omitted_fields que força valores NULL para campos ausentes. #60887 (Constantine Peresypkin).
  • Antes, nosso armazenamento S3 e a função de tabela S3 não ofereciam suporte à seleção a partir de arquivos compactados, como tarballs, zip e 7z. Agora, eles permitem iterar pelos arquivos dentro desses arquivos no S3. #62259 (Daniil Ivanik).
  • Suporte à função condicional clamp. #62377 (skyoct).
  • Adicionado o formato de saída NPy. #62430 (豪肥肥).
  • Formato Raw como sinônimo de TSVRaw. #63394 (Unalian).
  • Adicionada uma nova função SQL generateUUIDv7 para gerar UUIDs versão 7, também conhecidos como UUIDs baseados em timestamp com componente aleatório. Também foi adicionada a função UUIDToNum para extrair bytes de um UUID e a função UUIDv7ToDateTime para extrair o componente de timestamp de um UUID versão 7. #62852 (Alexey Petrunyaka).
  • No Linux e no MacOS, se o programa tiver o stdout redirecionado para um arquivo com uma extensão de compressão, use o método de compressão correspondente em vez de não usar nenhum (fazendo com que ele se comporte de forma semelhante a INTO OUTFILE). #63662 (v01dXYZ).
  • Alterado o aviso para um alto número de tabelas anexadas, a fim de diferenciar tabelas, views e dicionários. #64180 (Francisco J. Jurado Moreno).
  • Adiciona suporte à função azureBlobStorage no servidor ClickHouse para usar o Azure Workload Identity na autenticação com o Azure blob storage. Se o parâmetro use_workload_identity estiver definido na configuração, a Workload Identity será usada para autenticação. #57881 (Vinay Suryadevara).
  • Adiciona informações de TTL à tabela system.parts_columns. #63200 (litlig).

Recursos experimentais

  • Implementado o tipo de dados Dynamic, que permite armazenar valores de qualquer tipo sem conhecê-los todos antecipadamente. O tipo Dynamic está disponível na configuração allow_experimental_dynamic_type. Referência: #54864. #63058 (Kruglov Pavel).
  • Passou a ser permitido criar um banco de dados MaterializedMySQL sem conexão com o MySQL. #63397 (Kirill).
  • Uma réplica de um banco de dados Replicated passa a ser marcada automaticamente como perdida, e a recuperação é iniciada se alguma tarefa DDL falhar mais de max_retries_before_automatic_recovery (100 por padrão) vezes seguidas com o mesmo erro. Além disso, foi corrigido um bug que podia fazer com que entradas DDL fossem ignoradas quando uma exceção é lançada em um estágio inicial da execução da entrada. #63549 (Alexander Tokmakov).
  • Passam a ser considerados arquivos com falha em s3queue_tracked_file_ttl_sec e s3queue_traked_files_limit para StorageS3Queue. #63638 (Kseniia Sumarokova).

Melhoria de desempenho

  • Menos contenção no cache do sistema de arquivos (parte 4). Permite manter o cache do sistema de arquivos sem preenchê-lo até o limite, fazendo descarte adicional em segundo plano (controlado por keep_free_space_size(elements)_ratio). Isso ajuda a aliviar a pressão da reserva de espaço para consultas (no método tryReserve). Além disso, isso é feito de forma lock-free sempre que possível, ou seja, sem bloquear o uso normal do cache. #61250 (Kseniia Sumarokova).
  • Ignora a mesclagem de blocos de projeção recém-criados durante INSERT-s. #59405 (Nikita Taranov).
  • Processa funções de string ...UTF8 de forma ASCII quando as strings de entrada contêm apenas caracteres ASCII. Inspirado em https://github.com/apache/doris/pull/29799. Ganho geral de desempenho de 1.07x~1.62x. Observe que o pico de uso de memória diminuiu em alguns casos. #61632 (李扬).
  • Desempenho aprimorado dos globs de seleção ({}) no StorageS3. #62120 (Andrey Zvonov).
  • O HostResolver contém cada endereço IP várias vezes. Se o host remoto tiver vários IPs e, por algum motivo (regras de firewall, por exemplo), o acesso a alguns IPs for permitido e a outros proibido, então apenas o primeiro registro dos IPs proibidos será marcado como com falha, e, a cada tentativa, esses IPs poderão ser escolhidos novamente (e falhar de novo). Mesmo com essa correção, a cada 120 segundos o cache de DNS é descartado, e os IPs podem voltar a ser escolhidos. #62652 (Anton Ivashkin).
  • Adiciona uma nova configuração prefer_merge_sort_block_bytes para controlar o uso de memória e dobrar a velocidade da ordenação durante a mesclagem quando há muitas colunas. #62904 (LiuNeng).
  • clickhouse-local iniciará mais rápido. Em versões anteriores, por engano, ele não excluía diretórios temporários. Agora, vai excluí-los. Isso fecha #62941. #63074 (Alexey Milovidov).
  • Micro-otimizações para o novo analisador. #63429 (Raúl Marín).
  • A análise de índices passará a funcionar quando DateTime for comparado com DateTime64. Isso fecha #63441. #63443 #63532 (Alexey Milovidov).
  • Acelera um pouco os índices do tipo set (cerca de 1,5 vez) removendo lixo. #64098 (Alexey Milovidov).
  • Remove a cópia de dados ao gravar no cache do sistema de arquivos. #63401 (Kseniia Sumarokova).
  • Agora os backups com Azure blob storage usarão multicopy. #64116 (alesapin).
  • Permite usar cópia nativa no Azure mesmo com containers diferentes. #64154 (alesapin).
  • Finalmente habilita a cópia nativa no Azure. #64182 (alesapin).

Melhoria

  • Permite usar clickhouse-local e seus atalhos clickhouse e ch com uma consulta ou um arquivo de consultas como argumento posicional. Exemplos: ch "SELECT 1", ch --param_test Hello "SELECT {test:String}", ch query.sql. Isso resolve #62361. #63081 (Alexey Milovidov).
  • Habilitar metadados plain_rewritable para armazenamentos de objetos locais e do Azure (azure_blob_storage). #63365 (Julia Kartseva).
  • Suporte a aspas Unicode no estilo do inglês, por exemplo, “Hello”, ‘world’. Isso é questionável em geral, mas útil quando você digita sua consulta em um editor de texto, como o Google Docs. Isso encerra #58634. #63381 (Alexey Milovidov).
  • Permitir vírgulas finais na lista de colunas da consulta INSERT. Por exemplo, INSERT INTO test (a, b, c, ) VALUES .... #63803 (Alexey Milovidov).
  • Mensagens de exceção melhores para o formato Regexp. #63804 (Alexey Milovidov).
  • Permite vírgulas à direita no formato Values. Por exemplo, esta consulta é permitida: INSERT INTO test (a, b, c) VALUES (4, 5, 6,);. #63810 (Alexey Milovidov).
  • Faz com que o RabbitMQ aplique nack a mensagens corrompidas. Fecha #45350. #60312 (Kseniia Sumarokova).
  • Corrige um travamento no desenrolamento assíncrono da pilha (como ao usar o profiler de consulta por amostragem) durante a interpretação de informações de depuração. Isso fecha #60460. #60468 (Alexey Milovidov).
  • Mensagens distintas para o erro do S3 ‘no key’ nos casos de disco e de armazenamento. #61108 (Sema Checherinda).
  • A barra de progresso passará a funcionar para queries triviais com LIMIT de system.zeros, system.zeros_mt (ela já funciona para system.numbers e system.numbers_mt) e para a table function generateRandom. Como bônus, se o número total de registros for maior que o limite max_rows_to_read, ela lançará uma exceção mais cedo. Isso fecha #58183. #61823 (Alexey Milovidov).
  • Suporte a “Merge Key” em configurações YAML (este é um recurso estranho do YAML, por favor, desconsidere). #62685 (Azat Khuzhin).
  • Melhora a mensagem de erro quando uma função não determinística é usada com a origem Replicated. #62896 (Grégoire Pineau).
  • Corrige o segredo entre servidores para Distributed sobre Distributed a partir de remote. #63013 (Azat Khuzhin).
  • Suporte a include_from para arquivos YAML. No entanto, é preferível usar config.d #63106 (Eduard Karacharov).
  • Manter os dados anteriores no terminal após escolher uma das sugestões do skim. #63261 (FlameFactory).
  • A largura dos campos (nos formatos Pretty ou na função visibleWidth) agora passa a ignorar corretamente as sequências de escape ANSI. #63270 (Shaun Struwig).
  • Atualizado o uso do código de erro NUMBER_OF_ARGUMENTS_DOESNT_MATCH para códigos de erro mais precisos, quando apropriado. #63406 (Yohann Jardin).
  • os_user e client_hostname agora são configurados corretamente para consultas usadas nas sugestões de linha de comando no clickhouse-client. Isso fecha #63430. #63433 (Alexey Milovidov).
  • Corrige automaticamente max_block_size para o valor padrão caso seja zero. #63587 (Antonio Andelic).
  • Adiciona uma coluna build_id ALIAS a trace_log para facilitar a renomeação automática ao detectar alterações no binário. Isso visa corrigir #52086. #63656 (Zimu Li).
  • Habilitada a operação TRUNCATE para discos de armazenamento de objetos. #63693 (MikhailBurdukov).
  • O carregamento da lista de palavras-chave agora depende da revisão do servidor e será desabilitado para versões mais antigas do servidor ClickHouse. CC @azat. #63786 (Nikita Mikhaylov).
  • Os discos do ClickHouse precisam ler a configuração do servidor para obter a versão efetiva do formato dos metadados. #63831 (Sema Checherinda).
  • Desabilite as restrições do formato Pretty (output_format_pretty_max_rows/output_format_pretty_max_value_width) quando stdout não for TTY. #63942 (Azat Khuzhin).
  • O tratamento de exceções agora funciona quando o ClickHouse é usado no AWS Lambda. Autor: Alexey Coolnev. #64014 (Alexey Milovidov).
  • Lançar CANNOT_DECOMPRESS em vez de CORRUPTED_DATA quando dados compactados inválidos forem enviados via HTTP. #64036 (vdimir).
  • Uma dica para um único número grande nos formatos Pretty agora funciona com Nullable e LowCardinality. Isso encerra #61993. #64084 (Alexey Milovidov).
  • Adicionadas métricas, logs e nomes de thread na filtragem de partes com índices. #64130 (Alexey Milovidov).
  • Ignorar allow_suspicious_primary_key no ATTACH e verificar no ALTER. #64202 (Azat Khuzhin).

melhoria em compilação/testes/empacotamento

Correção de erro

Lançamento do ClickHouse 24.4, 2024-04-30. Apresentação, Vídeo

Notas de atualização

  • clickhouse-odbc-bridge e clickhouse-library-bridge agora são pacotes separados. Isso corrige #61677. #62114 (Alexey Milovidov).
  • Não é mais permitido definir max_parallel_replicas (para a leitura paralela experimental a partir de réplicas) como 0, pois isso não faz sentido. Corrige #60140. #61201 (Kruglov Pavel).
  • Removido o suporte à consulta INSERT WATCH (parte do recurso LIVE VIEW, agora descontinuado). #62382 (Alexey Milovidov).
  • Removida a configuração optimize_monotonous_functions_in_order_by. #63004 (Raúl Marín).
  • A tag experimental foi removida do engine de banco de dados Replicated. Agora ele está em Beta. #62937 (Justin de Guzman).

Novo recurso

  • Suporte a CTEs recursivas. #62074 (Maksim Kita).
  • Suporte à cláusula QUALIFY. Fecha #47819. #62619 (Maksim Kita).
  • Agora é possível conceder grants em motores de tabela, sem afetar o comportamento dos usuários existentes. #60117 (jsc0218).
  • Foi adicionado um disco S3 regravável com suporte a operações INSERT e que não requer metadados armazenados localmente. #61116 (Julia Kartseva). O principal caso de uso é para tabelas de sistema.
  • O realce de sintaxe durante a digitação no cliente passará a funcionar no nível da sintaxe (antes, funcionava no nível do lexer). #62123 (Alexey Milovidov).
  • Passa a ser possível remover várias tabelas ao mesmo tempo, como em DROP TABLE a, b, c;. #58705 (zhongyuankai).
  • Agora há suporte para modificar as configurações da tabela Memory por meio de ALTER MODIFY SETTING. Exemplo: ALTER TABLE memory MODIFY SETTING min_rows_to_keep = 100, max_rows_to_keep = 1000;. #62039 (zhongyuankai).
  • Foi adicionado o parâmetro de consulta role à interface HTTP. Ele funciona de forma semelhante a SET ROLE x, aplicando a role antes de a instrução ser executada. Isso permite contornar uma limitação da interface HTTP, já que múltiplas instruções não são permitidas e não é possível enviar SET ROLE x e a própria instrução ao mesmo tempo. Também é possível definir várias roles dessa forma, por exemplo, ?role=x&role=y, o que equivale a SET ROLE x, y. #62669 (Serge Klochkov).
  • Adiciona SYSTEM UNLOAD PRIMARY KEY para liberar memória usada pela chave primária de uma tabela. #62738 (Pablo Marcos).
  • Foram adicionadas as colunas value1, value2, …, value10 a system.text_log. Essas colunas contêm os valores usados para formatar a mensagem. #59619 (Alexey Katsman).
  • Foi adicionada a coluna virtual persistente _block_offset, que armazena o número original da linha no bloco atribuído no momento do insert. A persistência da coluna _block_offset pode ser habilitada pela configuração do MergeTree enable_block_offset_column. Foi adicionada a coluna virtual _part_data_version, que contém o número mínimo do bloco ou a versão de mutação da parte. A coluna virtual persistente _block_number não é mais considerada experimental. #60676 (Anton Popov).
  • Adiciona a configuração input_format_json_throw_on_bad_escape_sequence; desabilitá-la permite salvar sequências de escape inválidas em formatos de entrada JSON. #61889 (Kruglov Pavel).

Melhorias de desempenho

  • Melhorias no pushdown de filtros em JOIN usando conjuntos equivalentes. #61216 (Maksim Kita).
  • Otimização que converte OUTER JOIN em INNER JOIN se o filtro após o JOIN sempre filtrar valores padrão. A otimização pode ser controlada pela configuração query_plan_convert_outer_join_to_inner_join, ativada por padrão. #62907 (Maksim Kita).
  • Melhoria para AWS S3. O cliente precisa enviar o cabeçalho ‘Keep-Alive: timeout=X’ ao servidor. Se o cliente receber uma resposta do servidor com esse cabeçalho, deverá usar o valor fornecido pelo servidor. Além disso, é melhor que o cliente não use uma conexão prestes a expirar, para evitar uma condição de corrida no fechamento da conexão. #62249 (Sema Checherinda).
  • Reduz a sobrecarga das mutações em SELECTs (v2). #60856 (Azat Khuzhin).
  • As funções mais frequentemente invocadas em PODArray agora passam por inline forçado. #61144 (李扬).
  • Acelera o parsing de JSON ao ignorar o restante do objeto quando todas as colunas necessárias já tiverem sido lidas. #62210 (lgbo).
  • Melhora o insert select trivial de arquivos usando as table functions file/s3/hdfs/url/… Adiciona a configuração separada max_parsing_threads para controlar o número de threads usadas no parsing paralelo. #62404 (Kruglov Pavel).
  • As funções to_utc_timestamp e from_utc_timestamp agora são cerca de 2x mais rápidas. #62583 (KevinyhZou).
  • As funções parseDateTimeOrNull, parseDateTimeOrZero, parseDateTimeInJodaSyntaxOrNull e parseDateTimeInJodaSyntaxOrZero agora executam significativamente mais rápido (10x - 1000x) quando a entrada contém principalmente valores que não podem ser interpretados. #62634 (LiuNeng).
  • As consultas SELECT em system.query_cache agora estão visivelmente mais rápidas quando o cache de consultas contém muitas entradas (por exemplo, mais de 100.000). #62671 (Robert Schulze).
  • Menos contenção no cache do sistema de arquivos (parte 3): executar a remoção no sistema de arquivos sem bloqueio na tentativa de reserva de espaço. #61163 (Kseniia Sumarokova).
  • Acelera o redimensionamento dinâmico do cache do sistema de arquivos. #61723 (Kseniia Sumarokova).
  • A fonte do dicionário com INVALIDATE_QUERY não é recarregada duas vezes na inicialização. #62050 (vdimir).
  • Corrige um problema em que, quando um = 1 ou = 0 redundante é adicionado após uma expressão booleana envolvendo a chave primária, o índice primário deixa de ser usado. Por exemplo, tanto SELECT * FROM <table> WHERE <primary-key> IN (<value>) = 1 quanto SELECT * FROM <table> WHERE <primary-key> NOT IN (<value>) = 0 acabam fazendo uma varredura completa da tabela, embora o índice primário pudesse ser usado. #62142 (josh-hildred).
  • Retorna um fluxo de fragmentos de system.remote_data_paths em vez de acumular todo o resultado em um único fragmento grande. Isso permite consumir menos memória, mostrar o progresso intermediário e cancelar a consulta. #62613 (Alexander Gololobov).

Funcionalidade Experimental

  • Suporte a buffer de gravação paralelo para o Azure Blob Storage, controlado pela configuração azure_allow_parallel_part_upload. #62534 (SmitaRKulkarni).
  • O cache de páginas em espaço de usuário agora funciona com armazenamento web estático (disk(type = web)). Use a configuração do cliente use_page_cache_for_disks_without_file_cache=1 para habilitar. #61911 (Michael Kolupaev).
  • Não tratar Bool e variantes numéricas como suspeitos no tipo Variant. #61999 (Kruglov Pavel).
  • Implementar uma conversão aprimorada de String para Variant usando parsing. #62005 (Kruglov Pavel).
  • Suporte a Variant nas funções JSONExtract. #62014 (Kruglov Pavel).
  • Marcar o tipo Variant como comparável para que possa ser usado na chave primária. #62693 (Kruglov Pavel).

Melhoria

  • Por conveniência, SELECT * FROM numbers() funcionará da mesma forma que SELECT * FROM system.numbers — sem limite. #61969 (YenchangChan).
  • Introduz tags separadas para consumer e producer na configuração do Kafka. Isso evita avisos do librdkafka (uma biblioteca C ruim, com muitos bugs) de que propriedades de consumer foram especificadas para instâncias de producer e vice-versa (por exemplo, Configuration property session.timeout.ms is a consumer property and will be ignored by this producer instance). Fecha: #58983. #58956 (Aleksandr Musorin).
  • As funções date_diff e age agora calculam seus resultados com precisão de nanossegundos em vez de microssegundos. Elas também passam a oferecer nanosecond (ou nanoseconds ou ns) como um valor possível para o parâmetro unit. #61409 (Austin Kothig).
  • Adicionadas as unidades de nano-, micro- e milissegundos para date_trunc. #62335 (Misz606).
  • Recarrega a cadeia de certificados ao recarregar o certificado. #61671 (Pervakov Grigorii).
  • Tentar evitar o erro #60432 impedindo que uma tabela seja anexada caso exista uma réplica ativa para esse caminho da réplica. #61876 (Arthur Passos).
  • Adicionado suporte a input para clickhouse-local. #61923 (Azat Khuzhin).
  • O mecanismo de tabela Join com strictness ANY passa a ser consistente após a recarga. Quando várias linhas com a mesma chave são inseridas, a primeira terá maior prioridade (antes, ela era escolhida aleatoriamente durante o carregamento da tabela). fecha #51027. #61972 (vdimir).
  • Inferência automática de tipos de coluna Nullable a partir do esquema do Apache Arrow. #61984 (Maksim Kita).
  • Permite cancelar a mesclagem paralela de estados de agregação durante a agregação. Exemplo: uniqExact. #61992 (Maksim Kita).
  • Use system.keywords para preencher as sugestões e também para usá-las internamente em todos os lugares. #62000 (Nikita Mikhaylov).
  • OPTIMIZE FINAL para ReplicatedMergeTree agora aguardará a conclusão das mesclagens atualmente ativas e, em seguida, tentará novamente agendar uma mesclagem final. Isso o deixará mais alinhado ao comportamento padrão do MergeTree. #62067 (Nikita Taranov).
  • Ao ler dados de um arquivo de texto do Hive, era usada a primeira linha do arquivo para ajustar a quantidade de campos de entrada, e às vezes a quantidade de campos da primeira linha não correspondia ao que estava definido na tabela Hive. Por exemplo, a tabela Hive é definida com 3 colunas, como test_tbl(a Int32, b Int32, c Int32), mas a primeira linha do arquivo de texto tem apenas 2 campos. Nessa situação, os campos de entrada são ajustados para 2 e, se a próxima linha do arquivo de texto tiver 3 campos, o terceiro campo não poderá ser lido e receberá o valor padrão 0, o que está incorreto. #62086 (KevinyhZou).
  • CREATE AS copia o comentário da tabela. #62117 (Pablo Marcos).
  • Adicionar progresso da consulta à tabela zookeeper. #62152 (JackyWoo).
  • Adicionada a capacidade de ativar o coletor de traces (Real e CPU) no servidor inteiro. #62189 (alesapin).
  • Adicionada a configuração lightweight_deletes_sync (valor padrão: 2 - aguarda todas as réplicas de forma síncrona). Ela é semelhante à configuração mutations_sync, mas afeta apenas o comportamento das exclusões leves. #62195 (Anton Popov).
  • Diferencia booleanos de inteiros ao analisar valores para configurações personalizadas: SET custom_a = true; SET custom_b = 1;. #62206 (Vitaly Baranov).
  • Adiciona suporte ao acesso ao S3 por meio de endpoints de interface do AWS Private Link. Fecha #60021, #31074 e #53761. #62208 (Arthur Passos).
  • Não crie um diretório para UDF no clickhouse-client se ele não existir. Isso resolve #59597. #62366 (Alexey Milovidov).
  • O cache de consultas agora não armazena mais os resultados de consultas em tabelas de sistema (system.*, information_schema.*, INFORMATION_SCHEMA.*). #62376 (Robert Schulze).
  • A consulta MOVE PARTITION TO TABLE pode ser atrasada ou lançar a exceção TOO_MANY_PARTS para evitar exceder os limites para a contagem de partes. Aplicam-se as mesmas configurações e limites da consulta INSERT (consulte as configurações max_parts_in_total, parts_to_delay_insert, parts_to_throw_insert, inactive_parts_to_throw_insert, inactive_parts_to_delay_insert, max_avg_part_size_for_too_many_parts, min_delay_to_insert_ms e max_delay_to_insert). #62420 (Sergei Trifonov).
  • O diretório de instalação padrão no macOS foi alterado de /usr/bin para /usr/local/bin. Isso é necessário porque a Proteção de Integridade do Sistema da Apple, introduzida com o macOS El Capitan (2015), impede a gravação em /usr/bin, mesmo com sudo. #62489 (haohang).
  • Faz com que transform sempre retorne a primeira correspondência. #62518 (Raúl Marín).
  • Adicionada a coluna hostname que faltava na tabela de sistema blob_storage_log. #62456 (Jayme Bird).
  • Para manter a consistência com outras tabelas do sistema, system.backup_log agora tem uma coluna event_time. #62541 (Jayme Bird).
  • A tabela system.backup_log agora usa a chave de ordenação “padrão”, event_date, event_time, a mesma dos demais motores de tabela _log. #62667 (Nikita Mikhaylov).
  • Evita a avaliação de expressões DEFAULT de tabelas durante a execução de RESTORE. #62601 (Vitaly Baranov).
  • O armazenamento S3 e os backups também precisam das mesmas configurações padrão de keep alive usadas no disco S3. #62648 (Sema Checherinda).
  • Adiciona o identificador do cliente do librdkafka (aquela infame biblioteca em C, que tem muitos bugs) às mensagens de log para permitir diferenciar as mensagens de log de diferentes consumidores de uma única tabela. #62813 (János Benjamin Antal).
  • Permitir macros especiais {uuid} e {database} em um caminho do ZooKeeper para um banco de dados Replicated. #62818 (Vitaly Baranov).
  • Permitir que a chave de quota use um esquema de autenticação diferente em requisições HTTP. #62842 (Kseniia Sumarokova).
  • Reduza a verbosidade da saída do argumento de linha de comando --help no clickhouse client e no clickhouse local. A saída anterior agora é gerada por --help --verbose. #62973 (Yarik Briukhovetskyi).
  • log_bin_use_v1_row_events foi removido no MySQL 8.3, e ajustamos o mecanismo experimental MaterializedMySQL para essa mudança #60479. #63101 (Eugene Klimov). Autor: Nikolay Yankin.

Melhorias em compilação/testes/empacotamento

correção de bug (comportamento incorreto perceptível ao usuário em uma versão estável oficial)

  • Corrigido erro lógico ao reverter a transação de insert com quorum. #61953 (Han Fei).
  • Corrigido erro do parser ao usar COUNT(*) com a cláusula FILTER #61357 (Duc Canh Le).
  • Corrigido erro lógico em group_by_use_nulls + grouping sets + analyzer + materialize/constant #61567 (Kruglov Pavel).
  • Cancelar merges antes de remover partes movidas #61610 (János Benjamin Antal).
  • Corrige erro de abort no Apache Arrow #61720 (Kruglov Pavel).
  • Buscar a flag convert_to_replicated no caminho correto correspondente ao disco específico #61769 (Kirill).
  • Corrige uma possível condição de corrida nas conexões para distributed_foreground_insert/distributed_background_insert_batch #61867 (Azat Khuzhin).
  • Marcar o erro CANNOT_PARSE_ESCAPE_SEQUENCE como erro de parsing para que seja possível ignorá-lo em formatos de entrada por linha #61883 (Kruglov Pavel).
  • Corrigida a escrita da mensagem de exceção no formato de saída via HTTP quando http_wait_end_of_query é usado #61951 (Kruglov Pavel).
  • Correção apropriada do LowCardinality em conjunto com as funções JSONExtact #61957 (Nikita Mikhaylov).
  • Falha no Engine Merge se a Row Policy não tiver uma expressão #61971 (Ilya Golshtein).
  • Corrigida exceção não tratada no destrutor do WriteBufferAzureBlobStorage #61988 (SmitaRKulkarni).
  • Corrigido o CREATE TABLE sem definição de colunas para ReplicatedMergeTree #62040 (Azat Khuzhin).
  • Correção do optimize_skip_unused_shards_rewrite_in para chave de sharding composta #62047 (Azat Khuzhin).
  • ReadWriteBufferFromHTTP define o cabeçalho Host correto ao ser redirecionado #62068 (Sema Checherinda).
  • Correção de erro em que a tabela externa não conseguia interpretar o tipo de dado Bool #62115 (Duc Canh Le).
  • Analisador: corrige a resolução de parâmetros de consulta #62186 (Dmitry Novik).
  • Corrigida a restauração de partes em modo somente leitura #62207 (Vitaly Baranov).
  • Corrigido travamento na definição de índice contendo SQL UDF #62225 (vdimir).
  • Correção da semente aleatória NULL no generateRandom com o analisador. #62248 (Nikolai Kochetov).
  • Lidar corretamente com colunas const em Distinct Transfom #62250 (Antonio Andelic).
  • Corrigido o Parts Splitter em consultas com o modificador FINAL #62268 (Nikita Taranov).
  • Analisador: corrige a resolução de alias para view parametrizada #62274 (Dmitry Novik).
  • Analisador: corrige a resolução de nomes em escopos pai #62281 (Dmitry Novik).
  • Corrige o argMax com coluna numérica não nativa Nullable #62285 (Raúl Marín).
  • Corrige o BACKUP e o RESTORE de uma visão materializada no banco de dados Ordinary #62295 (Vitaly Baranov).
  • Corrige condição de corrida em escalares no Context #62305 (Kruglov Pavel).
  • Corrigida a chave primária em visão materializada #62319 (Murat Khairulin).
  • Não criar pipeline multithread de insert para tabelas sem suporte #62333 (vdimir).
  • Corrigido o analisador com argumentos posicionais em consulta distribuída #62362 (flynn).
  • Corrige o pushdown de filtro de additional_table_filters no engine Merge no analyzer #62398 (Kruglov Pavel).
  • Corrigidas consultas de tabela com GLOBAL IN no analisador. #62409 (Nikolai Kochetov).
  • Respeitar as configurações truncate_on_insert/create_new_file_on_insert nos motores s3/hdfs/azure durante a escrita particionada #62425 (Kruglov Pavel).
  • Corrige o caminho de restauração de backup para o AzureBlobStorage #62447 (SmitaRKulkarni).
  • Corrigido o SimpleSquashingChunksTransform #62451 (Nikita Taranov).
  • Corrigida a captura em lambda aninhada. #62462 (Nikolai Kochetov).
  • Evita travamento ao ler protobuf com tipos recursivos #62506 (Raúl Marín).
  • Corrige um bug ao mover uma partição para ela mesma #62524 (helifu).
  • Correção de subconsulta escalar em LIMIT #62567 (Nikolai Kochetov).
  • Corrige um segfault no engine Hive experimental e sem suporte, de que nem gostamos mesmo #62578 (Nikolay Degterinsky).
  • Corrigido vazamento de memória em groupArraySorted #62597 (Antonio Andelic).
  • Corrigida falha em largestTriangleThreeBuckets #62646 (Raúl Marín).
  • Corrige tumble[Start,End] e hop[Start,End] em resoluções maiores #62705 (Jordi Villar).
  • Corrige o estado do combinador argMin/argMax #62708 (Raúl Marín).
  • Corrige a falha de dados temporários no cache causada pela otimização da contenção de bloqueio do cache #62715 (Kseniia Sumarokova).
  • Corrigida falha na função mergeTreeIndex #62762 (Anton Popov).
  • correção: atualização: colunas materializadas aninhadas: correções na verificação de tamanho #62773 (Eliot Hautefeuille).
  • Correção do problema em que o modificador FINAL não é respeitado em CTE com o analisador #62811 (Duc Canh Le).
  • Corrige travamento na função formatRow com o formato JSON e a interface HTTP #62840 (Anton Popov).
  • Azure: corrigida a geração da URL final a partir do objeto endpoint #62850 (Daniel Pozo Escalona).
  • Corrigido o codec GCD #62853 (Nikita Taranov).
  • Corrigida a chave LowCardinality(Nullable) em hiperretângulo #62866 (Amos Bird).
  • Corrigido o fromUnixtimestamp na sintaxe Joda quando o valor de entrada ultrapassa UInt32 #62901 (KevinyhZou).
  • Desativa optimize_rewrite_aggregate_function_with_if para sum(nullable) #62912 (Raúl Marín).
  • Corrige o PREWHERE no StorageBuffer quando a tabela de origem tem tipos de coluna diferentes. #62916 (Nikolai Kochetov).
  • Corrige dados temporários no cache quando a falha na criação do diretório da chave de cache é processada incorretamente #62925 (Kseniia Sumarokova).
  • gRPC: corrige falha em conexão IPv6 entre pares #62978 (Konstantin Bogdanov).
  • Corrige possíveis CHECKSUM_DOESNT_MATCH (e outros) durante fetches de réplicas #62987 (Azat Khuzhin).
  • Corrigido o encerramento causado por exceção não tratada em dados temporários no cache #62998 (Kseniia Sumarokova).
  • Correção do cast implícito em optimize_rewrite_aggregate_function_with_if #62999 (Raúl Marín).
  • Corrigida exceção não tratada no ~RestorerFromBackup #63040 (Vitaly Baranov).
  • Não remova constantes do servidor da chave do GROUP BY na consulta secundária. #63047 (Nikolai Kochetov).
  • Correção da avaliação incorreta da monotonicidade da função abs #63097 (Duc Canh Le).
  • Definir o nome do servidor para o handshake SSL no mecanismo MongoDB #63122 (Alexander Gololobov).
  • Use o banco de dados especificado pelo usuário em vez de “config” para verificar a versão do protocolo wire do MongoDB #63126 (Alexander Gololobov).

Lançamento do ClickHouse 24.3 LTS, 2024-03-27. Apresentação, Vídeo

Notas da atualização

  • A configuração allow_experimental_analyzer está habilitada por padrão e muda a análise de consultas para uma nova implementação, com melhor compatibilidade e maior cobertura de recursos. O recurso “analyzer” agora é considerado beta, em vez de experimental. Você pode restaurar o comportamento antigo definindo compatibility como 24.2 ou desabilitando a configuração allow_experimental_analyzer. Assista ao vídeo no YouTube.
  • O ClickHouse permite dados binários arbitrários no tipo de dado String, que normalmente é UTF-8. Strings em Parquet/ORC/Arrow aceitam apenas UTF-8. Por isso, você pode escolher qual tipo de dado do Arrow usar para o tipo de dado String do ClickHouse: String ou Binary. Isso é controlado pelas configurações output_format_parquet_string_as_string, output_format_orc_string_as_string, output_format_arrow_string_as_string. Embora Binary seja mais correto e compatível, usar String por padrão atende às expectativas dos usuários na maioria dos casos. Parquet/ORC/Arrow oferece suporte a muitos métodos de compressão, incluindo lz4 e zstd. O ClickHouse oferece suporte a todos os métodos de compressão. Algumas ferramentas menos robustas não oferecem suporte ao método de compressão lz4, que é mais rápido; por isso, definimos zstd como padrão. Isso é controlado pelas configurações output_format_parquet_compression_method, output_format_orc_compression_method e output_format_arrow_compression_method. Alteramos o padrão para zstd em Parquet e ORC, mas não em Arrow (que é mais voltado a usos de baixo nível). #61817 (Alexey Milovidov).
  • Na nova versão do ClickHouse, as funções geoDistance, greatCircleDistance e greatCircleAngle usarão o tipo de dados de ponto flutuante de dupla precisão de 64 bits para cálculos internos e como tipo de retorno se todos os argumentos forem Float64. Isso corrige #58476. Em versões anteriores, a função sempre usava Float32. Você pode voltar ao comportamento antigo definindo geo_distance_returns_float64_on_float64_arguments como false ou compatibility como 24.2 ou anterior. #61848 (Alexey Milovidov). Em coautoria com Geet Patel.
  • As partes de dados em memória obsoletas foram descontinuadas desde a versão 23.5 e não são mais compatíveis desde a versão 23.10. Agora, o código restante foi removido. Continuação de #55186 e #45409. É improvável que você tenha usado partes de dados em memória, porque elas estavam disponíveis apenas antes da versão 23.5 e somente quando eram habilitadas manualmente por meio da especificação dos SETTINGS correspondentes para uma tabela MergeTree. Para verificar se você tem partes de dados em memória, execute a seguinte consulta: SELECT part_type, count() FROM system.parts GROUP BY part_type ORDER BY part_type. Para desabilitar o uso de partes de dados em memória, execute ALTER TABLE ... MODIFY SETTING min_bytes_for_compact_part = DEFAULT, min_rows_for_compact_part = DEFAULT. Antes de atualizar a partir de versões antigas do ClickHouse, primeiro verifique se você não tem partes de dados em memória. Se houver partes de dados em memória, primeiro desabilite-as, depois aguarde até que não haja mais partes de dados em memória e prossiga com a atualização. #61127 (Alexey Milovidov).
  • Alterado o nome da coluna de duration_ms para duration_microseconds na tabela system.zookeeper para refletir o fato de que a duração está em microssegundos. #60774 (Duc Canh Le).
  • Rejeitar consultas INSERT recebidas quando as configurações no nível da consulta async_insert e deduplicate_blocks_in_dependent_materialized_views estiverem ativadas ao mesmo tempo. Esse comportamento é controlado pela configuração throw_if_deduplication_in_dependent_materialized_views_enabled_with_async_insert e é ativado por padrão. Esta é uma continuação de https://github.com/ClickHouse/ClickHouse/pull/59699 necessária para desbloquear https://github.com/ClickHouse/ClickHouse/pull/59915. #60888 (Nikita Mikhaylov).
  • O utilitário clickhouse-copier foi movido para um repositório separado no GitHub: https://github.com/ClickHouse/copier. Ele não faz mais parte do pacote, mas ainda está disponível para download separadamente. Isso fecha: #60734 Isso fecha: #60540 Isso fecha: #60250 Isso fecha: #52917 Isso fecha: #51140 Isso fecha: #47517 Isso fecha: #47189 Isso fecha: #46598 Isso fecha: #40257 Isso fecha: #36504 Isso fecha: #35485 Isso fecha: #33702 Isso fecha: #26702.
  • Para aumentar a compatibilidade com o MySQL, o alias de compatibilidade locate agora aceita, por padrão, os argumentos (needle, haystack[, start_pos]). O comportamento anterior (haystack, needle, [, start_pos]) pode ser restaurado ao definir function_locate_has_mysql_compatible_argument_order = 0. #61092 (Robert Schulze).
  • Proibir SimpleAggregateFunction no ORDER BY de tabelas MergeTree (assim como AggregateFunction, elas são proibidas por não serem comparáveis) por padrão (use allow_suspicious_primary_key para permiti-las). #61399 (Azat Khuzhin).
  • O engine de banco de dados Ordinary está obsoleto. Você receberá um aviso no clickhouse-client se o seu servidor estiver usando esse engine. Isso encerra #52229. #56942 (shabroo).

Novo recurso

  • Suporte à leitura e gravação de backups no formato tar (além de zip). #59535 (josh-hildred).
  • Adicionado suporte a buckets S3 Express. #59965 (Nikita Taranov).
  • Permite anexar partes de um disco diferente (usando cópia em vez de link físico). #60112 (Unalian).
  • Tabelas Memory com tamanho limitado: controladas pelas configurações min_bytes_to_keep, max_bytes_to_keep, min_rows_to_keep e max_rows_to_keep. #60612 (Jake Bamrah).
  • Limites separados para o número de consultas em espera e em execução. Foi adicionada a nova configuração de servidor max_waiting_queries, que limita o número de consultas em espera devido a async_load_databases. Os limites existentes para o número de consultas em execução não contam mais as consultas em espera. #61053 (Sergei Trifonov).
  • Foi adicionada uma tabela system.keywords que contém todas as palavras-chave do parser. Ela é necessária principalmente para melhorar o fuzzing e o realce de sintaxe. #51808 (Nikita Mikhaylov).
  • Adicionado suporte a ATTACH PARTITION ALL. #61107 (Kirill Nikiforov).
  • Adicionada uma nova função, getClientHTTPHeader. Isso resolve #54665. Em coautoria com @lingtaolf. #61820 (Alexey Milovidov).
  • Adicionado generate_series como função de tabela (alias de compatibilidade com PostgreSQL para a função numbers já existente). Essa função gera uma tabela com uma progressão aritmética de números naturais. #59390 (divanik).
  • Adicionado um modo de suporte para topK/topkWeighed, que retorna a contagem dos valores e seu erro. #54508 (UnamedRus).
  • Adicionada a função toMillisecond, que retorna o componente de milissegundos para valores do tipo DateTime ou DateTime64. #60281 (Shaun Struwig).
  • Permite configurar handlers de redirecionamento HTTP para o clickhouse-server. Por exemplo, você pode fazer com que / redirecione para a UI do Play. #60390 (Alexey Milovidov).

Melhoria de desempenho

  • Função dotProduct otimizada para eliminar cópias de memória desnecessárias e custosas. #60928 (Robert Schulze).
  • Impressão 30x mais rápida de inteiros de 256 bits. #61100 (Raúl Marín).
  • Se a chave primária da tabela contiver colunas em sua maioria inúteis, não as mantenha na memória. Isso é controlado por uma nova configuração primary_key_ratio_of_unique_prefix_values_to_skip_suffix_columns, com o valor 0.9 por padrão, o que significa: para uma chave primária composta, se uma coluna mudar de valor em pelo menos 90% das vezes, as colunas seguintes não serão carregadas. #60255 (Alexey Milovidov).
  • Melhora o desempenho de métodos de agregação serializados ao envolver várias colunas Nullable. #55809 (Amos Bird).
  • Passa a gerar a saída JSON sob demanda para melhorar o desempenho do ALL JOIN. #58278 (LiuNeng).
  • Torna reutilizáveis, para todos os casos de uso, as conexões HTTP/HTTPS com serviços externos, como o S3 da AWS. Mesmo quando a resposta é 3xx ou 4xx. #58845 (Sema Checherinda).
  • Melhorias nas funções de agregação argMin / argMax / any / anyLast / anyHeavy, bem como em consultas com ORDER BY {u8/u16/u32/u64/i8/i16/u32/i64) LIMIT 1. #58640 (Raúl Marín).
  • Otimização trivial para o filtro de coluna. O pico de memória pode ser reduzido para 44% do original em alguns casos. #59698 (李扬).
  • Executa a função multiIf de forma colunar quando o tipo subjacente do resultado é numérico. #60384 (李扬).
  • Mutexes mais rápidos (quase 2x). #60823 (Azat Khuzhin).
  • Esvaziar várias conexões em paralelo ao finalizar uma consulta distribuída. #60845 (lizhuoyu5).
  • Otimizada a movimentação de dados entre colunas de um número Nullable ou de uma string Nullable, o que melhora alguns microbenchmarks. #60846 (李扬).
  • As operações com o cache do sistema de arquivos sofrerão menos com a disputa por bloqueios. #61066 (Alexey Milovidov).
  • Otimize o array join e outras junções, evitando uma otimização incorreta do compilador. Fecha #61074. #61075 (李扬).
  • Se uma consulta com erro de sintaxe continha o matcher COLUMNS com uma expressão regular, a expressão regular era compilada a cada vez durante o backtracking do parser, em vez de ser compilada apenas uma vez. Isso era um erro fundamental. A regexp compilada era colocada na AST. Mas a letra A em AST significa “abstrata”, o que quer dizer que ela não deve conter objetos pesados. Partes da AST podem ser criadas e descartadas durante o parsing, inclusive com um grande número de backtrackings. Isso causa lentidão no parsing e, consequentemente, permite DoS por um usuário com permissão somente leitura. Mas o principal problema é que isso impede o progresso dos fuzzers. #61543 (Alexey Milovidov).
  • Adicionada uma nova etapa do analisador para otimizar o operador IN para um único valor. #61564 (LiuNeng).
  • DNSResolver embaralha o conjunto de IPs resolvidos, o que é necessário para distribuir uniformemente o uso de múltiplos endpoints do S3 da AWS. #60965 (Sema Checherinda).

Funcionalidade Experimental

  • Adiciona suporte à leitura paralela no Azure Blob Storage. Isso melhora o desempenho do armazenamento de objetos experimental no Azure. #61503 (SmitaRKulkarni).
  • Adiciona um WriteBuffer assíncrono para o Azure Blob Storage, semelhante ao S3. Isso melhora o desempenho do armazenamento de objetos experimental no Azure. #59929 (SmitaRKulkarni).
  • Usa identidade gerenciada para a E/S de backups ao usar o Azure Blob Storage. Adiciona uma configuração para impedir que o ClickHouse tente criar um contêiner inexistente, o que exige permissões no nível da conta de armazenamento. #61785 (Daniel Pozo Escalona).
  • Adiciona a configuração parallel_replicas_allow_in_with_subquery = 1, que permite usar subconsultas com IN em réplicas paralelas. #60950 (Nikolai Kochetov).
  • Uma alteração na replicação “zero-copy”: todos os bloqueios zero-copy relacionados a uma tabela precisam ser removidos quando a tabela é removida. O diretório que contém esses bloqueios também precisa ser removido. #57575 (Sema Checherinda).

Melhoria

  • Use MergeTree como engine de tabela padrão. #60524 (Alexey Milovidov)
  • Ativa output_format_pretty_row_numbers por padrão. Isso melhora a usabilidade. #61791 (Alexey Milovidov).
  • Na versão anterior, alguns números nos formatos Pretty não estavam bonitos o suficiente. #61794 (Alexey Milovidov).
  • Um valor longo nos formatos Pretty não será truncado se for o único valor no conjunto de resultados, como no resultado da consulta SHOW CREATE TABLE. #61795 (Alexey Milovidov).
  • Assim como clickhouse-local, clickhouse-client passa a aceitar a opção --output-format como sinônimo da opção --format. Isso fecha #59848. #61797 (Alexey Milovidov).
  • Se stdout for um terminal e o formato de saída não for especificado, clickhouse-client e ferramentas semelhantes usarão PrettyCompact por padrão, assim como no modo interativo. clickhouse-client e clickhouse-local tratarão os argumentos de linha de comando para os formatos de entrada e saída de forma unificada. Isso fecha #61272. #61800 (Alexey Milovidov).
  • Agrupamento de dígitos com sublinhados nos formatos Pretty para melhor legibilidade. Isso é controlado por uma nova configuração, output_format_pretty_highlight_digit_groups. #61802 (Alexey Milovidov).
  • Adicionada a possibilidade de sobrescrever as configurações iniciais de INSERT via SYSTEM FLUSH DISTRIBUTED. #61832 (Azat Khuzhin).
  • Ativa, por padrão, o profiling dos processors (tempo gasto e bytes de entrada/saída em ordenação, agregação, …). #61096 (Azat Khuzhin).
  • Suporte para arquivos sem extensão de formato no banco de dados Filesystem. #60795 (Kruglov Pavel).
  • Torne todos os nomes de formato insensíveis a maiúsculas e minúsculas, como Tsv, TSV, tsv ou até rowbinary. #60420 (豪肥肥). Agradeço se você continuar escrevendo-os corretamente, por exemplo, JSON 😇, e não Json 🤮, mas não nos importamos se você preferir escrevê-los do seu jeito.
  • Foi adicionado o modo none_only_active à configuração distributed_ddl_output_mode. #60340 (Alexander Tokmakov).
  • O dashboard avançado tem cores um pouco melhores para gráficos com várias linhas. #60391 (Alexey Milovidov).
  • O dashboard Advanced agora mantém os controles sempre visíveis durante a rolagem. Isso permite adicionar um novo gráfico sem precisar rolar para cima. #60692 (Alexey Milovidov).
  • Ao executar a consulta MODIFY COLUMN em visões materializadas, verifique a estrutura da tabela interna para garantir que todas as colunas existam. #47427 (sunny).
  • Tipos String e enums podem ser usados no mesmo contexto, como em: arrays, consultas UNION e expressões condicionais. Isso encerra #60726. #60727 (Alexey Milovidov).
  • Permite declarar Enums na estrutura de dados externos para o processamento de consultas (ou seja, uma tabela temporária imediata que você pode fornecer na sua consulta). #57857 (Duc Canh Le).
  • Leve em conta as linhas excluídas por exclusão leve ao selecionar as partes para mesclagem, para que o tamanho em disco da parte resultante seja estimado com mais precisão. #58223 (Zhuo Qiu).
  • Adicionados comentários para colunas em mais tabelas do sistema. Continuação de https://github.com/ClickHouse/ClickHouse/pull/58356. #59016 (Nikita Mikhaylov).
  • Agora podemos usar colunas virtuais em PREWHERE. Isso é útil para colunas virtuais não constantes, como _part_offset. #59033 (Amos Bird). Melhorou a usabilidade geral das colunas virtuais. Agora é permitido usar colunas virtuais em PREWHERE (isso é útil para colunas virtuais não constantes, como _part_offset). Agora há documentação interna disponível para colunas virtuais como comentário da coluna na consulta DESCRIBE, com a configuração describe_include_virtual_columns habilitada. #60205 (Anton Popov).
  • Em vez de usar uma chave constante, o armazenamento de objetos agora gera uma chave para determinar a permissão de remover objetos. #59495 (Sema Checherinda).
  • Permitir “local” como tipo de armazenamento de objetos, em vez de “local_blob_storage”. #60165 (Kseniia Sumarokova).
  • Flush paralelo dos blocos de INSERT pendentes do mecanismo Distributed em DETACH/desligamento do servidor e SYSTEM FLUSH DISTRIBUTED (o paralelismo só funcionará se você tiver uma política de múltiplos discos para uma tabela, como tudo no mecanismo Distributed atualmente). #60225 (Azat Khuzhin).
  • Adiciona uma configuração para forçar o uso de cache read-through em operações de merge. #60308 (Kseniia Sumarokova).
  • Uma melhoria para o protocolo de compatibilidade com MySQL. A issue #57598 menciona um comportamento diferente em relação ao gerenciamento de transações. A execução de COMMIT/ROLLBACK quando nenhuma transação está ativa é reportada como erro, ao contrário do comportamento do MySQL. #60338 (PapaToemmsn).
  • A função substring agora tem o alias byteSlice. #60494 (Robert Schulze).
  • O nome da configuração do servidor dns_cache_max_size foi alterado para dns_cache_max_entries para reduzir a ambiguidade. #60500 (Kirill Nikiforov).
  • SHOW INDEX | INDEXES | INDICES | KEYS não é mais ordenado pelas colunas da chave primária (o que era pouco intuitivo). #60514 (Robert Schulze).
  • Melhoria no Keeper: interromper a inicialização se um snapshot inválido for detectado, para evitar perda de dados. #60537 (Antonio Andelic).
  • Atualize o tzdata para 2024a. #60768 (Raúl Marín).
  • Melhoria no Keeper: suporte a leadership_expiry_ms nas configurações do Keeper. #60806 (Brokenice0415).
  • Sempre infira números em notação exponencial em formatos JSON, independentemente da configuração input_format_try_infer_exponent_floats. Adicionada a configuração input_format_json_use_string_type_for_ambiguous_paths_in_named_tuples_inference_from_objects, que permite usar o tipo String para caminhos ambíguos, em vez de gerar uma exceção durante a inferência de Tuples nomeadas a partir de objetos JSON. #60808 (Kruglov Pavel).
  • Adiciona suporte à sintaxe START TRANSACTION, normalmente usada no MySQL, resolvendo https://github.com/ClickHouse/ClickHouse/discussions/60865. #60886 (Zach Naimon).
  • Adiciona uma flag para o algoritmo de merge join com ordenação completa tratar NULL como o maior/menor valor. Assim, o comportamento pode ficar compatível com outros sistemas SQL, como o Apache Spark. #60896 (loudongfeng).
  • Suporte à detecção do formato de saída pela extensão do arquivo em clickhouse-client e clickhouse-local. #61036 (豪肥肥).
  • Atualizado o limite de memória em runtime quando o valor de CGroups no Linux é alterado. #61049 (Han Fei).
  • Adiciona a função toUInt128OrZero, que havia sido omitida por engano (o erro está relacionado a https://github.com/ClickHouse/ClickHouse/pull/945). Os aliases de compatibilidade FROM_UNIXTIME e DATE_FORMAT (não são nativos do ClickHouse e existem apenas para compatibilidade com MySQL) agora não diferenciam maiúsculas de minúsculas, como esperado para aliases de compatibilidade com SQL. #61114 (Alexey Milovidov).
  • Melhorias nas verificações de acesso, permitindo revogar privilégios não concedidos caso o usuário de destino também não tenha os privilégios para revogá-los. Exemplo: GRANT SELECT ON *.* TO user1; REVOKE SELECT ON system.* FROM user1;. #61115 (pufit).
  • Corrige a função has() ao usar coluna Nullable (corrige #60214). #61249 (Mikhail Koviazin).
  • Agora é possível especificar o atributo merge="true" em substituições de configuração para subárvores <include from_zk="/path" merge="true">. Se esse atributo for especificado, o ClickHouse mesclará a subárvore com a configuração existente; caso contrário, o comportamento padrão será anexar novo conteúdo à configuração. #61299 (alesapin).
  • Adiciona métricas assíncronas para mapeamentos de memória virtual: VMMaxMapCount & VMNumMaps. Fecha #60662. #61354 (Tuan Pham Anh).
  • Use a configuração temporary_files_codec em todos os casos em que criamos dados temporários, por exemplo, na ordenação com memória externa e no GROUP BY com memória externa. Antes, isso funcionava apenas no algoritmo de JOIN partial_merge. #61456 (Maksim Kita).
  • Adicionada a nova configuração max_parser_backtracks, que permite limitar a complexidade da análise de consultas. #61502 (Alexey Milovidov).
  • Menor contenção durante o redimensionamento dinâmico do cache do sistema de arquivos. #61524 (Kseniia Sumarokova).
  • Modo com shards da fila StorageS3 desabilitado, pois ela será reescrita. #61537 (Kseniia Sumarokova).
  • Corrigido um erro de digitação: de use_leagcy_max_level para use_legacy_max_level. #61545 (William Schoeffel).
  • Removidas algumas entradas duplicadas em system.blob_storage_log. #61622 (YenchangChan).
  • Adicionada a função current_user como um alias de compatibilidade com o MySQL. #61770 (Yarik Briukhovetskyi).
  • Corrige estados inconsistentes de funções de agregação de ponto flutuante em clusters mistos x86-64 / ARM #60610 (Harry Lee).

Melhoria de Build/Testes/Empacotamento

  • O profiler de consultas em tempo real agora funciona em AArch64. Em versões anteriores, ele só funcionava quando o programa não passava tempo dentro de uma syscall. #60807 (Alexey Milovidov).
  • A versão do ClickHouse foi adicionada às labels do Docker. Fecha #54224. #60949 (Nikolay Monkov).
  • Atualização do prqlc para 0.11.3. #60616 (Maximilian Roos).
  • Adicionado um fuzzer genérico de texto de consulta ao clickhouse-local. #61508 (Alexey Milovidov).

Correção de bug

Lançamento do ClickHouse 24.2, 2024-02-29. Apresentação, Vídeo

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

  • Validar tipos suspeitos/experimentais em tipos aninhados. Antes, esses tipos (exceto JSON) não eram validados em tipos aninhados, como Array/Tuple/Map. #59385 (Kruglov Pavel).
  • Adicionar uma verificação de consistência para o número de threads e os tamanhos de bloco. #60138 (Raúl Marín).
  • Não inferir números de ponto flutuante em notação exponencial por padrão. Adiciona a configuração input_format_try_infer_exponent_floats, que restaura o comportamento anterior (desabilitada por padrão). Fecha #59476. #59500 (Kruglov Pavel).
  • Permitir que operações ALTER sejam envolvidas por parênteses. A inclusão de parênteses pode ser controlada pela configuração format_alter_operations_with_parentheses. Por padrão, em consultas formatadas, os parênteses são incluídos, já que armazenamos operações ALTER formatadas em alguns locais como metadados (por exemplo: mutações). A nova sintaxe deixa mais claras algumas consultas em que as operações ALTER terminam em uma lista. Por exemplo: ALTER TABLE x MODIFY TTL date GROUP BY a, b, DROP COLUMN c não pode ser analisada corretamente com a sintaxe antiga. Na nova sintaxe, a consulta ALTER TABLE x (MODIFY TTL date GROUP BY a, b), (DROP COLUMN c) fica inequívoca. Versões antigas não conseguem ler a nova sintaxe; portanto, usá-la pode causar problemas se versões mais novas e mais antigas do ClickHouse estiverem misturadas em um único cluster. #59532 (János Benjamin Antal).
  • Correção do problema de segurança da visão materializada, que permitia a um usuário inserir em uma tabela sem os grants necessários para isso. A correção valida que o usuário tem permissão para inserir não apenas em uma visão materializada, mas também em todas as tabelas subjacentes. Isso significa que algumas consultas que funcionavam antes agora podem falhar com Not enough privileges. Para resolver esse problema, esta versão introduz um novo recurso de SQL security para views https://clickhouse.com/docs/sql-reference/statements/create/view#sql&#95;security. #54901 #60439 (pufit).

recurso

  • Adicionada uma nova sintaxe que permite especificar o usuário definidor em view/visão materializada. Isso permite executar consultas/inserções a partir de views sem permissões explícitas para as tabelas subjacentes. Assim, uma view encapsulará as permissões. #54901 #60439 (pufit).
  • Detectar automaticamente o formato de arquivo durante a inferência de esquema quando ele for desconhecido nos motores file/s3/hdfs/url/azureBlobStorage. Fecha #50576. #59092 (Kruglov Pavel).
  • Implementado o ajuste automático dos timeouts de inserção assíncrona. As seguintes configurações foram introduzidas: async_insert_poll_timeout_ms, async_insert_use_adaptive_busy_timeout, async_insert_busy_timeout_min_ms, async_insert_busy_timeout_max_ms, async_insert_busy_timeout_increase_rate, async_insert_busy_timeout_decrease_rate. #58486 (Julia Kartseva).
  • Permite definir uma cota para o número máximo de falhas consecutivas de login. #54737 (Alexey Gerasimchuck).
  • Uma nova função agregada groupArrayIntersect. Em seguimento a: #49862. #59598 (Yarik Briukhovetskyi).
  • Suporte a backup e restauração para AzureBlobStorage. Resolve #50747. #56988 (SmitaRKulkarni).
  • Agora, o usuário pode especificar diretamente na consulta a string do template usando format_schema_rows_template como alternativa a format_template_row. Fecha #31363. #59088 (Shaun Struwig).
  • Implementada a conversão automática de tabelas MergeTree de diferentes tipos para o engine Replicated. Crie um arquivo vazio convert_to_replicated no diretório de dados da tabela (/clickhouse/store/xxx/xxxyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy/), e a tabela será convertida automaticamente na próxima inicialização do servidor. #57798 (Kirill).
  • Foi adicionada a consulta ALTER TABLE table FORGET PARTITION partition, que remove nós do ZooKeeper relacionados a uma partição vazia. #59507 (Sergei Trifonov). Este é um recurso para especialistas.
  • Suporte a arquivo de credenciais JWT para o mecanismo de tabela NATS. #59543 (Nickolaj Jepsen).
  • Implementada a tabela system.dns_cache, que pode ser útil para depurar problemas de DNS. #59856 (Kirill Nikiforov).
  • O codec LZ4HC aceitará um novo nível 2, que é mais rápido do que o nível mínimo anterior, 3, em troca de menor compressão. Em versões anteriores, LZ4HC(2) e níveis inferiores eram equivalentes a LZ4HC(3). Autor: Cyan4973. #60090 (Alexey Milovidov).
  • Implementada a tabela system.dns_cache, que pode ser útil para solucionar problemas de DNS. Nova configuração do servidor dns_cache_max_size. #60257 (Kirill Nikiforov).
  • Adicionar suporte à versão com um único argumento da função de tabela merge, como merge(['db_name', ] 'tables_regexp'). #60372 (豪肥肥).
  • Adiciona suporte a argumentos posicionais negativos. Fecha #57736. #58292 (flynn).
  • Suporte para especificar, na configuração, um conjunto de usuários permitidos para configurações específicas do S3 usando a chave user. #60144 (Antonio Andelic).
  • Adicionada a função de tabela mergeTreeIndex. Ela representa o conteúdo dos arquivos de índice e de marcas das tabelas MergeTree. Pode ser usada para introspecção. Sintaxe: mergeTreeIndex(database, table, [with_marks = true]), em que database.table é uma tabela existente com engine MergeTree. #58140 (Anton Popov).

Funcionalidade Experimental

  • Adicionada a função seriesOutliersDetectTukey para detectar outliers em séries de dados usando o algoritmo de cercas de Tukey. #58632 (Bhavna Jindal). Tenha em mente que esse comportamento será alterado na próxima versão de patch.
  • Adicionada a função variantType, que retorna um Enum com o nome do tipo variante para cada linha. #59398 (Kruglov Pavel).
  • Suporte a LEFT JOIN, ALL INNER JOIN e subconsultas simples para réplicas paralelas (apenas com o analisador). A nova configuração parallel_replicas_prefer_local_join escolhe entre a execução local de JOIN (padrão) e GLOBAL JOIN. Todas as tabelas devem existir em cada réplica de cluster_for_parallel_replicas. As novas configurações min_external_table_block_size_rows e min_external_table_block_size_bytes são usadas para agrupar blocos pequenos enviados para tabelas temporárias (apenas com o analisador). #58916 (Nikolai Kochetov).
  • Permite a criação simultânea de tabelas no banco de dados Replicated durante a adição ou recuperação de uma nova réplica. #59277 (Konstantin Bogdanov).
  • Implementado operador de comparação para valores Variant e inserção correta de Field na coluna Variant. Por padrão, não é permitido criar o tipo Variant com tipos variantes semelhantes (permitido com a configuração allow_suspicious_variant_types). Fecha #59996. Fecha #59850. #60198 (Kruglov Pavel).
  • Desabilita JOIN de réplicas paralelas com CTE (sem analisador). #59239 (Raúl Marín).

Melhoria de desempenho

  • A chave primária usará menos memória. #60049 (Alexey Milovidov).
  • Melhorado o uso de memória da chave primária e de algumas outras operações. #60050 (Alexey Milovidov).
  • As chaves primárias das tabelas serão carregadas na memória sob demanda, no primeiro acesso. Isso é controlado pela nova configuração do MergeTree primary_key_lazy_load, que fica ativada por padrão. Isso oferece várias vantagens: - ela não será carregada para tabelas que não forem usadas; - se não houver memória suficiente, uma exceção será lançada no primeiro uso em vez de na inicialização do servidor. Isso também traz várias desvantagens: - o custo de latência do carregamento da chave primária ocorrerá na primeira consulta, em vez de antes de aceitar conexões; isso, em teoria, pode introduzir um problema de thundering herd. Isso fecha #11188. #60093 (Alexey Milovidov).
  • Funções vetorizadas de distância usadas na busca vetorial. #58866 (Robert Schulze).
  • Função vetorizada dotProduct, útil para busca vetorial. #60202 (Robert Schulze).
  • Adicionar suporte a curto-circuito para a função dictGetOrDefault. Fecha #52098. #57767 (jsc0218).
  • Melhoria no Keeper: armazenar em cache na memória apenas uma certa quantidade de logs, controlada por latest_logs_cache_size_threshold e commit_logs_cache_size_threshold. #59460 (Antonio Andelic).
  • Melhoria no Keeper: reduzir ainda mais o tamanho do nó de dados. #59592 (Antonio Andelic).
  • Continue otimizando falhas de predição de desvio da função if quando o tipo de resultado é Float*/Decimal*/*Int*, em continuação a https://github.com/ClickHouse/ClickHouse/pull/57885. #59148 (李扬).
  • Otimizada a função if quando o tipo de entrada é Map, com aceleração de até ~10x. #59413 (李扬).
  • Melhorado o desempenho do tipo Int8 com a implementação de aliasing estrito (isso já existe para UInt8 e todos os outros tipos inteiros). #59485 (Raúl Marín).
  • Otimize o desempenho condicional de sum/avg para tipos bigint e decimal de alta precisão, reduzindo falhas de predição de desvio. #59504 (李扬).
  • Melhora de desempenho em SELECTs com mutações ativas. #59531 (Azat Khuzhin).
  • Otimizada a função isNotNull com AVX2. #59621 (李扬).
  • Melhora o desempenho do ASOF JOIN para dados ordenados ou quase ordenados. #59731 (Maksim Kita).
  • O valor padrão anterior de 1 MB para async_insert_max_data_size parecia ser pequeno demais. O novo valor será de 10 MiB. #59536 (Nikita Mikhaylov).
  • Use múltiplas threads para ler os metadados das tabelas de um backup durante a execução do comando RESTORE. #60040 (Vitaly Baranov).
  • Agora, se StorageBuffer tiver mais de 1 shard (num_layers > 1), o flush em segundo plano ocorrerá simultaneamente para todos os shards em várias threads. #60111 (alesapin).

Melhoria

  • Quando o output format é Pretty e um bloco consiste em um único valor numérico superior a um milhão, um número legível será exibido à direita da tabela. #60379 (rogeryk).
  • Foram adicionadas as configurações split_parts_ranges_into_intersecting_and_non_intersecting_final e split_intersecting_parts_ranges_into_layers_final. Essas configurações são necessárias para desativar otimizações em consultas com FINAL e devem ser usadas apenas para depuração. #59705 (Maksim Kita). Na verdade, não só para isso — elas também podem reduzir o uso de memória em troca de desempenho.
  • Renomeie a configuração extract_kvp_max_pairs_per_row para extract_key_value_pairs_max_pairs_per_row. O problema (abreviação desnecessária no nome da configuração) foi introduzido em https://github.com/ClickHouse/ClickHouse/pull/43606. Corrija a documentação dessa configuração. #59683 (Alexey Milovidov). #59960 (jsc0218).
  • A execução de ALTER COLUMN MATERIALIZE em uma coluna com expressão DEFAULT ou MATERIALIZED agora segue precisamente a semântica. #58023 (Duc Canh Le).
  • Foi implementada uma lógica de backoff exponencial para erros durante mutações. Isso reduzirá o uso de CPU e de memória, além do tamanho dos arquivos de log. #58036 (MikhailBurdukov).
  • Adicionada melhoria para contabilizar o evento de Profile InitialQuery. #58195 (Unalian).
  • Permite definir volume_priority na storage_configuration. #58533 (Andrey Zvonov).
  • Adicionado suporte para o tipo Date32 no codec T64. #58738 (Hongbin Ma).
  • Permite vírgulas finais em tipos com vários itens. #59119 (Aleksandr Musorin).
  • As configurações do mecanismo de tabela Distributed agora podem ser definidas no arquivo de configuração do servidor (de forma semelhante às configurações do MergeTree), por exemplo, <distributed> <flush_on_detach>false</flush_on_detach> </distributed>. #59291 (Azat Khuzhin).
  • Tentar novamente em caso de desconexões e sessões expiradas ao ler system.zookeeper. Isso é útil ao ler muitas linhas da tabela system.zookeeper, especialmente na presença de desconexões induzidas por falhas. #59388 (Alexander Gololobov).
  • Não interprete como octais os números com zeros à esquerda quando input_format_values_interpret_expressions=0. #59403 (Joanna Hulboj).
  • Na inicialização e sempre que os arquivos de configuração são alterados, o ClickHouse atualiza os limites rígidos de memória do seu memory tracker total. Esses limites são calculados com base em várias configurações do servidor e nos limites de cgroups (no Linux). Anteriormente, o valor de /sys/fs/cgroup/memory.max (para cgroups v2) era fixado no código. Como resultado, os limites de memória do cgroup v2 configurados para grupos aninhados (hierarquias), por exemplo /sys/fs/cgroup/my/nested/group/memory.max, eram ignorados. Isso foi corrigido. O comportamento dos limites de memória v1 permanece inalterado. #59435 (Robert Schulze).
  • Novos eventos de perfil foram adicionados para observar o tempo gasto no cálculo de PK/projeções/índices secundários durante operações de INSERT. #59436 (Nikita Taranov).
  • Permite definir um ponto de partida para o S3Queue no modo Ordered durante a criação usando a configuração s3queue_last_processed_path. #59446 (Kseniia Sumarokova).
  • Os comentários das tabelas de sistema também passaram a ficar disponíveis em system.tables no clickhouse-local. #59493 (Nikita Mikhaylov).
  • Tabela system.zookeeper: anteriormente, todo o resultado era acumulado na memória e retornado como um único fragmento grande. Essa alteração deve ajudar a reduzir o consumo de memória ao ler muitas linhas de system.zookeeper, permitir a exibição do progresso intermediário (quantas linhas já foram lidas até o momento) e evitar exceder o tempo limite da conexão quando o conjunto de resultados for grande. #59545 (Alexander Gololobov).
  • Agora o painel reconhece tanto o estado compactado quanto o não compactado do #hash da URL (retrocompatibilidade). Continuação de #59124 . #59548 (Amos Bird).
  • Atualizado o Intel QPL (usado pelo codec DEFLATE_QPL) da v1.3.1 para a v1.4.0. Também foi corrigido um bug no mecanismo de polling de timeout, pois observamos que, em alguns casos, o timeout não funcionava corretamente; se ocorrer um timeout, o IAA e a CPU podem processar o buffer de forma concorrente. Por enquanto, é melhor garantir que o status do codec IAA não seja QPL_STS_BEING_PROCESSED e, então, recorrer ao codec de software como fallback. #59551 (jasperzhu).
  • Não exiba um aviso sobre a versão do servidor no ClickHouse Cloud, pois o ClickHouse Cloud gerencia automaticamente atualizações contínuas. #59657 (Alexey Milovidov).
  • Após a autoextração, o binário temporário é movido em vez de ser copiado. #59661 (Yakov Olkhovskiy).
  • Corrige o desenrolamento da pilha no Apple macOS. Isso fecha #53653. #59690 (Nikita Mikhaylov).
  • Verificação de estouro de pilha nos parsers, mesmo que o usuário tenha configurado incorretamente a configuração max_parser_depth com um valor muito alto. Isso corrige #59622. #59697 (Alexey Milovidov). #60434
  • Unificar o comportamento das coleções nomeadas criadas em XML e em SQL no armazenamento Kafka. #59710 (Pervakov Grigorii).
  • No caso de merge_max_block_size_bytes ser pequeno o suficiente e as tabelas conterem linhas extensas (strings ou tuplas), as mesclagens em segundo plano podem ficar presas em um loop infinito. Esse comportamento foi corrigido. Complemento de https://github.com/ClickHouse/ClickHouse/pull/59340. #59812 (Nikita Mikhaylov).
  • Permitir uuid em replica_path se ele estiver explicitamente em CREATE TABLE. #59908 (Azat Khuzhin).
  • Adicionada a coluna metadata_version da tabela ReplicatedMergeTree à tabela de sistema system.tables. #59942 (Maksim Kita).
  • Melhoria no Keeper: enviar apenas métricas/eventos relacionados ao Keeper para o Prometheus. #59945 (Antonio Andelic).
  • O dashboard exibirá métricas em diferentes versões do ClickHouse, mesmo que a estrutura das tabelas de sistema tenha mudado após a atualização. #59967 (Alexey Milovidov).
  • Permite carregar informações de AZ de um arquivo. #59976 (Konstantin Bogdanov).
  • Melhoria no Keeper: adicionar novas tentativas em caso de falha nas operações relacionadas ao Disk. #59980 (Antonio Andelic).
  • Adicionada a nova configuração backups.remove_backup_files_after_failure: <clickhouse> <backups> <remove_backup_files_after_failure>true</remove_backup_files_after_failure> </backups> </clickhouse>. #60002 (Vitaly Baranov).
  • Usar cópia em buffer como fallback para cópia de arquivos S3 do GCP caso o GCP retorne Internal Error com o código de erro HTTP GATEWAY_TIMEOUT. #60164 (Maksim Kita).
  • Execução com curto-circuito para ULIDStringToDateTime. #60211 (Juan Madurga).
  • Adicionada a coluna query_id às tabelas system.backups e system.backup_log. Adicionada a stack trace do erro à coluna error. #60220 (Maksim Kita).
  • As conexões pela porta MySQL agora são executadas automaticamente com a configuração prefer_column_name_to_alias = 1 para oferecer suporte pronto para uso ao QuickSight. Além disso, as configurações mysql_map_string_to_text_in_show_columns e mysql_map_fixed_string_to_text_in_show_columns agora vêm habilitadas por padrão, afetando apenas as conexões MySQL. Isso aumenta a compatibilidade com mais ferramentas de BI. #60365 (Robert Schulze).
  • Corrige uma condição de corrida no código JavaScript que fazia gráficos duplicados serem exibidos sobrepostos. #60392 (Alexey Milovidov).

Melhoria de Build/Testes/Empacotamento

  • Adicionados builds e testes com coleta de cobertura e introspecção. Continuação de #56102. #58792 (Alexey Milovidov).
  • Atualizada a toolchain do Rust em corrosion-cmake quando a variável da toolchain de compilação cruzada do CMake está definida. #59309 (Aris Tritas).
  • Adicionado fuzzing para ASTLiterals. #59383 (Raúl Marín).
  • Se você quiser executar scripts do initdb sempre que o contêiner do ClickHouse for iniciado, deverá definir a variável de ambiente CLICKHOUSE_ALWAYS_RUN_INITDB_SCRIPTS. #59808 (Alexander Nikolaev).
  • Removida a capacidade de desabilitar componentes genéricos do ClickHouse (como servidor/cliente/…), mas mantidos alguns que exigem bibliotecas extras (como ODBC ou Keeper). #59857 (Azat Khuzhin).
  • O fuzzer de consultas fará fuzzing de SETTINGS dentro das consultas. #60087 (Alexey Milovidov).
  • Adicionado suporte para compilar o ClickHouse com clang-19 (master). #60448 (Alexey Milovidov).

Correção de bug (mau funcionamento perceptível ao usuário em uma versão estável oficial)

  • Corrige um erro de “Set não pronto” em TTL WHERE. #57430 (Nikolai Kochetov).
  • Corrigido um bug na função quantilesGK #58216 (李扬).
  • Corrige um comportamento incorreto do intDiv com argumentos Decimal #59243 (Yarik Briukhovetskyi).
  • Corrigido translate com entrada FixedString #59356 (Raúl Marín).
  • Corrige o cálculo do digest no Keeper #59439 (Antonio Andelic).
  • Corrige stacktraces de binários sem símbolos de depuração #59444 (Azat Khuzhin).
  • Corrige ASTAlterCommand::formatImpl no caso de configurações específicas da coluna… #59445 (János Benjamin Antal).
  • Correção de SELECT * FROM [...] ORDER BY ALL com o analisador #59462 (zhongyuankai).
  • Corrige uma possível exceção não tratada durante o cancelamento de consulta distribuída #59487 (Azat Khuzhin).
  • Faça o MAX usar as mesmas regras da permutação para tipos complexos #59498 (Raúl Marín).
  • Corrige um caso específico ao passar update_insert_deduplication_token_in_dependent_materialized_views #59544 (Jordi Villar).
  • Corrigido o resultado incorreto de arrayElement / map com valor vazio #59594 (Raúl Marín).
  • Corrige falha em topK ao mesclar estados vazios #59603 (Raúl Marín).
  • Corrigida tabela distribuída com uma chave de sharding constante #59606 (Vitaly Baranov).
  • Corrigir o problema de KQL encontrado pelo WingFuzz #59626 (Yong Wang).
  • Corrigido o erro “Read beyond last offset” no AsynchronousBoundedReadBuffer #59630 (Vitaly Baranov).
  • Preservar o alias da função em RewriteSumFunctionWithSumAndCountVisitor #59658 (Raúl Marín).
  • Corrige o horário de início de consultas não iniciais #59662 (Raúl Marín).
  • Validar os tipos de argumentos do índice de skipping minmax #59733 (Anton Popov).
  • Corrige a função leftPad / rightPad com entrada do tipo FixedString #59739 (Raúl Marín).
  • Corrige problema identificado pelo AST fuzzer na função countMatches #59752 (Robert Schulze).
  • RabbitMQ: correção do caso em que não havia mensagens com ack nem com nack #59775 (Kseniia Sumarokova).
  • Corrige o StorageURL, que executava parte da consulta em uma única thread #59833 (Michael Kolupaev).
  • S3Queue: corrige valor não inicializado #59897 (Kseniia Sumarokova).
  • Corrigida a análise sintática de expressões de partição entre parênteses #59901 (János Benjamin Antal).
  • Corrige falha no formato JSONColumnsWithMetadata via HTTP #59925 (Kruglov Pavel).
  • Não reescreva sum como count se o valor de retorno for diferente no Analyzer #59926 (Azat Khuzhin).
  • Correção de falha na leitura do UniqExactSet #59928 (Maksim Kita).
  • Correção de metadata_version inválida no ReplicatedMergeTree #59946 (Maksim Kita).
  • Corrigida uma condição de corrida em StorageDistributed #59987 (Nikita Taranov).
  • Docker: executar scripts de inicialização quando a opção estiver ativada, e não desativada #59991 (jktng).
  • Corrige INSERT no SQLite com aspas simples (escapando aspas simples com aspas, em vez de barra invertida) #60015 (Azat Khuzhin).
  • Corrigidos vários erros lógicos no arrayFold #60022 (Raúl Marín).
  • Corrige o optimize_uniq_to_count ao remover o alias da coluna #60026 (Raúl Marín).
  • Corrige possível exceção na tabela S3Queue ao executar DROP #60036 (Kseniia Sumarokova).
  • Corrige a formatação de NOT com literais isolados #60042 (Raúl Marín).
  • Usar max_query_size do contexto em DDLLogEntry em vez do valor fixo 4096 #60083 (Kruglov Pavel).
  • Corrige a formatação inconsistente de consultas que contêm tabelas chamadas table. Corrige a formatação incorreta de consultas com UNION ALL, INTERSECT e EXCEPT quando a estrutura delas não era linear. Isso fecha #52349. Corrige a formatação incorreta de consultas SYSTEM, incluindo SYSTEM ... DROP FILESYSTEM CACHE, SYSTEM ... REFRESH/START/STOP/CANCEL/TEST VIEW e SYSTEM ENABLE/DISABLE FAILPOINT. Corrige a formatação de consultas DDL parametrizadas. Corrige a formatação da consulta DESCRIBE FILESYSTEM CACHE. Corrige a formatação incorreta de SET param_... (uma consulta que define um parâmetro). Corrige a formatação incorreta de consultas CREATE INDEX. Corrige a formatação inconsistente de CREATE USER e consultas semelhantes. Corrige a formatação inconsistente de CREATE SETTINGS PROFILE. Corrige a formatação incorreta de ALTER ... MODIFY REFRESH. Corrige a formatação inconsistente de funções de janela quando os offsets do frame eram expressões. Corrige a formatação inconsistente de RESPECT NULLS e IGNORE NULLS quando usados após uma função que implementa um operador (como plus). Corrige a formatação absurda de SYSTEM SYNC REPLICA ... LIGHTWEIGHT FROM .... Corrige a formatação inconsistente de consultas inválidas com GROUP BY GROUPING SETS ... WITH ROLLUP/CUBE/TOTALS. Corrige a formatação inconsistente de GRANT CURRENT GRANTS. Corrige a formatação inconsistente de CREATE TABLE (... COLLATE). Além disso, corrigi a formatação incorreta de EXPLAIN em subconsultas (#60102). Corrigida a formatação incorreta de funções lambda (#60012). Adicionada uma verificação para evitar que essas aberrações passem despercebidas no futuro. #60095 (Alexey Milovidov).
  • Corrigida a formatação inconsistente do explain em subconsultas #60102 (Alexey Milovidov).
  • Corrige travamento de cosineDistance com Nullable #60150 (Raúl Marín).
  • Permite converter bools em formato de string para bools reais #60160 (Robert Schulze).
  • Corrigido system.s3queue_log #60166 (Kseniia Sumarokova).
  • Corrige arrayReduce com nome de função de agregação Nullable #60188 (Raúl Marín).
  • Oculta informações sensíveis para S3Queue #60233 (Kseniia Sumarokova).
  • Corrigidos os códigos de exceção HTTP. #60252 (Austin Kothig).
  • S3Queue: corrige um erro (também corrige o teste instável test_storage_s3_queue/test.py::test_shards_distributed) #60282 (Kseniia Sumarokova).
  • Corrige o uso de valor não inicializado e resultado inválido em funções de hash com IPv6 #60359 (Kruglov Pavel).
  • Corrige o OptimizeDateOrDateTimeConverterWithPreimageVisitor com argumentos nulos #60453 (Raúl Marín).
  • Corrigido um pequeno bug que impedia a execução, em réplicas, de consultas de tabelas distribuídas enviadas por clientes dos dialetos KQL ou PRQL. #59674. #60470 (Alexey Milovidov) #59674 (Austin Kothig).

Lançamento do ClickHouse 24.1, 2024-01-30. Apresentação, Vídeo

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

  • A configuração print_pretty_type_names agora vem ativada por padrão. Você pode desativá-la para manter o comportamento antigo ou usar SET compatibility = '23.12'. #57726 (Alexey Milovidov).
  • A configuração do MergeTree clean_deleted_rows foi descontinuada e não tem mais efeito. A palavra-chave CLEANUP para OPTIMIZE não é permitida por padrão (a menos que allow_experimental_replacing_merge_with_cleanup esteja ativada). #58316 (Alexander Tokmakov).
  • A função reverseDNSQuery não está mais disponível. Isso encerra #58368. #58369 (Alexey Milovidov).
  • Ative várias mudanças para melhorar o controle de acesso no arquivo de configuração. Essas mudanças afetam o comportamento, e você deve verificar o config.xml na seção access_control_improvements. Caso não tenha certeza, mantenha os valores no arquivo de configuração como estavam na versão anterior. #58584 (Alexey Milovidov).
  • Melhora o funcionamento de sumMapFiltered com valores NaN. Os valores NaN agora são colocados no final (em vez de aleatoriamente) e considerados diferentes de quaisquer outros valores. -0 agora também é tratado como igual a 0; como valores 0 são descartados, valores -0 também são descartados. #58959 (Raúl Marín).
  • A função visibleWidth passará a se comportar de acordo com a documentação. Em versões anteriores, ela simplesmente contava pontos de código após a serialização da string, como a função lengthUTF8, mas não considerava caracteres de largura zero e caracteres combinantes, caracteres de largura total, tabulações e caracteres de exclusão. Agora, o comportamento foi alterado em conformidade. Se você quiser manter o comportamento antigo, defina function_visible_width_behavior como 0 ou compatibility como 23.12 ou inferior. #59022 (Alexey Milovidov).
  • O dialeto Kusto está desativado até que estes dois bugs sejam corrigidos: #59037 e #59036. #59305 (Alexey Milovidov). Qualquer tentativa de usar Kusto resultará em uma exceção.
  • Uma implementação mais eficiente do modificador FINAL não garante mais a preservação da ordem, mesmo se max_threads = 1. Se você dependia do comportamento anterior, defina enable_vertical_final como 0 ou compatibility como 23.12.

Novo recurso

  • Implementa o tipo de dado Variant, que representa uma união de outros tipos de dados. O tipo Variant(T1, T2, ..., TN) significa que cada linha desse tipo tem um valor do tipo T1, T2, … ou TN, ou nenhum deles (valor NULL). O tipo Variant está disponível com a configuração allow_experimental_variant_type. Referência: #54864. #58047 (Kruglov Pavel).
  • Agora, determinadas configurações (atualmente min_compress_block_size e max_compress_block_size) podem ser especificadas no nível da coluna, onde têm prioridade sobre a configuração correspondente no nível da tabela. Exemplo: CREATE TABLE tab (col String SETTINGS (min_compress_block_size = 81920, max_compress_block_size = 163840)) ENGINE = MergeTree ORDER BY tuple();. #55201 (Duc Canh Le).
  • Adiciona a função de agregação quantileDD, bem como as correspondentes quantilesDD e medianDD. Ela se baseia no DDSketch https://www.vldb.org/pvldb/vol12/p2195-masson.pdf. ### Item da documentação para alterações voltadas ao usuário. #56342 (Srikanth Chekuri).
  • Permite configurar qualquer tipo de armazenamento de objetos com qualquer tipo de metadado. #58357 (Kseniia Sumarokova).
  • Adicionados os modos null_status_on_timeout_only_active e throw_only_active para distributed_ddl_output_mode, que permitem não esperar por réplicas inativas. #58350 (Alexander Tokmakov).
  • Adicionar a função arrayShingles para gerar subarrays; por exemplo, arrayShingles([1, 2, 3, 4, 5], 3) retorna [[1,2,3],[2,3,4],[3,4,5]]. #58396 (Zheng Miao).
  • Foram adicionadas as funções punycodeEncode, punycodeDecode, idnaEncode e idnaDecode, úteis para converter nomes de domínio internacionalizados em uma representação ASCII de acordo com o padrão IDNA. #58454 (Robert Schulze).
  • Adicionadas as funções de similaridade entre strings dramerauLevenshteinDistance, jaroSimilarity e jaroWinklerSimilarity. #58531 (Robert Schulze).
  • Adiciona duas configurações: output_format_compression_level, para alterar o nível de compressão de saída, e output_format_compression_zstd_window_log, para definir explicitamente o tamanho da janela de compressão e habilitar o modo de longo alcance para a compressão zstd, caso o método de compressão de saída seja zstd. Aplicado a INTO OUTFILE e à gravação em table functions file, url, hdfs, s3 e azureBlobStorage. #58539 (Duc Canh Le).
  • Desabilita automaticamente as sequências de escape ANSI nos formatos Pretty quando a saída não é um terminal. Adiciona o novo modo auto à configuração output_format_pretty_color. #58614 (Shaun Struwig).
  • Adicionada a função sqidDecode, que decodifica Sqids. #58544 (Robert Schulze).
  • Permite ler valores Bool como String em formatos de entrada JSON. Isso é feito com a configuração input_format_json_read_bools_as_strings, que vem habilitada por padrão. #58561 (Kruglov Pavel).
  • Adicionada a função seriesDecomposeSTL, que decompõe uma série temporal em sazonalidade, tendência e um componente residual. #57078 (Bhavna Jindal).
  • Adicionado o cliente MySQL Binlog para MaterializedMySQL: uma conexão de binlog para vários bancos de dados. #57323 (Val Doroshchuk).
  • A Intel QuickAssist Technology (QAT) fornece compressão e criptografia aceleradas por hardware. O ClickHouse recebeu um novo codec de compressão ZSTD_QAT, que utiliza QAT para compressão zstd. O codec usa a QATlib da Intel e o plugin QAT ZSTD da Intel. No momento, apenas a compressão pode ser acelerada por hardware (um fallback para software entra em ação caso o QAT não possa ser inicializado); a descompressão sempre é executada por software. #57509 (jasperzhu).
  • Implementação de uma nova forma de gerar as chaves do armazenamento de objetos para discos S3. Agora, o formato pode ser definido com a sintaxe de regex re2, usando a opção key_template na descrição do disco. #57663 (Sema Checherinda).
  • A tabela system.dropped_tables_parts contém partes das tabelas system.dropped_tables (tabelas descartadas, mas ainda não removidas). #58038 (Yakov Olkhovskiy).
  • Adicionada a configuração max_materialized_views_size_for_table para limitar o número de visões materializadas vinculadas a uma tabela. #58068 (zhongyuankai).
  • Melhorias no clickhouse-format: suporte a consultas INSERT com VALUES; suporte a comentários (use --comments para exibi-los); suporte à opção --max_line_length para formatar apenas consultas longas em várias linhas. #58246 (vdimir).
  • Anexa todas as tabelas do sistema no clickhouse-local, incluindo system.parts. Fecha #58312. #58359 (Alexey Milovidov).
  • Suporte a tipos de dados Enum na função transform. Isso fecha #58241. #58360 (Alexey Milovidov).
  • Adicionada a tabela system.database_engines. #58390 (Bharat Nallan). Permite registrar motores de banco de dados independentemente no código-base. #58365 (Bharat Nallan). Permite registrar interpretadores de forma independente. #58443 (Bharat Nallan).
  • Adicionado o modificador FROM <Replicas> à consulta SYSTEM SYNC REPLICA LIGHTWEIGHT. Com o modificador FROM, garantimos que aguardamos fetches e drop-ranges apenas das réplicas de origem especificadas, bem como de qualquer réplica que não esteja no zookeeper ou com source_replica vazio. #58393 (Jayme Bird).
  • Adicionada a configuração update_insert_deduplication_token_in_dependent_materialized_views. Essa configuração permite atualizar o token de desduplicação de insert com o identificador da tabela durante o insert em visões materializadas dependentes. Corrige #59165. #59238 (Maksim Kita).
  • Adicionada a instrução SYSTEM RELOAD ASYNCHRONOUS METRICS, que atualiza as métricas assíncronas. Útil principalmente para testes e desenvolvimento. #53710 (Robert Schulze).

Melhoria de desempenho

  • A coordenação para réplicas paralelas foi reescrita para proporcionar melhor paralelismo e melhor localidade de cache. Ela foi testada quanto à escalabilidade linear em centenas de réplicas. Também passou a oferecer suporte à leitura em ordem. #57968 (Nikita Taranov).
  • Substitua o buffer de saída HTTP pelos buffers nativos do ClickHouse. Adicione métricas de contagem de bytes para as interfaces. #56064 (Yakov Olkhovskiy).
  • Grandes estados de agregação de uniqExact passarão a ser mesclados em paralelo em consultas distribuídas. #59009 (Nikita Taranov).
  • Menor uso de memória após a leitura de tabelas MergeTree. #59290 (Anton Popov).
  • Menor consumo de memória nas mesclagens verticais. #59340 (Anton Popov).
  • Evite consumo excessivo de memória durante a inicialização do Keeper em mais situações. #58455 (Antonio Andelic).
  • Melhoria no Keeper: redução do uso de memória do Keeper para nós armazenados. #59002 (Antonio Andelic).
  • Implementação de FINAL mais amigável ao cache. Observação sobre a mudança de comportamento: anteriormente, consultas com o modificador FINAL que liam com um único stream (por exemplo, max_threads = 1) produziam saída ordenada sem uma cláusula ORDER BY explicitamente especificada. Isso não é mais garantido quando enable_vertical_final = true (e esse é o padrão). #54366 (Duc Canh Le).
  • Evita cópia extra em ReadBufferFromIStream, que é usado, por exemplo, para leitura do S3. #56961 (Nikita Taranov).
  • Otimização da função de elemento de array quando a entrada é Array(Map)/Array(Array(Num)/Array(Array(String))/Array(BigInt)/Array(Decimal). As implementações anteriores faziam mais alocações do que o necessário. O ganho de desempenho com a otimização chega a ~6x, especialmente quando o tipo de entrada é Array(Map). #56403 (李扬).
  • Ler a coluna uma única vez ao ler mais de uma subcoluna dela em partes compactas. #57631 (Kruglov Pavel).
  • Reescrita da AST da função sum(column + constant). Isso está disponível como uma etapa de otimização do Analisador #57853 (Jiebin Sun).
  • A função match agora é avaliada usando os índices de skipping ngrambf_v1 e tokenbf_v1. #57882 (凌涛).
  • A avaliação da função match agora usa índices invertidos. #58284 (凌涛).
  • O FINAL do MergeTree não compara linhas de uma mesma parte não L0. #58142 (Duc Canh Le).
  • Acelerar chamadas de iota (preenchimento de array com números consecutivos). #58271 (Raúl Marín).
  • Melhoria de desempenho de MIN/MAX para tipos não numéricos. #58334 (Raúl Marín).
  • Otimize a combinação de filtros (como em PREWHERE em múltiplos estágios) com intrínsecos BMI2/SSE #58800 (Zhiguo Zhou).
  • Use uma thread a menos no clickhouse-local. #58968 (Alexey Milovidov).
  • Melhora no desempenho da função multiIf quando o tipo é Nullable. #57745 (KevinyhZou).
  • Adiciona SYSTEM JEMALLOC PURGE para liberar páginas jemalloc não utilizadas, SYSTEM JEMALLOC [ ENABLE | DISABLE | FLUSH ] PROFILE para controlar o perfil do jemalloc se o profiler estiver habilitado. Adiciona comandos 4LW relacionados ao jemalloc no Keeper: jmst para gerar um dump das estatísticas do jemalloc, jmfp, jmep, jmdp para controlar o perfil do jemalloc se o profiler estiver habilitado. #58665 (Antonio Andelic).
  • Menor consumo de memória nos backups para S3. #58962 (Vitaly Baranov).

Melhoria

  • Adicionados comentários (breves descrições) a todas as colunas das tabelas de sistema. Há vários motivos para isso: - Usamos bastante as tabelas de sistema, e às vezes pode ser muito difícil para o desenvolvedor entender a finalidade e o significado de uma determinada coluna. - Alteramos com frequência as tabelas de sistema (adicionando novas ou modificando as existentes), e a documentação delas está sempre desatualizada. Por exemplo, dê uma olhada na página de documentação de system.parts. Faltam muitas colunas - Gostaríamos, no futuro, de gerar a documentação diretamente do ClickHouse. #58356 (Nikita Mikhaylov).
  • Permite consultas sem alias para subconsultas no PASTE JOIN. #58654 (Yarik Briukhovetskyi).
  • Ativa a integração de MySQL/MariaDB no macOS. Fecha #21191. #46316 (Alexey Milovidov) (Robert Schulze).
  • Desabilitado max_rows_in_set_to_optimize_join por padrão. #56396 (vdimir).
  • Adicionado o parâmetro de configuração <host_name>, que permite evitar resolver nomes de host em consultas DDL com ON CLUSTER e em motores de banco de dados Replicated. Isso reduz a possibilidade de a fila ficar travada em caso de alteração na definição do cluster. Fecha #57573. #57603 (Nikolay Degterinsky).
  • Aumente load_metadata_threads para 16 no cache do sistema de arquivos. Isso fará o servidor iniciar mais rápido. #57732 (Alexey Milovidov).
  • Adicionada a capacidade de limitar a taxa de merges/mutações (max_mutations_bandwidth_for_server/max_merges_bandwidth_for_server). #57877 (Azat Khuzhin).
  • Substituiu a coluna não documentada (booleana) is_hot_reloadable na tabela de sistema system.server_settings pela coluna (Enum8) changeable_without_restart, com os valores possíveis No, Yes, IncreaseOnly e DecreaseOnly. A coluna também foi documentada. #58029 (skyoct).
  • A descoberta de cluster permite definir nome de usuário e senha, fecha #58063. #58123 (vdimir).
  • Suporte para parâmetros de consulta em ALTER TABLE ... PART. #58297 (Azat Khuzhin).
  • Criar consumidores para tabelas do Kafka sob demanda (mas mantê-los por algum tempo — kafka_consumers_pool_ttl_ms, desde o último uso); isso deve corrigir o problema com as estatísticas de system.kafka_consumers (que não eram atualizadas quando ninguém lia da tabela do Kafka, o que levava a um vazamento contínuo de memória e à lentidão ao desanexar a tabela) e também faz com que este PR volte a habilitar, por padrão, as estatísticas de system.kafka_consumers. #58310 (Azat Khuzhin).
  • sparkBar como alias de sparkbar. #58335 (凌涛).
  • Evite enviar solicitações ComposeObject depois do upload para o GCS. #58343 (Azat Khuzhin).
  • Lida corretamente com chaves com ponto no nome em arquivos XML de configuração. #58354 (Azat Khuzhin).
  • Faz a função format retornar uma constante quando recebe argumentos constantes. Isso encerra #58355. #58358 (Alexey Milovidov).
  • Adicionada a configuração max_estimated_execution_time para separar max_execution_time de max_estimated_execution_time. #58402 (Zhang Yifan).
  • Exibe uma dica quando um nome inválido de mecanismo de banco de dados é usado. #58444 (Bharat Nallan).
  • Adiciona configurações para um melhor controle do tipo de índices no dicionário Arrow. Usa, por padrão, o tipo inteiro com sinal para índices, como recomendado pelo Arrow. Fecha #57401. #58519 (Kruglov Pavel).
  • Implementado #58575 suporte à variável de ambiente CLICKHOUSE_PASSWORD_FILE na execução da imagem Docker. #58583 (Eyal Halpern Shalev).
  • Ao executar algumas consultas que exigem muitos streams para ler dados, antes era gerado o erro "Paste JOIN requires sorted tables only". Agora, o número de streams é ajustado para 1 nesse caso. #58608 (Yarik Briukhovetskyi).
  • Mensagem de erro melhor para INVALID_IDENTIFIER. #58703 (Yakov Olkhovskiy).
  • Tratamento aprimorado de literais numéricos com sinal em normalizeQuery. #58710 (Salvatore Mesoraca).
  • Suporte ao tipo de dado Point para MySQL. #58721 (Kseniia Sumarokova).
  • Ao comparar uma coluna Float32 com uma string constante, leia a string como Float32 (em vez de Float64). #58724 (Raúl Marín).
  • Melhorada a compatibilidade com S3, com adição de suporte ao armazenamento ECloud EOS. #58786 (xleoken).
  • Permite que KILL QUERY cancele backups / restaurações. Este PR também torna visíveis em system.processes os backups e as restaurações em execução. Além disso, agora há uma nova configuração na configuração do servidor: shutdown_wait_backups_and_restores (default=true), que faz com que o servidor, ao ser desligado, espere a conclusão de todos os backups e restaurações em execução ou simplesmente os cancele. #58804 (Vitaly Baranov).
  • Formato Avro com suporte ao codec ZSTD. Corrige #58735. #58805 (flynn).
  • A interface MySQL ganhou suporte às configurações net_write_timeout e net_read_timeout. net_write_timeout é mapeada para a configuração nativa send_timeout do ClickHouse e, da mesma forma, net_read_timeout para receive_timeout. Foi corrigido um problema em que só era possível definir a configuração MySQL sql_select_limit se toda a instrução estivesse em letras maiúsculas. #58835 (Serge Klochkov).
  • Uma mensagem de exceção melhor em caso de conflito ao criar Dicionário e tabela com o mesmo nome. #58841 (Yarik Briukhovetskyi).
  • Certifique-se de que, para discos personalizados (criados a partir de SQL), filesystem_caches_path (um prefixo de diretório comum para todos os caches do filesystem) ou custom_cached_disks_base_directory (um prefixo de diretório comum apenas para caches do filesystem criados a partir de discos personalizados) esteja especificado na configuração do servidor. custom_cached_disks_base_directory tem prioridade maior para discos personalizados em relação a filesystem_caches_path, que é usado se o primeiro não estiver presente. A configuração path do filesystem cache deve estar dentro desse diretório; caso contrário, será lançada uma exceção, impedindo a criação do disco. Isso não afetará discos criados em uma versão mais antiga cujo servidor tenha sido atualizado — nesse caso, a exceção não será lançada para permitir que o servidor seja iniciado com sucesso. custom_cached_disks_base_directory foi adicionado à configuração padrão do servidor como /var/lib/clickhouse/caches/. Fecha #57825. #58869 (Kseniia Sumarokova).
  • A interface do MySQL passou a ser compatível com as consultas SHOW WARNINGS/SHOW COUNT(*) WARNINGS, embora o resultado retornado seja sempre um conjunto vazio. #58929 (Serge Klochkov).
  • Ignorar réplicas indisponíveis ao executar INSERT SELECT distribuído em paralelo. #58931 (Alexander Tokmakov).
  • Exibe o nível de log com descrição textual ao habilitar a formatação estruturada de logs em JSON. #58936 (Tim Liou).
  • A interface MySQL passou a oferecer suporte às instruções CAST(x AS SIGNED) e CAST(x AS UNSIGNED) por meio de aliases de tipos de dados: SIGNED para Int64 e UNSIGNED para UInt64. Isso melhora a compatibilidade com ferramentas de BI, como o Looker Studio. #58954 (Serge Klochkov).
  • Diretório de trabalho alterado para o caminho de dados no contêiner Docker. #58975 (cangyin).
  • Adicionada a configuração para Azure Blob Storage azure_max_unexpected_write_error_retries, que também pode ser definida no arquivo de configuração, na seção azure. #59001 (SmitaRKulkarni).
  • Permitir que o servidor inicie com uma tabela de lago de dados corrompida. Fecha #58625. #59080 (Kseniia Sumarokova).
  • Permite ignorar a evolução do schema no engine de tabela Iceberg e ler todos os dados usando o schema especificado pelo usuário na criação da tabela ou o schema mais recente analisado a partir dos metadados no momento da criação da tabela. Isso é feito por meio da configuração iceberg_engine_ignore_schema_evolution, que vem desabilitada por padrão. Observe que habilitar essa configuração pode levar a resultados incorretos, pois, em caso de evolução do schema, todos os data files serão lidos usando o mesmo schema. #59133 (Kruglov Pavel).
  • Proíba operações mutáveis (INSERT/ALTER/OPTIMIZE/…) em armazenamentos somente leitura/de gravação única com o erro TABLE_IS_READ_ONLY apropriado (para evitar sobras). Evite deixar sobras em discos de gravação única (format_version.txt) em CREATE/ATTACH. Ignore DROP para ReplicatedMergeTree (assim como para MergeTree). Corrija a iteração em s3_plain (MetadataStorageFromPlainObjectStorage::iterateDirectory). Observe que somente leitura corresponde ao disco web, e gravação única, a s3_plain. #59170 (Azat Khuzhin).
  • Corrige um erro na coluna experimental _block_number que poderia causar um erro lógico durante uma combinação complexa de ALTERs e merges. Corrige #56202. Substitui #58601. #59295 (alesapin).
  • A UI Play reconhece quando uma exceção é retornada em JSON. Ajuste para #52853. #59303 (Alexey Milovidov).
  • O handler HTTP /binary permite especificar usuário, host e, opcionalmente, senha na query string. #59311 (Alexey Milovidov).
  • Adiciona suporte a backups para tabelas compactadas em memória. Isso fecha #57893. #59315 (Alexey Milovidov).
  • Suporte à cláusula FORMAT em consultas BACKUP e RESTORE. #59338 (Vitaly Baranov).
  • A função concatWithSeparator agora aceita tipos de argumento arbitrários (em vez de apenas argumentos String e FixedString). Por exemplo, SELECT concatWithSeparator('.', 'number', 1) agora retorna number.1. #59341 (Robert Schulze).

Melhoria de build/testes/empacotamento

  • Melhora os aliases do binário clickhouse (agora ch/clickhouse é clickhouse-local ou clickhouse, dependendo dos argumentos) e adiciona autocompletar no bash para os novos aliases. #58344 (Azat Khuzhin).
  • Adiciona ao CI uma verificação de alterações em settings para garantir que todas as mudanças em settings sejam refletidas no histórico de alterações de settings. #58555 (Kruglov Pavel).
  • Usa tabelas anexadas diretamente do S3 em testes stateful. #58791 (Alexey Milovidov).
  • Salva todo o fuzzer.log como um arquivo, em vez de apenas as últimas 100 mil linhas. tail -n 100000 frequentemente remove linhas com definições de tabelas. Exemplo:. #58821 (Dmitry Novik).
  • Habilita Rust no macOS com Aarch64 (isso vai adicionar busca difusa no cliente com skim e a linguagem PRQL, embora eu ache que quase ninguém hospede o ClickHouse no darwin, então eu diria que isso serve principalmente para a busca difusa no cliente). #59272 (Azat Khuzhin).
  • Corrige um problema de aggregation em clusters mistos x86_64 e ARM #59132 (Harry Lee).

Correção de bug (mau funcionamento visível para o usuário em uma versão estável oficial)

  • Adicionada a conversão das chaves de junção para LowCardinality aninhado #51550 (vdimir).
  • Achatar apenas o tipo Nested de fato quando flatten_nested=1, não todos os Array(Tuple) #56132 (Kruglov Pavel).
  • Corrige um bug em projeções e na configuração aggregate_functions_null_for_empty durante a inserção. #56944 (Amos Bird).
  • Corrigida uma possível exceção devido a um UUID de perfil desatualizado #57263 (Vasily Nemkov).
  • Correção do funcionamento com buffers de leitura no StreamingFormatExecutor #57438 (Kruglov Pavel).
  • Ignorar MVs com tabela de destino removida ao enviar para views #57520 (Kruglov Pavel).
  • Elimina uma possível condição de corrida entre ALTER_METADATA e MERGE_PARTS #57755 (Azat Khuzhin).
  • Corrige o bug na ordem das expressões no group by com rollup #57786 (Chen768959).
  • Uma correção para o recurso obsoleto de replicação “zero-copy”: corrige blobs perdidos após excluir uma réplica com partes desanexadas corrompidas #58333 (Alexander Tokmakov).
  • Permitir que os usuários usem links simbólicos em user_files_path #58447 (Duc Canh Le).
  • Corrige um travamento quando a tabela graphite não possui uma função agg #58453 (Duc Canh Le).
  • Adiar a leitura de StorageKafka para permitir múltiplas leituras em visões materializadas #58477 (János Benjamin Antal).
  • Corrige um caso absurdo de partes sobrepostas #58482 (Alexander Tokmakov).
  • Desabilitado o MergeTreePrefetchedReadPool para consultas somente com LIMIT #58505 (Maksim Kita).
  • Habilita bancos de dados comuns durante a restauração #58520 (Jihyuk Bok).
  • Corrige a leitura do threadpool do Apache Hive para ORC/Parquet/… #58537 (sunny).
  • Ocultar credenciais na coluna base_backup_name de system.backup_log #58550 (Daniel Pozo Escalona).
  • toStartOfInterval para arredondamento de valores em milissegundos e microssegundos #58557 (Yarik Briukhovetskyi).
  • Desativado max_joined_block_rows no ConcurrentHashJoin #58595 (vdimir).
  • Corrigido o join usando Nullable no analyzer antigo #58596 (vdimir).
  • makeDateTime64: Permite argumento de fração não constante #58597 (Robert Schulze).
  • Corrige possível desreferenciamento de NULL ao simbolizar frames inline #58607 (Azat Khuzhin).
  • Melhora no isolamento das entradas do cache de consultas em usuários recriados ou em trocas de função #58611 (Robert Schulze).
  • Corrige a falha na análise da chave de partição ao fazer a otimização de projeção #58638 (Amos Bird).
  • Cache de consultas: correção da cota por usuário #58731 (Robert Schulze).
  • Corrigido o particionamento de streams em funções de janela paralelas #58739 (Dmitry Novik).
  • Corrige a chamada duplicada de destroy ao lançar uma exceção em addBatchLookupTable8 #58745 (Raúl Marín).
  • Não processar requisições no Keeper durante o desligamento #58765 (Antonio Andelic).
  • Corrigida uma desreferenciação de ponteiro nulo em SlabsPolygonIndex::find #58771 (Yarik Briukhovetskyi).
  • Correção da função JSONExtract para colunas LowCardinality(Nullable) #58808 (vdimir).
  • Uma correção para o acúmulo inesperado de consumo de memória ao criar um grande número de tabelas com CREATE e DROP. #58831 (Maksim Kita).
  • Armazenamento de log de arquivo com múltiplas leituras em mv #58877 (János Benjamin Antal).
  • Restrição do ID da chave de acesso do S3. #58900 (MikhailBurdukov).
  • Corrige uma possível queda no clickhouse-local durante o carregamento de sugestões #58907 (Kruglov Pavel).
  • Corrige travamento ao usar indexHint #58911 (Dmitry Novik).
  • Corrige o problema de o StorageURL esquecer os cabeçalhos ao reiniciar o servidor #58933 (Michael Kolupaev).
  • Analisador: corrige a substituição do armazenamento pelo bloco de inserção #58958 (Yakov Olkhovskiy).
  • Corrigida a operação de seek no ReadBufferFromZipArchive #58966 (Michael Kolupaev).
  • Correção para índices invertidos experimentais (não use em produção): DROP INDEX de índice invertido agora remove todos os arquivos relevantes do armazenamento persistente #59040 (mochi).
  • Corrige uma condição de corrida em query_factories_info #59049 (Kseniia Sumarokova).
  • Desabilitar nova tentativa para o erro “Too many redirects” #59099 (skyoct).
  • Corrigido deadlock ao encerrar banco de dados que não foi iniciado #59137 (Sergei Trifonov).
  • Correção: LIMIT BY e LIMIT em consulta distribuída #59153 (Igor Nikonov).
  • Corrige travamento com fuso horário Nullable em toString #59190 (Yarik Briukhovetskyi).
  • Corrige falha nos metadados do Iceberg causada por caminhos de arquivo inválidos #59275 (Kruglov Pavel).
  • Corrigido o nome da arquitetura na seleção do alvo Rust #59307 (p1rattttt).
  • Corrige um erro lógico relacionado ao “not-ready set” ao consultar system.tables com uma subconsulta na cláusula IN. #59351 (Nikolai Kochetov).
Última modificação em 10 de junho de 2026