Pular para o conteúdo principal

Lançamento do ClickHouse 22.12, 2022-12-15. Apresentação, Vídeo

Este lançamento contém um comentário incorreto no serviço systemd que pode comprometer a instalação do ClickHouse durante a atualização em algumas distribuições Linux. O serviço systemd altera as permissões de proprietário do diretório /run/systemd, fazendo com que todas as operações subsequentes do systemd falhem. Recomendamos não atualizar para esta versão e, em vez disso, atualizar para uma versão mais recente do ClickHouse.Consulte este issue no GitHub para mais detalhes: https://github.com/ClickHouse/ClickHouse/issues/48285

Notas de upgrade

  • Foi corrigida uma incompatibilidade retroativa na (de)serialização dos estados das funções de agregação min, max, any*, argMin, argMax com argumento String. A incompatibilidade afeta as branches 22.9, 22.10 e 22.11 (corrigida a partir de 22.9.6, 22.10.4 e 22.11.2, respectivamente). Algumas versões menores das branches 22.3, 22.7 e 22.8 também são afetadas: 22.3.13…22.3.14 (corrigido a partir de 22.3.15), 22.8.6…22.8.9 (corrigido a partir de 22.8.10), 22.7.6 e posteriores (não será corrigido na 22.7; recomendamos fazer upgrade de 22.7.* para 22.8.10 ou posterior). Esta nota de lançamento não se aplica a usuários que nunca usaram versões afetadas. Versões incompatíveis acrescentam um '\0' extra às strings ao ler os estados das funções de agregação mencionadas acima. Por exemplo, se uma versão mais antiga salvou o estado de anyState('foobar') em state_column, então a versão incompatível exibirá 'foobar\0' em anyMerge(state_column). As versões incompatíveis também gravam os estados das funções de agregação sem o '\0' no final. Versões mais recentes (que contêm a correção) conseguem ler corretamente dados gravados por todas as versões, incluindo as incompatíveis, exceto em um caso específico. Se uma versão incompatível salvou um estado com uma string que realmente termina com o caractere nulo, então uma versão mais recente removerá o '\0' final ao ler o estado da função de agregação afetada. Por exemplo, se uma versão incompatível salvou o estado de anyState('abrac\0dabra\0') em state_column, então versões mais recentes exibirão 'abrac\0dabra' em anyMerge(state_column). O problema também afeta consultas distribuídas quando uma versão incompatível opera em um cluster junto com versões mais antigas ou mais recentes. #43038 (Alexander Tokmakov, Raúl Marín). Observação: todas as compilações oficiais do ClickHouse já incluem os patches. Isso não é necessariamente verdade para compilações não oficiais de terceiros, que devem ser evitadas.

Nova funcionalidade

  • Adicionado o formato de entrada/saída BSONEachRow. Nesse formato, o ClickHouse formata/interpreta cada linha como um documento BSON separado, e cada coluna é formatada/interpretada como um único campo BSON, com o nome da coluna como chave. #42033 (mark-polokhov).
  • Adicionado o algoritmo JOIN grace_hash; ele pode ser habilitado com SET join_algorithm = 'grace_hash'. #38191 (BigRedEye, Vladimir C).
  • Permite configurar regras e verificações de complexidade de senha para criar e alterar usuários. #43719 (Nikolay Degterinsky).
  • Mascara informações sensíveis nos logs; mascara trechos sigilosos na saída das consultas SHOW CREATE TABLE e SELECT FROM system.tables. Também resolve #41418. #43227 (Vitaly Baranov).
  • Adicionada a sintaxe GROUP BY ALL: #37631. #42265 (刘陶峰).
  • Adicionada a sintaxe FROM table SELECT column. #41095 (Nikolay Degterinsky).
  • Adicionada a função concatWithSeparator e o alias concat_ws, para compatibilidade com Spark SQL. Também foi adicionada a função concatWithSeparatorAssumeInjective como uma variante para habilitar a otimização de GROUP BY, de forma semelhante a concatAssumeInjective. #43749 (李扬).
  • Foram adicionadas as funções multiplyDecimal e divideDecimal para operações decimais com precisão fixa. #42438 (Andrey Zvonov).
  • Adicionada a tabela system.moves com a lista das partes que estão sendo movidas no momento. #42660 (Sergei Trifonov).
  • Adicionar suporte ao endpoint incorporado do Prometheus para o ClickHouse Keeper. #43087 (Antonio Andelic).
  • Suporte a literais numéricos com _ como separador, por exemplo, 1_000_000. #43925 (jh0x).
  • Adicionada a possibilidade de usar um array como segundo parâmetro da função cutURLParameter. Isso permitirá remover múltiplos parâmetros. Fecha #6827. #43788 (Roman Vasin).
  • Adiciona uma coluna com a expressão do índice na tabela system.data_skipping_indices. #43308 (Guillaume Tassery).
  • Adicionada a coluna engine_full à tabela de sistema databases, para que seja possível acessar a definição completa do engine de um banco de dados por meio das tabelas de sistema. #43468 (凌涛).
  • Adicionada a nova função de hash xxh3. Além disso, o desempenho de xxHash32 e xxHash64 no ARM foi melhorado graças a uma atualização da biblioteca. #43411 (Nikita Taranov).
  • Adicionado suporte para definir restrições nas configurações do MergeTree. Por exemplo, é possível proibir que usuários substituam a storage_policy. #43903 (Sergei Trifonov).
  • Adicionada uma nova configuração input_format_json_read_objects_as_strings, que permite o parsing de objetos JSON aninhados como Strings em todos os formatos de entrada JSON. Essa configuração vem desabilitada por padrão. #44052 (Kruglov Pavel).

Recurso Experimental

  • Suporte à desduplicação para inserts assíncronos. Antes dessa mudança, inserts assíncronos não suportavam desduplicação, porque vários inserts pequenos coexistiam em um batch inserido. Fecha #38075. #43304 (Han Fei).
  • Adiciona suporte à distância de cosine para o índice experimental Annoy (vector similarity search). #42778 (Filatenkov Artur).
  • Adiciona consultas CREATE / ALTER / DROP NAMED COLLECTION. #43252 (Kseniia Sumarokova). Esse recurso está em desenvolvimento, e as consultas ainda não têm efeito na versão 22.12. Esta entrada de changelog foi adicionada apenas para evitar confusão. Restringe o acesso padrão às named collections ao usuário definido na configuração. Isso exige que show_named_collections = 1 esteja definido para que seja possível visualizá-las. #43325 (Kseniia Sumarokova). A tabela system.named_collections foi introduzida em #43147 (Kseniia Sumarokova).

Melhoria de desempenho

  • Adicionadas as configurações max_streams_for_merge_tree_reading e allow_asynchronous_read_from_io_pool_for_merge_tree. A configuração max_streams_for_merge_tree_reading limita o número de streams de leitura para tabelas MergeTree. A configuração allow_asynchronous_read_from_io_pool_for_merge_tree habilita um pool de E/S em segundo plano para fazer leituras em tabelas MergeTree. Isso pode aumentar o desempenho de queries limitadas por E/S se usada em conjunto com max_streams_to_max_threads_ratio ou max_streams_for_merge_tree_reading. #43260 (Nikolai Kochetov). Isso melhora o desempenho em até 100 vezes em casos de armazenamento com alta latência, baixo número de CPUs e alto número de partes de dados.
  • As configurações merge_tree_min_rows_for_concurrent_read_for_remote_filesystem/merge_tree_min_bytes_for_concurrent_read_for_remote_filesystem não respeitavam a granularidade adaptativa. Linhas grandes não reduziam o número de linhas lidas (como era feito para merge_tree_min_rows_for_concurrent_read/merge_tree_min_bytes_for_concurrent_read), o que podia levar a alto uso de memória ao usar sistemas de arquivos remotos. #43965 (Nikolai Kochetov).
  • Otimizado o número de requisições de listagem ao ZooKeeper ou ClickHouse Keeper ao selecionar uma parte para merge. Antes, isso podia gerar milhares de requisições em alguns casos. Corrige #43647. #43675 (Alexander Tokmakov).
  • A otimização agora é ignorada se max_size_to_preallocate_for_aggregation tiver um valor muito pequeno. O valor padrão dessa configuração foi aumentado para 10^8. #43945 (Nikita Taranov).
  • Acelera o desligamento do servidor ao evitar a limpeza de partes de dados antigas. Isso é desnecessário após https://github.com/ClickHouse/ClickHouse/pull/41145. #43760 (Sema Checherinda).
  • O merge no initiator agora usa a mesma abordagem com limite de memória que o merge de resultados locais de agregação, se enable_memory_bound_merging_of_aggregation_results estiver definido. #40879 (Nikita Taranov).
  • Melhoria no Keeper: tenta sincronizar logs com o disco em paralelo com a replicação. #43450 (Antonio Andelic).
  • Melhoria no Keeper: as requisições são agrupadas em batch com mais frequência. O batching pode ser controlado com a nova configuração max_requests_quick_batch_size. #43686 (Antonio Andelic).

Melhoria

  • Implementa dependências referenciais e as usa para criar tabelas na ordem correta durante a restauração a partir de um backup. #43834 (Vitaly Baranov).
  • Substitua as UDFs na consulta CREATE para evitar falhas durante o carregamento na inicialização. Além disso, agora as UDFs podem ser usadas como expressões DEFAULT para colunas. #43539 (Antonio Andelic).
  • Mude a forma como as seguintes consultas excluem partes: TRUNCATE TABLE, ALTER TABLE DROP PART, ALTER TABLE DROP PARTITION. Agora, essas consultas criam partes vazias que cobrem as partes antigas. Isso faz com que a consulta TRUNCATE funcione sem um bloqueio exclusivo posterior, o que significa que as leituras concorrentes não são bloqueadas. A durabilidade também foi garantida em todas essas consultas. Se a solicitação for bem-sucedida, nenhuma parte ressuscitada aparecerá depois. Observe que a atomicidade é alcançada apenas no escopo da transação. #41145 (Sema Checherinda).
  • A consulta SET param_x não exige mais a serialização manual do valor do parâmetro como string. Por exemplo, a consulta SET param_a = '[\'a\', \'b\']' agora pode ser escrita como SET param_a = ['a', 'b']. #41874 (Nikolay Degterinsky).
  • Mostrar as linhas lidas no indicador de progresso ao ler da STDIN pelo cliente. Fecha #43423. #43442 (Kseniia Sumarokova).
  • Exibir a barra de progresso durante a leitura da função de tabela / engine S3. #43454 (Kseniia Sumarokova).
  • A barra de progresso mostrará tanto as linhas lidas quanto as gravadas. #43496 (Ilya Yatsishin).
  • filesystemAvailable e funções relacionadas passam a oferecer suporte a um argumento opcional com o nome do disco, e filesystemFree é alterada para filesystemUnreserved. Fecha #35076. #42064 (flynn).
  • Integração com LDAP: aumento do valor padrão de search_limit para 256 e adição de uma opção de configuração do servidor LDAP para alterá-lo para um valor arbitrário. Fecha: #42276. #42461 (Vasily Nemkov).
  • Permite também remover informações sensíveis (consulte query_masking_rules no arquivo de configuração) das mensagens de exceção. Resolve #41418. #42940 (filimonov).
  • Oferece suporte a consultas como SHOW FULL TABLES ... para compatibilidade com o MySQL. #43910 (Filatenkov Artur).
  • Melhoria no Keeper: adiciona o comando 4lw rqld, que permite definir manualmente um nó como líder. #43026 (JackyWoo).
  • Aplicar à async INSERT de Distributed as configurações de timeout de conexão definidas na consulta. #43156 (Azat Khuzhin).
  • A função unhex agora é compatível com argumentos FixedString. issue42369. #43207 (DR).
  • É dada prioridade à exclusão de partes totalmente expiradas, de acordo com as regras de TTL; veja #42869. #43222 (zhongyuankai).
  • Indicação de carga da CPU mais precisa e responsiva no clickhouse-client. #43307 (Sergei Trifonov).
  • Suporte à leitura de subcolunas de tipos aninhados no armazenamento S3 e na função de tabela s3, com os formatos Parquet, Arrow e ORC. #43329 (chen).
  • Adicionada a coluna table_uuid à tabela system.parts. #43404 (Azat Khuzhin).
  • Adicionada a opção no cliente para exibir o número de linhas processadas localmente no modo não interativo (--print-num-processed-rows). #43407 (jh0x).
  • Implemente a otimização aggregation-in-order em um plano de consulta. Ela vem habilitada por padrão (mas funciona apenas em conjunto com optimize_aggregation_in_order, que vem desabilitado por padrão). Defina query_plan_aggregation_in_order = 0 para usar a versão anterior baseada em AST. #43592 (Nikolai Kochetov).
  • Permite coletar profile events com trace_type = 'ProfileEvent' em system.trace_log a cada incremento, com a pilha de chamadas atual, o nome do profile event e o valor do incremento. Isso pode ser habilitado pela configuração trace_profile_events e usado para investigar o desempenho das consultas. #43639 (Anton Popov).
  • Adicionada a nova configuração input_format_max_binary_string_size para limitar o tamanho de strings no formato RowBinary. #43842 (Kruglov Pavel).
  • Quando o ClickHouse fazia uma solicitação a um servidor HTTP remoto e ele retornava um erro, o código HTTP numérico não era exibido corretamente na mensagem de exceção. Fecha #43919. #43920 (Alexey Milovidov).
  • Relatar corretamente erros em consultas mesmo quando a otimização de múltiplas junções estiver em andamento. #43583 (Salvatore).

Melhoria em Compilação/Testes/Empacotamento

  • A integração com o systemd agora notifica corretamente o systemd de que o serviço foi de fato iniciado e está pronto para atender solicitações. #43400 (Коренберг Марк).
  • Foi adicionada a opção de compilar o ClickHouse com OpenSSL usando o OpenSSL FIPS Module. Esse tipo de compilação não foi testado para validar a segurança e não é suportado. #43991 (Boris Kuschel).
  • Atualização para o novo codec de compressão DeflateQpl, implementado em uma PR anterior (detalhes: https://github.com/ClickHouse/ClickHouse/pull/39494). Este patch melhora o codec nos seguintes aspectos: 1. atualização do QPL v0.2.0 para o QPL v0.3.0 Intel® Query Processing Library (QPL) 2. melhoria do arquivo CMake para corrigir problemas de compilação do QPL v0.3.0. 3. vinculação da biblioteca QPL com libaccel-config em tempo de compilação, em vez do carregamento em tempo de execução usado no QPL v0.2.0 (dlopen) 4. correção de um problema de impressão de log em CompressionCodecDeflateQpl.cpp. #44024 (jasperzhu).

comportamento incorreto perceptível ao usuário em lançamento oficial estável ou pré-estável

  • Corrigido um bug que poderia causar deadlock ao usar inserções assíncronas. #43233 (Anton Popov).
  • Corrige uma parte da lógica incorreta na otimização em nível de AST optimize_normalize_count_variants. #43873 (Duc Canh Le).
  • Corrige um caso em que as mutações não avançam quando as somas de verificação não coincidem entre as réplicas (por exemplo, devido a uma mudança no formato dos dados durante uma atualização). #36877 (nvartolomei).
  • Corrige a otimização skip_unavailable_shards, que não funcionava com a table function hdfsCluster. #43236 (chen).
  • Corrige o suporte de s3 ao caractere curinga ?. Fecha #42731. #43253 (chen).
  • Corrige as funções arrayFirstOrNull e arrayLastOrNull para que retornem null quando o array contém elementos Nullable. #43274 (Duc Canh Le).
  • Corrige a contabilização incorreta de UserTimeMicroseconds/SystemTimeMicroseconds relacionada às tabelas Kafka. #42791 (Azat Khuzhin).
  • Não suprima exceções em discos web. Corrija as retentativas do disco web. #42800 (Azat Khuzhin).
  • Corrigida a condição de corrida (lógica) entre inserções e a remoção de visões materializadas. Essa condição de corrida ocorria quando uma visão materializada era removida ao mesmo tempo que um INSERT: as MVs estavam presentes como dependência da inserção no início da execução, mas, quando a cadeia de inserção tentava acessá-la, a tabela já havia sido removida, produzindo uma exceção UNKNOWN_TABLE ou TABLE_IS_DROPPED e interrompendo a inserção. Após essa alteração, evitamos essas exceções e simplesmente prosseguimos com a inserção se a dependência não existir mais. #43161 (AlfVII).
  • Corrige comportamento indefinido na função quantiles, o que pode levar ao uso de memória não inicializada. Encontrado por fuzzer. Isso fecha #44066. #44067 (Alexey Milovidov).
  • Foi adicionada uma verificação adicional para tamanho descompactado igual a zero em CompressionCodecDelta. #43255 (Nikita Taranov).
  • Achatar arrays do Parquet para evitar um problema com dados inconsistentes em arrays. Esses arquivos incorretos podem ser gerados pelo Apache Iceberg. #43297 (Arthur Passos).
  • Corrige conversão inválida de coluna LowCardinality ao usar execução de função em curto-circuito. #43311 (Kruglov Pavel).
  • Corrigidas consultas com SAMPLE BY e otimização de prewhere em tabelas que usam o mecanismo Merge. #43315 (Antonio Andelic).
  • Verifique e compare o conteúdo do arquivo format_version em MergeTreeData para que as tabelas possam ser carregadas mesmo se a política de armazenamento tiver sido alterada. #43328 (Antonio Andelic).
  • Corrige o possível erro lógico (muito improvável) “Nenhuma coluna para desfazer” durante INSERT em tabelas Buffer. #43336 (Azat Khuzhin).
  • Corrige um bug que permitia ao parser processar uma quantidade ilimitada de parênteses em uma única função quando allow_function_parameters está definido. #43350 (Nikolay Degterinsky).
  • MaterializeMySQL (recurso experimental) oferece suporte ao DDL: drop table t1, t2 e é compatível com a maior parte do DDL DROP do MySQL. #43366 (zzsmdfj).
  • session_log (recurso experimental): Corrigida a impossibilidade de fazer login (devido à falha na criação da entrada session_log) em um caso muito raro de perfis de configuração corrompidos. #42641 (Vasily Nemkov).
  • Corrige o possível erro Cannot create non-empty column with type Nothing nas funções if/multiIf. Fecha #43356. #43368 (Kruglov Pavel).
  • Corrigido um erro quando um filtro em nível de linha usa o valor padrão de uma coluna. #43387 (Alexander Gololobov).
  • Consulta com DISTINCT + LIMIT BY + LIMIT pode retornar menos linhas do que o esperado. Corrige #43377. #43410 (Igor Nikonov).
  • Corrigido sumMap para Nullable(Decimal(...)). #43414 (Azat Khuzhin).
  • Corrige date_diff para hora/minuto no macOS. Fecha #42742. #43466 (zzsmdfj).
  • Corrige a contabilização incorreta da memória causada por merges/mutações. #43516 (Azat Khuzhin).
  • Corrigida a análise da chave primária em condições que envolvem toString(enum). #43596 (Nikita Taranov). Esse erro foi identificado por @tisonkun.
  • Garanta a consistência quando o clickhouse-copier atualizar o status e attach_is_done no Keeper após a conclusão do attach da partição. #43602 (lzydmxy).
  • Durante a recuperação de uma réplica perdida de um banco de dados Replicated (funcionalidade experimental), pode haver casos em que seja necessário trocar atomicamente os nomes de duas tabelas (use EXCHANGE). Anteriormente, tentávamos usar duas consultas RENAME, o que obviamente não funcionava e, além disso, fazia com que todo o processo de recuperação da réplica do banco de dados falhasse. #43628 (Nikita Mikhaylov).
  • Corrige o caso em que a função s3Cluster lança o erro NOT_FOUND_COLUMN_IN_BLOCK. Fecha #43534. #43629 (chen).
  • Corrige o possível erro lógico Array sizes mismatched ao analisar um objeto JSON com arrays com os mesmos nomes de chave, mas com níveis de aninhamento diferentes. Fecha #43569. #43693 (Kruglov Pavel).
  • Corrigida uma possível exceção em caso de GROUP BY distribuído com uma coluna ALIAS entre as chaves de agregação. #43709 (Nikita Taranov).
  • Corrige um bug que pode resultar em projeções corrompidas se a replicação zero-copy (recurso experimental) estiver habilitada e sendo usada. #43764 (alesapin).
  • Corrigido o uso de upload multipart para objetos muito grandes no AWS S3. #43824 (ianton-ru).
  • Corrigido ALTER ... RESET SETTING com ON CLUSTER. O problema poderia afetar apenas uma réplica. Corrige #43843. #43848 (Elena Torró).
  • Corrige um erro lógico em JOIN com o mecanismo de tabela Join no lado direito ao usar USING. #43963 (Vladimir C). Corrige um bug na ordem incorreta das chaves no mecanismo de tabela Join. #44012 (Vladimir C).
  • Correção no Keeper: gerar uma exceção se a porta entre servidores do Raft já estiver em uso. #43984 (Antonio Andelic).
  • Corrigido o argumento posicional de ORDER BY (exemplo: ORDER BY 1, 2) em casos de eliminação de colunas desnecessárias em subconsultas. Fecha #43964. #43987 (Kseniia Sumarokova).
  • Corrigida uma exceção quando uma subconsulta contém HAVING, mas não contém uma agregação de fato. #44051 (Nikita Taranov).
  • Corrige uma race condition no multipart upload do S3. Essa race condition poderia causar o erro Part number must be an integer between 1 and 10000, inclusive. (S3_ERROR) durante a restauração de um backup. #44065 (Vitaly Baranov).

Lançamento do ClickHouse 22.11, 2022-11-17. Apresentação, Vídeo

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

  • A família de funções JSONExtract agora tentará converter os valores para o tipo solicitado. #41502 (Márcio Martins).

Nova funcionalidade

  • Adiciona suporte a novas tentativas durante INSERTs em ReplicatedMergeTree quando uma sessão com ClickHouse Keeper é perdida. Além da tolerância a falhas, também busca proporcionar uma melhor experiência ao usuário, evitando retornar um erro durante o insert se o Keeper for reiniciado (por exemplo, devido a uma atualização). #42607 (Igor Nikonov).
  • Adicionar os motores de tabela Hudi e DeltaLake em modo somente leitura, apenas para tabelas no S3. #41054 (Daniil Rubin, Kseniia Sumarokova).
  • Adicionada a função de tabela hudi e deltaLake. #43080 (flynn).
  • Suporte a intervalos de tempo compostos. 1. As operações de adição, subtração e negação agora estão disponíveis para Intervals. Nos casos em que os tipos de Intervals forem diferentes, eles serão transformados em um Tuple desses tipos. 2. Uma tupla de intervalos pode ser adicionada a ou subtraída de um campo Date/DateTime. 3. Foi adicionado o parsing de Intervals de tipos diferentes, por exemplo: INTERVAL '1 HOUR 1 MINUTE 1 SECOND'. #42195 (Nikolay Degterinsky).
  • Adicionado suporte ao padrão glob ** para percorrer diretórios recursivamente no sistema de arquivos e no S3. Resolve #36316. #42376 (SmitaRKulkarni).
  • Introduz o tipo de disco s3_plain para operações de gravação única e múltiplas leituras. Implementa o ATTACH de tabela MergeTree no disco s3_plain. #42628 (Azat Khuzhin).
  • Adicionadas as políticas de nível de linha aplicadas ao system.query_log. #39819 (Vladimir Chebotaryov).
  • Adicionado o comando de quatro letras csnp para criar snapshots manualmente no ClickHouse Keeper. Além disso, lgif foi adicionado para obter informações do Raft de um nó específico (por exemplo, o índice do último snapshot criado e o índice do último log confirmado). #41766 (JackyWoo).
  • Adicionada a função ascii, como no Apache Spark: https://spark.apache.org/docs/latest/api/sql/#ascii. #42670 (李扬).
  • Adiciona a função pmod, que retorna um resultado não negativo com base na operação de módulo. #42755 (李扬).
  • Adicionada a função formatReadableDecimalSize. #42774 (Alejandro).
  • Adicionar a função randCanonical, semelhante à função rand no Apache Spark ou no Impala. A função gera resultados pseudoaleatórios com valores uniformemente distribuídos, independentes e identicamente distribuídos, em [0, 1). #43124 (李扬).
  • Adicionada a função displayName, fechando #36770. #37681 (hongbin).
  • Adiciona a configuração min_age_to_force_merge_on_partition_only para otimizar partes antigas apenas no nível da partição inteira. #42659 (Antonio Andelic).
  • Adicionada uma implementação genérica para named collections estruturadas arbitrárias, tipo de acesso e system.named_collections. #43147 (Kseniia Sumarokova).

Melhoria de desempenho

  • A função match pode usar o índice quando a condição for sobre um prefixo de string. Isso fecha #37333. #42458 (clarkcaoliu).
  • Acelera os operadores AND e OR quando são encadeados. #42214 (Zhiguo Zhou).
  • Suporte a parsing paralelo para o input format LineAsString. Isso melhora o desempenho apenas ligeiramente. Isso fecha #42502. #42780 (Kruglov Pavel).
  • Melhoria de desempenho do ClickHouse Keeper: melhora o desempenho de commit nos casos em que muitos nós diferentes têm estados não confirmados. Isso deve ajudar nos casos em que um nó seguidor não consegue sincronizar rápido o suficiente. #42926 (Antonio Andelic).
  • Uma condição como NOT LIKE 'prefix%' pode usar o índice primário. #42209 (Duc Canh Le).

recurso experimental

  • Suporte ao tipo Object dentro de outros tipos, como Array(JSON). #36969 (Anton Popov).
  • Ignora o evento SAVEPOINT do binlog do MySQL no MaterializedMySQL. #42931 (zzsmdfj). Trata (ignorando) consultas SAVEPOINT no MaterializedMySQL. #43086 (Stig Bakken).

Melhoria

  • Consultas triviais com LIMIT baixo determinarão corretamente o número estimado de linhas a serem lidas, para que o limiar seja verificado corretamente. Fecha #7071. #42580 (Han Fei).
  • Adicionado suporte a parâmetros interativos em consultas INSERT VALUES. #43077 (Nikolay Degterinsky).
  • Adicionado o novo campo allow_readonly em system.table_functions para permitir o uso de funções de tabela no modo somente leitura. Resolve #42414 Implementação: * Adicionado um novo campo allow_readonly à tabela system.table_functions. * Atualizado para usar o novo campo allow_readonly e permitir o uso de funções de tabela no modo somente leitura. Testes: * Adicionado um teste de filesystem em tests/queries/0_stateless/02473_functions_in_readonly_mode.sh Documentação: * Atualizada a documentação em inglês sobre Funções de Tabela. #42708 (SmitaRKulkarni).
  • O system.asynchronous_metrics passa a ter documentação incorporada. Essa documentação também é exportada para o Prometheus. Foi corrigido um erro nas métricas de discos cache: elas eram calculadas apenas para um disco cache arbitrário, em vez de todos eles. Isso fecha #7644. #43194 (Alexey Milovidov).
  • Algoritmo de throttling alterado para token bucket. #42665 (Sergei Trifonov).
  • Mascara senhas e chaves secretas tanto em system.query_log quanto em /var/log/clickhouse-server/*.log e também nas mensagens de erro. #42484 (Vitaly Baranov).
  • Remova as partes cobertas da parte obtida (para evitar possíveis aumentos no atraso da replicação). #39737 (Azat Khuzhin).
  • Se /dev/tty estiver disponível, o progresso em clickhouse-client e clickhouse-local será exibido diretamente no terminal, sem ser escrito no STDERR. Isso permite acompanhar o progresso mesmo se o STDERR for redirecionado para um arquivo, e o arquivo não ficará poluído por sequências de escape do terminal. O progresso pode ser desativado com --progress false. Isso fecha #32238. #42003 (Alexey Milovidov).
  • Adicionado suporte à entrada FixedString nas funções de codificação em base64. #42285 (ltrk2).
  • Adicionadas as colunas bytes_on_disk e path a system.detached_parts. Fecha #42264. #42303 (chen).
  • Melhoria no uso da estrutura da tabela de inserção em table functions: agora, a configuração use_structure_from_insertion_table_in_table_functions tem um novo valor possível — 2, o que significa que o ClickHouse tentará determinar automaticamente se a estrutura da tabela de inserção pode ser usada ou não. Fecha #40028. #42320 (Kruglov Pavel).
  • Corrigida a falta de indicação de progresso em INSERT FROM INFILE. Fecha #42548. #42634 (chen).
  • Refatoração da função tokens para permitir definir o número máximo de tokens retornados por funções relacionadas (desabilitado por padrão). #42673 (李扬).
  • Permite o uso de argumentos Date32 nas funções formatDateTime e FROM_UNIXTIME. #42737 (Roman Vasin).
  • Atualiza o tzdata para 2022f. O México deixará de adotar o horário de verão, exceto nas áreas próximas à fronteira com os EUA: https://www.timeanddate.com/news/time/mexico-abolishes-dst-2022.html. Chihuahua passará a ficar em UTC-6 o ano todo em 2022-10-30. Fiji também deixará de adotar o horário de verão. Veja https://github.com/google/cctz/pull/235 e https://bugs.launchpad.net/ubuntu/+source/tzdata/+bug/1995209. #42796 (Alexey Milovidov).
  • Adicionada a métrica de evento FailedAsyncInsertQuery para inserts assíncronos. #42814 (Krzysztof Góralski).
  • Implementada a otimização read-in-order sobre o plano de consulta. Ela vem habilitada por padrão. Defina query_plan_read_in_order = 0 para usar a versão anterior baseada em AST. #42829 (Nikolai Kochetov).
  • Aumento exponencial do tamanho das partes de upload para backup no S3 para evitar erros relacionados ao limite máximo de 10 000 partes no upload multipart para o S3. #42833 (Vitaly Baranov).
  • Quando a tarefa de merge permanece continuamente ocupada e o espaço em disco é insuficiente, as partes totalmente expiradas não podem ser selecionadas e removidas, o que resulta em falta de espaço em disco. Minha ideia é que, quando a parte inteira expira, não é necessário reservar espaço adicional em disco para garantir a execução normal do TTL. #42869 (zhongyuankai).
  • Adicionada a função oss e o mecanismo de tabela OSS (o que é conveniente para os usuários). oss é totalmente compatível com S3. #43155 (zzsmdfj).
  • Melhorado o relato de erros na coleta de informações relacionadas ao sistema operacional para a tabela system.asynchronous_metrics. #43192 (Alexey Milovidov).
  • Modificar as tabelas INFORMATION_SCHEMA para que o ClickHouse possa se conectar a si mesmo usando o protocolo de compatibilidade com MySQL. Adicionar colunas em vez de aliases (relacionado a #9769). Isso melhorará a compatibilidade com diversos clientes MySQL. #43198 (Filatenkov Artur).
  • Adicionadas algumas funções para garantir compatibilidade com o PowerBI quando ele se conecta usando o protocolo MySQL #42612 (Filatenkov Artur).
  • Melhor usabilidade do Dashboard ao fazer alterações #42872 (Vladimir C).

Melhoria em Compilação/Testes/Empacotamento

  • Executar o SQLancer para cada pull request e commit na branch master. O SQLancer é um fuzzer OpenSource voltado para a detecção automática de bugs lógicos. #42397 (Ilya Yatsishin).
  • Atualização para a versão mais recente do zlib-ng. #42463 (Boris Kuschel).
  • Adicionado suporte para testar o servidor ClickHouse com Jepsen. Aliás, já temos suporte para testar o ClickHouse Keeper com Jepsen. Este pull request estende esse suporte para tabelas Replicated. #42619 (Antonio Andelic).
  • Usar https://github.com/matus-chochlik/ctcache para cache dos resultados do clang-tidy. #42913 (Mikhail f. Shiryaev).
  • Antes da correção, a configuração definida pelo usuário era preservada pelo RPM em $file.rpmsave. Este pull request corrige isso e não substituirá os arquivos do usuário pelos arquivos dos pacotes. #42936 (Mikhail f. Shiryaev).
  • Remover algumas bibliotecas da imagem Docker do Ubuntu. #42622 (Alexey Milovidov).

Correção de bug (comportamento incorreto perceptível ao usuário em lançamento oficial estável ou pré-estável)

  • Atualizado o normalizador para clonar a AST do alias. Resolve #42452 Implementação: * Atualizado o QueryNormalizer para clonar a AST do alias quando ela é substituída. Antes, simplesmente atribuir a mesma AST levava a uma exceção no LogicalExpressinsOptimizer, pois o mesmo pai seria inserido novamente. * Esse bug não é observado com o novo analisador (allow_experimental_analyzer), portanto não houve alterações nele. Adicionei também um teste para isso. #42827 (SmitaRKulkarni).
  • Corrige uma condição de corrida no backup de tabelas em bancos de dados Lazy. #43104 (Vitaly Baranov).
  • Correção de skip_unavailable_shards: não funcionava com a table function s3Cluster. #43131 (chen).
  • Correção da inferência de esquema no s3Cluster e melhoria no hdfsCluster. #41979 (Kruglov Pavel).
  • Corrige as novas tentativas ao ler com motores de tabela URL / função de tabela. (erros recuperáveis podiam gerar mais tentativas do que o necessário; erros não recuperáveis resultavam em falha de asserção no código). #42224 (Kseniia Sumarokova).
  • Uma falha de segmentação relacionada ao DNS & c-ares foi relatada e corrigida. #42234 (Arthur Passos).
  • Corrigido o LOGICAL_ERROR Arguments of 'plus' have incorrect data types, que pode ocorrer durante a análise de PK (verificação de monotonicidade). Corrigida a análise inválida de PK para funções binárias monotônicas com o primeiro argumento constante. #42410 (Nikolai Kochetov).
  • Corrige a análise incorreta de chaves quando tipos de chave não podem estar dentro de Nullable. Isso corrige #42456. #42469 (Amos Bird).
  • Corrige um erro de digitação no nome de uma configuração que levou ao uso incorreto do cache de inferência de esquema ao usar a configuração input_format_csv_use_best_effort_in_schema_inference. Fecha #41735. #42536 (Kruglov Pavel).
  • Corrige a criação de um Set com header incorreto quando o tipo de dado é LowCardinality. Fecha #42460. #42579 (flynn).
  • Os valores (U)Int128 e (U)Int256 foram corretamente verificados em PREWHERE. #42605 (Antonio Andelic).
  • Corrigido um bug no parser de funções que poderia ter causado uma falha de segmentação. #42724 (Nikolay Degterinsky).
  • Corrigido o bloqueio em truncate table. #42728 (flynn).
  • Corrige um possível travamento em discos web quando o arquivo não existe (ou em OPTIMIZE TABLE FINAL, que também pode eventualmente apresentar o mesmo erro). #42767 (Azat Khuzhin).
  • Corrige o mapeamento de auth_type em system.session_log, incluindo SSL_CERTIFICATE entre os valores de enum. #42782 (Miel Donkers).
  • Corrigido o stack-use-after-return na compilação com ASAN no parser da consulta CREATE USER. #42804 (Nikolay Degterinsky).
  • Corrige lowerUTF8/upperUTF8 nos casos em que um símbolo ficava na fronteira de 16 bytes (caso muito frequente quando há strings com mais de 16 bytes). #42812 (Azat Khuzhin).
  • Foi adicionada uma verificação adicional de limites à rotina de descompressão LZ4 para corrigir mau funcionamento em caso de entrada malformada. #42868 (Nikita Taranov).
  • Corrige um raro possível travamento ao cancelar consultas. #42874 (Azat Khuzhin).
  • Corrige o comportamento incorreto com múltiplos termos disjuntivos em hash join, fecha #42832. #42876 (Vladimir C).
  • Um ponteiro nulo será gerado ao usar select if as from em uma ‘junção de três tabelas’ , por exemplo, esta consulta SQL: #42883 (zzsmdfj).
  • Corrige o relatório do MemorySanitizer no Cluster Discovery, fecha #42763. #42905 (Vladimir C).
  • Melhorada a inferência de esquema de DateTime no caso de string vazia. #42911 (Kruglov Pavel).
  • Corrige um raro erro NOT_FOUND_COLUMN_IN_BLOCK quando é possível usar uma projeção, mas não há nenhuma disponível. Isso corrige #42771 . O bug foi introduzido em https://github.com/ClickHouse/ClickHouse/pull/25563. #42938 (Amos Bird).
  • Corrige o ATTACH TABLE na engine de banco de dados PostgreSQL caso a tabela contenha o tipo de dado DATETIME. Fecha #42817. #42960 (Kseniia Sumarokova).
  • Corrige o parsing de lambda. Fecha #41848. #42979 (Nikolay Degterinsky).
  • Corrige a análise incorreta de chaves quando chaves Nullable aparecem no meio de um hiperretângulo. Isso corrige #43111 . #43133 (Amos Bird).
  • Corrigidas várias leituras além do limite do buffer na desserialização de estados de funções de agregação especialmente elaborados. #43159 (Raúl Marín).
  • Corrige a função if no caso de argumentos NULL e de argumentos Nullable constantes. Fecha #43069. #43178 (Kruglov Pavel).
  • Corrige overflow em operações decimais ao analisar DateTime com o algoritmo ‘best effort’. Fecha #43061. #43180 (Kruglov Pavel).
  • O campo indent produzido pela ferramenta git-import foi calculado incorretamente. Veja https://clickhouse.com/docs/getting-started/example-datasets/github/. #43191 (Alexey Milovidov).
  • Corrigido o comportamento inesperado dos tipos Interval com subconsulta e conversão de tipo. #43193 (jh0x).

Lançamento do ClickHouse 22.10, 2022-10-25. Apresentação, Vídeo

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

  • Renomear os comandos de cache: show caches -> show filesystem caches, describe cache -> describe filesystem cache. #41508 (Kseniia Sumarokova).
  • Remover o suporte à seção WITH TIMEOUT para LIVE VIEW. Isso fecha #40557. #42173 (Alexey Milovidov).
  • Remover o suporte à macro {database} do prompt do cliente. Ela era exibida incorretamente quando o banco de dados não era especificado e não era atualizada nas instruções USE. Isso fecha #25891. #42508 (Alexey Milovidov).

Nova funcionalidade

  • A configuração de protocolos combináveis foi adicionada. Agora, diferentes protocolos podem ser configurados com diferentes hosts de escuta. Wrappers de protocolo, como PROXYv1, podem ser configurados sobre quaisquer outros protocolos (TCP, TCP seguro, MySQL, Postgres). #41198 (Yakov Olkhovskiy).
  • Adiciona S3 como um novo tipo de destino para backups. Suporte a BACKUP para S3 com a estrutura existente de caminho/dados. #42333 (Vitaly Baranov), #42232 (Azat Khuzhin).
  • Adicionadas funções (randUniform, randNormal, randLogNormal, randExponential, randChiSquared, randStudentT, randFisherF, randBernoulli, randBinomial, randNegativeBinomial, randPoisson) para gerar valores aleatórios de acordo com as distribuições especificadas. Isso corrige #21834. #42411 (Nikita Mikhaylov).
  • Uma melhoria no ClickHouse Keeper: adicionado suporte ao envio de snapshots para o S3. As informações do S3 podem ser definidas em keeper_server.s3_snapshot. #41342 (Antonio Andelic).
  • Adicionada uma função de agregação analysisOfVariance (anova) para realizar um teste estatístico em vários grupos de observações com distribuição normal e determinar se todos os grupos têm a mesma média ou não. PR original #37872. #42131 (Nikita Mikhaylov).
  • Suporte para limitar os dados temporários armazenados em disco usando as configurações max_temporary_data_on_disk_size_for_user/max_temporary_data_on_disk_size_for_query . #40893 (Vladimir C).
  • Adiciona a configuração format_json_object_each_row_column_for_object_name para escrever/analisar o nome do objeto como valor da coluna no formato JSONObjectEachRow. #41703 (Kruglov Pavel).
  • Adicionar a função de hash BLAKE3 ao SQL. #33435 (BoloniniD).
  • A função javaHash passou a oferecer suporte a inteiros. #41131 (JackyWoo).
  • Adicionar suporte ao OpenTelemetry em DDL ON CLUSTER (requer que distributed_ddl_entry_format_version seja definido como 4). #41484 (Frank Chen).
  • Adicionada a tabela de sistema asynchronous_insert_log. Ela contém informações sobre inserts assíncronos (incluindo os resultados de queries no modo fire-and-forget (com wait_for_async_insert=0)) para melhor introspecção. #42040 (Anton Popov).
  • Adicionado suporte aos métodos lz4, bz2 e snappy no Accept-Encoding do HTTP, que é uma extensão não padronizada do protocolo HTTP. #42071 (Nikolay Degterinsky).
  • Adiciona funções de codificação/decodificação de Morton Coding (ZCurve). #41753 (Constantine Peresypkin).
  • Adicionado suporte a SET setting_name = DEFAULT. #42187 (Filatenkov Artur).

recurso experimental

  • Adicionada nova infraestrutura para análise de consultas e planejamento com a configuração allow_experimental_analyzer. #31796 (Maksim Kita).
  • Implementação inicial de Kusto Query Language. Não use. #37961 (Yong Wang).

Melhoria de desempenho

  • Relaxamento do limite de “Too many parts”. Isso fecha #6551. Agora o ClickHouse permitirá mais partes em uma partição se o tamanho médio das partes for grande o suficiente (pelo menos 10 GiB). Isso permite ter até petabytes de dados em uma única partição de uma única tabela em um único servidor, o que é possível usando shelves de disco ou armazenamento de objetos. #42002 (Alexey Milovidov).
  • Implementação de um parser de elementos com precedência de operadores para reduzir o tamanho necessário da pilha. #34892 (Nikolay Degterinsky).
  • A otimização DISTINCT in order aproveita as propriedades de ordenação dos fluxos de dados. Essa melhoria permitirá leitura em ordem para DISTINCT quando aplicável (antes, era necessário fornecer ORDER BY para as colunas em DISTINCT). #41014 (Igor Nikonov).
  • ColumnVector: otimização do índice UInt8 com AVX512VBMI. #41247 (Guo Wangyang).
  • Otimização da contenção de bloqueios em ThreadGroupStatus::mutex. Os experimentos de desempenho do SSB (Star Schema Benchmark) no dispositivo ICX (CPU Intel Xeon Platinum 8380, 80 núcleos, 160 threads) mostram que essa mudança pode trazer uma melhoria de 2.95x na média geométrica do QPS de todos os subcasos. #41675 (Zhiguo Zhou).
  • Adição de capabilities ldapr às compilações AArch64. Compatível com Graviton 2+, instâncias do Azure e do GCP. Só apareceu no clang-15 há pouco tempo. #41778 (Daniel Kutenin).
  • Melhoria de desempenho ao comparar strings quando um dos argumentos é uma string constante vazia. #41870 (Jiebin Sun).
  • Otimização de insertFrom de ColumnAggregateFunction para compartilhar Aggregate State em alguns casos. #41960 (flynn).
  • Escrita mais rápida em disks azure_blob_storage (respeita max_single_part_upload_size em vez de gravar um bloco para cada tamanho de buffer). A ineficiência foi mencionada em #41754. #42041 (Kseniia Sumarokova).
  • Os IDs de thread na lista de processos e em query_log agora são únicos para evitar desperdício. #42180 (Alexey Milovidov).
  • Suporte para ignorar completamente o cache (tanto o download para o cache quanto a leitura de dados em cache) caso o intervalo de leitura solicitado exceda o limite definido pela configuração de cache bypass_cache_threashold; é necessário habilitar com enable_bypass_cache_with_threshold. #42418 (Han Shukai). Isso ajuda em disks locais lentos.

Melhoria

  • Adicionar a configuração allow_implicit_no_password: em combinação com allow_no_password, ela impede a criação de um usuário sem senha, a menos que IDENTIFIED WITH no_password seja explicitamente especificado. #41341 (Nikolay Degterinsky).
  • O Keeper integrado sempre será iniciado em segundo plano, permitindo que o ClickHouse seja iniciado sem atingir quórum. #40991 (Antonio Andelic).
  • Tornou o restabelecimento de uma nova conexão com o ZooKeeper mais ágil em caso de expiração da conexão anterior. Antes, havia uma tarefa executada por padrão a cada minuto e, assim, uma tabela podia permanecer em estado readonly por aproximadamente esse período. #41092 (Nikita Mikhaylov).
  • Agora, as projeções podem ser usadas com replicação zero-copy (a replicação zero-copy é um recurso não recomendado para produção). #41147 (alesapin).
  • Suporte à expressão (EXPLAIN SELECT ...) em uma subconsulta. Consultas como SELECT * FROM (EXPLAIN PIPELINE SELECT col FROM TABLE ORDER BY col) passaram a ser válidas. #40630 (Vladimir C).
  • Permite alterar async_insert_max_data_size ou async_insert_busy_timeout_ms no escopo da consulta. Por exemplo, a usuária quer inserir dados com pouca frequência e não tem acesso à configuração do servidor para ajustar as configurações padrão. #40668 (Nikita Mikhaylov).
  • Melhorias na leitura a partir de sistemas de arquivos remotos, com tamanho configurável do pool de threads para leituras/gravações. Fecha #41070. #41011 (Kseniia Sumarokova).
  • Suporte a todas as combinações de combinators no versionamento de WindowTransform/arratReduce*/initializeAggregation/funções de agregação. Anteriormente, combinators como ForEach/Resample/Map não funcionavam nesses casos, e usá-los gerava uma exceção como State function ... inserts results into non-state column. #41107 (Kruglov Pavel).
  • Adicionar a função tryDecrypt, que retorna NULL quando a descriptografia falha (por exemplo, ao descriptografar com a chave incorreta), em vez de lançar uma exceção. #41206 (Duc Canh Le).
  • Adicione a coluna unreserved_space à tabela system.disks para verificar quanto espaço não está ocupado por reservas em cada disco. #41254 (filimonov).
  • Adicionado suporte a cabeçalhos de autorização do S3 nos argumentos de table function. #41261 (Kseniia Sumarokova).
  • Adicionado suporte a MultiRead no Keeper e no cliente interno do ZooKeeper (esta é uma extensão do protocolo ZooKeeper, disponível apenas no ClickHouse Keeper). #41410 (Antonio Andelic).
  • Adicionado suporte à comparação do tipo decimal com literal de ponto flutuante no operador IN. #41544 (liang.huang).
  • Permite valores de tamanho legíveis (como 1TB) na configuração de cache. #41688 (Kseniia Sumarokova).
  • O ClickHouse podia manter em cache registros DNS obsoletos por algum tempo (15 segundos por padrão) até que o cache fosse atualizado de forma assíncrona. Durante esses períodos, o ClickHouse ainda podia tentar estabelecer uma conexão e gerar erros. Esse comportamento foi corrigido. #41707 (Nikita Mikhaylov).
  • Adiciona busca interativa no histórico com um utilitário no estilo do fzf (fzf/sk) para clickhouse-client/clickhouse-local (note que você pode usar FZF_DEFAULT_OPTS/SKIM_DEFAULT_OPTIONS para configurar adicionalmente o comportamento). #41730 (Azat Khuzhin).
  • Permita que clientes que se conectam a um servidor seguro com certificado inválido prossigam apenas com a flag ‘—accept-certificate’. #41743 (Yakov Olkhovskiy).
  • Adicionada a função tryBase58Decode, semelhante à função existente tryBase64Decode. #41824 (Robert Schulze).
  • Melhora o feedback ao substituir uma partição por outra com chave primária diferente. Corrige #34798. #41838 (Salvatore).
  • Corrigido o parsing paralelo: o segmentador agora verifica max_block_size. Isso corrigiu a alocação excessiva de memória nos casos de parsing paralelo com LIMIT pequeno. #41852 (Vitaly Baranov).
  • Não adicione a exceção “TABLE_IS_DROPPED” ao system.errors se ela ocorrer durante um SELECT em uma tabela de sistema e for ignorada. #41908 (AlfVII).
  • Melhorada a opção enable_extended_results_for_datetime_functions para retornar resultados do tipo DateTime64 para as funções toStartOfDay, toStartOfHour, toStartOfFifteenMinutes, toStartOfTenMinutes, toStartOfFiveMinutes, toStartOfMinute e timeSlot. #41910 (Roman Vasin).
  • Aprimora a inferência do tipo DateTime para formatos de texto. Agora, ela respeita a configuração date_time_input_format e não tenta inferir datetimes de números como timestamps. Fecha #41389 Fecha #42206. #41912 (Kruglov Pavel).
  • Removido o aviso confuso ao inserir com perform_ttl_move_on_insert = false. #41980 (Vitaly Baranov).
  • Permite que o usuário escreva countState(*), assim como count(*). Isso fecha #9338. #41983 (Amos Bird).
  • Correção de estouro de tamanho em rankCorr. #42020 (Duc Canh Le).
  • Adicionada uma opção para especificar uma string arbitrária como nome de ambiente na configuração do Sentry, para gerar relatórios mais práticos. #42037 (Nikita Mikhaylov).
  • Corrige o parsing de Date fora do intervalo em CSV. #42044 (Andrey Zvonov).
  • parseDataTimeBestEffort agora permite o uso de vírgula entre a data e a hora. Fecha #42038. #42049 (flynn).
  • Aprimorado o processo de recuperação de réplica desatualizada para ReplicatedMergeTree. Se uma réplica perdida tiver algumas partes ausentes em uma réplica íntegra, mas essas partes tiverem de aparecer no futuro de acordo com a fila de replicação da réplica íntegra, então a réplica perdida manterá essas partes em vez de desanexá-las. #42134 (Alexander Tokmakov).
  • Adiciona a possibilidade de usar argumentos Date32 na função date_diff. Corrige um problema na função date_diff ao usar argumentos DateTime64 com uma data inicial anterior à epoch Unix e uma data final posterior à epoch Unix. #42308 (Roman Vasin).
  • Ao enviar partes grandes para o Minio, ‘Complete Multipart Upload’ pode demorar bastante. O Minio envia heartbeats a cada 10 segundos (consulte https://github.com/minio/minio/pull/7198). Mas o ClickHouse excede o timeout antes, porque o timeout padrão de envio/recebimento é definido como 5 segundos. #42321 (filimonov).
  • Corrige uma conversão raramente inválida de tipos de estado de agregação com tipos complexos, como Decimal. Isso corrige #42408. #42417 (Amos Bird).
  • Permite o uso de argumentos Date32 na função dateName. #42554 (Roman Vasin).
  • Agora, filtros com literais NULL passarão a ser usados na análise de índices. #34063. #41842 (Amos Bird).
  • Mescla as partes se cada parte no intervalo for mais antiga que um determinado limiar. O limiar pode ser definido usando min_age_to_force_merge_seconds. Isso fecha #35836. #42423 (Antonio Andelic). Esta é a continuação de #39550i por @fastio, que implementou a maior parte da lógica.
  • Adicionada uma nova infraestrutura para análise e planejamento de consultas na configuração allow_experimental_analyzer. #31796 (Maksim Kita).
  • Melhora o tempo para recuperar conexões perdidas com o Keeper. #42541 (Raúl Marín).

Melhoria em compilação/testes/empacotamento

  • Adicionado um fuzzer para definições de tabelas #40096 (Anton Popov). Isso representa o maior avanço nos testes do ClickHouse neste ano até agora.
  • A versão Beta do ClickHouse Cloud service foi lançada: https://console.clickhouse.cloud/. Ela oferece a forma mais fácil de usar o ClickHouse (até um pouco mais fácil do que a instalação com um único comando).
  • Adicionado suporte à geração de cláusula WHERE no AST Fuzzer, bem como a possibilidade de adicionar ou remover ORDER BY e a cláusula WHERE. #38519 (Ilya Yatsishin).
  • Os binários Aarch64 agora exigem pelo menos ARMv8.2, lançado em 2016. Em especial, isso permite o uso de ARM LSE, ou seja, operações atômicas nativas. Além disso, a opção de compilação do CMake “NO_ARMV81_OR_HIGHER” foi adicionada para permitir a compilação de binários para hardware ARMv8.0 mais antigo, por exemplo, o Raspberry Pi 4. #41610 (Robert Schulze).
  • Agora é possível compilar o ClickHouse com Musl (pequenas alterações após ele já ser suportado, mas estar quebrado). #41987 (Alexey Milovidov).
  • Adicionada a verificação do arquivo $CLICKHOUSE_CRONFILE para evitar a execução do comando sed e o consequente erro de arquivo não encontrado durante a instalação. #42081 (Chun-Sheng, Li).
  • Atualizado o cctz para 2022e para oferecer suporte às novas alterações de fuso horário. As transições na Palestina agora ocorrem aos sábados às 02:00. As três zonas da Ucrânia foram simplificadas em uma só. Jordânia e Síria passaram de +02/+03 com horário de verão para +03 o ano inteiro. (https://data.iana.org/time-zones/tzdb/NEWS). Isso fecha #42252. #42327 (Alexey Milovidov). #42273 (Dom Del Nano).
  • Adicionado suporte a código Rust no ClickHouse, com a biblioteca de função hash BLAKE3 como exemplo. #33435 (BoloniniD).

Correção de bug (comportamento incorreto perceptível ao usuário em lançamento oficial estável ou pré-estável)

  • Escolha correta do método de agregação para LowCardinality com tipos inteiros grandes. #42342 (Duc Canh Le).
  • Várias correções no disco web. #41652 (Kseniia Sumarokova).
  • Corrige um problema que faz o docker run falhar se https_port não estiver presente na configuração. #41693 (Yakov Olkhovskiy).
  • As mutações não eram canceladas corretamente ao desligar o servidor ou com a consulta SYSTEM STOP MERGES, e o cancelamento podia levar muito tempo; isso foi corrigido. #41699 (Alexander Tokmakov).
  • Corrige resultados incorretos de consultas com ORDER BY ou GROUP BY em colunas do prefixo da chave de ordenação, envolvidas em funções monotônicas, com a otimização “read in order” habilitada (configurações optimize_read_in_order e optimize_aggregation_in_order). #41701 (Anton Popov).
  • Corrige uma possível falha em SELECT da tabela Merge com a configuração optimize_monotonous_functions_in_order_by habilitada. Corrige #41269. #41740 (Nikolai Kochetov).
  • Corrigido o erro “Part … intersects part …”, que podia ocorrer em casos extremamente raros se a réplica fosse reiniciada logo após desanexar uma parte como corrompida. #41741 (Alexander Tokmakov).
  • Não é permitido criar nem alterar tabelas MergeTree com o nome de coluna _row_exists, que é reservado para exclusão leve. Corrigido #41716. #41763 (Jianmei Zhang).
  • Corrige um bug que fazia com que os cabeçalhos CORS não fossem incluídos em algumas respostas HTTP. #41792 (Frank Chen).
  • A versão 22.9 pode falhar ao iniciar a tabela ReplicatedMergeTree se ela tiver sido criada na versão 20.3 ou anterior e nunca tiver sido alterada; isso foi corrigido. Corrige #41742. #41796 (Alexander Tokmakov).
  • Quando o envio em lote falha por algum motivo, não é possível recuperá-lo automaticamente e, se ele não for processado a tempo, isso causará acúmulo, e a mensagem de erro exibida ficará cada vez mais longa, o que acabará bloqueando a thread HTTP. #41813 (zhongyuankai).
  • Corrige partes compactas com a configuração de marcas comprimidas. Corrige #41783 e #41746. #41823 (alesapin).
  • Versões antigas do banco de dados Replicated não têm um marcador especial no [Zoo]Keeper. Precisamos verificar apenas se o nó contém alguns dados incomuns, em vez de uma marcação especial. #41875 (Nikita Mikhaylov).
  • Corrigida uma possível exceção no cache de fs. #41884 (Kseniia Sumarokova).
  • Corrige use_environment_credentials na função de tabela S3. #41970 (Kseniia Sumarokova).
  • Corrigido o erro “O diretório já existe e não está vazio” ao desanexar uma parte corrompida, o que poderia impedir a tabela ReplicatedMergeTree de iniciar a replicação. Corrige #40957. #41981 (Alexander Tokmakov).
  • toDateTime64 agora retorna a mesma saída com argumentos inteiros negativos e de ponto flutuante. #42025 (Robert Schulze).
  • Corrige a gravação em azure_blob_storage. Fecha parcialmente #41754. #42034 (Kseniia Sumarokova).
  • Corrige o problema de decodificação de bzip2 em arquivos bzip2 específicos. #42046 (Nikolay Degterinsky).
  • Corrigida a função SQL toLastDayOfMonth com a configuração “enable_extended_results_for_datetime_functions = 1” no início do intervalo ampliado (janeiro de 1900). - Corrigida a função SQL “toRelativeWeekNum()” com a configuração “enable_extended_results_for_datetime_functions = 1” no fim do intervalo ampliado (dezembro de 2299). - Melhorado o desempenho das funções SQL “toISOYear()”, “toFirstDayNumOfISOYearIndex()” e “toYearWeekOfNewyearMode()” ao evitar cálculos de índice desnecessários. #42084 (Roman Vasin).
  • O tamanho máximo de fetches por tabela foi definido inadvertidamente como 8, embora o tamanho do pool pudesse ser maior. Agora, o tamanho máximo de fetches por tabela é igual ao tamanho do pool. #42090 (Nikita Mikhaylov).
  • Uma tabela pode ser desativada e um Dicionário pode ser desanexado antes de verificar se ele pode ser removido sem quebrar dependências entre tabelas; isso foi corrigido. Corrige #41982. #42106 (Alexander Tokmakov).
  • Corrigida uma grande ineficiência de remote_filesystem_read_method=read ao usar cache do sistema de arquivos. Fecha #42125. #42129 (Kseniia Sumarokova).
  • Corrige uma possível exceção de timeout em consultas distribuídas com use_hedged_requests = 0. #42130 (Azat Khuzhin).
  • Corrigido um pequeno bug na função runningDifference ao usá-la com o tipo Date32. Anteriormente, era usado Date, o que podia causar alguns erros lógicos, como Bad cast from type DB::ColumnVector<int> to DB::ColumnVector<unsigned short>'. #42143 (Alfred Xu).
  • Corrige a reutilização de arquivos > 4 GB do backup base. #42146 (Azat Khuzhin).
  • DISTINCT in order falha com LOGICAL_ERROR se a primeira coluna da chave de ordenação contiver uma função. #42186 (Igor Nikonov).
  • Corrige um bug com projeções e a configuração aggregate_functions_null_for_empty. Esse bug é muito raro e só aparece se você habilitar a configuração aggregate_functions_null_for_empty na configuração do servidor. Isso encerra #41647. #42198 (Alexey Milovidov).
  • Corrige a leitura de tabelas Buffer em ordem decrescente. #42236 (Duc Canh Le).
  • Corrige um bug que impede o ClickHouse de iniciar quando a configuração background_pool_size é definida no perfil padrão, mas background_merges_mutations_concurrency_ratio não. #42315 (nvartolomei).
  • ALTER UPDATE de uma parte anexada (com colunas diferentes do esquema da tabela) poderia criar metadados columns.txt inválidos em disco. A leitura dessa parte poderia falhar com erros ou retornar dados inválidos. Corrige #42161. #42319 (Nikolai Kochetov).
  • A configuração additional_table_filters não era aplicada ao armazenamento Distributed. Corrige #41692. #42322 (Nikolai Kochetov).
  • Corrige uma condição de corrida ao finalizar/cancelar uma consulta. Isso fecha #42346. #42362 (Alexey Milovidov).
  • Isso reverte a #40217, que introduziu uma regressão nas funções de data/hora. #42367 (Alexey Milovidov).
  • Corrige assert de CAST em JOIN com condição falsa, Fecha #42380. #42407 (Vladimir C).
  • Corrige um estouro de buffer no processamento de tipos de dados Decimal. Isso fecha #42451. #42465 (Alexey Milovidov).
  • AggregateFunctionQuantile agora funciona corretamente com colunas UInt128. Antes, o estado de quantile interpretava colunas UInt128 como Int128, o que poderia levar a resultados incorretos. #42473 (Antonio Andelic).
  • Corrige o erro de asserção bad_cast durante INSERT em índices Annoy sobre colunas que não são Float32. Os índices Annoy são um recurso experimental. #42485 (Robert Schulze).
  • O operador aritmético com Date ou DateTime e inteiro de 128 ou 256 bits fazia referência a memória não inicializada. #42453. #42573 (Alexey Milovidov).
  • Corrige um erro inesperado no carregamento da tabela quando a chave de partição contém nomes de função de alias durante a atualização do servidor. #36379 (Amos Bird).

Lançamento do ClickHouse 22.9, 2022-09-22. Apresentação, Vídeo

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

  • A atualização da versão 20.3 e anteriores para a 22.9 e posteriores deve passar por uma versão intermediária se houver tabelas ReplicatedMergeTree; caso contrário, o servidor com a nova versão não iniciará. #40641 (Alexander Tokmakov).
  • Removidas as funções accurate_Cast e accurate_CastOrNull (elas diferem de accurateCast e accurateCastOrNull pelo sublinhado no nome e não são afetadas pelo valor da configuração cast_keep_nullable). Essas funções não eram documentadas, testadas, usadas nem necessárias. Elas pareciam ainda existir devido à generalização do código. #40682 (Alexey Milovidov).
  • Adicionado um teste para garantir que toda nova função de tabela seja documentada. Veja #40649. Renomeada a função de tabela MeiliSearch para meilisearch. #40709 (Alexey Milovidov).
  • Adicionado um teste para garantir que toda nova função seja documentada. Veja #40649. As funções lemmatize, synonyms, stem não diferenciavam maiúsculas de minúsculas por engano. Agora, elas diferenciam. #40711 (Alexey Milovidov).
  • Por motivos de segurança e estabilidade, os modelos catboost não são mais avaliados dentro do servidor ClickHouse. Em vez disso, a avaliação agora é feita no clickhouse-library-bridge, um processo separado que carrega a biblioteca catboost e se comunica com o processo do servidor via HTTP. #40897 (Robert Schulze).
  • Tornou-se a interpretação das configurações YAML mais convencional. #41044 (Vitaly Baranov).

Novo recurso

  • Suporte a insert_quorum = 'auto' para usar o número da maioria. #39970 (Sachin).
  • Adiciona dashboards incorporados ao servidor ClickHouse. Este é um projeto de demonstração sobre como alcançar 90% dos resultados com 1% do esforço usando recursos do ClickHouse. #40461 (Alexey Milovidov).
  • Adiciona o novo tipo de gravabilidade de restrições de configuração changeable_in_readonly. #40631 (Sergei Trifonov).
  • Adiciona suporte a INTERSECT DISTINCT e EXCEPT DISTINCT. #40792 (Duc Canh Le).
  • Adiciona o novo formato de entrada/saída JSONObjectEachRow - Suporte à importação nos formatos JSON/JSONCompact/JSONColumnsWithMetadata. Adiciona a nova configuração input_format_json_validate_types_from_metadata, que controla se os tipos de dados dos metadados correspondem aos tipos de dados do cabeçalho. - Adiciona a nova configuração input_format_json_validate_utf8; quando ela está habilitada, todos os formatos JSON validam sequências UTF-8. Ela ficará desabilitada por padrão. Observe que essa configuração não afeta os formatos de saída JSON/JSONCompact/JSONColumnsWithMetadata; eles sempre validam sequências UTF-8 (essa exceção foi feita por motivos de compatibilidade). - Adiciona a nova configuração input_format_json_read_numbers_as_strings , que permite interpretar números em coluna String; a configuração fica desabilitada por padrão. - Adiciona a nova configuração output_format_json_quote_decimals, que permite gerar decimais entre aspas duplas, desabilitada por padrão. - Permite interpretar decimais entre aspas duplas durante a importação de dados. #40910 (Kruglov Pavel).
  • Suporte a parâmetros de consulta na consulta DESCRIBE TABLE. #40952 (Nikita Taranov).
  • Adiciona suporte a Parquet Time32/64 convertendo-o em DateTime64. Parquet time32/64 representa o tempo decorrido desde a meia-noite, enquanto DateTime32/64 representa um timestamp Unix real. A conversão simplesmente aplica um deslocamento a partir de 0. #41333 (Arthur Passos).
  • Implementa operações de conjunto no Apache Datasketches. #39919 (Fangyuan Deng). Observação: não faz sentido usar Apache Datasketches; eles são inferiores ao ClickHouse e só fazem sentido para integração com outros sistemas.
  • Permite registrar erros em um arquivo especificado durante a leitura de formatos de texto (CSV, TSV). #40516 (zjial).

Funcionalidade Experimental

  • Adicionado índice ANN (vizinho mais próximo aproximado) baseado em Annoy. #40818 (Filatenkov Artur). #37215 (VVMak).
  • Adicionado o novo mecanismo de armazenamento KeeperMap, que usa ClickHouse Keeper ou ZooKeeper como armazenamento de chave-valor. #39976 (Antonio Andelic). Esse mecanismo de armazenamento foi projetado para armazenar uma pequena quantidade de metadados.
  • Melhoria para partes de dados em memória: remoção de arquivos WAL completamente processados. #40592 (Azat Khuzhin).

Melhoria de desempenho

  • Implementa a compressão das marcas e da chave primária. Fecha #34437. #37693 (zhongyuankai).
  • Permite carregar marcas antecipadamente com o threadpool. Controlado pela configuração load_marks_asynchronously (padrão: 0). #40821 (Kseniia Sumarokova).
  • O sistema de arquivos virtual no S3 usará nomes aleatórios de objetos distribuídos em vários prefixos de caminho para melhor desempenho na AWS. #40968 (Alexey Milovidov).
  • Considere o valor de max_block_size ao produzir resultados de agregação de nível único. Isso permite executar as etapas subsequentes do plano de consulta usando mais threads. #39138 (Nikita Taranov).
  • O prefetch de software é usado na agregação para acelerar operações com tabelas hash. É controlado pela configuração enable_software_prefetch_in_aggregation, ativada por padrão. #39304 (Nikita Taranov).
  • Melhor suporte a optimize_read_in_order nos casos em que algumas colunas da chave de ordenação permanecem constantes após a aplicação da cláusula WHERE. Por exemplo, em uma consulta como SELECT ... FROM table WHERE a = 'x' ORDER BY a, b, em que table tem a seguinte definição de armazenamento: MergeTree ORDER BY (a, b). #38715 (Anton Popov).
  • Filtrar mutuamente os fluxos unidos de full_sorting_join antes da ordenação. #39418 (Vladimir C).
  • Descompressão LZ4 otimizada ao ignorar o processamento de literais vazios. #40142 (Nikita Taranov).
  • Acelera o processo de backup usando copy nativo quando possível, em vez de copiar pela memória do clickhouse-server. #40395 (alesapin).
  • Não obter um snapshot do armazenamento para cada bloco INSERT (melhora ligeiramente o desempenho). #40638 (Azat Khuzhin).
  • Implementa o processamento em lote de funções de agregação com vários argumentos Nullable. #41058 (Raúl Marín).
  • Acelera a leitura do UniquesHashSet (uniqState do disco, por exemplo). #41089 (Raúl Marín).
  • Corrigido o alto consumo de memória ao executar mutações de partes compactas em tabelas com um grande número de colunas. #41122 (lthaooo).
  • Ative a biblioteca vectorscan em ARM; isso acelera a avaliação de regexp. #41033 (Robert Schulze).
  • Atualiza o vectorscan para 5.4.8, que traz várias otimizações de desempenho para acelerar a avaliação de regexp. #41270 (Robert Schulze).
  • Corrige o fallback incorreto que fazia ignorar o cache local do sistema de arquivos para VFS (como S3), o que ocorria em níveis muito altos de concorrência. #40420 (Kseniia Sumarokova).
  • Se o filtro de ROW POLICY for sempre falso, retorne imediatamente um resultado vazio, sem ler nenhum dado. Isso fecha #24012. #40740 (Amos Bird).
  • O hash JOIN paralelo para tipos de dados Float pode não ser ideal. Melhoramos isso. #41183 (Alexey Milovidov).

Melhoria

  • Durante a inicialização e a execução de ATTACH, as tabelas ReplicatedMergeTree ficarão em modo somente leitura até que a conexão com o ZooKeeper seja estabelecida e a configuração seja finalizada. #40148 (Antonio Andelic).
  • Adicionada a opção enable_extended_results_for_datetime_functions para retornar resultados do tipo Date32 para as funções toStartOfYear, toStartOfISOYear, toStartOfQuarter, toStartOfMonth, toStartOfWeek, toMonday e toLastDayOfMonth quando o argumento for Date32 ou DateTime64; caso contrário, são retornados resultados do tipo Date. Por motivos de compatibilidade, o valor padrão é ‘0’. #41214 (Roman Vasin).
  • Por motivos de segurança e estabilidade, os modelos CatBoost não são mais avaliados dentro do servidor ClickHouse. Em vez disso, a avaliação agora é feita no clickhouse-library-bridge, um processo separado que carrega a biblioteca CatBoost e se comunica com o processo do servidor por HTTP. A função modelEvaluate() foi substituída por catboostEvaluate(). #40897 (Robert Schulze). #39629 (Robert Schulze).
  • Adicionadas mais métricas para dados temporários em disco, fecha #40206. #40239 (Vladimir C).
  • Adiciona a opção de configuração warning_supress_regexp, fecha #40330. #40548 (Vladimir C).
  • Adicionada configuração para desabilitar o limite de kafka_num_consumers. Fecha #40331. #40670 (Kruglov Pavel).
  • Suporte para SETTINGS na consulta DELETE .... #41533 (Kseniia Sumarokova).
  • Eventos de profile detalhados do S3 DiskS3*, separados por chamada da API do S3, para S3 ObjectStorage. #41532 (Sergei Trifonov).
  • Duas novas métricas em system.asynchronous_metrics: NumberOfDetachedParts e NumberOfDetachedByUserParts. #40779 (Sema Checherinda).
  • Permite CONSTRAINTs para tabelas ODBC e JDBC. #34551 (Alexey Milovidov).
  • N’ão imprima SETTINGS mais de uma vez ao formatar a consulta, a menos que ele apareça várias vezes na consulta original. #38900 (Raúl Marín).
  • Melhora a propagação do contexto de rastreamento (OpenTelemetry) entre threads. #39010 (Frank Chen).
  • ClickHouse Keeper: adicionar listeners para interserver_listen_host apenas no Keeper, se especificado. #39973 (Antonio Andelic).
  • Melhora a recuperação do armazenamento Replicated de controle de acesso de usuários após erros. #39977 (Vitaly Baranov).
  • Adicionado suporte a TTL no EmbeddedRocksDB. #39986 (Lloyd-Pottiger).
  • Adicionada a inferência de esquema ao clickhouse-obfuscator, de modo que o argumento --structure não é mais necessário. #40120 (Nikolay Degterinsky).
  • Melhorias e correções em Dictionaries no formato Arrow. #40173 (Kruglov Pavel).
  • Conversão mais natural de Date32, DateTime64, Date para tipos mais restritos: o valor normal superior ou inferior é considerado quando estiver fora do intervalo normal. #40217 (Andrey Zvonov).
  • Corrige o caso em que a tabela Merge baseada em View não pode usar índice. #40233 (Duc Canh Le).
  • Nomes de chaves personalizados para logs do servidor em JSON. #40251 (Mallik Hassan).
  • Agora é possível definir um código de erro personalizado para a exceção gerada pela função throwIf. #40319 (Robert Schulze).
  • Aprimorado o cache de inferência de esquema, respeitando as configurações de formato que podem alterar o esquema. #40414 (Kruglov Pavel).
  • Permitir interpretar Date como DateTime e DateTime64. Isso implementa a melhoria proposta em #36949. #40474 (Alexey Milovidov).
  • Permite a conversão de String com DateTime64, como 2022-08-22 01:02:03.456, para Date e Date32. Permite a conversão de String com DateTime, como 2022-08-22 01:02:03, para Date32. Isso encerra #39598. #40475 (Alexey Milovidov).
  • Melhor suporte a estruturas de dados aninhadas no formato Parquet #40485 (Arthur Passos).
  • Suporte à leitura de Array(Record) em tabela aninhada achatada no Avro. #40534 (Kruglov Pavel).
  • Adicionar suporte de somente leitura ao EmbeddedRocksDB. #40543 (Lloyd-Pottiger).
  • Validação do parâmetro do método de compressão do mecanismo de tabela URL. #40600 (Frank Chen).
  • Melhor detecção de formato para a função de tabela/engine url quando há uma string de consulta após o nome de um arquivo. Fecha #40315. #40636 (Kruglov Pavel).
  • Desabilita a projeção quando grouping set é usado. Isso gerava resultados incorretos. Isso corrige #40635. #40726 (Amos Bird).
  • Corrige o formato incorreto do transformador de coluna APPLY, que pode corromper os metadados se for usado na definição da tabela. Isso corrige #37590. #40727 (Amos Bird).
  • Suporte ao descritor %z para formatar o offset do fuso horário em formatDateTime. #40736 (Cory Levy).
  • O modo interativo do clickhouse-client agora interpreta . e / como “executar o último comando”. #40750 (Robert Schulze).
  • Corrige um problema na passagem dos timeouts do MySQL para o mecanismo de banco de dados MySQL e a função de tabela MySQL. Fecha #34168. #40751 (Kseniia Sumarokova).
  • Criar um arquivo de status para o diretório de cache do sistema de arquivos, para garantir que os diretórios de cache não sejam compartilhados entre diferentes servidores ou caches. #40820 (Kseniia Sumarokova).
  • Adicionado suporte a DELETE e UPDATE para o armazenamento EmbeddedRocksDB. #40853 (Antonio Andelic).
  • ClickHouse Keeper: corrige o desligamento durante commits longos e aumenta o tamanho permitido das solicitações. #40941 (Antonio Andelic).
  • Corrigida condição de corrida em WriteBufferFromS3, adicionadas anotações de TSA. #40950 (Kseniia Sumarokova).
  • Conjuntos de agrupamento com group_by_use_nulls devem converter apenas as colunas-chave em Nullable. #40997 (Duc Canh Le).
  • Melhora na observabilidade de INSERT em tabela distribuída. #41034 (Frank Chen).
  • Mais métricas de baixo nível para a interação com o S3. #41039 (mateng915).
  • Suporte a path relativo no cabeçalho Location após redirecionamento HTTP. Fecha #40985. #41162 (Kruglov Pavel).
  • Aplicar alterações aos handlers HTTP a quente, sem reiniciar o servidor. #41177 (Azat Khuzhin).
  • ClickHouse Keeper: fechar corretamente as sessões ativas ao desligar. #41215 (Antonio Andelic). Isso reduz o período em que ocorrem erros de “table is read-only”.
  • Adicionada a possibilidade de comentar automaticamente consultas SQL no clickhouse-client/local (com Alt-#, como no readline). #41224 (Azat Khuzhin).
  • Corrige a incompatibilidade do cache após alterar a configuração do_no_evict_index_and_mark_files de 1 para 0 ou de 0 para 1. #41330 (Kseniia Sumarokova).
  • Adicionada a configuração allow_suspicious_fixed_string_types para impedir que os usuários criem colunas do tipo FixedString com tamanho > 256. #41495 (Duc Canh Le).
  • Adicionado has_lightweight_delete ao system.parts. #41564 (Kseniia Sumarokova).

Melhorias de compilação/testes/empacotamento

correção de bug

  • Corrige uma potencial perda de dados devido a um bug no AWS SDK. O bug só pode ocorrer quando o ClickHouse é usado com S3. #40506 (alesapin). Esse bug ficou aberto por 5 anos no AWS SDK e foi fechado após nosso relato.
  • Dados maliciosos no formato Native podem causar um travamento. #41441 (Alexey Milovidov).
  • A função de agregação categorialInformationValue tinha propriedades definidas incorretamente, o que poderia causar um desreferenciamento de ponteiro nulo em tempo de execução. Isso corrige #41443. #41449 (Alexey Milovidov).
  • Ao gravar dados no formato Apache ORC, pode ocorrer um estouro de buffer. #41458 (Alexey Milovidov).
  • Corrige problemas de segurança de memória nas funções encrypt e contingency quando Array de Nullable é usado como argumento. Isso corrige #41004. #40195 (Alexey Milovidov).
  • Corrige erros no MergeJoin quando ‘not_processed’ não é nulo. #40335 (liql2007).
  • Corrigido resultado incorreto em caso de perda de precisão decimal no operador IN, ver #41125. #41130 (Vladimir C).
  • Corrige o preenchimento de colunas Nested ausentes em múltiplos níveis. #37152 (Anton Popov).
  • Corrige a consulta SYSTEM UNFREEZE no banco de dados Ordinary (obsoleto). Correção para https://github.com/ClickHouse/ClickHouse/pull/36424. #38262 (Vadim Volodin).
  • Corrige colunas desconhecidas não utilizadas introduzidas pela instrução WITH. Isso corrige #37812. #39131 (Amos Bird).
  • Corrige a análise de consultas para ORDER BY na presença de funções de janela. Corrige #38741 Corrige #24892. #39354 (Dmitry Novik).
  • Corrigida a exceção Unknown identifier (aggregate-function), que ocorre quando um usuário tenta calcular expressões WINDOW ORDER BY/PARTITION BY em funções agregadas. #39762 (Vladimir Chebotaryov).
  • Limite o número de análises de uma consulta com a configuração max_analyze_depth. Isso evita o crescimento exponencial do tempo de análise em consultas com um número extraordinariamente grande de subconsultas. #40334 (Vladimir C).
  • Corrigido um bug raro com TTL de coluna na família de motores MergeTree: em caso de mesclagem vertical repetida, o erro Cannot unlink file ColumnName.bin ... No such file or directory. podia ocorrer. #40346 (alesapin).
  • Use entradas de DNS para IPv4 e IPv6, se presentes. #40353 (Maksim Kita).
  • Permite ler arquivos do Hadoop compactados com snappy. #40482 (Kruglov Pavel).
  • Corrigido travamento ao analisar valores do tipo Object (funcionalidade experimental) que contêm arrays de dimensão variádica. #40483 (Duc Canh Le).
  • Corrigidas as configurações de input_format_tsv_skip_first_lines. #40491 (mini4).
  • Corrigido bug (race condition) ao iniciar a engine de banco de dados/tabela MaterializedPostgreSQL. #40262. Corrigido erro ao atingir o limite de slots de relcache_callback_list. #40511 (Maksim Buren).
  • Corrige um possível erro ‘Decimal math overflow’ ao fazer o parsing de DateTime64. #40546 (Kruglov Pavel).
  • Corrige a mesclagem vertical de partes com linhas marcadas para exclusão leve. #40559 (Alexander Gololobov).
  • Corrigida falha de segmentação ao gravar dados no mecanismo de tabela URL quando a compressão está habilitada. #40565 (Frank Chen).
  • Corrige um possível erro lógico 'Invalid Field get from type UInt64 to type String' na função arrayElement com map. #40572 (Kruglov Pavel).
  • Corrigida uma possível condição de corrida no cache do sistema de arquivos. #40586 (Kseniia Sumarokova).
  • Removida a omissão de mutações em partições não afetadas de tabelas MergeTree, porque esse recurso nunca funcionou corretamente e pode causar o reaparecimento de mutações concluídas. #40589 (Alexander Tokmakov).
  • O servidor ClickHouse travará se adicionarmos à configuração, em tempo de execução, uma porta gRPC já ocupada. #40597 (何李夫).
  • Corrigido o tratamento de 0 / ‘1’ à esquerda em base58Encode / base58Decode. #40620 (Andrey Zvonov).
  • keeper-fix: corrige uma condição de corrida ao acessar os logs durante a instalação do snapshot. #40627 (Antonio Andelic).
  • Corrige a execução com curto-circuito da função toFixedString. Resolve (parcialmente) #40622. #40628 (Kruglov Pavel).
  • Corrige a conversão de coluna int8 do SQLite para coluna int64 no ClickHouse. Corrige #40639. #40642 (Barum Rho).
  • Corrige estouro de pilha em tabelas Buffer recursivas. Isso fecha #40637. #40643 (Alexey Milovidov).
  • Durante a inserção de uma nova consulta na ProcessList, são feitas alocações. Se atingirmos o limite de memória durante essas alocações, não podemos usar o OvercommitTracker, porque o ProcessList::mutex já foi adquirido. Corrige #40611. #40677 (Dmitry Novik).
  • Corrigido o LOGICAL_ERROR com max_read_buffer_size=0 durante a leitura de marcas. #40705 (Azat Khuzhin).
  • Corrigido vazamento de memória ao enviar para MVs sem contexto de consulta (a partir do Kafka/…). #40732 (Azat Khuzhin).
  • Corrige o possível erro Attempt to read after eof na inferência de esquema de CSV. #40746 (Kruglov Pavel).
  • Corrige erro lógico no cache write-through “a finalização do segmento de arquivo só pode ser feita pelo downloader”. Fecha #40748. #40759 (Kseniia Sumarokova).
  • Torna o resultado da função GROUPING igual ao do SQL e de outros SGBDs. #40762 (Dmitry Novik).
  • Em #40595, foi relatado que a funcionalidade host_regexp não estava funcionando corretamente com a resolução de nomes para endereços em /etc/hosts. Isso foi corrigido. #40769 (Arthur Passos).
  • Corrigidos os backups incrementais da família Log. #40827 (Vitaly Baranov).
  • Corrigido um bug extremamente raro que pode levar à possível perda de dados na replicação zero-copy. #40844 (alesapin).
  • Corrige travamentos na análise da condição de chave quando a mesma expressão de conjunto é criada a partir de colunas diferentes. #40850 (Duc Canh Le).
  • Corrigida a inferência de esquema de objetos JSON aninhados. #40851 (Kruglov Pavel).
  • Corrige o diretório com prefixo de 3 dígitos dos arquivos do cache do sistema de arquivos, que não era excluído quando estava vazio. Fecha #40797. #40867 (Kseniia Sumarokova).
  • Corrige DNS_ERROR não tratado em caso de falha de conexão com réplicas. #40881 (Robert Coelho).
  • Corrige bug ao remover colunas desnecessárias em subconsulta. #40884 (luocongkai).
  • Corrige a alocação adicional de memória para buffers de leitura remota. #40896 (Kseniia Sumarokova).
  • Corrigido um comportamento em que um usuário com a permissão explicitamente revogada para excluir bancos de dados ainda podia excluí-los. #40906 (Nikita Mikhaylov).
  • Uma correção para o ClickHouse Keeper: comparar corretamente caminhos em solicitações de gravação com os caminhos dos nós internos do sistema do Keeper. #40918 (Antonio Andelic).
  • Corrigido deadlock em WriteBufferFromS3. #40943 (Kseniia Sumarokova).
  • Corrigidas as permissões de acesso para DESCRIBE TABLE url() e alguns outros DESCRIBE TABLE <table_function>(). #40975 (Vitaly Baranov).
  • Removida a lógica incorreta do parser de WITH GROUPING SETS, que pode levar à desreferenciação de um nullptr. #41049 (Duc Canh Le).
  • Uma correção para o ClickHouse Keeper: corrige uma possível falha de segmentação durante o desligamento do Keeper. #41075 (Antonio Andelic).
  • Corrige possíveis segfaults, use-after-free na heap e vazamentos de memória em combinadores de funções de agregação. Fecha #40848. #41083 (Kruglov Pavel).
  • Corrigido o query_views_log com Window views. #41132 (Raúl Marín).
  • Desabilita optimize_monotonous_functions_in_order_by por padrão, atenuando: #40094. #41136 (Denny Crane).
  • Corrigido o erro “possible deadlock avoided” na conversão automática do engine do banco de dados de Ordinary para Atomic. #41146 (Alexander Tokmakov).
  • Corrige SIGSEGV no SortedBlocksWriter em caso de bloco vazio (isso pode ocorrer com optimize_aggregation_in_order e join_algorithm=auto). #41154 (Azat Khuzhin).
  • Corrige o resultado incorreto da consulta quando a otimização trivial de contagem está ativa com array join. Isso corrige #39431. #41158 (Denny Crane).
  • Corrigido o problema de stack-use-after-return em GetPriorityForLoadBalancing::getPriorityFunc(). #41159 (Azat Khuzhin).
  • Corrige a exceção de argumentos posicionais Positional argument out of bounds. Fecha #40634. #41189 (Kseniia Sumarokova).
  • Corrigida a limpeza em segundo plano de partes detached corrompidas. #41190 (Kseniia Sumarokova).
  • Corrigida a reescrita exponencial de consultas em casos com muitas junções cruzadas com where, fecha #21557. #41223 (Vladimir C).
  • Corrige um possível erro lógico no cache write-through, que ocorria porque nem todos os tipos de exceção eram tratados como necessário. Fecha #41208. #41232 (Kseniia Sumarokova).
  • Corrige a entrada de log String em system.filesystem_cache_log. #41233 (jmimbrero).
  • Consultas com a cláusula OFFSET em uma subconsulta e a cláusula WHERE na consulta externa podiam retornar resultados incorretos; isso foi corrigido. Corrige #40416. #41280 (Alexander Tokmakov).
  • Corrige possível resultado incorreto de consulta com query_plan_optimize_primary_key ativado. Corrige #40599. #41281 (Nikolai Kochetov).
  • Impedir que sequências inválidas influenciem outras linhas em lowerUTF8/upperUTF8. #41286 (Azat Khuzhin).
  • Corrige consultas ALTER <table> ADD COLUMN com colunas do tipo Object. #41290 (Anton Popov).
  • Corrigido o erro “No node” ao fazer SELECT em system.distributed_ddl_queue quando não há distributed_ddl.path na configuração. Corrige #41096. #41296 (young scott).
  • Corrige o erro lógico incorreto Expected relative path no disco de armazenamento de objetos. Relacionado a #41246. #41297 (Kseniia Sumarokova).
  • Adicionada verificação do tipo da coluna antes da inserção de UUID no formato MsgPack. #41309 (Kruglov Pavel).
  • Corrige uma possível falha após a inserção assíncrona de dados malformados (com a configuração async_insert habilitada) em colunas do tipo Object. Isso podia acontecer se os JSONs em todos os lotes de inserções assíncronas fossem inválidos e não pudessem ser processados. #41336 (Anton Popov).
  • Corrige um possível deadlock com async_socket_for_remote/use_hedged_requests e KILL em paralelo. #41343 (Azat Khuzhin).
  • Desativa optimize_rewrite_sum_if_to_count_if por padrão; mitiga: #38605 #38683. #41388 (Denny Crane).
  • Desde a versão 22.8, a cláusula ON CLUSTER é ignorada se o banco de dados for Replicated e o nome do cluster e o nome do banco de dados forem iguais. Por causa disso, DROP PARTITION ON CLUSTER funcionava de forma inesperada com Replicated. Isso foi corrigido; agora, a cláusula ON CLUSTER é ignorada apenas para consultas replicadas no nível do banco de dados. Corrige #41299. #41390 (Alexander Tokmakov).
  • Corrigido um possível travamento/deadlock no cancelamento de consulta (KILL QUERY ou desligamento do servidor). #41467 (Azat Khuzhin).
  • Corrige uma possível queda do servidor ao usar o recurso JBOD. Isso corrige #41365. #41483 (Amos Bird).
  • Corrige a conversão de FixedString Nullable para String. #41541 (Duc Canh Le).
  • Evita falhas ao passar estados de agregação incorretos para groupBitmap*. #41563 (Raúl Marín).
  • Consultas com ORDER BY e 1500 <= LIMIT <= max_block_size podiam retornar resultados incorretos, com linhas ausentes no início. Corrige #41182. #41576 (Nikolai Kochetov).
  • Corrige os bytes/linhas lidos em X-ClickHouse-Summary com visões materializadas. #41586 (Raúl Marín).
  • Corrige uma possível exceção pipeline stuck em consultas com OFFSET. O erro foi identificado com enable_optimize_predicate_expression = 0 e uma condição sempre falsa na cláusula WHERE. Corrige #41383. #41588 (Nikolai Kochetov).

Lançamento do ClickHouse 22.8, 2022-08-18. Apresentação, Vídeo

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

  • Intervalo de Date32 e DateTime64 ampliado para oferecer suporte a datas de 1900 a 2299. Nas versões anteriores, o intervalo suportado era apenas de 1925 a 2283. A implementação usa o calendário gregoriano proléptico (em conformidade com ISO 8601:2004 (cláusula 3.2.1 The Gregorian calendar)) em vez de considerar as transições históricas do calendário juliano para o gregoriano. Essa alteração afeta o comportamento específico da implementação para argumentos fora do intervalo. Por exemplo, se nas versões anteriores o valor 1899-01-01 era ajustado para 1925-01-01, na nova versão ele será ajustado para 1900-01-01. Isso altera o comportamento do arredondamento com toStartOfInterval se você passar INTERVAL 3 QUARTER até um trimestre, porque os intervalos são contados a partir de um ponto no tempo específico da implementação. Fecha #28216, melhora #38393. #39425 (Roman Vasin).
  • Agora, todas as fontes de dicionário relevantes respeitam a configuração remote_url_allow_hosts. Isso já havia sido feito para HTTP, Cassandra e Redis. Foram adicionados ClickHouse, MongoDB, MySQL e PostgreSQL. O host é verificado apenas para dicionários criados por DDL. #39184 (Nikolai Kochetov).
  • Os binários pré-compilados do ClickHouse para x86 agora exigem suporte a instruções AVX, ou seja, uma CPU não anterior a Intel Sandy Bridge / AMD Bulldozer, ambas lançadas em 2011. #39000 (Robert Schulze).
  • Tornar o filesystem cache remoto componível, permitir não remover determinados arquivos (como idx, mrk, ..) e excluir a versão antiga do cache. Agora é possível configurar cache sobre disco de Azure blob storage, sobre disco local, sobre disco StaticWeb etc. Este PR foi marcado como incompatível com versões anteriores porque a configuração do cache mudou e, para o cache funcionar, é necessário atualizar o arquivo de configuração. O cache antigo ainda será usado com a nova configuração. O servidor iniciará normalmente com a configuração antiga do cache. Fecha https://github.com/ClickHouse/ClickHouse/issues/36140. Fecha https://github.com/ClickHouse/ClickHouse/issues/37889. (Kseniia Sumarokova). #36171)

Novo recurso

  • Suporte à sintaxe padrão SQL DELETE FROM em tabelas MergeTree e implementação de exclusão leve para a família MergeTree. #37893 (Jianmei Zhang) (Alexander Gololobov). Observação: esse novo recurso não torna o ClickHouse um SGBD HTAP.
  • Parâmetros de consulta podem ser definidos no modo interativo como SET param_abc = 'def' e transmitidos pelo protocolo nativo como configurações. #39906 (Nikita Taranov).
  • A chave de quota pode ser definida no protocolo nativo (Yakov Olkhovsky).
  • Adicionada a configuração exact_rows_before_limit (0/1). Quando habilitada, o ClickHouse fornecerá o valor exato da estatística rows_before_limit_at_least, mas com o custo de precisar ler completamente os dados anteriores ao limite. Isso fecha #6613. #25333 (kevin wan).
  • Adicionado suporte a insert select distribuído em paralelo com a função de tabela s3Cluster em tabelas com engine Distributed e Replicated #34670. #39107 (Nikita Mikhaylov).
  • Adicionadas novas configurações para controlar a inferência de esquema a partir de formatos de texto: - input_format_try_infer_dates - tenta inferir datas a partir de strings. - input_format_try_infer_datetimes - tenta inferir DateTimes a partir de strings. - input_format_try_infer_integers - tenta inferir Int64 em vez de Float64. - input_format_json_try_infer_numbers_from_strings - tenta inferir números a partir de strings JSON em formatos JSON. #39186 (Kruglov Pavel).
  • Uma opção para fornecer saída de log em formato JSON. O objetivo é facilitar a ingestão e a consulta em ferramentas de análise de logs. #39277 (Mallik Hassan).
  • Adicionada a função nowInBlock, que permite obter a hora atual durante consultas contínuas e de longa duração. Fecha #39522. Observações: não existem as funções now64InBlock nem todayInBlock. #39533 (Alexey Milovidov).
  • Adicionada a possibilidade de especificar configurações para a função de tabela executable(). #39681 (Constantine Peresypkin).
  • Implementada a conversão automática do motor de banco de dados de Ordinary para Atomic. Crie um arquivo vazio convert_ordinary_to_atomic no diretório flags, e todos os bancos de dados Ordinary serão convertidos automaticamente na próxima inicialização do servidor. Resolve #39546. #39933 (Alexander Tokmakov).
  • Suporte a SELECT ... INTO OUTFILE '...' AND STDOUT. #37490. #39054 (SmitaRKulkarni).
  • Adicionados os formatos PrettyMonoBlock, PrettyNoEscapesMonoBlock, PrettyCompactNoEscapes, PrettyCompactNoEscapesMonoBlock, PrettySpaceNoEscapes, PrettySpaceMonoBlock, PrettySpaceNoEscapesMonoBlock. #39646 (Kruglov Pavel).

Melhoria de desempenho

  • Uso de memória aprimorado durante a mesclagem eficiente em termos de memória dos resultados de agregação. #39429 (Nikita Taranov).
  • Adicionada lógica de controle de concorrência para limitar o número total de threads simultâneas criadas pelas consultas. #37558 (Sergei Trifonov). Adicionado o parâmetro concurrent_threads_soft_limit para aumentar o desempenho em cenários de QPS alto, limitando o número total de threads para todas as consultas. #37285 (Roman Vasin).
  • Adicionar a política de cache SLRU para o cache de dados não compactados e o cache de marcas. (Kseniia Sumarokova). #34651 (alexX512). Desacoplamento da função de cache local do algoritmo de cache #38048 (Han Shukai).
  • Intel® In-Memory Analytics Accelerator (Intel® IAA) é um acelerador de hardware disponível na próxima geração de processadores Intel® Xeon® Scalable (“Sapphire Rapids”). Seu objetivo é acelerar operações comuns de analytics, como (des)compressão de dados e filtragem. O ClickHouse passou a contar com o novo codec de compressão “DeflateQpl”, que utiliza a tecnologia de offload do Intel® IAA para oferecer uma implementação DEFLATE de alto desempenho. O codec usa a Intel® Query Processing Library (QPL), que abstrai o acesso ao acelerador de hardware ou, caso ele não esteja disponível, a um fallback por software. Em geral, o DEFLATE oferece taxas de compressão mais altas do que o codec padrão LZ4 do ClickHouse e, como resultado, reduz a E/S de disco e o consumo de memória principal. #36654 (jasperzhu). #39494 (Robert Schulze).
  • DISTINCT em ordem com ORDER BY: deduzir a forma de ordenação com base na descrição de ordenação do fluxo de entrada. Ignorar a ordenação se o fluxo de entrada já estiver ordenado. #38719 (Igor Nikonov). Melhorar significativamente o uso de memória e o tempo de execução da consulta + usar DistinctSortedChunkTransform para o distinct final quando as colunas de DISTINCT corresponderem às colunas de ORDER BY, mas renomeá-lo para DistinctSortedStreamTransform em EXPLAIN PIPELINE → isso melhora significativamente o uso de memória + remover alocações desnecessárias no loop crítico em DistinctSortedChunkTransform. #39432 (Igor Nikonov). Usar DistinctSortedTransform somente quando a descrição de ordenação for aplicável às colunas de DISTINCT; caso contrário, recorrer à implementação comum de DISTINCT + isso permite fazer menos verificações durante a execução de DistinctSortedTransform. #39528 (Igor Nikonov). Correção: DistinctSortedTransform não aproveitava a ordenação. Ele nunca limpava o HashSet, já que as clearing_columns eram detectadas incorretamente (sempre vazias). Portanto, ele basicamente funcionava como um DISTINCT comum (DistinctTransform). A correção reduz significativamente o uso de memória. #39538 (Igor Nikonov).
  • Dê prioridade ao nó local para obter a estrutura da tabela remota ao executar cluster e funções de tabela semelhantes. #39440 (Mingliang Pan).
  • Otimiza a filtragem por colunas numéricas com AVX512VBMI2 compress store. #39633 (Guo Wangyang). Em sistemas com AVX512 VBMI2, este PR melhora o desempenho em cerca de 6% nas consultas 3.1, 3.2 e 3.3 do benchmark SSB (SF=100). Testado em Intel Icelake Xeon 8380 * 2 sockets. #40033 (Robert Schulze).
  • Otimize a análise de índices com expressões funcionais em cenários multithread. #39812 (Guo Wangyang).
  • Otimizações para consultas complexas: não percorrer a AST de UDFs se não houver nenhuma registrada. #40069 (Raúl Marín). Otimização da alocação e liberação no CurrentMemoryTracker. #40078 (Raúl Marín).
  • Codificação/decodificação Base58 melhorada. #39292 (Andrey Zvonov).
  • Melhora a transformação da máscara de bytes em bits para SSE/AVX/AVX512. #39586 (Guo Wangyang).

Melhoria

  • Normalize os tipos AggregateFunction e as representações de estado, porque otimizações como #35788 tratarão count(not null columns) como count(), o que pode causar confusão nos interpretadores distribuídos com o seguinte erro: Conversion from AggregateFunction(count) to AggregateFunction(count, Int64) is not supported. #39420 (Amos Bird). Funções com estados idênticos podem ser usadas de forma intercambiável em visões materializadas.
  • Retrabalhada e simplificada a tabela system.backups, removida a coluna internal, permitido que o usuário defina o ID da operação, adicionadas as colunas num_files, uncompressed_size, compressed_size, start_time, end_time. #39503 (Vitaly Baranov).
  • Estrutura aprimorada da tabela de resultados de consultas DDL para o banco de dados Replicated (colunas separadas com o nome do shard e da réplica, status mais claro) - as consultas CREATE TABLE ... ON CLUSTER podem ser normalizadas primeiro no iniciador se distributed_ddl_entry_format_version estiver definido como 3 (valor padrão). Isso significa que consultas ON CLUSTER podem não funcionar se o iniciador não pertencer ao cluster especificado na consulta. Corrige #37318, #39500 - Ignora a cláusula ON CLUSTER se o banco de dados for Replicated e o nome do cluster for igual ao nome do banco de dados. Relacionado a #35570 - Pequenas correções diversas no engine de banco de dados Replicated - Verifica a consistência dos metadados ao iniciar o banco de dados Replicated e inicia a recuperação da réplica em caso de incompatibilidade entre os metadados locais e os metadados no Keeper. Resolve #24880. #37198 (Alexander Tokmakov).
  • Adicionar result_rows e result_bytes aos relatórios de progresso (X-ClickHouse-Summary). #39567 (Raúl Marín).
  • Melhoria na análise da chave primária do MergeTree. #25563 (Nikolai Kochetov).
  • timeSlots agora funciona com DateTime64; duração e tamanho do slot em subsegundos ficam disponíveis ao trabalhar com DateTime64. #37951 (Andrey Zvonov).
  • Adicionado suporte a direct join LEFT SEMI e LEFT ANTI com tabelas EmbeddedRocksDB. #38956 (Vladimir C).
  • Adiciona eventos de perfil para operações de fsync. #39179 (Azat Khuzhin).
  • Adicionado o segundo argumento à função comum file(path[, default]), que é retornado pela função caso o arquivo não exista. #39218 (Nikolay Degterinsky).
  • Algumas pequenas correções para leitura via HTTP, permitindo tentar novamente o conteúdo parcial em caso de 200 OK. #39244 (Kseniia Sumarokova).
  • Suporta consultas CREATE TEMPORARY TABLE ... (<list of columns>) AS .... #39462 (Kruglov Pavel).
  • Adicionado suporte a !/* (exclamação/asterisco) em TLDs customizados (cutToFirstSignificantSubdomainCustom()/cutToFirstSignificantSubdomainCustomWithWWW()/firstSignificantSubdomainCustom()). #39496 (Azat Khuzhin).
  • Adiciona suporte a conexões TLS para o NATS. Implementa #39525. #39527 (Constantine Peresypkin).
  • clickhouse-obfuscator (uma ferramenta de ofuscação de banco de dados para testes e geração de carga) agora conta com os novos parâmetros --save e --load para trabalhar com modelos pré-treinados. Isso corrige #39534. #39541 (Alexey Milovidov).
  • Corrigido o comportamento incorreto da rotação de logs durante a reinicialização. #39558 (Nikolay Degterinsky).
  • Corrige a criação de projeções de agregação quando a agregação externa está ativada. Marcado como melhoria porque esse caso é raro e há uma solução alternativa simples: alterar as configurações. Isso corrige #39667 . #39671 (Amos Bird).
  • Permite executar funções de hash com argumentos do tipo Map. #39685 (Anton Popov).
  • Adicionado um parâmetro de configuração para ocultar endereços em stack traces. Isso pode melhorar um pouco a segurança, mas, em geral, é prejudicial e não deve ser usado. #39690 (Alexey Milovidov).
  • Altere o tamanho do prefixo de AggregateFunctionDistinct para garantir o alinhamento do segmento de memória dos dados da função aninhada. #39696 (Pxl).
  • Escapar corretamente as credenciais passadas para a ferramenta clickhouse-diagnostic. #39707 (Dale McDiarmid).
  • Melhoria no ClickHouse Keeper: criar um snapshot ao encerrar. Isso pode ser controlado pela configuração keeper_server.create_snapshot_on_exit, true por padrão. #39755 (Antonio Andelic).
  • Passa a oferecer suporte à análise de chave primária para row_policy_filter e additional_filter. Isso também ajuda a corrigir problemas como #37454. #39826 (Amos Bird).
  • Corrigidos dois problemas de usabilidade na UI do Play: - ela não estava pixel-perfect no iPad devido a bordas arredondadas e margens indevidas; - a indicação de progresso não era exibida após a primeira consulta. Isso fecha #39957. Isso fecha #39960. #39961 (Alexey Milovidov).
  • UI do Play: adicionar números de linha; adicionar seleção de células ao clicar; adicionar histerese para células da tabela. #39962 (Alexey Milovidov).
  • UI do Play: reconhecer a tecla Tab em textarea, mas sem prejudicar, ao mesmo tempo, a navegação com Tab. #40053 (Alexey Milovidov).
  • O cliente mostrará o tempo decorrido no servidor. Isso é importante para comparar o desempenho de serviços do ClickHouse em datacenters remotos. Fecha #38070. Veja também isto para entender a motivação. #39968 (Alexey Milovidov).
  • Adiciona funções parseDateTime64BestEffortUS, parseDateTime64BestEffortUSOrNull e parseDateTime64BestEffortUSOrZero, fechando #37492. #40015 (Tanya Bragin).
  • Amplie o system.processors_profile_log com mais informações, como o número de linhas de entrada. #40121 (Amos Bird).
  • Exibir o tempo no servidor em clickhouse-benchmark por padrão, se disponível (desde a versão 22.8 do ClickHouse). Isso é necessário para comparar corretamente o desempenho de serviços em nuvem. Esse comportamento pode ser alterado com a nova opção de linha de comando --client-side-time. Alterar a opção de linha de comando --randomize de --randomize 1 para a forma sem argumento. #40193 (Alexey Milovidov).
  • Adiciona contadores (ProfileEvents) para casos em que o limite de complexidade da consulta foi configurado e atingido (um contador separado para overflow_mode = break e throw). Por exemplo, se você configurou max_rows_to_read com read_overflow_mode = 'break', observar o valor do contador OverflowBreak permitirá identificar resultados incompletos. #40205 (Alexey Milovidov).
  • Corrigida a contabilização de memória no caso de erros de “Memory limit exceeded” (anteriormente, o uso [de pico] de memória levava em conta alocações malsucedidas). #40249 (Azat Khuzhin).
  • Adicionadas métricas para o cache do sistema de arquivos: FilesystemCacheSize e FilesystemCacheElements. #40260 (Kseniia Sumarokova).
  • Suporte à transferência segura via RPC do Hadoop (hadoop.rpc.protection=privacy and hadoop.rpc.protection=integrity). #39411 (michael1589).
  • Evite o aumento contínuo do consumo de memória do cache de padrões ao usar as funções multi(Fuzzy)Match(Any|AllIndices|AnyIndex)(). #40264 (Robert Schulze).

Melhorias de compilação/testes/empacotamento

  • ClickFiddle: Uma nova ferramenta para testar versões do ClickHouse em modo de leitura e gravação (Igor Baliuk).
  • O binário do ClickHouse agora é autoextraível #35775 (Yakov Olkhovskiy, Arthur Filatenkov).
  • Atualize o tzdata para 2022b para dar suporte às novas alterações de fuso horário. Veja https://github.com/google/cctz/pull/226. O início do DST de 2022 no Chile foi adiado de 4 de setembro para 11 de setembro. O Irã planeja deixar de observar o DST permanentemente, depois de voltar ao horário padrão em 2022-09-21. Há correções no histórico do fuso horário de Asia/Tehran para o ano de 1977: o Irã adotou o horário padrão em 1935, não em 1946. Em 1977, observou DST de 03-21 23:00 a 10-20 24:00; suas transições de 1978 ocorreram em 03-24 e 08-05, não em 03-20 e 10-20; e sua transição na primavera de 1979 ocorreu em 05-27, não em 03-21 (https://data.iana.org/time-zones/tzdb/NEWS). (Alexey Milovidov).
  • Pacotes anteriores costumavam instalar o arquivo systemd.service em /etc. Os arquivos ali são marcados como conf e não são removidos nem atualizados automaticamente. Este PR faz essa limpeza. #39323 (Mikhail f. Shiryaev).
  • Garanta a eficácia do LSan. #39430 (Azat Khuzhin).
  • O TSAN apresenta problemas com o clang-14 (https://github.com/google/sanitizers/issues/1552, https://github.com/google/sanitizers/issues/1540), por isso, aqui, os binários do TSAN são compilados com clang-15. #39450 (Mikhail f. Shiryaev).
  • Removida a opção de compilar as ferramentas do ClickHouse como programas executáveis separados. Isso corrige #37847. #39520 (Alexey Milovidov).
  • Pequenos ajustes preparatórios para a compilação em s390x (que é big-endian). #39627 (Harry Lee). #39656 (Harry Lee). Corrigido um problema de endian em BitHelpers para s390x. #39656 (Harry Lee). Implementado um trecho de código relacionado ao SipHash para a arquitetura s390x (que não é compatível com o ClickHouse). #39732 (Harry Lee). Corrigido um problema de endian no código de snapshot de coordination para a arquitetura s390x (que não é compatível com o ClickHouse). #39931 (Harry Lee). Corrigidos problemas de endian no código do codec para a arquitetura s390x (que não é compatível com o ClickHouse). #40008 (Harry Lee). Corrigidos problemas de endian na leitura/gravação de dados binários BigEndian no código de ReadHelpers e WriteHelpers para a arquitetura s390x (que não é compatível com o ClickHouse). #40179 (Harry Lee).
  • Suporte à compilação com clang-16 (trunk). Isso corrige #39949. #40181 (Alexey Milovidov).
  • Preparar a compilação para RISC-V 64 para execução na CI. Isto é para #40141. #40197 (Alexey Milovidov).
  • Interface da macro de registro de função (FUNCTION_REGISTER*) simplificada para eliminar a etapa de adicionar e chamar uma função extern em registerFunctions.cpp; isso também acelera as compilações incrementais de uma nova função. #38615 (Li Yin).
  • Docker: Agora, o entrypoint.sh na imagem Docker cria e executa chown para todas as pastas encontradas na configuração de múltiplos discos #17717. #39121 (Nikita Mikhaylov).

Correção de bug

  • Corrige um possível segfault no input format CapnProto. Esse bug foi encontrado e reportado por kiojj por meio do programa de bug bounty do ClickHouse. #40241 (Kruglov Pavel).
  • Corrige um caso muito raro de comportamento incorreto do operador de índice de array. Fecha #28720. #40185 (Alexey Milovidov).
  • Corrige a validação insuficiente de argumentos para funções de criptografia (encontrada pelo fuzzer de consultas). Fecha #39987. #40194 (Alexey Milovidov).
  • Corrige o caso em que a ordem das colunas pode ficar incorreta se o operador IN for usado com uma tabela com ENGINE = Set que contém múltiplas colunas. Isso corrige #13014. #40225 (Alexey Milovidov).
  • Corrige o reposicionamento da leitura ao ler de disco criptografado. Este PR corrige #38381. #39687 (Vitaly Baranov).
  • Corrige colunas duplicadas no plano de join. Por fim, resolve #26809. #40009 (Vladimir C).
  • Corrigido o travamento de consulta em SELECT com ORDER BY WITH FILL usando diferentes tipos de data/hora. #37849 (Yakov Olkhovskiy).
  • Correção do ORDER BY para corresponder ao ORDER BY das projeções (antes, ele simplesmente retornava um resultado não ordenado). #38725 (Azat Khuzhin).
  • Não otimize funções em instruções GROUP BY se elas se sobrepuserem a uma das colunas ou expressões da tabela. Corrige #37032. #39103 (Anton Kozlov).
  • Corrige o nome errado da tabela nos logs após RENAME TABLE. Isso corrige #38018. #39227 (Amos Bird).
  • Corrige argumentos posicionais no caso de poda de colunas durante a otimização da consulta. Fecha #38433. #39293 (Kseniia Sumarokova).
  • Corrige um bug na inferência de esquema no caso de mensagens vazias nos formatos Protobuf/CapnProto, que permitia criar uma coluna com o tipo Tuple vazio. Fecha #39051 Adiciona 2 novas configurações input_format_{protobuf/capnproto}_skip_fields_with_unsupported_types_in_schema_inference, que permitem ignorar campos com tipos não suportados durante a inferência de esquema para os formatos Protobuf e CapnProto. #39357 (Kruglov Pavel).
  • (Window View é uma funcionalidade experimental) Corrige uma falha de segmentação em CREATE WINDOW VIEW .. ON CLUSTER ... INNER. Fecha #39363. #39384 (Kseniia Sumarokova).
  • Corrige a finalização do WriteBuffer ao cancelar insert into function (em versões anteriores, isso podia levar a std::terminate). #39458 (Kruglov Pavel).
  • Corrigido o armazenamento de colunas do tipo Object na serialização esparsa. #39464 (Anton Popov).
  • Corrige uma possível exceção “coluna não encontrada no bloco” ao usar projeções. Isso fecha #39469. #39470 (小路).
  • Corrige exceção em uma condição de corrida entre DROP e INSERT com visões materializadas. #39477 (Azat Khuzhin).
  • Um bug na biblioteca Apache Avro: corrige uma condição de corrida de dados e um possível heap-buffer-overflow no formato Avro. Fecha #39094 Fecha #33652. #39498 (Kruglov Pavel).
  • Corrige um bug raro na leitura assíncrona (com a configuração local_filesystem_read_method='pread_threadpool') quando O_DIRECT está habilitado (pela configuração min_bytes_to_use_direct_io). #39506 (Anton Popov).
  • (somente no FreeBSD) Corrige o “Code: 49. DB::Exception: FunctionFactory: the function name ” is not unique. (LOGICAL_ERROR)”, observado no FreeBSD ao iniciar o ClickHouse. #39551 (Alexander Gololobov).
  • Corrigido um erro no argumento “maxsplit”, introduzido recentemente para splitByChar, que não estava funcionando corretamente. #39552 (filimonov).
  • Corrige um bug no ASOF JOIN com enable_optimize_predicate_expression, fecha #37813. #39556 (Vladimir C).
  • Corrigida a consulta CREATE/DROP INDEX com ON CLUSTER ou em banco de dados Replicated e ReplicatedMergeTree. Antes, ela era executada em todas as réplicas (causando erro ou travando a fila de DDL). Corrige #39511. #39565 (Alexander Tokmakov).
  • Corrige o erro “column not found” em push down com join, fecha #39505. #39575 (Vladimir C).
  • Corrige o alias incorreto de REGEXP_REPLACE. Isso corrige o problema em https://github.com/ClickHouse/ClickBench/issues/9. #39592 (Alexey Milovidov).
  • Corrigido o ponto de origem fixo das funções de janela de decaimento exponencial para o último valor da janela. Anteriormente, o decaimento era calculado pela fórmula exp((t - curr_row_t) / decay_length), o que está incorreto quando o limite direito da janela não é CURRENT ROW. Foi alterado para: exp((t - last_row_t) / decay_length). Não há mudança nos resultados para janelas com ROWS BETWEEN (smth) AND CURRENT ROW. #39593 (Vladimir Chebotaryov).
  • Corrigido o overflow na divisão de Decimal, que pode ser detectado com base na escala dos operandos. #39600 (Andrey Zvonov).
  • Corrige o funcionamento combinado das configurações output_format_arrow_string_as_string e output_format_arrow_low_cardinality_as_dictionary. Fecha #39624. #39647 (Kruglov Pavel).
  • Corrigido um erro na resolução do banco de dados padrão em leituras de tabela distribuída. #39674 (Anton Kozlov).
  • (Apenas com os bancos de dados Ordinary obsoletos) O SELECT podia ler dados de uma tabela removida se o cache para mmap IO fosse usado, o engine do banco de dados fosse Ordinary e novas tabelas fossem criadas com o mesmo nome da tabela removida. Isso foi corrigido. #39708 (Alexander Tokmakov).
  • Corrige possível erro Invalid column type for ColumnUnique::insertRangeFrom. Expected String, got ColumnLowCardinality. Corrige #38460. #39716 (Arthur Passos).
  • Os nomes dos campos na seção meta do formato JSON foram escapados incorretamente em duplicidade. Isso fecha #39693. #39747 (Alexey Milovidov).
  • Corrige a análise incorreta de índice com tuplas e o operador IN, que poderia levar a resultados incorretos de consulta. #39752 (Anton Popov).
  • Corrigida a filtragem de tabelas EmbeddedRocksDB por chave usando parâmetros. #39757 (Antonio Andelic).
  • Corrigido o erro Invalid number of columns in chunk pushed to OutputPort, causado pela otimização de ARRAY JOIN. Corrige #39164. #39799 (Nikolai Kochetov).
  • Uma solução alternativa para um bug no kernel do Linux. Corrige a exceção CANNOT_READ_ALL_DATA com local_filesystem_read_method=pread_threadpool. Segundo a man page, esse bug afetava apenas as versões 5.9 e 5.10 do kernel do Linux. #39800 (Anton Popov).
  • (Apenas em NFS) Corrige a falha no mkdir do NFS em volumes com root-squash. #39898 (Constantine Peresypkin).
  • Remove dicionários das métricas do Prometheus em DETACH/DROP. #39926 (Azat Khuzhin).
  • Corrigida a leitura de StorageFile com colunas virtuais. Fecha #39907. #39943 (flynn).
  • Corrige o alto consumo de memória durante fetches. Corrige #39915. #39990 (Nikolai Kochetov).
  • (recurso experimental) Corrige falha em hashId e o parâmetro salt que não estava sendo usado. #40002 (Raúl Marín).
  • Os operadores EXCEPT e INTERSECT podem causar uma falha se uma combinação específica de colunas constantes e não constantes for usada. #40020 (Duc Canh Le).
  • Corrigidos os erros “Part directory doesn’t exist” e “tmp_<part_name> … No such file or directory” durante um INSERT muito lento ou um merge/mutação demorado demais. Também foi corrigido um problema que podia fazer com que algumas entradas da fila de replicação ficassem travadas sem nenhum erro ou aviso nos logs se uma tentativa anterior de obter a part tivesse falhado, mas o diretório tmp-fetch_<part_name> não tivesse sido limpo. #40031 (Alexander Tokmakov).
  • Corrige casos raros na análise de arrays de tuplas no formato Values. #40034 (Anton Popov).
  • Corrige a conversão, no formato ArrowColumn, de Dictionary(X) & Dictionary(Nullable(X)) para ClickHouse LowCardinality(X) & LowCardinality(Nullable(X)), respectivamente. #40037 (Arthur Passos).
  • Corrige um possível deadlock na gravação em S3 durante uma falha no agendamento de tarefas. #40070 (Maksim Kita).
  • Corrigido um bug em collectFilesToSkip() ao adicionar a extensão de arquivo correta (.idx ou idx2) para os índices que serão recalculados, evitando hard links incorretos. Corrigido em #39896. #40095 (Jianmei Zhang).
  • Uma correção na resolução reversa de DNS. #40134 (Arthur Passos).
  • Corrigido o resultado inesperado de arrayDifference em `Array(UInt32). #40211 (Duc Canh Le).

Lançamento do ClickHouse 22.7, 2022-07-21. Apresentação, Vídeo

Notas de atualização

  • Habilite a configuração enable_positional_arguments por padrão. Ela permite consultas como SELECT ... ORDER BY 1, 2, em que 1 e 2 são referências à cláusula SELECT. Se precisar restaurar o comportamento anterior, desabilite essa configuração. #38204 (Alexey Milovidov).
  • Desabilite format_csv_allow_single_quotes por padrão. Veja #37096. (Kruglov Pavel).
  • O motor de banco de dados Ordinary e a sintaxe antiga de definição de armazenamento para tabelas *MergeTree estão obsoletos. Por padrão, não é possível criar novas databases com o engine Ordinary. Se a database system usar o engine Ordinary, ela será convertida automaticamente para Atomic na inicialização do servidor. Há configurações para manter o comportamento anterior (allow_deprecated_database_ordinary e allow_deprecated_syntax_for_merge_tree), mas elas podem ser removidas em lançamentos futuros. #38335 (Alexander Tokmakov).
  • Forçe a reescrita de comma join para inner por padrão (defina o valor padrão cross_to_inner_join_rewrite = 2). Para manter o comportamento anterior, defina cross_to_inner_join_rewrite = 1. #39326 (Vladimir C). Se você encontrar alguma incompatibilidade, poderá reverter essa configuração.

novo recurso

  • Suporte para expressões com funções de janela. Fecha #19857. #37848 (Dmitry Novik).
  • Adicionado o novo algoritmo de join direct para tabelas EmbeddedRocksDB; veja #33582. #35363 (Vladimir C).
  • Adicionado o algoritmo full sorting merge join. #35796 (Vladimir C).
  • Implementa o engine de tabela NATS, que permite fazer pub/sub com o NATS. Fecha #32388. #37171 (tchepavel). (Kseniia Sumarokova)
  • Implementar a função de tabela mongodb. Permitir escrita no armazenamento / na função de tabela MongoDB. #37213 (aaapetrenko). (Kseniia Sumarokova)
  • Adicionado o formato de saída SQLInsert. Fecha #38441. #38477 (Kruglov Pavel).
  • Foi introduzida a configuração additional_table_filters. Com essa configuração, você pode especificar uma condição de filtragem adicional para uma tabela, que será aplicada imediatamente após a leitura. Exemplo: select number, x, y from (select number from system.numbers limit 5) f any left join (select x, y from table_1) s on f.number = s.x settings additional_table_filters={'system.numbers : 'number != 3', 'table_1' : 'x != 2'}. Também foi introduzida a configuração additional_result_filter, que especifica uma condição de filtragem adicional para o resultado da consulta. Fecha #37918. #38475 (Nikolai Kochetov).
  • Adiciona a configuração compatibility e a tabela de sistema system.settings_changes, que contém informações sobre alterações nas configurações entre versões do ClickHouse. Fecha #35972. #38957 (Kruglov Pavel).
  • Adicionar as funções translate(string, from_string, to_string) e translateUTF8(string, from_string, to_string). Elas convertem determinados caracteres em outros. #38935 (Nikolay Degterinsky).
  • Suporte para a função parseTimeDelta. Ela pode ser usada da seguinte forma: ;-+,: podem ser usados como separadores, por exemplo, 1yr-2mo, 2m:6s: SELECT parseTimeDelta('1yr-2mo-4w + 12 days, 3 hours : 1 minute ; 33 seconds'). #39071 (jiahui-97).
  • Adicionada a consulta CREATE TABLE ... EMPTY AS SELECT. Ela deduz automaticamente a estrutura da tabela com base na consulta SELECT, mas não preenche a tabela após sua criação. Resolve #38049. #38272 (Alexander Tokmakov).
  • Adicionadas opções para limitar operações de E/S em armazenamento remoto: max_remote_read_network_bandwidth_for_server e max_remote_write_network_bandwidth_for_server. #39095 (Sergei Trifonov).
  • Adicionada a configuração group_by_use_nulls para tornar anuláveis as colunas-chave de agregação nos casos de ROLLUP, CUBE e GROUPING SETS. Fecha #37359. #38642 (Dmitry Novik).
  • Adicionada a possibilidade de especificar o nível de compressão durante a exportação de dados. #38907 (Nikolay Degterinsky).
  • Adiciona a opção de exigir grants explícitos para executar SELECT no banco de dados system. Detalhes: #38970 (Vitaly Baranov).
  • As funções multiMatchAny, multiMatchAnyIndex, multiMatchAllIndices e suas variantes aproximadas agora aceitam um argumento de Array de padrões não constante. #38485 (Robert Schulze). A função SQL multiSearchAllPositions agora aceita argumentos de substring de busca não constantes. #39167 (Robert Schulze).
  • Adiciona a configuração zstd_window_log_max para definir o uso máximo de memória na decodificação zstd ao importar arquivos externos. Fecha #35693. #37015 (wuxiaobai24).
  • Adicionar a configuração send_logs_source_regexp. Envia logs de texto do servidor com a regexp especificada para corresponder ao nome da origem do log. Vazio significa todas as origens. #39161 (Amos Bird).
  • Compatibilidade com ALTER para tabelas Hive. #38214 (lgbo).
  • Suporte para a função isNullable. Esta função verifica se o argumento é Nullable e retorna 1 ou 0. Fecha #38611. #38841 (lokax).
  • Adicionadas funções para codificar/decodificar em base58. #38159 (Andrey Zvonov).
  • Adicionar visualização de gráficos à UI do Play. #38197 (Alexey Milovidov).
  • Adicionadas funções de distância L2 ao quadrado e de norma para arrays e tuplas. #38545 (Julian Gilyadov).
  • Adicionada a possibilidade de informar cabeçalhos HTTP para a função de tabela / armazenamento url via SQL. Fecha #37897. #38176 (Kseniia Sumarokova).
  • Adicionado o binário clickhouse-diagnostics aos pacotes. #38647 (Mikhail f. Shiryaev).

Funcionalidade experimental

  • Adiciona a nova configuração implicit_transaction para executar consultas isoladas dentro de uma transação. Ela faz automaticamente tanto a abertura quanto o encerramento da transação (via COMMIT se a consulta for bem-sucedida ou ROLLBACK se não for). #38344 (Raúl Marín).

Melhoria de desempenho

  • Otimização de distinct para colunas ordenadas. Use uma transformação distinct especializada caso o fluxo de entrada esteja ordenado pela(s) coluna(s) em distinct. A otimização pode ser aplicada ao pre-distinct, ao final distinct ou a ambos. Implementação inicial por @dimarub2000. #37803 (Igor Nikonov).
  • Melhora o desempenho de ORDER BY, dos merges do MergeTree e das funções de janela usando a versão em lote de BinaryHeap. #38022 (Maksim Kita).
  • Maior paralelismo na execução de consultas com FINAL #36396 (Nikita Taranov).
  • Corrige uma regressão significativa no desempenho de join introduzida em #35616. É curioso que consultas join comuns, como as consultas ssb, tenham ficado 10 vezes mais lentas por quase 3 meses sem que ninguém reclamasse. #38052 (Amos Bird).
  • Migração da biblioteca Intel hyperscan para vectorscan, o que acelera muitas operações de correspondência de strings em plataformas não x86. #38171 (Robert Schulze).
  • Maior paralelismo nas etapas do plano de consulta executadas após a agregação. #38295 (Nikita Taranov).
  • Melhorado o desempenho da inserção em colunas do tipo JSON. #38320 (Anton Popov).
  • Inserção e buscas otimizadas na HashTable. #38413 (Nikita Taranov).
  • Corrige a degradação de desempenho causada por #32493. #38417 (Alexey Milovidov).
  • Melhorado o desempenho de joins com colunas numéricas usando instruções SIMD. #37235 (zzachimed). #38565 (Maksim Kita).
  • Funções de norma e distância para arrays tiveram aceleração de 1,2 a 2 vezes. #38740 (Alexander Gololobov).
  • Adicionado copyOverlap32Shuffle otimizado com AVX-512 VBMI para descompressão de LZ4. Em outras palavras, o desempenho da descompressão de LZ4 foi melhorado. #37891 (Guo Wangyang).
  • ORDER BY (a, b) terá todos os mesmos benefícios de ORDER BY a, b. #38873 (Igor Nikonov).
  • Alinhar os branches em um limite de 32 B para tornar o benchmark mais estável. #38988 (Guo Wangyang). Isso melhora o desempenho em 1..2% em média em CPUs Intel.
  • UDFs executáveis, dicionários executáveis e tabelas executáveis evitarão perder sequer um segundo esperando o encerramento do subprocesso. #38929 (Constantine Peresypkin).
  • Otimiza os acessos à tabela system.stack_trace quando nem todas as colunas são selecionadas. #39177 (Azat Khuzhin).
  • Melhora no desempenho de isNullable/isConstant/isNull/isNotNull com o argumento LowCardinality. #39192 (Kruglov Pavel).
  • Otimização do processamento de ORDER BY em funções de janela. #34632 (Vladimir Chebotarev).
  • A tabela system.asynchronous_metric_log foi otimizada ainda mais para economizar espaço de armazenamento. Isso resolve #38134. Veja o vídeo no YouTube. #38428 (Alexey Milovidov).

Melhoria

  • Suporte à sintaxe SQL padrão para CREATE INDEX e DROP INDEX. #35166 (Jianmei Zhang).
  • Enviar eventos de perfil para consultas INSERT (antes, havia suporte apenas para SELECT). #37391 (Azat Khuzhin).
  • Implementa a agregação in order (optimize_aggregation_in_order) para projeções totalmente materializadas. #37469 (Azat Khuzhin).
  • Removida a execução de um subprocesso para a inicialização do Kerberos. Adicionado um novo teste de integração. Fecha #27651. #38105 (Roman Vasin).
    • Adicionada a configuração multiple_joins_try_to_keep_original_names para evitar reescrever o nome do identificador ao reescrever múltiplos JOINs, fecha #34697. #38149 (Vladimir C).
  • Experiência de uso do visualizador de traces aprimorada. #38169 (Sergei Trifonov).
  • Ativa a coleta de stack trace e o profiler de consultas para AArch64. #38181 (Maksim Kita).
  • Não pule links simbólicos no diretório user_defined durante o carregamento de funções em SQL definidas pelo usuário. Fecha #38042. #38184 (Maksim Kita).
  • Adicionada a limpeza em segundo plano de subdiretórios em store/. Em alguns casos, o clickhouse-server podia deixar subdiretórios desnecessários em store/ (por exemplo, após uma criação de tabela malsucedida), e esses diretórios nunca eram removidos. Corrige #33710. #38265 (Alexander Tokmakov).
  • Adiciona a consulta DESCRIBE CACHE para mostrar as configurações de cache da config. Adiciona a consulta SHOW CACHES para mostrar a lista de caches do sistema de arquivos disponíveis. #38279 (Kseniia Sumarokova).
  • Adicionada verificação de acesso para system drop filesystem cache. Adicionado suporte a ON CLUSTER. #38319 (Kseniia Sumarokova).
  • Corrige a incompatibilidade do mecanismo de banco de dados PostgreSQL ao atualizar da versão 21.3 para a 22.3. Fecha #36659. #38369 (Kseniia Sumarokova).
  • filesystemAvailable e funções semelhantes agora funcionam no clickhouse-local. Isso corrige #38423. #38424 (Alexey Milovidov).
  • Adicionada a função revision. #38555 (Azat Khuzhin).
  • Corrigido o uso do GCS via túnel de proxy. #38726 (Azat Khuzhin).
  • Adicionado suporte a \i file no ClickHouse client / local (semelhante ao psql \i). #38813 (Kseniia Sumarokova).
  • Nova opção optimize = 1 em EXPLAIN AST. Se ativada, mostra a AST após a reescrita; caso contrário, a AST da consulta original. Desativada por padrão. #38910 (Igor Nikonov).
  • Permite vírgula final na lista de colunas. Fecha #38425. #38440 (chen).
  • Correções de bugs e melhorias de desempenho para o método parallel_hash de JOIN. #37648 (Vladimir C).
  • Suporte à transferência segura por RPC no Hadoop (hadoop.rpc.protection=privacy e hadoop.rpc.protection=integrity). #37852 (Peng Liu).
  • Adicionado suporte a tipo struct no StorageHive. #38118 (lgbo).
  • Objetos individuais do S3 agora são removidos com RemoveObjectRequest. Implementada compatibilidade com o GCP, que não permitia o uso de removeFileIfExists, o que na prática comprometia aproximadamente metade da funcionalidade de remove. Detecção automática da API DeleteObjects do S3, que não é compatível com o GCS. Isso permitirá usar o GCS sem precisar definir explicitamente support_batch_delete=0 na configuração. #37882 (Vladimir Chebotarev).
  • Expor dados básicos de monitoramento relacionados ao ClickHouse Keeper (por meio de ProfileEvents e CurrentMetrics). #38072 (lingpeng0314).
  • Suporte à opção auto_close na conexão do engine PostgreSQL. Fecha #31486. #38363 (Kseniia Sumarokova).
  • Permitir o modificador NULL na declaração de colunas em funções de tabela. #38816 (Kruglov Pavel).
  • Desative mutations_finalizing_task antes do desligamento para evitar erros benignos TABLE_IS_READ_ONLY ao desligar. #38851 (Raúl Marín).
  • Elimina a espera desnecessária de consultas SELECT após consultas ALTER na presença de consultas INSERT ao usar bancos de dados Ordinary obsoletos. #38864 (Azat Khuzhin).
  • Nova opção rewrite em EXPLAIN AST. Se ativada, mostra a AST depois de ser reescrita; caso contrário, mostra a AST da consulta original. Desativada por padrão. #38910 (Igor Nikonov).
  • Não reporta mais exceções “Node exists” do ZooKeeper em system.errors quando elas são esperadas. #38961 (Raúl Marín).
  • clickhouse-keeper: adiciona suporte ao cálculo e à verificação de digest em tempo real. Ele vem desabilitado por padrão. #37555 (Antonio Andelic).
  • Permite especificar globs * or {expr1, expr2, expr3} em uma chave da ferramenta clickhouse-extract-from-config. #38966 (Nikita Mikhaylov).
  • clearOldLogs: Não emitir KEEPER_EXCEPTION em exclusões simultâneas. #39016 (Raúl Marín).
  • melhoria no ClickHouse Keeper: persistência de metainformações sobre os servidores Keeper em disco. #39069 (Antonio Andelic). Isso facilitará a operação caso você desligue ou reinicie todos os nós do Keeper ao mesmo tempo.
  • Continua funcionando sem gerar exceção ao ficar sem espaço em disco ao usar o cache do sistema de arquivos. #39106 (Kseniia Sumarokova).
  • Tratamento dos sinais SIGTERM do k8s. #39130 (Timur Solodovnikov).
  • Adicionar a coluna merge_algorithm (Undecided, Horizontal, Vertical) ao system.part_log. #39181 (Azat Khuzhin).
  • Não incrementar um contador em system.errors quando o disco não for rotacional. #39216 (Raúl Marín).
  • A métrica result_bytes para consultas INSERT em system.query_log mostra o número de bytes inseridos. Antes, esse valor estava incorreto e era armazenado com o mesmo valor de result_rows. #39225 (Ilya Yatsishin).
  • A métrica de uso de CPU no clickhouse-client será exibida de forma mais clara. Corrige #38756. #39280 (Sergei Trifonov).
  • Relança a exceção na inicialização do cache do sistema de arquivos durante a inicialização do servidor, com uma mensagem de erro mais clara. #39386 (Kseniia Sumarokova).
  • O OpenTelemetry agora não coleta spans de Processors por padrão (há muitos deles). Para ativar a coleta de spans de Processors, use a configuração opentelemetry_trace_processors. #39170 (Ilya Yatsishin).
  • Funções multiMatch[Fuzzy](AllIndices/Any/AnyIndex) - não lançam erro lógico se o argumento needle estiver vazio. #39012 (Robert Schulze).
  • Permite declarar a fila do RabbitMQ sem os argumentos padrão x-max-length e x-overflow. #39259 (rnbondarenko).

melhoria de compilação/testes/empacotamento

  • Aplicar anotações de Clang Thread Safety Analysis (TSA) ao ClickHouse. #38068 (Robert Schulze).
  • Adaptar o script de instalação universal para o FreeBSD. #39302 (Alexey Milovidov).
  • Preparação para compilação na plataforma s390x. #39193 (Harry Lee).
  • Corrigir um bug na biblioteca jemalloc. #38757 (Azat Khuzhin).
  • O benchmark de hardware agora oferece suporte ao envio automático de resultados. #38427 (Alexey Milovidov).
  • A tabela de sistema “system.licenses” agora é preenchida corretamente no Mac (Darwin). #38294 (Robert Schulze).
  • Alterar os pacotes all|noarch para que dependam da arquitetura - Corrigir a documentação correspondente - Enviar pacotes aarch64|arm64 para o Artifactory e os assets do lançamento - Corrige #36443. #38580 (Mikhail f. Shiryaev).

Correção de bug (comportamento incorreto visível para o usuário em versão estável ou pré-estável oficial)

  • Corrigido o arredondamento de Decimal128/Decimal256 com escala maior que 19 dígitos. #38027 (Igor Nikonov).
  • Corrigido travamento causado por uma condição de corrida no armazenamento Hive (mecanismo de tabela de integração). #38887 (lgbo).
  • Corrigida falha ao executar GRANT ALL ON . com ON CLUSTER. Isso foi introduzido em https://github.com/ClickHouse/ClickHouse/pull/35767. Isso fecha #38618. #38674 (Vitaly Baranov).
  • Corrige a expansão de glob no caso de formatos {0..10}. Corrige #38498. A implementação atual é semelhante ao que o shell faz, conforme mencionado por @rschu1ze aqui. #38502 (Heena Bansal).
  • Corrige o travamento nas funções mapUpdate e mapFilter ao usar um argumento map constante. Fecha #38547. #38553 (hexiaoting).
  • Corrige as informações de monotonicidade de toHour para otimização de consultas, o que pode levar a resultados incorretos da consulta (análise incorreta de índice). Isso corrige #38333. #38675 (Amos Bird).
  • Correção na verificação de suporte a gravações paralelas no armazenamento S3. Isso fazia com que as gravações paralelas no S3 não funcionassem. #38792 (chen).
  • Corrige leituras com seek no S3 com buffer de leitura paralelo. (Afetava o uso de memória durante a consulta). Fecha #38258. #38802 (Kseniia Sumarokova).
  • Atualização do simdjson. Isso corrige #38621 — um estouro de buffer em máquinas com as CPUs Intel mais recentes com AVX-512 VBMI. #38838 (Alexey Milovidov).
  • Corrige um possível erro lógico em mesclagens verticais. #38859 (Maksim Kita).
  • Corrigido o perfil de configurações com unidade em segundos. #38896 (Raúl Marín).
  • Corrige a poda de partições incorreta quando há uma chave de partição Nullable. Observação: muito provavelmente você não usa chaves de partição Nullable — este é um recurso obscuro que não deveria usar. Chaves Nullable não fazem sentido, e esse recurso só é necessário em alguns casos de uso muito específicos. Isso corrige #38941. #38946 (Amos Bird).
  • Melhorado o fsync_part_directory para fetches. #38993 (Azat Khuzhin).
  • Corrige um possível deadlock no OvercommitTracker. Corrige #37794. #39030 (Dmitry Novik).
  • Corrigido um bug no cache do sistema de arquivos que poderia ocorrer em um caso extremo, quando a capacidade do cache atingia o limite. Fecha #39066. #39070 (Kseniia Sumarokova).
  • Corrige alguns casos de borda na interpretação dos argumentos de expressões de janela. Corrige #38538 Permite o uso de funções de ordem superior em expressões de janela. #39112 (Dmitry Novik).
  • Mantenha o tipo LowCardinality na função tuple. Antes, o tipo LowCardinality era removido, e os elementos da tupla criada ficavam com o tipo subjacente de LowCardinality. #39113 (Anton Popov).
  • Corrige o erro Block structure mismatch, que podia ocorrer ao fazer INSERT em uma tabela com MATERIALIZED VIEW anexada e com a configuração extremes = 1 habilitada. Fecha #29759 e #38729. #39125 (Nikolai Kochetov).
  • Corrige um resultado inesperado de consulta quando optimize_trivial_count_query e empty_result_for_aggregation_by_empty_set estão ambos definidos como true. Isso corrige #39140. #39155 (Amos Bird).
  • Corrigido o erro Not found column Type in block em SELECTs com PREWHERE e otimizações de leitura em ordem. #39157 (Yakov Olkhovskiy).
  • Corrige uma condição de corrida extremamente rara na criação de hardlinks em um sistema de arquivos remoto. A única forma de reproduzi-la é com a execução concorrente de backups. #39190 (alesapin).
  • (a replicação zero-copy é uma funcionalidade experimental e não deve ser usada em produção) Corrige a recuperação de uma parte em memória com allow_remote_fs_zero_copy_replication. #39214 (Azat Khuzhin).
  • (MaterializedPostgreSQL - funcionalidade experimental). Corrige uma falha de segmentação na engine de banco de dados MaterializedPostgreSQL, que podia ocorrer se alguma exceção surgisse durante a inicialização da replicação. Fecha #36939. #39272 (Kseniia Sumarokova).
  • Corrige a busca incorreta de metadados de tabela no mecanismo de banco de dados PostgreSQL. Fecha #33502. #39283 (Kseniia Sumarokova).
  • Corrige a exceção de projeção quando as chaves de agregação estão envolvidas por outras funções. Isso corrige #37151. #37155 (Amos Bird).
  • Corrige um possível erro lógico ... with argument with type Nothing and default implementation for Nothing is expected to return result with type Nothing, got ... em algumas funções. Fecha: #37610 Fecha: #37741. #37759 (Kruglov Pavel).
  • Corrige a ordem incorreta das colunas em subconsultas de UNION (em caso de colunas duplicadas em subconsultas, isso pode produzir resultado incorreto). #37887 (Azat Khuzhin).
  • Corrige o comportamento incorreto de MODIFY ALTER Column ao usar nomes de coluna que contêm pontos. Fecha #37907. #37971 (Kruglov Pavel).
  • Corrige a leitura de colunas esparsas de tabelas MergeTree que armazenam dados no S3. #37978 (Anton Popov).
  • Corrige possível travamento em Distributed com insert assíncrono ao remover uma réplica da configuração. #38029 (Nikolai Kochetov).
  • Corrige “colunas ausentes” em GLOBAL JOIN com CTE sem alias. #38056 (Azat Khuzhin).
  • Reescrever funções de tupla como literais no modo de compatibilidade com versões anteriores. #38096 (Anton Kozlov).
  • Corrigida a reserva redundante de memória para o bloco de saída durante ORDER BY. #38127 (iyupeng).
  • Corrige um possível erro lógico Bad cast from type DB::IColumn* to DB::ColumnNullable* em funções de mapeamento de array. Fecha #38006. #38132 (Kruglov Pavel).
  • Corrigido conflito temporário de nomes no partial merge join, fecha #37928. #38135 (Vladimir C).
  • Pequeno problema em consultas como CREATE TABLE nested_name_tuples (a Tuple(x String, y Tuple(i Int32, j String))) ENGINE = Memory; #38136 (lgbo).
  • Corrigido um bug em funções short-circuit aninhadas que levava à execução de argumentos mesmo quando a condição era falsa. Fecha #38040. #38173 (Kruglov Pavel).
  • (Window View é um recurso experimental) Corrigido o LOGICAL_ERROR em WINDOW VIEW com estrutura incorreta. #38205 (Azat Khuzhin).
  • Atualiza o submódulo librdkafka para corrigir um travamento quando um callback de refresh do OAUTHBEARER está configurado. #38225 (Rafael Acevedo).
  • Corrigido o travamento de INSERT em Distributed causado por ProfileEvents. #38307 (Azat Khuzhin).
  • Corrigidas as tentativas de repetição no engine PostgreSQL. #38310 (Kseniia Sumarokova).
  • Correção na otimização do PartialSortingTransform (SIGSEGV e possível resultado incorreto). #38324 (Azat Khuzhin).
  • Corrigido o RabbitMQ com formatos baseados em PeekableReadBuffer. Fecha #38061. #38356 (Kseniia Sumarokova).
  • MaterializedPostgreSQL - recurso experimental. Corrige um possível Invalid number of rows in Chunk no MaterializedPostgreSQL. Fecha #37323. #38360 (Kseniia Sumarokova).
  • Corrige a configuração do RabbitMQ com a definição da string de conexão. Fecha #36531. #38365 (Kseniia Sumarokova).
  • Corrigido o engine PostgreSQL que não usava o schema do PostgreSQL ao recuperar o tamanho da dimensão do array. Fecha #36755. Fecha #36772. #38366 (Kseniia Sumarokova).
  • Corrige um possível resultado incorreto de consultas distribuídas com DISTINCT e LIMIT. Corrige #38282. #38371 (Anton Popov).
  • Corrige resultados incorretos de countSubstrings() & position() em padrões com bytes nulos. #38589 (Robert Schulze).
  • Agora é possível iniciar um clickhouse-server e anexar/desanexar tabelas, mesmo no caso de tabelas com valores incorretos na representação de IPv4/IPv6. Correção definitiva para o problema #35156. #38590 (alesapin).
  • A função rankCorr funcionará corretamente mesmo que alguns argumentos sejam NaN. Isso corrige #38396. #38722 (Alexey Milovidov).
  • Corrigido parallel_view_processing=1 com optimize_trivial_insert_select=1. Corrigido max_insert_threads ao inserir em views. #38731 (Azat Khuzhin).
  • Corrigido o problema de uso após liberação de memória em funções de agregação com o combinador Map, que levava a resultados incorretos. #38748 (Azat Khuzhin).

Lançamento 22.6 do ClickHouse, 2022-06-16. Apresentação, Vídeo

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

  • Remove o suporte a literais numéricos octais em SQL. Em versões anteriores, eles eram interpretados como Float64. #37765 (Yakov Olkhovskiy).
  • Altera a forma como configurações que usam seconds como tipo são analisadas para oferecer suporte a valores de ponto flutuante (por exemplo: max_execution_time=0.5). Valores Infinity ou NaN lançarão uma exceção. #37187 (Raúl Marín).
  • Altera o formato da serialização binária de colunas do tipo experimental Object. O novo formato é mais fácil de implementar em clientes de terceiros. #37482 (Anton Popov).
  • Ativa a configuração output_format_json_named_tuples_as_objects por padrão. Ela permite serializar tuplas nomeadas como objetos JSON em formatos JSON. #37756 (Anton Popov).
  • Patterns LIKE com símbolo de escape no final (’&#39;) agora não são mais permitidos (como exige o padrão SQL). #37764 (Robert Schulze).
  • Se você executar versões diferentes do ClickHouse em um cluster com CPU AArch64, ou misturar AArch64 e amd64 em um cluster, e usar consultas distribuídas com GROUP BY em múltiplas chaves de tipo de tamanho fixo que cabem em 256 bits, mas não em 64 bits, e o tamanho do resultado for enorme, os dados não serão totalmente agregados no resultado dessas consultas durante a atualização. Solução alternativa: faça a atualização com downtime em vez de usar uma atualização contínua.

novo recurso

  • Adiciona a função GROUPING. Ela permite desambiguar os registros em consultas com ROLLUP, CUBE ou GROUPING SETS. Fecha #19426. #37163 (Dmitry Novik).
  • Um novo algoritmo de codec FPC para compressão de dados de ponto flutuante. #37553 (Mikhail Guzov).
  • Adiciona novos formatos JSON colunares: JSONColumns, JSONCompactColumns, JSONColumnsWithMetadata. Fecha #36338 Fecha #34509. #36975 (Kruglov Pavel).
  • Adicionada uma ferramenta de visualização de traces do OpenTelemetry baseada em d3js. #37810 (Sergei Trifonov).
  • Adiciona suporte a INSERTs na tabela system.zookeeper. Fecha #22130. #37596 (Han Fei).
  • Adicionado suporte a argumento de padrão não constante nas funções LIKE, ILIKE e match. #37251 (Robert Schulze).
  • Funções executáveis definidas pelo usuário agora oferecem suporte a parâmetros. Exemplo: SELECT test_function(parameters)(arguments). Fecha #37578. #37720 (Maksim Kita).
  • Adicionada a coluna merge_reason à tabela system.part_log. #36912 (Sema Checherinda).
  • Adiciona suporte a Maps e Records no formato Avro. Adiciona a nova configuração input_format_avro_null_as_default que permite inserir NULL como valor padrão no formato Avro. Fecha #18925 Fecha #37378 Fecha #32899. #37525 (Kruglov Pavel).
  • Adicionada a ferramenta clickhouse-disks para inspecionar e operar sobre sistemas de arquivos virtuais configurados para o ClickHouse. #36060 (Artyom Yurkov).
  • Adiciona funções de arestas unidirecionais do H3. #36843 (Bharat Nallan).
  • Adicionado suporte ao cálculo de hashids a partir de inteiros sem sinal. #37013 (Michael Nutt).
  • É permitida a especificação explícita de SALT em CREATE USER <user> IDENTIFIED WITH sha256_hash. #37377 (Yakov Olkhovskiy).
  • Adiciona duas novas configurações input_format_csv_skip_first_lines/input_format_tsv_skip_first_lines para permitir pular um número especificado de linhas no início do arquivo nos formatos CSV/TSV. #37537 (Kruglov Pavel).
  • A função showCertificate mostra o certificado SSL do servidor atual. #37540 (Yakov Olkhovskiy).
  • Há suporte à fonte HTTP para Dicionários de Dados em coleções nomeadas. #37581 (Yakov Olkhovskiy).
  • Adicionada uma nova função de janela nonNegativeDerivative(metric_column, timestamp_column[, INTERVAL x SECOND]). #37628 (Andrey Zvonov).
  • Implementada a possibilidade de alterar o comentário em tabelas ReplicatedMergeTree. #37416 (Vasily Nemkov).
  • Adicionada a consulta SYSTEM UNFREEZE, que exclui todo o backup independentemente de a tabela correspondente ter sido excluída ou não. #36424 (Vadim Volodin).

Recurso experimental

  • Habilita POPULATE para WINDOW VIEW. #36945 (vxider).
  • Adiciona suporte a ALTER TABLE ... MODIFY QUERY para WINDOW VIEW. #37188 (vxider).
  • Este PR altera o comportamento da sintaxe ENGINE em WINDOW VIEW para deixá-lo igual ao de MATERIALIZED VIEW. #37214 (vxider).

Melhoria de desempenho

  • Foram adicionadas inúmeras otimizações para ARM NEON #38093(Daniel Kutenin), (Alexandra Pilipyuk) Observação: se você estiver executando versões diferentes do ClickHouse em um cluster com CPU ARM e usar consultas distribuídas com GROUP BY em várias chaves de tipo de tamanho fixo que cabem em 256 bits, mas n’o cabem em 64 bits, o resultado da consulta de agregação ficará incorreto durante a atualização. Solução alternativa: faça a atualização com indisponibilidade em vez de um rolling upgrade.
  • Melhora o desempenho e o uso de memória ao fazer select de um subconjunto de colunas nos formatos Native, Protobuf, CapnProto, JSONEachRow, TSKV e em todos os formatos com sufixos WithNames/WithNamesAndTypes. Antes, ao selecionar apenas um subconjunto de colunas de arquivos nesses formatos, todas as colunas eram lidas e armazenadas em memória. Agora, apenas as colunas necessárias são lidas. Este PR habilita a configuração input_format_skip_unknown_fields por padrão, porque, caso contrário, ao fazer select de um subconjunto de colunas, será lançada uma exceção. #37192 (Kruglov Pavel).
  • Agora, mais filtros podem ser aplicados diretamente no join. #37472 (Amos Bird).
  • Carregar marcas apenas das colunas necessárias na leitura de partes wide. #36879 (Anton Kozlov).
  • Melhoria no desempenho da agregação quando colunas esparsas (que podem ser habilitadas pela configuração experimental ratio_of_defaults_for_sparse_serialization em tabelas MergeTree) são usadas como argumentos em funções de agregação. #37617 (Anton Popov).
  • Otimizada a função COALESCE com dois argumentos. #37666 (Anton Popov).
  • Substitui multiIf por if quando multiIf tem apenas uma condição, pois a função if tem melhor desempenho. #37695 (Anton Popov).
  • Melhora o desempenho das funções dictGetDescendants e dictGetChildren, criando um índice hierárquico temporário de pai para filhos por consulta, e não a cada chamada de função durante a consulta. Permite especificar BIDIRECTIONAL para atributos HIERARHICAL; o dicionário manterá em memória um índice de pai para filhos, de modo que as funções dictGetDescendants e dictGetChildren não precisem criar um índice temporário por consulta. Fecha #32481. #37148 (Maksim Kita).
  • A destruição do estado de agregação agora pode ser executada em um pool de threads. Para consultas com LIMIT e estado grande, isso proporciona um ganho significativo de desempenho; por exemplo, select uniq(number) from numbers_mt(1e7) group by number limit 100 ficou cerca de 2,5x mais rápido. #37855 (Nikita Taranov).
  • Melhorado o desempenho da ordenação por uma única coluna. #37195 (Maksim Kita).
  • Melhora o desempenho da ordenação por uma única coluna usando especializações da fila de ordenação. #37990 (Maksim Kita).
  • Desempenho 2x a 4x melhor nas funções de norma e distância de array. #37394 (Alexander Gololobov).
  • Melhoria no desempenho das funções de comparação numérica usando despacho dinâmico. #37399 (Maksim Kita).
  • Melhoria no desempenho do ORDER BY com LIMIT. #37481 (Maksim Kita).
  • Melhoria no desempenho da função hasAll usando a infraestrutura de despacho dinâmico. #37484 (Maksim Kita).
  • Melhoria no desempenho das funções greatCircleAngle, greatCircleDistance, geoDistance. #37524 (Maksim Kita).
  • Melhora o desempenho da inserção no MergeTree quando há várias colunas no ORDER BY. #35762 (Maksim Kita).
  • Corrigido o consumo excessivo de CPU em segundo plano quando há muitas tabelas. #38028 (Maksim Kita).
  • Melhora no desempenho da função not com despacho dinâmico. #38058 (Maksim Kita).
  • Foi otimizado o cache interno de padrões re2 usados, por exemplo, nas funções LIKE e MATCH. #37544 (Robert Schulze).
  • Aprimorada a função all in one de geração de bitmask de filtro com instruções AVX-512. #37588 (yaqi-zhao).
  • Aplicado o método de leitura threadpool ao engine de integração do Hive. Isso acelera significativamente a leitura. #36328 (李扬).
  • Quando todas as colunas a serem lidas forem chaves de partição, construa as colunas com base no número da linha do arquivo, sem ler de fato o arquivo Hive. #37103 (lgbo).
  • Suporte a múltiplos discos para cache de arquivos Hive. #37279 (lgbo).
  • Limitar o uso máximo de cache por consulta pode evitar com eficácia a contaminação do pool de cache. Issues relacionadas. #37859 (Han Shukai).
  • Atualmente, o ClickHouse baixa diretamente todos os arquivos remotos para o cache local (mesmo que sejam lidos apenas uma vez), o que frequentemente gera operações de E/S no disco local. Em alguns cenários, essas operações de E/S podem não ser necessárias e podem facilmente causar um impacto negativo no desempenho. Como mostrado na figura abaixo, quando executamos SSB Q1-Q4, o cache causou um impacto negativo no desempenho. #37516 (Han Shukai).
  • Permite podar a lista de arquivos usando colunas virtuais como _file e _path ao ler do S3. Relacionado a #37174, #23494. #37356 (Amos Bird).
  • Na função: CompressedWriteBuffer::nextImpl(), há uma etapa desnecessária de cópia durante a gravação, que ocorria com frequência na inserção de dados. Abaixo é mostrada a diferença com este patch: - Antes: 1. Comprimir “working_buffer” em “compressed_buffer” 2. copiar na gravação para “out” - Depois: Comprimir diretamente “working_buffer” em “out”. #37242 (jasperzhu).

Melhoria

  • Suporte para tipos com valores padrão não convencionais em ROLLUP, CUBE, GROUPING SETS. Fecha #37360. #37667 (Dmitry Novik).
  • Corrige a coleta de stack traces em ARM. Fecha #37044. Fecha #15638. #37797 (Maksim Kita).
  • O cliente tentará todos os endereços IP retornados pela resolução de DNS até conseguir estabelecer uma conexão. #37273 (Yakov Olkhovskiy).
  • Permite usar o tipo String em vez de Binary nos formatos Arrow/Parquet/ORC. Este PR introduz 3 novas configurações para isso: output_format_arrow_string_as_string, output_format_parquet_string_as_string, output_format_orc_string_as_string. O valor padrão de todas as configurações é false. #37327 (Kruglov Pavel).
  • Aplicar a configuração input_format_max_rows_to_read_for_schema_inference ao total de linhas lidas em todos os arquivos dos globs. Anteriormente, a configuração input_format_max_rows_to_read_for_schema_inference era aplicada separadamente a cada arquivo no glob e, no caso de um grande número de valores nulos, poderíamos ler as primeiras input_format_max_rows_to_read_for_schema_inference linhas de cada arquivo e não obter nenhum resultado. Também aumentar o valor padrão dessa configuração para 25000. #37332 (Kruglov Pavel).
  • Adicionado um privilégio CLUSTER separado (e a diretiva de configuração access_control_improvements.on_cluster_queries_require_cluster_grant, para manter compatibilidade com versões anteriores, com padrão false). #35767 (Azat Khuzhin).
  • Adicionado suporte à inferência de esquema para hdfsCluster. #35812 (Nikita Mikhaylov).
  • Implementar o algoritmo de balanceamento de carga least_used para discos em um volume (configuração com vários discos). #36686 (Azat Khuzhin).
  • Modifique o endpoint HTTP para retornar as estatísticas completas no cabeçalho X-ClickHouse-Summary quando send_progress_in_http_headers=0 (antes, retornava apenas zeros). - Modifique o endpoint HTTP para retornar o cabeçalho X-ClickHouse-Exception-Code quando o progresso tiver sido enviado anteriormente (send_progress_in_http_headers=1) - Modifique o endpoint HTTP para retornar HTTP_REQUEST_TIMEOUT (408) em vez de HTTP_INTERNAL_SERVER_ERROR (500) em casos de erro TIMEOUT_EXCEEDED. #36884 (Raúl Marín).
  • Permitir que um usuário inspecione os grants das funções concedidas. #36941 (nvartolomei).
  • Não calcule uma integral numericamente; em vez disso, use funções CDF. Isso acelerará a execução e aumentará a precisão. Corrige #36714. #36953 (Nikita Mikhaylov).
  • Adicionada implementação padrão para Nothing em funções. Agora, a maioria das funções retornará uma coluna do tipo Nothing caso um de seus argumentos seja Nothing. Isso também resolve o problema com funções como arrayMap/arrayFilter e similares quando elas recebem um array vazio como argumento. Antes, consultas como select arrayMap(x -> 2 * x, []); falhavam porque a função dentro do lambda não conseguia trabalhar com o tipo Nothing; agora, essas consultas retornam um array vazio do tipo Array(Nothing). Também foi adicionado suporte a arrays de tipos Nullable em funções como arrayFilter/arrayFill. Antes, consultas como select arrayFilter(x -> x % 2, [1, NULL]) falhavam; agora, elas funcionam (se o resultado do lambda for NULL, esse valor não será incluído no resultado). Fecha #37000. #37048 (Kruglov Pavel).
  • Agora, se um shard tiver uma réplica local, criamos um plano local e um plano para ler de todas as réplicas remotas. Elas compartilham um iniciador que coordena a leitura. #37204 (Nikita Mikhaylov).
  • Não interromper mais a inicialização do servidor se a opção de configuração “mark_cache_size” não estiver explicitamente definida. #37326 (Robert Schulze).
  • Permite informar NULL/NOT NULL logo após o tipo na declaração da coluna. #37337 (Igor Nikonov).
  • otimiza a obtenção do buffer de leitura para o segmento de arquivo PARTIALLY_DOWNLOADED. #37338 (xiedeyantu).
  • Melhoria no processamento de funções de curto-circuito para corrigir problemas em testes de estresse. #37384 (Kruglov Pavel).
  • Fecha #37395. #37415 (Memo).
  • Corrigido um deadlock extremamente raro durante a obtenção de uma parte na replicação zero-copy. Corrige #37423. #37424 (metahys).
  • Não permitir a criação de armazenamento com formato de dados desconhecido. #37450 (Kruglov Pavel).
  • Defina o valor padrão de global_memory_usage_overcommit_max_wait_microseconds para 5 segundos. Adicione informações sobre OvercommitTracker à mensagem da exceção de OOM. Adicione o evento de perfil MemoryOvercommitWaitTimeMicroseconds. #37460 (Dmitry Novik).
  • Não exibir -0.0 como tempo de CPU no clickhouse-client. Isso pode aparecer devido a erros de arredondamento. Isso corrige #38003. Isso corrige #38038. #38064 (Alexey Milovidov).
  • UI do Play: manter os controles no lugar quando a página for rolada horizontalmente. Isso torna as edições mais confortáveis, mesmo se a tabela for larga e tiver sido rolada muito para a direita. A funcionalidade foi proposta por Maksym Tereshchenko, da CaspianDB. #37470 (Alexey Milovidov).
  • Modificar a div de consulta em play.html para que possa ser expandida além de 20% da altura. No caso de consultas muito longas, é útil expandir o elemento textarea; atualmente, como a div tem altura fixa, a textarea expandida oculta a div de dados abaixo. Com essa correção, expandir o elemento textarea empurrará a div de dados para baixo/cima, de modo que a textarea expandida não a oculte. Além disso, a largura da caixa de consulta é mantida em 100% mesmo quando o usuário ajusta o tamanho da textarea da consulta. #37488 (guyco87).
  • Adicionados ProfileEvents para inspecionar o tipo das partes gravadas (inseridas ou mescladas) (Inserted{Wide/Compact/InMemory}Parts, MergedInto{Wide/Compact/InMemory}Parts. Adicionada a coluna part_type à system.part_log. Resolve #37495. #37536 (Anton Popov).
  • melhoria no clickhouse-keeper: mover logs corrompidos para uma pasta identificada por timestamp. #37565 (Antonio Andelic).
  • Colunas expiradas por TTL não são mais gravadas após mesclagens subsequentes (antes, apenas a primeira mesclagem/optimize da parte não gravava colunas expiradas por TTL; todas as demais gravavam). #37570 (Azat Khuzhin).
  • Resultado mais preciso da função miscelânea dumpColumnStructure na presença de colunas LowCardinality ou esparsas. Em versões anteriores, essas funções convertiam o argumento em uma coluna completa antes de retornar o resultado. Isso é necessário para fornecer uma resposta em #6935. #37633 (Alexey Milovidov).
  • clickhouse-keeper: armazenar apenas IDs de sessão únicos para watches. #37641 (Azat Khuzhin).
  • Corrige um possível “Não é possível gravar no buffer finalizado”. #37645 (Azat Khuzhin).
  • Adiciona a configuração support_batch_delete para DiskS3 a fim de desativar chamadas de exclusão de vários objetos, que o Google Cloud Storage não oferece suporte. #37659 (Fred Wulff).
  • Adicionada uma opção para desativar o pool de conexões no ODBC bridge. #37705 (Anton Kozlov).
  • As funções dictGetHierarchy, dictIsIn, dictGetChildren, dictGetDescendants passaram a oferecer suporte ao atributo HIERARCHICAL Nullable em dicionários. Fecha #35521. #37805 (Maksim Kita).
  • Exibe informações relacionadas à versão do BoringSSL na tabela system.build_options. #37850 (Bharat Nallan).
  • Agora, o clickhouse-server remove os diretórios delete_tmp ao iniciar o servidor. Corrige #26503. #37906 (alesapin).
  • Limpa partes desanexadas corrompidas após timeout. Fecha #25195. #37975 (Kseniia Sumarokova).
  • Agora, na família de motores de tabela MergeTree, as partes que não puderem ser movidas serão removidas instantaneamente. #37994 (alesapin).
  • Agora, se a configuração always_fetch_merged_part estiver habilitada, as mesclagens de ReplicatedMergeTree tentarão encontrar partes em outras réplicas com menos frequência, reduzindo a carga no [Zoo]Keeper. #37995 (alesapin).
  • Adiciona grants implícitos também com a opção grant. Por exemplo, GRANT CREATE TABLE ON test.* TO A WITH GRANT OPTION agora permite que A execute GRANT CREATE VIEW ON test.* TO B. #38017 (Vitaly Baranov).

Melhorias de compilação/testes/empacotamento

  • Usar clang-14 e a versão 14 da infraestrutura LLVM para compilações. Isso fecha #34681. #34754 (Alexey Milovidov). Observação: o clang-14 tem um bug no ThreadSanitizer que prejudica nosso CI.
  • Permitir descartar privilégios na inicialização. Isso simplifica as imagens Docker. Fecha #36293. #36341 (Alexey Milovidov).
  • Adicionar a verificação ortográfica da documentação ao CI. #37790 (Vladimir C).
  • Corrigir a remoção excessivamente agressiva de símbolos, que removia o hash embutido necessário para verificar a consistência do executável. #37993 (Robert Schulze).

Correção de erro

  • Corrigidas as instruções SELECT ... INTERSECT e EXCEPT SELECT com tipos String constantes. #37738 (Antonio Andelic).
  • Corrige GROUP BY de AggregateFunction (ou seja, você faz GROUP BY na coluna que tem o tipo AggregateFunction). #37093 (Azat Khuzhin).
  • (WINDOW VIEW experimental) Corrige addDependency em WindowView. Este bug pode ser reproduzido conforme #37237. #37224 (vxider).
  • Corrige a inconsistência no recurso ORDER BY … WITH FILL. A consulta que contém ORDER BY … WITH FILL pode gerar linhas extras quando há várias colunas WITH FILL. #38074 (Yakov Olkhovskiy).
  • Este PR move addDependency do construtor para startup() para evitar adicionar uma dependência a uma tabela removida, corrigindo #37237. #37243 (vxider).
  • Corrigida a inserção de valores padrão para valores ausentes em formatos colunares. Antes, as colunas ausentes eram preenchidas com os valores padrão dos tipos, e não das próprias colunas. #37253 (Kruglov Pavel).
  • (tipo Object experimental) Corrige alguns casos de inserção de arrays aninhados em colunas do tipo Object. #37305 (Anton Popov).
  • Corrige erros inesperados causados por conflito de strings constantes em função de agregação, prewhere e join. Fecha #36891. #37336 (Vladimir C).
  • Corrige projeções com GROUP/ORDER BY na consulta e optimize_aggregation_in_order (antes, o resultado estava incorreto, pois apenas a ordenação final era executada). #37342 (Azat Khuzhin).
  • Corrigido o erro com símbolos no nome da chave no S3. Corrige #33009. #37344 (Vladimir Chebotarev).
  • Lançar uma exceção quando GROUPING SETS for usado com ROLLUP ou CUBE. #37367 (Dmitry Novik).
  • Corrigido LOGICAL_ERROR em getMaxSourcePartsSizeForMerge durante as mesclagens (caso tenham sido especificados em config.xml (nova forma), e não em users.xml (forma descontinuada), valores não padrão mais altos de background_pool_size/background_merges_mutations_concurrency_ratio). #37413 (Azat Khuzhin).
  • Parou de remover o BOM UTF-8 no formato RowBinary. #37428 (Paul Loyd). #37428 (Paul Loyd).
  • correção de bug no clickhouse-keeper: corrige a recuperação forçada em cluster de nó único. #37440 (Antonio Andelic).
  • Corrigido erro lógico nas funções normalizeUTF8. Fecha #37298. #37443 (Maksim Kita).
  • Corrige o cast lowcard de Nullable no JoinSwitcher, fecha #37385. #37453 (Vladimir C).
  • Corrigida a saída de tuplas nomeadas nos formatos ORC/Arrow/Parquet. #37458 (Kruglov Pavel).
  • Corrige a otimização de funções monótonas na cláusula ORDER BY na presença de GROUPING SETS. Corrigido em #37401. #37493 (Dmitry Novik).
  • Corrigido erro na junção com dicionário em algumas condições. Fecha #37386. #37530 (Vladimir C).
  • Proíbe o uso de optimize_aggregation_in_order com GROUPING SETS (corrige LOGICAL_ERROR). #37542 (Azat Khuzhin).
  • Corrige informações incorretas no dump do ActionsDAG. #37587 (zhanglistar).
  • Corrigida a conversão de tipos em consultas UNION (pode gerar LOGICAL_ERROR). #37593 (Azat Khuzhin).
  • Corrigido o modificador WITH FILL com intervalos negativos na cláusula STEP. Corrige #37514. #37600 (Anton Popov).
  • Corrige o uso inválido de array no joinGet quando join_use_nulls = 1. Isso corrige #37562 . #37650 (Amos Bird).
  • Corrige a incompatibilidade no número de colunas em cross join, fecha #37561. #37653 (Vladimir C).
  • Corrige falha de segmentação ao executar show create table em banco de dados MySQL quando ele está configurado com coleções nomeadas. Fecha #37683. #37690 (Kseniia Sumarokova).
  • Corrige o problema que impedia o RabbitMQ Storage de iniciar após a reinicialização do servidor se o storage tivesse sido criado sem a cláusula SETTINGS. Fecha #37463. #37691 (Kseniia Sumarokova).
  • Funções SQL definidas pelo usuário desativam CREATE/DROP no modo readonly. Fecha #37280. #37699 (Maksim Kita).
  • Corrige a formatação de argumentos Nullable em funções definidas pelo usuário executáveis. Fecha #35897. #37711 (Maksim Kita).
  • Corrige a otimização ativada pela configuração optimize_monotonous_functions_in_order_by em consultas distribuídas. Corrige #36037. #37724 (Anton Popov).
  • Corrige um possível erro lógico: Invalid Field get from type UInt64 to type Float64 na função de tabela values. Fecha #37602. #37754 (Kruglov Pavel).
  • Corrige uma possível falha de segmentação na inferência de esquema em caso de exceção no construtor de SchemaReader. Fecha #37680. #37760 (Kruglov Pavel).
  • Corrige a configuração cast_ipv4_ipv6_default_on_conversion_error na função interna cast. Fecha #35156. #37761 (Maksim Kita).
  • Correção de erro de toString em DatatypeDate32. #37775 (LiuNeng).
  • A configuração dead_session_check_period_ms do clickhouse-keeper foi convertida para microssegundos (multiplicada por 1000), o que fez com que as sessões inativas só fossem limpas depois de vários minutos (em vez de 500 ms). #37824 (Michael Lex).
  • Corrige o possível erro “No more packets are available” em consultas distribuídas (caso async_socket_for_remote/use_hedged_requests esteja desabilitado). #37826 (Azat Khuzhin).
  • (WINDOW VIEW experimental) Não remova a tabela de destino interna ao executar ALTER TABLE ... MODIFY QUERY no WindowView. #37879 (vxider).
  • Corrige a propriedade do diretório de coordenação na imagem Docker do clickhouse-keeper. Corrige #37914. #37915 (James Maidment).
  • Dictionaries corrige a consulta personalizada com campo de atualização e {condition}. Fecha #33746. #37947 (Maksim Kita).
  • Corrige um possível resultado incorreto de SELECT ... WITH FILL quando ORDER BY deve ser aplicado após o resultado de WITH FILL (por exemplo, em uma consulta externa). O resultado incorreto era causado pela otimização de expressões de ORDER BY (#35623). Fecha #37904. #37959 (Yakov Olkhovskiy).
  • (WINDOW VIEW experimental) Adiciona colunas padrão ausentes ao enviar dados para a tabela de destino no WindowView, corrigindo #37815. #37965 (vxider).
  • Corrigido um stack frame grande demais que fazia a compilação falhar. #37996 (Han Shukai).
  • Ao ativar enable_filesystem_query_cache_limit, é gerado o erro: o tamanho de cache reservado excede o tamanho de cache restante. #38004 (xiedeyantu).
  • Corrige a conversão de tipos em consultas UNION (pode produzir LOGICAL_ERROR). #34775 (Azat Khuzhin).
  • O merge com TTL pode não ser reagendado se o BackgroundExecutor estiver ocupado. —merges_with_ttl_counter é incrementado na selectPartsToMerge() —a tarefa de merge será ignorada se o BackgroundExecutor estiver ocupado —merges_with_ttl_counter não será decrementado. #36387 (lthaooo).
  • Corrige o valor sobrescrito da configuração normalize_function_names. #36937 (李扬).
  • Correção para funções de janela de decaimento exponencial no tempo. Agora respeitam os limites da janela. #36944 (Vladimir Chebotarev).
  • Corrige um possível erro de uso da heap após liberação ao ler system.projection_parts e system.projection_parts_columns . Isso corrige #37184. #37185 (Amos Bird).
  • Corrigido o comportamento dos segundos fracionários de DateTime64 antes da epoch Unix. #37697 (Andrey Zvonov). #37039 (李扬).

Lançamento do ClickHouse 22.5, 2022-05-19. Apresentação, Vídeo

Notas de atualização

  • Agora, merges em segundo plano, mutações e OPTIMIZE não incrementam mais as métricas SelectedRows e SelectedBytes. Eles (ainda) continuarão incrementando MergedRows e MergedUncompressedBytes, como antes. Isso afeta apenas os valores das métricas, tornando-os mais precisos. Essa mudança não introduz nenhuma incompatibilidade, mas como pode gerar dúvidas sobre as alterações nas métricas, nós a incluímos nesta categoria. #37040 (Nikolai Kochetov).
  • O módulo BoringSSL foi atualizado para a versão oficial compatível com FIPS. Isso torna o ClickHouse compatível com FIPS. #35914 (Meena-Renganathan). As cifras aes-192-cfb128 e aes-256-cfb128 foram removidas porque não estão incluídas na versão do BoringSSL certificada para FIPS.
  • A configuração max_memory_usage foi removida do perfil de usuário padrão em users.xml. Isso permite limites de memória mais flexíveis para consultas, em vez do antigo limite fixo de 10 GB.
  • A configuração log_query_threads agora vem desabilitada por padrão. Ela controla o logging de estatísticas sobre cada thread que participa da execução da consulta. Com o suporte a leituras assíncronas, o número total de IDs de thread distintos ficou grande demais, e o logging em query_thread_log passou a ser pesado demais. #37077 (Alexey Milovidov).
  • Remove a função groupArraySorted, que contém um bug. #36822 (Alexey Milovidov).

Novo recurso

  • Habilita o overcommit de memória por padrão. #35921 (Dmitry Novik).
  • Adiciona suporte a GROUPING SETS na cláusula GROUP BY. Essa implementação oferece processamento paralelo de conjuntos de agrupamento. #33631 (Dmitry Novik).
  • Adiciona a tabela system.certificates. #37142 (Yakov Olkhovskiy).
  • Adiciona as funções h3Line, h3Distance e h3HexRing. #37030 (Bharat Nallan).
  • Nova ferramenta de diagnóstico baseada em um único binário (clickhouse-diagnostics). #36705 (Dale McDiarmid).
  • Adiciona o formato de saída Prometheus #36051. #36206 (Vladimir C).
  • Adiciona o formato de entrada MySQLDump. Ele lê todos os dados de consultas INSERT referentes a uma tabela no dump. Se houver mais de uma tabela, por padrão ele lê os dados da primeira. #36667 (Kruglov Pavel).
  • Exibe os campos total_rows e total_bytes em system.tables para tabelas temporárias. #36401. #36439 (xiedeyantu).
  • Permite sobrescrever parts_to_delay_insert e parts_to_throw_insert com configurações no nível da consulta. Se elas estiverem definidas, substituirão as configurações no nível da tabela. #36371 (Memo).

recurso experimental

  • Implementadas funções de distância L1, L2, Linf e Cosine para arrays, além de funções de norma L1, L2 e Linf para arrays. #37033 (qieqieplus). Ressalva: as funções serão renomeadas.
  • Melhoria na consulta WATCH no WindowView: 1. Reduz a latência na disponibilização dos resultados da consulta ao acionar o sinal fire_condition. 2. Torna a operação de cancelamento da consulta (ctrl-c) mais rápida, verificando isCancelled() com mais frequência. #37226 (vxider).
  • Introspecção para a remoção do cache do sistema de arquivos. #36802 (Han Shukai).
  • Adicionada uma nova função hash wyHash64 para SQL. #36467 (olevino).
  • Melhoria para bancos de dados Replicated: adicionada a consulta SYSTEM SYNC DATABASE REPLICA, que permite sincronizar os metadados das tabelas dentro do banco de dados Replicated, porque atualmente a sincronização é assíncrona. #35944 (Nikita Mikhaylov).
  • Melhoria para o cache remoto do sistema de arquivos: leitura do cache aprimorada. #37054 (Kseniia Sumarokova). Melhoria na consulta SYSTEM DROP FILESYSTEM CACHE: opção <path> e opção FORCE. #36639 (Kseniia Sumarokova).
  • Melhoria para dados semiestruturados: permite converter colunas do tipo Object(...) em Object(Nullable(...)). #36564 (awakeljw).
  • Melhoria para réplicas paralelas: criamos um interpretador local quando queremos executar a consulta na réplica localhost. Porém, ao executar a consulta em várias réplicas, dependemos da existência de uma conexão para que as réplicas possam se comunicar com o coordenador. Isso foi aprimorado, e a réplica localhost agora pode se comunicar com o coordenador diretamente no mesmo processo. #36281 (Nikita Mikhaylov).

Melhoria de desempenho

  • Melhora o desempenho das funções de agregação avg e sum quando usadas sem expressão GROUP BY. #37257 (Maksim Kita).
  • Melhora o desempenho de funções aritméticas unárias (bitCount, bitNot, abs, intExp2, intExp10, negate, roundAge, roundDuration, roundToExp2, sign) usando despacho dinâmico. #37289 (Maksim Kita).
  • Melhora o desempenho de ORDER BY, MergeJoin e da inserção no MergeTree usando compilação JIT do comparador de colunas de ordenação. #34469 (Maksim Kita).
  • Altera a estrutura de system.asynchronous_metric_log. Ela passará a ocupar cerca de 10 vezes menos espaço. Isso fecha #36357. O campo event_time_microseconds foi removido por ser inútil. #36360 (Alexey Milovidov).
  • Carrega marcas apenas das colunas necessárias ao ler partes wide. #36879 (Anton Kozlov).
  • Melhora o desempenho do cache de descritores de arquivo ao reduzir o escopo dos mutexes. #36682 (Anton Kozlov).
  • Melhora o desempenho da leitura no mecanismo de armazenamento File e nas funções de tabela file quando o path contém globs e o diretório correspondente tem um grande número de arquivos. #36647 (Anton Popov).
  • Aplica parsing paralelo ao input format HiveText, o que pode dobrar a velocidade do parsing de HiveText ao ler um arquivo local. #36650 (李扬).
  • O HashJoin padrão não é thread-safe para inserção das linhas da tabela da direita e, por isso, é executado em uma única thread. Quando a tabela da direita é grande, o processo de join fica lento demais, com baixa utilização de CPU. #36415 (lgbo).
  • Permite reescrever select countDistinct(a) from t como select count(1) from (select a from t groupBy a). #35993 (zhanglistar).
  • Transforma cadeias OR LIKE em multiMatchAny. Será habilitado quando tivermos mais confiança de que funciona. #34932 (Daniel Kutenin).
  • Melhora o desempenho de algumas funções com inlining. #34544 (Daniel Kutenin).
  • Adiciona uma condicional para evitar memcpy desnecessário em readBig. Isso melhora um pouco o desempenho. #36095 (jasperzhu).
  • Implementa chave parcial de GROUP BY para optimize_aggregation_in_order. #35111 (Azat Khuzhin).

Melhoria

  • Mostrar os nomes dos arquivos com erro em caso de erros de análise ao executar as funções de tabela file, s3 e url. #36314 (Anton Popov).
  • É permitido aumentar, em tempo de execução, o número de threads para executar operações em segundo plano (merges, mutações, moves e fetches), se elas forem especificadas na configuração de nível superior. #36425 (Nikita Mikhaylov).
  • Agora, as funções de conversão de data e hora que geram horários anteriores a 1970-01-01 00:00:00 com fusos horários com horas/minutos parciais serão saturadas em zero, em vez de causar overflow. Esta é a continuação de https://github.com/ClickHouse/ClickHouse/pull/29953, que trata de https://github.com/ClickHouse/ClickHouse/pull/29953#discussion&#95;r800550280 . Classificado como melhoria porque esse é um comportamento definido pela implementação (e um caso muito raro), e podemos alterá-lo. #36656 (Amos Bird).
  • Adiciona um aviso caso alguém esteja executando o clickhouse-server com o nível de log “test”. O nível de log “test” foi adicionado recentemente e não pode ser usado em produção devido a uma degradação de desempenho inevitável, incontornável, fatal e potencialmente letal. #36824 (Alexey Milovidov).
  • Interpretar collations em CREATE TABLE, lançar exceção ou ignorar. fecha #35892. #36271 (yuuch).
  • A opção compatibility_ignore_auto_increment_in_create_table permite ignorar a palavra-chave AUTO_INCREMENT em uma declaração de coluna para simplificar a migração do MySQL. #37178 (Igor Nikonov).
  • Adiciona os aliases JSONLines e NDJSON para JSONEachRow. Fecha #36303. #36327 (flynn).
  • Limita o número máximo de partições que podem ser consultadas para cada tabela Hive. Evita sobrecarga de recursos. #37281 (lgbo).
  • Adicionado cast implícito para o segundo argumento da função h3kRing, para melhorar a usabilidade. Fecha #35432. #37189 (Maksim Kita).
  • Corrigida a indicação de progresso de INSERT SELECT no clickhouse-local para qualquer consulta e do progresso de arquivo no cliente, tornando o progresso de arquivo mais preciso. #37075 (Kseniia Sumarokova).
  • Corrige um bug que pode fazer com que partes desatualizadas sejam esquecidas na família de motores de tabela MergeTree em caso de falhas no sistema de arquivos durante a remoção de partes. Antes da correção, elas só eram removidas após a primeira reinicialização do servidor. #37014 (alesapin).
  • Implementado um novo modo de tratamento de políticas de linha, que pode ser habilitado na configuração principal e permite que usuários sem políticas de linha permissivas leiam linhas. #36997 (Vitaly Baranov).
  • UI do Play: números Nullable serão alinhados à direita nas células da tabela. Isso resolve #36982. #36988 (Alexey Milovidov).
  • UI do Play: Se o resultado tiver apenas uma linha e mais de algumas colunas, exiba-o verticalmente. Continuação de #36811. #36842 (Alexey Milovidov).
  • Limpeza do CSS na UI do Play. Os pixels estão distribuídos de forma mais uniforme. Melhor usabilidade para conteúdo longo em células da tabela. #36569 (Alexey Milovidov).
  • Finalizar os buffers de escrita em caso de exceção para evitar fazer isso nos destrutores. Espera-se que isso corrija: #36907. #36979 (Kruglov Pavel).
  • Após #36425, configurações como background_fetches_pool_size se tornaram obsoletas e podem aparecer no nível superior da configuração, mas o ClickHouse gera uma exceção como Error updating configuration from '/etc/clickhouse-server/config.xml' config.: Code: 137. DB::Exception: A setting 'background_fetches_pool_size' appeared at top level in config /etc/clickhouse-server/config.xml. Isso foi corrigido. #36917 (Nikita Mikhaylov).
  • Adicionar informações adicionais de diagnóstico (se aplicável) ao enviar uma exceção para outro servidor. #36872 (tavplubix).
  • Permite executar funções de hash com argumentos do tipo Array(Tuple(..)). #36812 (Anton Popov).
  • Adicionada a configuração user_defined_path. #36753 (Maksim Kita).
  • Permitir o uso da macro de cluster na função de tabela s3Cluster. #36726 (Vadim Volodin).
  • Cancelar corretamente consultas INSERT em clickhouse-client/clickhouse-local. #36710 (Azat Khuzhin).
  • Permite cancelar uma consulta e ainda manter um ID de consulta adequado no MySQLHandler. #36699 (Amos Bird).
  • Adicionada a coluna is_all_data_sent a system.processes e aprimorada, com base nela, a verificação de robustez dos testes internos. #36649 (Azat Khuzhin).
  • As métricas sobre o tempo gasto na leitura do S3 agora são calculadas corretamente. Fecha #35483. #36572 (Alexey Milovidov).
  • Permitir descritores de arquivo na função de tabela file quando executada no clickhouse-local. #36562 (wuxiaobai24).
  • Permite nomes de elementos de tupla que começam com dígitos. #36544 (Anton Popov).
  • Agora, o clickhouse-benchmark pode ler informações de autenticação a partir de variáveis de ambiente. #36497 (Anton Kozlov).
  • Melhoria no clickhouse-keeper: adiciona suporte à recuperação forçada, o que permite reconfigurar o cluster sem quórum. #36258 (Antonio Andelic).
  • Melhora na inferência de esquema para objetos JSON. #36207 (Kruglov Pavel).
  • Refatorado o código relacionado à inferência de esquema com globs. Tentar o próximo arquivo do glob apenas quando fizer sentido (antes, tentávamos o próximo arquivo em caso de qualquer erro). Além disso, isso corrige #36317. #36205 (Kruglov Pavel).
  • Adicionado um privilégio CLUSTER separado (e a diretiva de configuração access_control_improvements.on_cluster_queries_require_cluster_grant, por retrocompatibilidade, com valor padrão false). #35767 (Azat Khuzhin).
  • Se a quantidade necessária de memória estiver disponível antes de a consulta selecionada ser interrompida, todas as consultas em espera continuarão em execução. Agora, não interrompemos nenhuma consulta se a memória for liberada antes do momento em que a consulta selecionada toma conhecimento do cancelamento. #35637 (Dmitry Novik).
  • Detecção de Nullable em protobuf. No proto3, os valores padrão não são enviados no wire. Isso torna não trivial distinguir entre valores NULL e valores padrão em colunas Nullable. Uma forma padrão de lidar com esse problema é usar wrappers do Google para encapsular o valor de destino em uma mensagem interna (consulte https://github.com/protocolbuffers/protobuf/blob/master/src/google/protobuf/wrappers.proto). Nesse caso, um field ausente é interpretado como valor NULL, um field sem valor é interpretado como valor padrão, e um field com valor regular é interpretado como valor regular. No entanto, o ClickHouse interpreta os wrappers do Google como colunas aninhadas. Propomos introduzir um comportamento especial para detectar wrappers do Google e interpretá-los como descrito acima. Por exemplo, para serializar valores de uma coluna Nullable test, usaríamos google.protobuf.StringValue test no nosso schema .proto. Observe que esses types são os chamados “well-known types” no Protobuf, implementados na própria biblioteca. #35149 (Jakub Kuklis).
  • Adicionado suporte para especificar content_type nas configurações predefinidas e estáticas de handlers HTTP. #34916 (Roman Nikonov).
  • Alertar corretamente ao usar clickhouse-client --file sem --external antes. Fecha #34747. #34765 (李扬).
  • Aprimorado o mecanismo de banco de dados MySQL para torná-lo compatível com o tipo de dado binary(0). #37232 (zzsmdfj).
  • Melhoria no relatório JSON do clickhouse-benchmark. #36473 (Tian Xinhui).
  • O servidor podia se recusar a iniciar se não conseguisse resolver o hostname de um Dicionário externo do ClickHouse. Isso foi corrigido. Corrige #36451. #36463 (tavplubix).

melhoria de compilação/testes/empacotamento

  • Agora o clickhouse-keeper para a arquitetura x86_64 é vinculado estaticamente com musl e não depende de nenhuma biblioteca do sistema. #31833 (Alexey Milovidov).
  • As compilações do ClickHouse para a arquitetura PowerPC64LE agora estão disponíveis no script de instalação universal curl https://clickhouse.com/ | sh e por link direto https://builds.clickhouse.com/master/powerpc64le/clickhouse. #37095 (Alexey Milovidov).
  • Limita a geração de código para PowerPC ao Power8 para melhor compatibilidade. Isso fecha #36025. #36529 (Alexey Milovidov).
  • Simplifica o teste de desempenho. Isso nos permitirá usá-lo. #36769 (Alexey Milovidov).
  • A comparação de desempenho agora falha em caso de erros no relatório. #34797 (Mikhail f. Shiryaev).
  • Adiciona suporte a ZSTD para Arrow. Isso corrige #35283. #35486 (Sean Lafferty).

Correção de erro

  • Extrai o ID da versão, se presente, da URI e adiciona uma requisição ao URI HTTP da AWS. Fecha #31221. - [x] Extrair o Version ID da URI, se presente, e recompô-la sem ele. - [x] Configurar o objeto AWS HTTP URI com a requisição. - [x] Testes unitários: gtest_s3_uri - [x] Remover o commit de instrumentação. #34571 (Saad Ur Rahman).
  • Corrige o alias attribute.values em system.opentelemetry_span_log para values em vez de keys. #37275 (Aleksandr Razumov).
  • Corrige a conversão de Nullable(String) para Nullable(Bool/IPv4/IPv6). Fecha #37221. #37270 (Kruglov Pavel).
  • Recurso experimental: corrige a execução de mutações em tabelas nas quais há colunas do tipo Object. Agora também é permitido usar subcolunas do tipo Object na expressão WHERE de consultas UPDATE ou DELETE, bem como manipular (DROP, MODIFY) subcolunas individuais. Corrige #37205. #37266 (Anton Popov).
  • O Kafka não precisa de group.id na etapa do produtor. No log do console, você pode encontrar um aviso que descreve esse problema: 2022.05.15 17:59:13.270227 [ 137 ] {} <Warning> StorageKafka (topic-name): [rdk:CONFWARN] [thrd:app]: Configuration property group.id is a consumer property and will be ignored by this producer instance. #37228 (Mark Andreev).
  • Funcionalidade experimental (WindowView): Atualiza max_fired_watermark após os blocos serem efetivamente disparados, caso sejam excluídos dados que ainda não foram disparados. #37225 (vxider).
  • Corrigido o erro “Não é possível criar coluna do tipo Set” em consultas distribuídas com LIMIT BY. #37193 (Azat Khuzhin).
  • Funcionalidade experimental: agora, a consulta WATCH EVENTS do WindowView não será encerrada por causa do fragmento não vazio criado em WindowViewSource.h:58. #37182 (vxider).
  • Ativa enable_global_with_statement para subconsultas e fecha #37141. #37166 (Vladimir C).
  • Corrigida a conversão implícita em optimize_skip_unused_shards_rewrite_in. #37153 (Azat Khuzhin).
  • A função ILIKE em colunas FixedString poderia ter retornado resultados incorretos (ou seja, ter correspondido a menos casos do que deveria). #37117 (Robert Schulze).
  • Corrigido o GROUP BY com AggregateFunction (ou seja, você usa GROUP BY na coluna que tem o tipo AggregateFunction). #37093 (Azat Khuzhin).
  • Recurso experimental: Correção de optimize_aggregation_in_order com GROUP BY com prefixo e funções de agregação *Array. #37050 (Azat Khuzhin).
  • Corrigida a degradação de desempenho em algumas consultas INSERT SELECT com agregação implícita. Corrige #36792. #37047 (tavplubix).
  • Recurso experimental: Correção no GROUP BY em ordem (optimize_aggregation_in_order=1) com funções de agregação *Array (groupArrayArray/…). #37046 (Azat Khuzhin).
  • Corrige a saída inválida de LowCardinality->ArrowDictionary quando o tipo dos índices não é UInt8. Fecha #36832. #37043 (Kruglov Pavel).
  • Corrigido o problema com infs em quantileTDigest. Corrige #32107. #37021 (Vladimir Chebotarev).
  • Corrige o envio de dados de tabelas externas em HedgedConnections quando max_parallel_replicas != 1. #36981 (Kruglov Pavel).
  • Corrigido erro lógico na consulta TRUNCATE em banco de dados Replicated. Corrige #33747. #36976 (tavplubix).
  • Recurso experimental: Corrigido problema de travamento ao remover a tabela de origem no WindowView. Fecha #35678. #36967 (vxider).
  • Funcionalidade experimental (cache rocksdb): corrige o problema: #36671. #36929 (李扬).
  • Funcionalidade experimental: correção de bugs ao usar várias colunas no WindowView, com a adição de ações de conversão para possibilitar chamarwriteIntoWindowView com um esquema ligeiramente diferente. #36928 (vxider).
  • Corrige um bug no clickhouse-keeper que pode levar à corrupção de arquivos de log compactados em caso de pouca carga e reinicializações. #36910 (alesapin).
  • Corrige resultado incorreto de consulta ao fazer agregação de constantes. Isso corrige #36728 . #36888 (Amos Bird).
  • Recurso experimental: Corrigida a contagem de current_size no cache. #36887 (Kseniia Sumarokova).
  • Funcionalidade experimental: corrigido o acionamento em window view com hop window #34044. #36861 (vxider).
  • Funcionalidade experimental: corrige cast incorreto no buffer armazenado em cache do remote fs. #36809 (Kseniia Sumarokova).
  • Corrigida a criação de tabelas com flatten_nested = 0. Anteriormente, colunas Nested não achatadas podiam acabar sendo achatadas após a reinicialização do servidor. #36803 (Anton Popov).
  • Corrigidos alguns problemas com leituras assíncronas de um sistema de arquivos remoto que ocorriam ao ler dados de baixa cardinalidade. #36763 (Kseniia Sumarokova).
  • Recurso experimental: correção da inserção em colunas do tipo Object a partir de vários arquivos, por exemplo, por meio da função de tabela file com globs. #36762 (Anton Popov).
  • Corrige timeouts em requisições hedged. Um travamento da conexão logo após o envio de uma consulta remota poderia levar a uma espera eterna. #36749 (Kruglov Pavel).
  • Recurso experimental: corrige um erro em groupBitmapAndState/groupBitmapOrState/groupBitmapXorState em tabela distribuída. #36739 (Zhang Yifan).
  • Funcionalidade experimental: Durante o teste no PR, descobri que uma classe de cache foi inicializada duas vezes, o que gera uma exceção. Embora a causa desse problema não esteja clara, deve haver alguma lógica no código do ClickHouse que carrega o disk repetidamente, então precisamos fazer um tratamento especial para essa situação. #36737 (Han Shukai).
  • Corrigidas mesclagens verticais em partes wide. Antes, a exceção There is no column podia ser gerada durante a mesclagem. #36707 (Anton Popov).
  • Corrige a recarga do servidor em caso de alteração de porta (sem aguardar as conexões atuais do contexto da consulta). #36700 (Azat Khuzhin).
  • Funcionalidade experimental: no PR anterior, descobri que os testes (testes sem estado, check instável (address, actions)) dão timeout. Além disso, testar localmente também pode provocar deadlocks instáveis no sistema. Esse problema ainda existe ao usar o código-fonte mais recente da branch master. #36697 (Han Shukai).
  • Funcionalidade experimental: Corrigido problema na reinicialização do servidor quando a configuração de cache é alterada. #36685 (Kseniia Sumarokova).
  • Corrige um possível heap-use-after-free na inferência de esquema. Fecha #36661. #36679 (Kruglov Pavel).
  • Corrigido o parsing das configurações da consulta em uma consulta CREATE quando o engine não é especificado. Corrige https://github.com/ClickHouse/ClickHouse/pull/34187#issuecomment-1103812419. #36642 (tavplubix).
  • Funcionalidade experimental: corrige as mesclagens de partes wide do tipo Object. #36637 (Anton Popov).
  • Corrige falha no formato quando uma expressão padrão segue um EPHEMERAL não literal. Fecha #36618. #36633 (flynn).
  • Corrigida a exceção Missing column, que podia ocorrer ao usar INTERPOLATE com uma tabela ENGINE = MergeTree. #36549 (Yakov Olkhovskiy).
  • Corrige um possível erro com literais em WHERE em consultas com join. Fecha #36279. #36542 (Vladimir C).
  • Corrigida a atualização do offset em ReadBufferFromEncryptedFile, que poderia causar comportamento indefinido. #36493 (Kseniia Sumarokova).
  • Corrige as verificações de consistência do hostname na configuração do cluster Keeper. Adiciona a configuração keeper_server.host_checks_enabled para ativar/desativar essas verificações. #36492 (Antonio Andelic).
  • Corrige o uso de funções executáveis definidas pelo usuário em GROUP BY. Antes, funções executáveis definidas pelo usuário não podiam ser usadas como expressões em GROUP BY. Fecha #36448. #36486 (Maksim Kita).
  • Corrige uma possível exceção com pacote desconhecido do servidor no cliente. #36481 (Kseniia Sumarokova).
  • Funcionalidade experimental (por favor, nunca use system.session_log, pois ela será removida): adiciona valores de enum ausentes na tabela system.session_log. Fecha #36474. #36480 (Memo).
  • Corrige um bug na inferência de esquema do s3Cluster que fazia com que nem todos os dados fossem lidos ao executar um select no s3Cluster. O bug foi introduzido em https://github.com/ClickHouse/ClickHouse/pull/35544. #36434 (Kruglov Pavel).
  • Corrige a desreferenciação de nullptr no mecanismo de correspondência de JOIN e COLUMNS. Isso corrige #36416. Refere-se a https://github.com/ClickHouse/ClickHouse/pull/36417. #36430 (Amos Bird).
  • Corrigido o recarregamento do dicionário para ClickHouseDictionarySource se ele contiver subconsultas escalares. #36390 (lthaooo).
  • Corrige a asserção em JOIN e fecha #36199. #36201 (Vladimir C).
  • Consultas com aliases dentro de operadores especiais retornavam erro de parsing (isso estava quebrado na versão 22.1). Exemplo: SELECT substring('test' AS t, 1, 1). #36167 (Maksim Kita).
  • Funcionalidade experimental: corrigida a inserção de JSONs complexos com arrays aninhados em colunas do tipo Object. #36077 (Anton Popov).
  • Corrige o ALTER DROP COLUMN de uma coluna aninhada com partes compactas (ou seja, ALTER TABLE x DROP COLUMN n, quando existe a coluna n.d). #35797 (Azat Khuzhin).
  • Corrige o erro de intervalo de comprimento na função substring quando offset e length são constantes negativas e s não é constante. #33861 (RogerYK).

Lançamento do ClickHouse 22.4, 2022-04-19. Apresentação, Vídeo

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

  • Não permitir SETTINGS após FORMAT em consultas INSERT (há a configuração de compatibilidade allow_settings_after_format_in_insert para aceitar essas consultas, mas ela fica desativada por padrão). #35883 (Azat Khuzhin).
  • A função yandexConsistentHash (algoritmo de hash consistente de Konstantin “kostik” Oblakov) foi renomeada para kostikConsistentHash. O nome antigo foi mantido como alias por compatibilidade. Embora essa alteração seja retrocompatível, poderemos remover o alias em lançamentos posteriores, por isso é recomendável atualizar as referências a essa função em seus aplicativos. #35553 (Alexey Milovidov).

Novo recurso

  • Adicionada a extensão INTERPOLATE ao ORDER BY … WITH FILL. Fecha #34903. #35349 (Yakov Olkhovskiy).
  • Profiling no nível de processors (com a configuração log_processors_profiles, o ClickHouse gravará na tabela system.processors_profile_log o tempo que o processor passou em execução/esperando por dados). #34355 (Azat Khuzhin).
  • Adicionadas as funções makeDate(year, month, day), makeDate32(year, month, day). #35628 (Alexander Gololobov). Implementadas as funções makeDateTime() e makeDateTIme64(). #35934 (Alexander Gololobov).
  • Suporte a um novo tipo de cota WRITTEN BYTES para limitar a quantidade de bytes gravados durante consultas de insert. #35736 (Anton Popov).
  • Adicionada a função flattenTuple. Ela recebe um Tuple nomeado aninhado como argumento e retorna um Tuple achatado, cujos elementos correspondem aos caminhos do Tuple original. Ex.: Tuple(a Int, Tuple(b Int, c Int)) -> Tuple(a Int, b Int, c Int). flattenTuple pode ser usada para selecionar todos os caminhos do tipo Object como colunas separadas. #35690 (Anton Popov).
  • Adicionadas as funções arrayFirstOrNull, arrayLastOrNull. Fecha #35238. #35414 (Maksim Kita).
  • Adicionadas as funções minSampleSizeContinous e minSampleSizeConversion. Autor: achimbab. #35360 (Maksim Kita).
  • Novas funções minSampleSizeContinous e minSampleSizeConversion. #34354 (achimbab).
  • Introduz o formato ProtobufList (todos os registros como mensagens repetidas no Protobuf de saída). Fecha #16436. #35152 (Nikolai Kochetov).
  • Adicionadas as funções h3PointDistM, h3PointDistKm, h3PointDistRads, h3GetRes0Indexes, h3GetPentagonIndexes. #34568 (Bharat Nallan).
  • Adicionada a função toLastDayOfMonth, que arredonda uma data ou data e hora para o último dia do mês. #33501. #34394 (Habibullah Oladepo).
  • Adicionada configuração de balanceamento de carga para o cliente [Zoo]Keeper. Fecha #29617. #30325 (小路).
  • Adiciona um novo tipo de políticas de linha chamado simple. Antes deste PR, tínhamos dois tipos de políticas de linha: permissive e restrictive. Uma política de linha simple adiciona um novo filtro a uma tabela sem efeitos colaterais, como acontecia com as políticas permissive e restrictive. #35345 (Vitaly Baranov).
  • Adicionada a capacidade de especificar um Secret de cluster em um banco de dados replicado. #35333 (Nikita Mikhaylov).
  • Adicionadas verificações básicas na inicialização do servidor (memória disponível e espaço em disco, número máximo de threads etc.). #34566 (Sergei Trifonov).
  • Melhoria no INTERVAL - agora pode ser usado com [MILLI|MICRO|NANO]SECOND. Adicionadas as funções toStartOf[Milli|Micro|Nano]second(). Adicionados [add|subtract][Milli|Micro|Nano]seconds(). #34353 (Andrey Zvonov).

recurso experimental

  • Adicionado suporte a transações para tabelas MergeTree simples. Esta funcionalidade é altamente experimental e não é recomendada para produção. Parte de #22086. #24258 (tavplubix).
  • Adicionado suporte à inferência de esquema para o tipo Object no formato JSONEachRow. Permite converter colunas do tipo Map em colunas do tipo Object. #35629 (Anton Popov).
  • Permite gravar o cache do filesystem remoto em todas as operações de escrita. Adiciona a table system.remote_filesystem_cache. Adiciona a consulta drop remote filesystem cache. Adiciona introspecção de metadados do S3 com a table system.remote_data_paths. Fecha #34021. Adiciona uma opção de cache para merges, com o modo read_from_filesystem_cache_if_exists_otherwise_bypass_cache (ativado por padrão para merges e que também pode ser ativado por uma configuração de consulta com o mesmo nome). Renomeia configurações relacionadas ao cache (remote_fs_enable_cache -> enable_filesystem_cache, etc.). #35475 (Kseniia Sumarokova).
  • Adiciona uma opção para armazenar metadados de partes no RocksDB. Acelera o processo de loading de partes do MergeTree para agilizar a inicialização do clickhouse-server. Com essa melhoria, o clickhouse-server conseguiu reduzir o tempo de inicialização de 75 minutos para 20 segundos, com 700 mil partes do MergeTree. #32928 (李扬).

Melhoria de desempenho

  • Nova otimização do plano de consulta. As funções são avaliadas após ORDER BY quando possível. Por exemplo, na consulta SELECT sipHash64(number) FROM numbers(1e8) ORDER BY number LIMIT 5, a função sipHash64 seria avaliada após ORDER BY e LIMIT, o que proporciona um ganho de desempenho de ~20x. #35623 (Nikita Taranov).
  • Os tamanhos das tabelas hash usadas durante a agregação agora são coletados e reutilizados em consultas posteriores para evitar o redimensionamento das tabelas hash. #33439 (Nikita Taranov).
  • Melhoria na função hasAll com uso de instruções SIMD (SSE e AVX2). #27653 (youennL-cs). #35723 (Maksim Kita).
  • Várias alterações para melhorar o desempenho de ASOF JOIN (de 1,2x a 1,6x mais rápido). Também adiciona suporte ao uso de inteiros grandes. #34733 (Raúl Marín).
  • Melhora o desempenho de ASOF JOIN quando a chave é um inteiro nativo. #35525 (Maksim Kita).
  • Paralelização de multipart upload no armazenamento S3. #35343 (Sergei Trifonov).
  • O engine de armazenamento URL agora baixa vários fragmentos em paralelo se o endpoint oferecer suporte a HTTP Range. Duas configurações adicionais foram incluídas, max_download_threads e max_download_buffer_size, que controlam o número máximo de threads que uma única consulta pode usar para baixar o arquivo e o número máximo de bytes que cada thread pode processar. #35150 (Antonio Andelic).
  • Usa várias threads para baixar objetos do S3. O download pode ser controlado pelas configurações max_download_threads e max_download_buffer_size. #35571 (Antonio Andelic).
  • Reduz o escopo do mutex ao interagir com o HDFS. Relacionado a #35292. #35646 (shuchaome).
  • Exige mutações para TTL por tabela somente quando ela tiver sido alterada. #35953 (Azat Khuzhin).

Melhoria

  • Múltiplas melhorias na inferência de esquema. Foram adicionados alguns ajustes e heurísticas para determinar números, strings, arrays, tuplas e maps nos formatos de dados CSV, TSV e TSVRaw. Foi adicionada a configuração input_format_csv_use_best_effort_in_schema_inference para o formato CSV, que habilita/desabilita o uso dessas heurísticas; se ela estiver desabilitada, tudo será tratado como string. Foi adicionada uma configuração semelhante, input_format_tsv_use_best_effort_in_schema_inference, para o formato TSV/TSVRaw. Essas configurações são habilitadas por padrão. - Adiciona suporte a Maps na inferência de esquema no formato Values. - Corrige um possível segfault na inferência de esquema no formato Values. - Permite ignorar colunas com tipos não compatíveis nos formatos Arrow/ORC/Parquet. Adiciona as configurações correspondentes para isso: input_format_{parquet|orc|arrow}_skip_columns_with_unsupported_types_in_schema_inference. Essas configurações são desabilitadas por padrão. - Permite converter uma coluna do tipo Null em uma coluna Nullable com todos os valores NULL nos formatos Arrow/Parquet. - Permite especificar nomes de colunas na inferência de esquema por meio da configuração column_names_for_schema_inference para formatos que não contêm nomes de colunas (como CSV, TSV, JSONCompactEachRow etc.) - Corrige a inferência de esquema nos formatos ORC/Arrow/Parquet no que diz respeito ao funcionamento com colunas Nullable. Anteriormente, todos os tipos inferidos não eram Nullable, e isso impedia a leitura de colunas Nullable a partir dos dados; agora isso foi corrigido, e todos os tipos inferidos passam a ser sempre Nullable (porque não é possível determinar, apenas lendo o esquema, se uma coluna é Nullable ou não). - Corrige a inferência de esquema no formato Template com regras de escape de CSV. #35582 (Kruglov Pavel).
  • Adicionado parsing paralelo e inferência de esquema para o formato JSONAsObject. #35592 (Anton Popov).
  • Adicionado suporte à inferência automática de esquema à função de tabela s3Cluster. As assinaturas de s3 e s3Cluster foram sincronizadas. #35544 (Nikita Mikhaylov).
  • Adicionado suporte à inferência de esquema para hdfsCluster. #35602 (Nikita Mikhaylov).
  • Adicionada a nova configuração input_format_json_read_bools_as_numbers, que permite inferir e interpretar booleanos como números em formatos de entrada JSON. Ela é habilitada por padrão. Sugerido por @alexey-milovidov. #35735 (Kruglov Pavel).
  • Melhora a ordenação das colunas na inferência de esquema para os formatos TSKV e JSONEachRow, fechando #35640. Não interrompe a inferência de esquema ao ler uma linha vazia na inferência de esquema para os formatos TSKV e JSONEachRow. #35724 (Kruglov Pavel).
  • Adicionadas as configurações input_format_orc_case_insensitive_column_matching, input_format_arrow_case_insensitive_column_matching e input_format_parquet_case_insensitive_column_matching, que permitem ao ClickHouse fazer correspondência de colunas sem diferenciar maiúsculas de minúsculas ao ler dados de arquivos ORC, Arrow ou Parquet. #35459 (Antonio Andelic).
  • Adicionada a coluna is_secure em system.query_log, que indica se o cliente está usando uma conexão segura via TCP ou HTTP. #35705 (Antonio Andelic).
  • Agora kafka_num_consumers pode ser maior que o número de núcleos físicos no caso de uma máquina com poucos recursos (menos de 16 núcleos). #35926 (alesapin).
  • Adicionadas algumas métricas básicas para monitorar tabelas com engine=Kafka. #35916 (filimonov).
  • Agora, ALTER TABLE ... RESET SETTING não é mais permitido para configurações inexistentes na família de motores MergeTree. Corrige #35816. #35884 (alesapin).
  • Agora, algumas consultas ALTER MODIFY COLUMN para os tipos Arrays e Nullable podem ser feitas em nível de metadados, sem mutações. Por exemplo, alterar de Array(Enum8('Option1'=1)) para Array(Enum8('Option1'=1, 'Option2'=2)). #35882 (alesapin).
  • Adicionada uma animação ao ícone de ampulheta para indicar ao usuário que uma consulta está sendo executada. #35860 (peledni).
  • suporte para ALTER TABLE t DETACH PARTITION (ALL). #35794 (awakeljw).
  • Melhoria da análise de projeções para otimizar consultas triviais, como count(). #35788 (Amos Bird).
  • Suporte à inferência de esquema para insert select usando a table function input. Obtém o esquema da tabela de inserção em vez de inferi-lo a partir dos dados no caso de insert select a partir de table functions com suporte à inferência de esquema. Fecha #35639. #35760 (Kruglov Pavel).
  • Respeitar remote_url_allow_hosts para tabelas Hive. #35743 (李扬).
  • Implementado send_logs_level no clickhouse-local. Fecha #35653. #35716 (Kseniia Sumarokova).
  • Fecha #35641 Permite colunas EPHEMERAL sem expressão padrão explícita. #35706 (Yakov Olkhovskiy).
  • Adicionado o contador de eventos de profile AsyncInsertBytes relativo ao tamanho dos INSERTs assíncronos. #35644 (Alexey Milovidov).
  • Melhoria na descrição do pipeline para JOIN. #35612 (何李夫).
  • Determinar o caminho absoluto da configuração do HDFS. #35572 (李扬).
  • Melhora o desempenho de colagem e a compatibilidade do clickhouse-client. Isso ajuda em #35501. #35541 (Amos Bird).
  • Podia ocorrer um estouro de pilha em consultas distribuídas se uma das configurações async_socket_for_remote e use_hedged_requests estivesse habilitada durante a análise de um tipo de dado com aninhamento muito profundo (pelo menos na compilação de depuração). Fecha #35509. #35524 (Kruglov Pavel).
  • Adiciona os tamanhos das subcolunas à tabela system.parts_columns. #35488 (Anton Popov).
  • Adiciona informações explícitas sobre a tabela ao nó de varredura do plano de consulta e do pipeline. #35460 (何李夫).
  • Permitir que o servidor use portas de número baixo (por exemplo, 443). O script de instalação do ClickHouse definirá cap_net_bind_service no arquivo binário. #35451 (Alexey Milovidov).
  • Corrigido o INSERT INTO table FROM INFILE: a barra de progresso não era exibida. #35429 (xiedeyantu).
  • Adicionados os argumentos --user, --password, --host e --port à ferramenta clickhouse-diagnostics. #35422 (李扬).
  • Adicionado suporte a UUID para motores Postgres. Fecha #35384. #35403 (Kseniia Sumarokova).
  • Para a função de tabela s3cluster, HDFSCluster ou hive, não é possível obter o AccessType correto com StorageFactory::instance().getSourceAccessType(getStorageTypeName()). Este PR corrige isso. #35365 (李扬).
  • Removida a opção --testmode do clickhouse-client, que passa a ser habilitada incondicionalmente. #35354 (Kseniia Sumarokova).
  • Não permitir a operação wchc (comando de quatro letras) no clickhouse-keeper. #35320 (zhangyuli1).
  • Adicionada a função getTypeSerializationStreams. Para um tipo especificado (detectado a partir da coluna), ela retorna um array com todos os caminhos dos substreams de serialização. Essa função é útil principalmente para desenvolvedores. #35290 (李扬).
  • Se port não estiver especificada na configuração do cluster, a porta padrão do servidor será usada. Isso fecha #34769. #34772 (Alexey Milovidov).
  • Use o índice minmax para arquivo ORC/Parquet no Hive Engine. PR relacionada: https://github.com/ClickHouse/arrow/pull/10. #34631 (李扬).
  • As tabelas de log do sistema agora permitem especificar COMMENT na declaração do ENGINE. Fecha #33768. #34536 (Maksim Kita).
  • Suporte adequado à configuração max_rows_to_read no caso de leitura na ordem da chave de ordenação e com limite especificado. Anteriormente, a exceção Limit for rows or bytes to read exceeded podia ser lançada mesmo quando a consulta na verdade precisava ler uma quantidade menor de linhas. #33230 (Anton Popov).
  • Respeitar apenas a cota e o período dos cgroups, ignorando shares (que, na prática, não limitam o número de núcleos que podem ser usados). #35815 (filimonov).

Melhorias de compilação/testes/empacotamento

  • Adiciona o próximo lote de configurações de randomização nos testes funcionais. #35047 (Kruglov Pavel).
  • Adiciona uma verificação de compatibilidade retroativa no teste de estresse. Fecha #25088. #27928 (Kruglov Pavel).
  • Migra a compilação de pacotes para nfpm - Descontinua o script release em favor de packages/build - Compila tudo na imagem clickhouse/binary-builder (limpeza: clickhouse/deb-builder) - Adiciona remoção de símbolos no cmake (todo: use prefix/lib/prefix/lib/bin_dir/clickhouse/$binary.debug) - Corrige o problema com símbolos DWARF - Adiciona pacotes APK do Alpine - Renomeia alien para additional_pkgs. #33664 (Mikhail f. Shiryaev).
  • Adiciona uma varredura noturna e upload para o Coverity. #34895 (Boris Kuschel).
  • Um pequeno pacote dedicado para clickhouse-keeper. #35308 (Mikhail f. Shiryaev).
  • A execução com podman estava falhando: ele reclama da especificação do mesmo volume duas vezes. #35978 (Roman Nikonov).
  • Pequena melhoria na configuração de compilação do contrib/krb5. #35832 (Anton Kozlov).
  • Adiciona um rótulo para identificar uma tarefa de compilação para cada imagem. #35583 (Mikhail f. Shiryaev).
  • Aplica o formatador black ao código Python e adiciona uma verificação por commit. #35466 (Mikhail f. Shiryaev).
  • Refaz a imagem Alpine para usar um Dockerfile limpo. Cria um script em tests/ci para compilar as imagens Ubuntu e Alpine. Adiciona a imagem clickhouse-keeper (cc @nikitamikhaylov). Adiciona uma verificação de compilação ao PullRequestCI. Adiciona uma tarefa ao ReleaseCI. Adiciona uma tarefa ao MasterCI para compilar e enviar as imagens clickhouse/clickhouse-server:head e clickhouse/clickhouse-keeper:head para cada PR mesclado. #35211 (Mikhail f. Shiryaev).
  • Corrige o relatório do teste de estresse no CI; agora fazemos upload do runlog com informações sobre os testes de estresse iniciados apenas uma vez. #35093 (Mikhail f. Shiryaev).
  • Passa a usar libcxx / libcxxabi do LLVM 14. #34906 (Raúl Marín).
  • Atualiza o unixodbc para mitigar a CVE-2018-7485. Observação: esta CVE não é relevante para o ClickHouse, pois ele implementa sua própria camada de isolamento para ODBC. #35943 (Mikhail f. Shiryaev).

correção de erro

  • Adicionadas as configurações input_format_ipv4_default_on_conversion_error, input_format_ipv6_default_on_conversion_error para permitir a inserção, em tabelas, de valores inválidos de endereço IP como padrão. Fecha #35726. #35733 (Maksim Kita).
  • Evite apagar colunas de um bloco inexistente ao ler dados do Hive. #35393 (lgbo).
  • Adicionar verificação de tipos ao criar uma visão materializada. Fecha: #23684. #24896 (hexiaoting).
  • Corrige a formatação de consultas INSERT INFILE (faltando aspas). #35886 (Azat Khuzhin).
  • Desative session_log porque um problema de segurança de memória foi identificado por fuzzing. Veja #35714. #35873 (Alexey Milovidov).
  • Evitar processar o TTL por coluna várias vezes. #35820 (Azat Khuzhin).
  • Corrige inserções em colunas do tipo Object quando há dados relacionados a várias partições na consulta de inserção. #35806 (Anton Popov).
  • Corrige um bug nos índices de colunas não presentes nos formatos -WithNames que levava ao erro INCORRECT_NUMBER_OF_COLUMNS quando o número de colunas era maior que 256. Fecha #35793. #35803 (Kruglov Pavel).
  • Corrigido em #35751. #35799 (Nikolay Degterinsky).
  • Correção para a leitura de HDFS no formato Snappy. #35771 (shuchaome).
  • Corrige um bug na conversão de tipos personalizados para string que poderia causar segfault ou mensagens de erro inesperadas. Fecha #35752. #35755 (Kruglov Pavel).
  • Corrigida a implementação de any/all (subconsulta). Fecha #35489. #35727 (Kseniia Sumarokova).
  • Corrigida a exclusão de um banco de dados não vazio no clickhouse-local. Fecha #35692. #35711 (Kseniia Sumarokova).
  • Corrigido um bug na criação de visão materializada com subconsulta após a reinicialização do servidor. A visão materializada não estava sendo atualizada após inserções na tabela subjacente depois da reinicialização do servidor. Fecha #35511. #35691 (Kruglov Pavel).
  • Corrigida a possível exceção Can't adjust last granule ao ler subcolunas do tipo experimental Object. #35687 (Anton Popov).
  • Habilitada a compilação com JIT por padrão. #35683 (Maksim Kita).
  • Corrigida possível perda de subcolunas no tipo experimental Object. #35682 (Anton Popov).
  • Corrige a verificação da nulabilidade da chave de junção no ASOF JOIN, fecha #35565. #35674 (Vladimir C).
  • Corrige a lógica de verificação de partes para partes com projeções. O erro ocorria quando a projeção e a parte principal tinham tipos diferentes. Isso é semelhante a https://github.com/ClickHouse/ClickHouse/pull/33774. O bug foi corrigido por @caoyang10. #35667 (Amos Bird).
  • Corrige falha no servidor quando um grande número de argumentos é passado para a função format. Consulte o arquivo de teste para ver como reproduzir a falha. #35651 (Amos Bird).
  • Corrige o uso de quotas com inserções assíncronas. #35645 (Anton Popov).
  • Corrige argumentos posicionais com aliases. Fecha #35600. #35620 (Kseniia Sumarokova).
  • Verifique remote_url_allow_hosts antes da inferência de esquema no URL engine. Fecha #35064. #35619 (Kruglov Pavel).
  • Corrigido o HashJoin quando colunas do tipo LowCardinality são usadas. Isso corrige #35548. #35616 (Antonio Andelic).
  • Corrige uma possível falha de segmentação no MaterializedPostgreSQL que ocorria caso fosse lançada uma exceção quando os dados coletados na memória eram sincronizados para as tabelas subjacentes. Fecha #35611. #35614 (Kseniia Sumarokova).
  • A configuração database_atomic_wait_for_drop_and_detach_synchronously funcionava incorretamente para a consulta ATTACH TABLE quando uma tabela em estado detached, anteriormente desanexada, ainda estava em uso. Isso foi corrigido. #35594 (tavplubix).
  • Corrige cabeçalhos HTTP com coleções nomeadas e adiciona compression_method. Fecha #35273. Fecha #35269. #35593 (Kseniia Sumarokova).
  • Corrige a obtenção de colunas virtuais no engine S3. Fecha #35411. #35586 (Kseniia Sumarokova).
  • Corrigida a dedução do tipo de retorno para caseWithExpression. O tipo do ramo ELSE agora é levado em conta corretamente. #35576 (Antonio Andelic).
  • Corrige a análise de endereços IPv6 com mais de 39 caracteres. Fecha #34022. #35539 (Maksim Kita).
  • Corrige o CAST para endereços IPv4 e IPv6 na seção IN. Corrige #35528. #35534 (Maksim Kita).
  • Corrige travamento durante a avaliação de função com curto-circuito quando um dos argumentos é uma constante Nullable. Fecha #35497. Fecha #35496. #35502 (Maksim Kita).
  • Corrigida falha na função throwIf com argumentos constantes. #35500 (Maksim Kita).
  • Corrige um bug no Keeper que pode levar à instabilidade nas conexões de clientes. Introduzido em #35031. #35498 (alesapin).
  • Corrige um bug na função if quando o tipo da coluna resultante difere do tipo de dado resultante, o que causava erros lógicos como Logical error: 'Bad cast from type DB::ColumnVector<int> to DB::ColumnVector<long>'.. Fecha #35367. #35476 (Kruglov Pavel).
  • Corrige o excesso de logging ao usar o S3 como backend para o MergeTree ou como engine/função de tabela separada. Corrige #30559. #35434 (alesapin).
  • Agora, merges executados com zero copy replication (experimental) não vão mais lotar os logs com a mensagem Found parts with the same min block and with the same max block as the missing part _ on replica _. Hoping that it will eventually appear as a result of a merge.. #35430 (alesapin).
  • Evita possível exceção caso fragmentos vazios apareçam no GroupingAggregatedTransform. #35417 (Nikita Taranov).
  • Corrigido o tratamento de colunas desnecessárias na consulta nos formatos Arrow/Parquet/ORC, evitando possíveis erros como Unsupported <format> type <type> of an input column <column_name> quando o arquivo contém uma coluna com tipo não suportado e ela não é usada na consulta. #35406 (Kruglov Pavel).
  • Correção do cache local para filesystem remoto (recurso experimental) em casos extremos de alta concorrência. #35381 (Kseniia Sumarokova). Corrige um possível deadlock no cache. #35378 (Kseniia Sumarokova).
  • Corrige a poda de partições no caso de comparação com constante em WHERE. Se a coluna e a constante tivessem tipos diferentes, poderia ocorrer overflow. A consulta poderia retornar incorretamente um resultado vazio. Isso corrige #35304. #35334 (Amos Bird).
  • Corrige a inferência de esquema no formato TSKV ao usar um max_read_buffer_size pequeno. #35332 (Kruglov Pavel).
  • Correção de mutações em tabelas com colunas esparsas habilitadas. #35284 (Anton Popov).
  • Não atrasar por padrão a gravação da part final (corrige um possível Memory limit exceeded durante INSERT ao adicionar max_insert_delayed_streams_for_parallel_write, com valor padrão de 1000 para gravações no S3 e desabilitado, como antes, nos demais casos). #34780 (Azat Khuzhin).

Lançamento do ClickHouse v22.3-lts, 2022-03-17. Apresentação, Vídeo

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

  • Fazer a função arrayCompact se comportar como as outras funções de ordem superior: realizar a compactação não dos resultados da função lambda, mas do array original. Se você estiver usando funções lambda não triviais em arrayCompact, poderá restaurar o comportamento antigo envolvendo os argumentos de arrayCompact em arrayMap. Fecha #34010 #18535 #14778. #34795 (Alexandre Snarskii).
  • Alterado o comportamento específico da implementação em caso de overflow da função toDatetime. Agora, o valor será saturado para o instante mínimo/máximo de datetime suportado mais próximo, em vez de ocorrer wraparound. Esta alteração é destacada como “incompatível com versões anteriores” porque alguém pode depender involuntariamente do comportamento antigo. #32898 (HaiBo Li).
  • Fazer com que as funções cast(value, 'IPv4') e cast(value, 'IPv6') se comportem da mesma forma que as funções toIPv4 e toIPv6. Foi alterado o comportamento quando um endereço IP incorreto é passado para as funções toIPv4, toIPv6: agora, se um endereço IP inválido for passado para essas funções, será gerada uma exceção; antes, elas retornavam o valor padrão. Adicionadas as funções IPv4StringToNumOrDefault, IPv4StringToNumOrNull, IPv6StringToNumOrDefault, IPv6StringOrNull toIPv4OrDefault, toIPv4OrNull, toIPv6OrDefault, toIPv6OrNull. As funções IPv4StringToNumOrDefault , toIPv4OrDefault , toIPv6OrDefault devem ser usadas se a lógica anterior dependia de IPv4StringToNum, toIPv4, toIPv6 retornarem o valor padrão para endereços inválidos. Adicionada a configuração cast_ipv4_ipv6_default_on_conversion_error; se essa configuração estiver habilitada, as funções de conversão de endereço IP se comportarão como antes. Fecha #22825. Fecha #5799. Fecha #35156. #35240 (Maksim Kita).

Novo recurso

  • Suporte a cache local de dados para sistemas de arquivos remotos. Isso pode ser habilitado para discos s3. Fecha #28961. #33717 (Kseniia Sumarokova). Enquanto isso, habilitamos a suíte de testes no sistema de arquivos S3 e não há mais problemas conhecidos, então o recurso está começando a ficar pronto para produção.
  • Adiciona a nova função de tabela hive. Ela pode ser usada da seguinte forma: hive('<hive metastore url>', '<hive database>', '<hive table name>', '<columns definition>', '<partition columns>'), por exemplo SELECT * FROM hive('thrift://hivetest:9083', 'test', 'demo', 'id Nullable(String), score Nullable(Int32), day Nullable(String)', 'day'). #34946 (lgbo).
  • Suporte à autenticação de usuários conectados via SSL por meio de certificado X.509. #31484 (eungenue).
  • Suporte à inferência de esquema para inserção em funções de tabela file/hdfs/s3/url. #34732 (Kruglov Pavel).
  • Agora você pode ler a tabela system.zookeeper sem restrições de caminho ou com uma expressão like. Essas leituras podem gerar uma carga bastante alta no ZooKeeper, então, para habilitar essa funcionalidade, você precisa ativar a configuração allow_unrestricted_reads_from_keeper. #34609 (Sergei Trifonov).
  • Exibe métricas de CPU e memória no clickhouse-local. Fecha #34545. #34605 (李扬).
  • Implementa as funções startsWith e endsWith para arrays, fecha #33982. #34368 (usurai).
  • Adiciona três funções para o tipo de dados Map: 1. mapReplace(map1, map2) - substitui os valores das chaves em map1 pelos valores das chaves correspondentes em map2; adiciona chaves de map2 que não existem em map1. 2. mapFilter 3. mapMap. mapFilter e mapMap são funções de ordem superior que aceitam dois argumentos: o primeiro é uma função lambda com o par k, v como argumentos; o segundo é uma coluna do tipo Map. #33698 (hexiaoting).
  • Permite obter o usuário e a senha padrão do clickhouse-client a partir das variáveis de ambiente CLICKHOUSE_USER e CLICKHOUSE_PASSWORD. Fecha #34538. #34947 (DR).

recurso experimental

  • Novo tipo de dados Object(<schema_format>), que oferece suporte ao armazenamento de dados semiestruturados (por enquanto, apenas JSON). Os dados são gravados nesses tipos como string. Em seguida, todos os caminhos são extraídos de acordo com o formato dos dados semiestruturados e gravados como colunas separadas, usando os tipos mais adequados para armazenar todos os seus valores. Essas colunas podem ser consultadas por nomes que correspondem aos caminhos nos dados de origem. Por exemplo, data.key1.key2 ou com o operador CAST data.key1.key2::Int64.
  • Adicionada a configuração database_replicated_allow_only_replicated_engine. Quando habilitada, permite criar apenas tabelas Replicated ou tabelas com motores sem estado em bancos de dados Replicated. #35214 (Nikolai Kochetov). Observe que o banco de dados Replicated ainda é uma funcionalidade experimental.

Melhoria de desempenho

  • Melhora o desempenho da inserção em tabelas MergeTree com a otimização da ordenação. Foi observada uma melhora de até 2x em benchmarks realistas. #34750 (Maksim Kita).
  • Poda de colunas na leitura de arquivos Parquet, ORC e Arrow a partir de URL e S3. Fecha #34163. #34849 (Kseniia Sumarokova).
  • Poda de colunas na leitura de arquivos Parquet, ORC e Arrow do Hive. #34954 (lgbo).
  • Uma série de otimizações de desempenho de um super-herói da performance. Melhora o desempenho do processamento de consultas com cláusulas IN extensas. Melhora o desempenho do Dicionário direct quando a origem é ClickHouse. Melhora o desempenho das funções detectCharset , detectLanguageUnknown . #34888 (Maksim Kita).
  • Melhora o desempenho da função de agregação any com mais batching. #34760 (Raúl Marín).
  • Várias melhorias de desempenho para clickhouse-keeper: menos bloqueios #35010 (zhanglistar), menor uso de memória com leitura e gravação em streaming do snapshot em vez de cópia completa. #34584 (zhanglistar), otimização da compactação do armazenamento de Log na implementação RAFT. #34534 (zhanglistar), versionamento da estrutura de dados interna #34486 (zhanglistar).

Melhoria

  • Permite inserts assíncronos em funções de tabela. Corrige #34864. #34866 (Anton Popov).
  • Conversão implícita de tipo no argumento key para as funções dictGetHierarchy, dictIsIn, dictGetChildren, dictGetDescendants. Corrige #34970. #35027 (Maksim Kita).
  • A consulta EXPLAIN AST pode gerar a AST na forma de um grafo no formato Graphviz: EXPLAIN AST graph = 1 SELECT * FROM system.parts. #35173 (李扬).
  • Quando arquivos grandes eram gravados com a table function s3 ou o mecanismo de tabela, o tipo de conteúdo dos arquivos era definido incorretamente como application/xml devido a um bug no AWS SDK. Isso fecha #33964. #34433 (Alexey Milovidov).
  • Altere um pouco as ROW POLICY restritivas para torná-las uma alternativa mais simples às políticas permissivas em casos simples. Se, para uma tabela específica, existirem apenas políticas restritivas (sem políticas permissivas), os usuários poderão ver algumas linhas. Além disso, SHOW CREATE ROW POLICY sempre mostrará AS permissive ou AS restrictive na definição da ROW POLICY. #34596 (Vitaly Baranov).
  • Aprimora a inferência de esquema com globs nos motores File/S3/HDFS/URL. Tenta usar o caminho seguinte na inferência de esquema em caso de erro. #34465 (Kruglov Pavel).
  • A UI do Play agora detecta corretamente o tema claro/escuro preferido do sistema operacional. #35068 (peledni).
  • Adicionado date_time_input_format = 'best_effort_us'. Resolve #34799. #34982 (WenYao).
  • Novas configurações chamadas allow_plaintext_password e allow_no_password foram adicionadas à configuração do servidor para ativar/desativar tipos de autenticação que podem ser potencialmente inseguros em alguns ambientes. Elas são permitidas por padrão. #34738 (Heena Bansal).
  • Suporte ao tipo de dados DateTime64 no formato Arrow, fecha #8280 e fecha #28574. #34561 (李扬).
  • Recarrega remote_url_allow_hosts (filtragem de conexões de saída) ao atualizar a configuração. #35294 (Nikolai Kochetov).
  • Adicionado suporte ao parâmetro --testmode para clickhouse-local. Esse parâmetro permite interpretar as dicas de teste que usamos nos testes funcionais. #35264 (Kseniia Sumarokova).
  • Adicionado distributed_depth ao log de consultas. É como uma variante mais detalhada de is_initial_query #35207 (李扬).
  • Passa a respeitar remote_url_allow_hosts para as funções de tabela MySQL e PostgreSQL. #35191 (Heena Bansal).
  • Adicionado o campo disk_name em system.part_log. #35178 (Artyom Yurkov).
  • Não tente novamente em caso de erros não recuperáveis ao consultar URLs remotas. Fecha #35161. #35172 (Kseniia Sumarokova).
  • Suporte a consultas distribuídas INSERT SELECT (configuração parallel_distributed_insert_select) na função de tabela view(). #35132 (Azat Khuzhin).
  • Rastreamento de memória mais preciso durante o INSERT em Buffer com AggregateFunction. #35072 (Azat Khuzhin).
  • Evita divisão por zero no Query Profiler se o kernel do Linux tiver um bug. Fecha #34787. #35032 (Alexey Milovidov).
  • Adicionadas mais verificações de consistência para a configuração do Keeper: agora não é mais permitido misturar localhost e servidores não locais, e também foram adicionadas verificações para impedir que a porta interna do raft e a porta de cliente do Keeper tenham o mesmo valor. #35004 (alesapin).
  • Atualmente, se o usuário alterar as configurações das tabelas de sistema, haverá uma grande quantidade de logs, e o ClickHouse renomeará as tabelas a cada minuto. Isso corrige #34929. #34949 (Nikita Mikhaylov).
  • Use pool de conexões no cliente do metastore Hive. #34940 (lgbo).
  • Ignorar TTL por coluna em CREATE TABLE AS se o novo mecanismo de tabela não oferecer suporte a ele (ou seja, se o mecanismo não for da família MergeTree). #34938 (Azat Khuzhin).
  • Permite strings LowCardinality em índices ngrambf_v1/tokenbf_v1. Fecha #21865. #34911 (Lars Hiller Eidnes).
  • Permite abrir um banco de dados SQLite vazio caso o arquivo não exista. Corrige #33367. #34907 (Kseniia Sumarokova).
  • Implementadas estatísticas de memória para o FreeBSD — isso é necessário para que max_server_memory_usage funcione corretamente. #34902 (Alexandre Snarskii).
  • Em versões anteriores, a barra de progresso no clickhouse-client podia saltar para perto de 50% sem motivo aparente. Isso corrige #34324. #34801 (Alexey Milovidov).
  • Agora, as consultas ALTER TABLE DROP COLUMN columnX em tabelas com motores MergeTree funcionarão instantaneamente quando columnX for uma coluna ALIAS. Corrige #34660. #34786 (alesapin).
  • Mostrar sugestões quando o usuário digitar incorretamente o nome de um índice de data skipping. Fecha #29698. #34764 (flynn).
  • Suporte a funções de tabela remote()/cluster() para parallel_distributed_insert_select. #34728 (Azat Khuzhin).
  • Não redefina o logging configurado pelas opções de linha de comando --log-file/--errorlog-file em caso de configuração vazia no arquivo de configuração. #34718 (Amos Bird).
  • Extrair o esquema apenas uma vez durante a criação da tabela e impedir a leitura de arquivos locais/fontes externas para extrair o esquema a cada inicialização do servidor. #34684 (Kruglov Pavel).
  • Permite especificar nomes de argumentos para UDFs executáveis. Isso é necessário em formatos nos quais o nome do argumento faz parte da serialização, como Native e JSONEachRow. Fecha #34604. #34653 (Maksim Kita).
  • MaterializedMySQL (funcionalidade experimental) agora oferece suporte a materialized_mysql_tables_list (uma lista, separada por vírgulas, de tabelas do banco de dados MySQL que serão replicadas pelo engine de banco de dados MaterializedMySQL. Valor padrão: lista vazia — significa que todas as tabelas serão replicadas), mencionado em #32977. #34487 (zzsmdfj).
  • Melhora os logs de span do OpenTelemetry para a operação INSERT em uma tabela distribuída. #34480 (Frank Chen).
  • Torna ctime e mtime do znode consistentes entre os servidores no ClickHouse Keeper. #33441 (小路).

melhoria de compilação/testes/empacotamento

  • O repositório de pacotes foi migrado para o JFrog Artifactory (Mikhail f. Shiryaev).
  • Algumas configurações foram aleatorizadas nos testes funcionais, para que mais combinações possíveis de configurações sejam testadas. Este é mais um método de fuzzing para garantir uma cobertura de testes melhor. Isso fecha #32268. #34092 (Kruglov Pavel).
  • Removido o PVS-Studio do nosso CI. #34680 (Mikhail f. Shiryaev).
  • Adicionada a capacidade de gerar binários stripped com o CMake. Nas versões anteriores, isso era feito pelo dh-tools. #35196 (alesapin).
  • Compilação menor e “fat-free” do clickhouse-keeper. #35031 (alesapin).
  • Uso de @robot-clickhouse como autor e committer para PRs como https://github.com/ClickHouse/ClickHouse/pull/34685. #34793 (Mikhail f. Shiryaev).
  • A versão do DWARF para informações de depuração foi limitada a, no máximo, 4, porque nosso simbolizador interno de stack não consegue parsear a versão 5 do DWARF. Isso faz sentido se você compilar o ClickHouse com clang-15. #34777 (Alexey Milovidov).
  • Removido o pacote Debian clickhouse-test, por ser uma complicação desnecessária. O CI usa testes do repositório, e os testes independentes via pacote deb não são mais suportados. #34606 (Ilya Yatsishin).

Correção de bug (comportamento incorreto visível ao usuário em lançamento oficial estável ou pré-estável)

  • Uma correção para a integração com HDFS: quando o tamanho do buffer interno é muito pequeno, NEED&#95;MORE&#95;INPUT em HadoopSnappyDecoder é executado várias vezes (>=3) para um único bloco compactado. Isso faz com que os dados de entrada sejam copiados para o local errado em HadoopSnappyDecoder::buffer. #35116 (lgbo).
  • Ignora grants obsoletos em instruções ATTACH GRANT. Este PR corrige #34815. #34855 (Vitaly Baranov).
  • Corrige um segfault no banco de dados Postgres ao obter a consulta CREATE TABLE se o banco de dados tiver sido criado usando named collections. Fecha #35312. #35313 (Kseniia Sumarokova).
  • Corrige o bug que causava linhas duplicadas no partial merge join, fecha #31009. #35311 (Vladimir C).
  • Corrige uma possível falha de Assertion 'position() != working_buffer.end()' failed ao usar compactação bzip2 com um valor pequeno da configuração max_read_buffer_size. O bug foi encontrado em https://github.com/ClickHouse/ClickHouse/pull/35047. #35300 (Kruglov Pavel). Ao usar compactação lz4 com um valor pequeno da configuração max_read_buffer_size. #35296 (Kruglov Pavel). Ao usar compactação lzma com um valor pequeno da configuração max_read_buffer_size. #35295 (Kruglov Pavel). Ao usar compactação brotli com um valor pequeno da configuração max_read_buffer_size. O bug foi encontrado em https://github.com/ClickHouse/ClickHouse/pull/35047. #35281 (Kruglov Pavel).
  • Corrigida possível falha de segmentação na inferência de esquema do JSONEachRow. #35291 (Kruglov Pavel).
  • Corrigida a consulta CHECK TABLE no caso de colunas esparsas estarem habilitadas na tabela. #35274 (Anton Popov).
  • Evite std::terminate em caso de exceção durante a leitura do VFS remoto. #35257 (Azat Khuzhin).
  • Corrige a leitura da porta na configuração, fecha #34776. #35193 (Vladimir C).
  • Corrige erro na consulta com WITH TOTALS caso HAVING retorne um resultado vazio. Isso corrige #33711. #35186 (Amos Bird).
  • Corrige um caso específico de replaceRegexpAll, fecha #35117. #35182 (Vladimir C).
  • A inferência de esquema não funcionava corretamente no caso de INSERT INTO FUNCTION s3(...) FROM ...: ela tentava ler o esquema do arquivo no S3 em vez de lê-lo da consulta SELECT. #35176 (Kruglov Pavel).
  • Corrige os table overrides do MaterializedPostgreSQL (funcionalidade experimental) para PARTITION BY etc. Fecha #35048. #35162 (Kseniia Sumarokova).
  • Correção no MaterializedPostgreSQL (recurso experimental) ao adicionar uma nova tabela à replicação (ATTACH TABLE) após removê-la manualmente (DETACH TABLE). Fecha #33800. Fecha #34922. Fecha #34315. #35158 (Kseniia Sumarokova).
  • Corrige erro de poda de partições quando uma função não monotônica é usada com o operador IN. Isso corrige #35136. #35146 (Amos Bird).
  • Corrigida uma tradução para XML ligeiramente incorreta das configurações YAML. #35135 (Miel Donkers).
  • Correção de optimize_skip_unused_shards_rewrite_in para colunas com sinal e valores negativos. #35134 (Azat Khuzhin).
  • A opção update_lag na configuração de Dicionário externo não podia ser usada e exibia a mensagem de erro Unexpected key `update_lag` in dictionary source configuration. #35089 (Jason Chu).
  • Evita um possível deadlock durante o desligamento do servidor. #35081 (Azat Khuzhin).
  • Corrige a ausência de alias após a função ser otimizada para uma subcoluna quando a configuração optimize_functions_to_subcolumns está habilitada. Fecha #33798. #35079 (qieqieplus).
  • Corrigida a leitura da tabela system.asynchronous_inserts quando existe um insert assíncrono em uma table function. #35050 (Anton Popov).
  • Corrige a possível exceção Reading for MergeTree family tables must be done with last position boundary (relevante para operações em VFS remoto). Fecha #34979. #35001 (Kseniia Sumarokova).
  • Corrige resultado inesperado ao usar função de agregação do tipo -State no frame da janela. #34999 (metahys).
  • Corrigida uma possível segfault no FileLog (recurso experimental). Fecha #30749. #34996 (Kseniia Sumarokova).
  • Corrige um possível erro raro Cannot push block to port which already has data. #34993 (Nikolai Kochetov).
  • Corrige a inferência de esquema incorreta para datas não delimitadas por aspas em CSV. Fecha #34768. #34961 (Kruglov Pavel).
  • Integração com Hive: corrige resultado inesperado ao usar in em where em uma consulta do Hive. #34945 (lgbo).
  • Evite sondagem ativa no ClickHouse Keeper ao procurar arquivos de changelog para excluir. #34931 (Azat Khuzhin).
  • Corrige a conversão de DateTime64 no PostgreSQL. Fecha #33364. #34910 (Kseniia Sumarokova).
  • Corrige possível erro “o diretório da part não existe” durante INSERT em tabela MergeTree com VFS sobre S3. #34876 (Azat Khuzhin).
  • Passar a oferecer suporte à execução de DDLs como CREATE USER em clusters com replicação cruzada. #34860 (Jianmei Zhang).
  • Corrige erros no group by de múltiplas colunas no WindowView (funcionalidade experimental). #34859 (vxider).
  • Corrige possíveis falhas nas funções S2 quando as consultas contêm colunas constantes. #34745 (Bharat Nallan).
  • Corrigido bug em funções H3 que contêm colunas const e causavam falha nas consultas. #34743 (Bharat Nallan).
  • Corrigido No such file or directory com fsync_part_directory habilitado e a mesclagem vertical. #34739 (Azat Khuzhin).
  • Corrige a serialização/exibição das consultas de sistema RELOAD MODEL, RELOAD FUNCTION, RESTART DISK quando usadas com ON CLUSTER. Fecha #34514. #34696 (Maksim Kita).
  • Corrige allow_experimental_projection_optimization com enable_global_with_statement (antes, isso podia levar ao erro Stack size too large no caso de múltiplas expressões na cláusula WITH, além de executar subconsultas escalares repetidamente; agora, portanto, será mais eficiente). #34650 (Azat Khuzhin).
  • Interrompe a seleção da parte para mutação quando a outra réplica já tiver atualizado o log de transações do mecanismo ReplatedMergeTree. #34633 (Jianmei Zhang).
  • Corrige o resultado incorreto de uma consulta de contagem trivial quando o recurso de movimentação de partes é usado #34089. #34385 (nvartolomei).
  • Corrige a inconsistência no limite de max_query_size em subconsultas distribuídas. #34078 (Chao Ma).

Lançamento do ClickHouse v22.2, 2022-02-17. Apresentação, Vídeo

Notas de atualização

  • O uso de data skipping indexes em consultas com FINAL pode produzir resultados incorretos. Neste lançamento, desativamos os data skipping indexes por padrão para consultas com FINAL (uma nova configuração use_skip_indexes_if_final foi introduzida e fica desativada por padrão). #34243 (Azat Khuzhin).

novo recurso

  • Projeções estão prontas para produção. allow_experimental_projection_optimization passa a ser definido por padrão, e essa configuração foi descontinuada. #34456 (Nikolai Kochetov).
  • Uma opção para criar novos arquivos na inserção para os motores File/S3/HDFS. Permite sobrescrever um arquivo no HDFS. Por padrão, lança uma exceção ao tentar sobrescrever um arquivo no S3. Lança uma exceção ao tentar anexar dados a um arquivo em formatos que têm um sufixo (e, portanto, não oferecem suporte a anexações, como Parquet, ORC). Fecha #31640 Fecha #31622 Fecha #23862 Fecha #15022 Fecha #16674. #33302 (Kruglov Pavel).
  • Adiciona uma configuração que permite ao usuário definir sua própria semântica de desduplicação em MergeTree/ReplicatedMergeTree. Se fornecida, ela é usada em vez do resumo dos dados para gerar o ID do bloco. Assim, por exemplo, ao fornecer um valor único para a configuração em cada instrução INSERT, o usuário pode evitar que os mesmos dados inseridos sejam desduplicados. Isto fecha: #7461. #32304 (Igor Nikonov).
  • Adicionado suporte à palavra-chave DEFAULT em instruções INSERT. Fecha #6331. #33141 (Andrii Buriachevskyi).
  • O especificador de coluna EPHEMERAL foi adicionado à consulta CREATE TABLE. Fecha #9436. #34424 (yakov-olkhovskiy).
  • Suporte à cláusula IF EXISTS no recurso TTL expr TO [DISK|VOLUME] [IF EXISTS] 'xxx'. As partes serão movidas para o disco ou volume somente se ele existir na réplica, permitindo que as regras de MOVE TTL se comportem de forma diferente entre as réplicas, de acordo com as políticas de armazenamento existentes. Resolve #34455. #34504 (Anton Popov).
  • Permite definir um mecanismo de tabela padrão e criar tabelas sem especificar ENGINE. #34187 (Ilya Yatsishin).
  • Adiciona a função de tabela format(format_name, data). #34125 (Kruglov Pavel).
  • Detectar o formato no clickhouse-local pelo nome do arquivo, mesmo quando ele é passado via stdin. #33829 (Kruglov Pavel).
  • Adicionada inferência de esquema para a função de tabela values. Fecha #33811. #34017 (Kruglov Pavel).
  • Recarregamento dinâmico dos certificados TLS do servidor durante a recarga da configuração. Fecha #15764. #15765 (johnskopis). #31257 (Filatenkov Artur).
  • Agora, o ReplicatedMergeTree pode recuperar dados quando alguns de seus discos são danificados. #13544 (Amos Bird).
  • Conexões com tolerância a falhas no clickhouse-client: clickhouse-client ... --host host1 --host host2 --port port2 --host host3 --port port --host host4. #34490 (Kruglov Pavel). #33824 (Filippov Denis).
  • Adicionadas as funções DEGREES e RADIANS para compatibilidade com o MySQL. #33769 (Bharat Nallan).
  • Adicionada a função h3ToCenterChild. #33313 (Bharat Nallan). Adicionadas novas funções diversas de H3: edgeLengthKm,exactEdgeLengthKm,exactEdgeLengthM,exactEdgeLengthRads,numHexagons. #33621 (Bharat Nallan).
  • Adicionada a função bitSlice para extrair subsequências de bits de String/FixedString. #33360 (RogerYK).
  • Implementada a função de agregação meanZTest. #33354 (achimbab).
  • Adiciona intervalos de confiança às funções de agregação de testes t. #33260 (achimbab).
  • Adicionada a função addressToLineWithInlines. Fechado #26211. #33467 (SuperDJY).
  • Adicionados #! e # , que passam a ser reconhecidos como início de comentário de linha única. Fecha #34138. #34230 (Aaron Katz).

Recurso Experimental

  • Funções para classificação de texto: detecção de idioma e de conjunto de caracteres. Veja #23271. #33314 (Nikolay Degterinsky).
  • Adicionado memory overcommit ao MemoryTracker. Foram adicionadas configurações guaranteed para limites de memória, que representam limites flexíveis de memória. Caso o limite rígido de memória seja atingido, o MemoryTracker tenta cancelar a consulta com maior overcommit. A nova configuração memory_usage_overcommit_max_wait_microseconds especifica por quanto tempo as consultas podem esperar outra consulta parar. Fecha #28375. #31182 (Dmitry Novik).
  • Habilita join de stream com table no WindowView. #33729 (vxider).
  • Suporte aos tipos de dados SET, YEAR, TIME e GEOMETRY no MaterializedMySQL (recurso experimental). Corrige #18091, #21536, #26361. #33429 (zzsmdfj).
  • Corrige vários problemas quando PROJECTION está habilitada por padrão. Cada problema é descrito em um commit separado. Isso se refere a #33678. Isso corrige #34273. #34305 (Amos Bird).

Melhoria de desempenho

  • Suporte a optimize_read_in_order se o prefixo da chave de ordenação já estiver ordenado. Por exemplo, se tivermos a chave de ordenação ORDER BY (a, b) na tabela e uma consulta com as cláusulas WHERE a = const ORDER BY b, agora isso será aplicado lendo na ordem da chave de ordenação em vez de realizar uma ordenação completa. #32748 (Anton Popov).
  • Melhorado o desempenho da inserção particionada nas funções de tabela URL, S3, File, HDFS. Fecha #34348. #34510 (Maksim Kita).
  • Várias melhorias de desempenho no clickhouse-keeper. #34484 #34587 (zhanglistar).
  • FlatDictionary melhora o desempenho no carregamento de dados do dicionário. #33871 (Maksim Kita).
  • Melhorado o desempenho da função mapPopulateSeries. Fecha #33944. #34318 (Maksim Kita).
  • As colunas virtuais _file e _path (em motores de tabela do tipo arquivo) agora são LowCardinality — isso tornará mais rápidas as consultas em vários arquivos. Fecha #34300. #34317 (flynn).
  • Acelera o carregamento das partes de dados. Antes, isso não era paralelizado: a configuração part_loading_threads não surtia efeito. Veja #4699. #34310 (alexey-milovidov).
  • Melhora no desempenho do formato LineAsString. Fecha #34303. #34306 (alexey-milovidov).
  • Otimizado quantilesExact{Low,High} para usar nth_element em vez de sort. #34287 (Danila Kutenin).
  • Pequena melhoria no desempenho do formato Regexp. #34202 (alexey-milovidov).
  • Pequena melhoria na análise de subconsultas escalares. #34128 (Federico Rodriguez).
  • Torne o uso de tuple em ORDER BY quase tão rápido quanto ORDER BY com colunas. Temos otimizações especiais para ORDER BY com múltiplas colunas: https://github.com/ClickHouse/ClickHouse/pull/10831 . Também é vantajoso aplicá-las a colunas do tipo tuple. #34060 (Amos Bird).
  • Refatorar e reintroduzir o cache de subconsultas escalares na execução de visões materializadas. #33958 (Raúl Marín).
  • Melhoria discreta no desempenho de ORDER BY com a adição de suporte a x86-64 AVX-512 para as funções memcmpSmall, a fim de acelerar a comparação de memória. Isso funciona apenas se você compilar o ClickHouse por conta própria. #33706 (hanqf-git).
  • Melhora o desempenho do dicionário range_hashed quando uma chave tem muitos intervalos. Corrige #23821. #33516 (Maksim Kita).
  • Para inserções e merges no S3, grave arquivos em paralelo sempre que possível (TODO: verificar se isso já foi incorporado). #33291 (Nikolai Kochetov).
  • Melhora o desempenho do clickhouse-keeper e corrige diversos vazamentos de memória na biblioteca NuRaft. #33329 (alesapin).

Melhoria

  • Suporte a inserções assíncronas no clickhouse-client para consultas com dados inline. #34267 (Anton Popov).
  • As funções dictGet, dictHas convertem implicitamente o argumento de chave para a estrutura da chave do dicionário, caso sejam diferentes. #33672 (Maksim Kita).
  • Melhorias nos dicionários range_hashed. Melhorado o desempenho do tempo de carregamento quando há vários atributos. Agora é possível criar um dicionário sem atributos. Adicionada a opção de especificar a estratégia quando os intervalos start e end têm o tipo Nullable; convert_null_range_bound_to_open é true por padrão. Fecha #29791. Agora é possível especificar Float, Decimal, DateTime64, Int128, Int256, UInt128, UInt256 como tipos de intervalo. RangeHashedDictionary passou a oferecer suporte a valores de intervalo que excedem o tipo Int64. Fecha #28322. Adicionada a opção range_lookup_strategy para especificar o tipo de lookup de intervalo min, max; por padrão, é min. Fecha #21647. Corrigidos os cálculos de bytes alocados. Corrigido o nome do tipo em system.dictionaries no caso de ComplexKeyHashedDictionary. #33927 (Maksim Kita).
  • Os dicionários flat, hashed e hashed_array agora oferecem suporte à criação com atributos vazios, permitindo ler as chaves e usar dictHas. Corrige #33820. #33918 (Maksim Kita).
  • Adicionado suporte ao tipo de dado DateTime64 em dicionários. #33914 (Maksim Kita).
  • Permite usar s3(url, access_key_id, secret_access_key) (detecção automática do formato dos dados e da estrutura da tabela, mas com credenciais explícitas). #34503 (Kruglov Pavel).
  • Adicionado o envio do formato de saída de volta para o cliente, como é feito no protocolo HTTP, conforme sugerido em #34362. Corrige #34362. #34499 (Vitaly Baranov).
  • Enviar estatísticas de ProfileEvents em consultas INSERT SELECT (para exibir métricas da consulta no clickhouse-client para esse tipo de consulta). #34498 (Dmitry Novik).
  • Reconhecimento da extensão .jsonl para o formato JSONEachRow. #34496 (Kruglov Pavel).
  • Aprimora a inferência de esquema no clickhouse-local. Permite escrever simplesmente clickhouse-local -q "select * from table" < data.format. #34495 (Kruglov Pavel).
  • Os privilégios CREATE/ALTER/DROP ROW POLICY agora podem ser concedidos em uma tabela, em database.* ou globalmente em *.*. #34489 (Vitaly Baranov).
  • Permite exportar arquivos de tamanho arbitrariamente grande para s3. Adiciona duas novas configurações: s3_upload_part_size_multiply_factor e s3_upload_part_size_multiply_parts_count_threshold. Agora, sempre que s3_upload_part_size_multiply_parts_count_threshold partes forem carregadas para o S3 a partir de uma única consulta, s3_min_upload_part_size será multiplicado por s3_upload_part_size_multiply_factor. Corrige #34244. #34422 (alesapin).
  • Permite ignorar URLs não encontradas (404) em globs ao usar o armazenamento URL / função de tabela. Também fecha #34359. #34392 (Kseniia Sumarokova).
  • Formatos padrão de entrada e saída para clickhouse-local que podem ser sobrescritos por —input-format e —output-format. Fecha #30631. #34352 (李扬).
  • Adicionadas opções ao clickhouse-format. Isso fecha #30528: max_query_size e max_parser_depth. #34349 (李扬).
  • Melhor tratamento de entradas prévias antes da inicialização do cliente. Relacionado a #34308. #34336 (Amos Bird).
  • REGEXP_MATCHES e REGEXP_REPLACE são aliases de função para compatibilidade com o PostgreSQL. Fecha #30885. #34334 (李扬).
  • Alguns servidores esperam um cabeçalho User-Agent em suas solicitações HTTP. Foi adicionada às solicitações HTTP uma entrada de cabeçalho User-Agent no formato: User-Agent: ClickHouse/VERSION_STRING. #34330 (Saad Ur Rahman).
  • Cancela as merges antes de adquirir o bloqueio da tabela para a consulta TRUNCATE, para evitar o erro DEADLOCK_AVOIDED em alguns casos. Corrige #34302. #34304 (tavplubix).
  • Altere a severidade da mensagem “Mesclagem de partes cancelada” nos logs, porque não é um erro. Isso fecha #34148. #34232 (alexey-milovidov).
  • Adicionada a possibilidade de combinar o operador de cast no estilo do PostgreSQL :: com expressões que usam os operadores [] e . (indexação de arrays e tuplas). #34229 (Nikolay Degterinsky).
  • Passa a reconhecer o formato YYYYMMDD-hhmmss na função parseDateTimeBestEffort. Isso encerra #34206. #34208 (alexey-milovidov).
  • Permitir caractere de retorno de carro no meio da linha durante o parsing com o formato Regexp. Isso fecha #34200. #34205 (alexey-milovidov).
  • Permite interpretar a PRIMARY KEY do Dicionário como PRIMARY KEY (id, value); anteriormente, havia suporte apenas a PRIMARY KEY id, value. Fecha #34135. #34141 (Maksim Kita).
  • Um argumento opcional para splitByChar que limita o número de elementos resultantes. fecha #34081. #34140 (李扬).
  • Melhorando a experiência de edição de múltiplas linhas no clickhouse-client. Isso dá continuidade a #31123. #34114 (Amos Bird).
  • Adicionado suporte a UUID no formato de entrada/saída MsgPack. #34065 (Kruglov Pavel).
  • O contexto de rastreamento (para OpenTelemetry) agora é propagado por meio dos metadados do cliente GRPC (essa alteração é relevante para o protocolo cliente-servidor GRPC). #34064 (andremarianiello).
  • Suporta todos os tipos de consultas SYSTEM com a cláusula ON CLUSTER. #34005 (小路).
  • Melhorada a contabilização de memória para consultas que usam menos de max_untracker_memory. #34001 (Azat Khuzhin).
  • Corrigida a busca sem distinção entre maiúsculas e minúsculas em string UTF-8 quando caracteres minúsculos e maiúsculos são representados por diferentes números de bytes. Um exemplo é e ß. Isso fecha #7334. #33992 (Harry Lee).
  • Detectar o formato e o schema a partir da stdin no clickhouse-local. #33960 (Kruglov Pavel).
  • Trata corretamente o caso de configuração incorreta quando vários discos usam o mesmo caminho no sistema de arquivos. #29072. #33905 (zhongyuankai).
  • Tente todos os endereços IP resolvidos ao obter o proxy do S3. Proxies de S3 raramente são usados, principalmente no Yandex Cloud. #33862 (Nikolai Kochetov).
  • Suporte para a consulta EXPLAIN AST CREATE FUNCTION A consulta EXPLAIN AST CREATE FUNCTION mycast AS (n) -> cast(n as String) retornará EXPLAIN AST CREATE FUNCTION mycast AS n -> CAST(n, 'String'). #33819 (李扬).
  • Adicionado suporte para CAST de Map(Key, Value) para Array(Tuple(Key, Value)). #33794 (Maksim Kita).
  • Adiciona algumas melhorias e correções ao tipo de dado Bool. Corrige #33244. #33737 (Kruglov Pavel).
  • Interpretar e armazenar o trace-id do OpenTelemetry em ordem big-endian. #33723 (Frank Chen).
  • Melhoria nas funções da família fromUnixTimestamp64.. Agora, elas aceitam qualquer valor inteiro que possa ser convertido para Int64. Isso fecha: #14648. #33505 (Andrey Zvonov).
  • Reimplementação de _shard_num com base em constantes (veja #7624) usando a função shardNum() (veja #27020), para evitar possíveis problemas (como os encontrados em #16947). #33392 (Azat Khuzhin).
  • Habilita a aritmética binária (adição, subtração, multiplicação, divisão, least, greatest) entre Decimal e Float. #33355 (flynn).
  • Respeita os limites de cgroups na detecção automática de max_threads. #33342 (JaySon).
  • Adicionada a nova configuração do clickhouse-keeper min_session_timeout_ms. Agora, o clickhouse-keeper definirá o tempo limite da sessão do cliente com base nas configurações min_session_timeout_ms e session_timeout_ms. #33288 (JackyWoo).
  • Adicionado suporte ao tipo de dados UUID nas funções hex e bin. #32170 (Frank Chen).
  • Corrige a leitura de subcolunas com pontos nos nomes. Em particular, foi corrigida a leitura de colunas Nested quando os nomes de seus elementos contêm pontos (por exemplo, Nested(`keys.name` String, `keys.id` UInt64, values UInt64)). #34228 (Anton Popov).
  • Corrige parallel_view_processing = 0, que não funcionava ao inserir dados em uma tabela com VALUES. - Corrige view_duration_ms no query_views_log, que não estava sendo definido corretamente para visões materializadas. #34067 (Raúl Marín).
  • Corrigido o parsing da estrutura das tabelas do ZooKeeper: agora os metadados do ZooKeeper são comparados com os metadados locais em forma canônica. Isso ajuda quando os nomes canônicos das funções podem mudar entre versões do ClickHouse. #33933 (sunny).
  • Escapar corretamente alguns caracteres na interação com LDAP. #33401 (IlyaTsoi).

Melhoria de compilação/testes/empacotamento

  • Removido o suporte a compilação sem pacote. #33690 (Azat Khuzhin).
  • Garanta que os testes não dependam do resultado de uma ordenação não estável de elementos iguais. Foi adicionada, no modo de depuração, a randomização dos intervalos de itens iguais após a ordenação para evitar problemas quando dependemos da ordem de itens iguais após a ordenação. #34393 (Maksim Kita).
  • Adicionada mais verbosidade a uma verificação de estilo. #34289 (Mikhail f. Shiryaev).
  • Removido o pacote Debian clickhouse-test porque está obsoleto. #33948 (Ilya Yatsishin).
  • Várias melhorias no sistema de compilação para eliminar a possibilidade de uso ocasional de pacotes do sistema operacional e garantir compilações herméticas. #33695 (Amos Bird).

correção de bug (comportamento incorreto visível ao usuário em lançamento oficial estável ou pré-estável)

  • Corrigida a asserção ao usar allow_experimental_parallel_reading_from_replicas com max_parallel_replicas igual a 1. Isso corrige #34525. #34613 (Nikita Mikhaylov).
  • Corrige um bug raro na leitura de arrays vazios, que poderia levar ao erro Data compressed with different methods. Ele pode ser reproduzido se você tiver principalmente arrays vazios, mas nem sempre. Além disso, a leitura é realizada em ordem inversa com ORDER BY … DESC. É extremamente improvável que esse erro ocorra. #34327 (Anton Popov).
  • Corrige o resultado incorreto de round/roundBankers ao arredondar valores inteiros de tipos pequenos. Fecha #33267. #34562 (李扬).
  • Às vezes, o cancelamento de consultas não funcionava imediatamente quando líamos vários arquivos do S3 ou HDFS. Corrige #34301. Relacionado a #34397. #34539 (Dmitry Novik).
  • Corrigida a exceção Chunk should have AggregatedChunkInfo in MergingAggregatedTransform (no caso de optimize_aggregation_in_order = 1 e distributed_aggregation_memory_efficient = 0). Corrige #34526. #34532 (Anton Popov).
  • Corrige a comparação entre inteiros e números de ponto flutuante na análise de índice. Antes, isso podia fazer com que alguns grânulos fossem ignorados por engano durante a leitura. Corrige #34493. #34528 (Anton Popov).
  • Corrigido o suporte à compressão no URL engine. #34524 (Frank Chen).
  • Corrigido um possível erro ‘file_size: Operation not supported’ na autodetecção do esquema de arquivos. #34479 (Kruglov Pavel).
  • Corrige uma possível condição de corrida na exclusão da tabela. #34416 (Kseniia Sumarokova).
  • Corrige o possível erro Cannot convert column Function to mask na avaliação de função com curto-circuito. Fecha #34171. #34415 (Kruglov Pavel).
  • Corrige um possível travamento ao fazer inferência de esquema a partir de uma fonte de URL. Fecha #34147. #34405 (Kruglov Pavel).
  • No caso das UDFs, as permissões de acesso eram verificadas no nível do banco de dados em vez de no nível global, como deveria ser. Fecha #34281. #34404 (Maksim Kita).
  • Corrige a sintaxe incorreta da engine no resultado da consulta SHOW CREATE DATABASE em bancos de dados com engine Memory. Fecha #34335. #34345 (alexey-milovidov).
  • Corrigidas algumas condições de corrida extremamente raras que poderiam levar a um estado corrompido da fila de replicação e ao erro “partes sobrepostas”. #34297 (tavplubix).
  • Corrigir a largura da barra de progresso. Ela estava sendo arredondada incorretamente para um número inteiro de caracteres. #34275 (alexey-milovidov).
  • Corrige os campos current_user/current_address das informações do cliente para a comunicação entre servidores (antes deste patch, current_user/current_address eram preservados da consulta anterior). #34263 (Azat Khuzhin).
  • Corrigido vazamento de memória em caso de alguma exceção durante o processamento de consultas com optimize_aggregation_in_order=1. #34234 (Azat Khuzhin).
  • Corrige a métrica Query, que mostra o número de consultas em execução. Nos últimos lançamentos, ela estava sempre em 0. #34224 (Anton Popov).
  • Corrige a inferência de esquema para a função de tabela s3. #34186 (Kruglov Pavel).
  • Corrige uma condição de corrida rara e sem gravidade nos motores de armazenamento HDFS, S3 e URL, que pode levar a conexões adicionais. #34172 (alesapin).
  • Corrige um bug que raramente pode levar ao erro “Cannot read all data” durante a leitura de colunas LowCardinality da família de motores de tabela MergeTree que armazenam dados em um sistema de arquivos remoto como o S3 (o sistema de arquivos virtual sobre o S3 é um recurso experimental que não está pronto para produção). #34139 (alesapin).
  • Corrige inserções em tabelas distribuídas em caso de alteração no protocolo nativo. A última alteração ocorreu na versão 22.1, portanto pode haver falhas nas inserções em tabelas distribuídas após a atualização para essa versão. #34132 (Anton Popov).
  • Corrige uma possível condição de corrida no File table engine, introduzida em #33960. Fecha #34111. #34113 (Kruglov Pavel).
  • Corrigida uma pequena condição de corrida que, em casos extremamente raros, poderia causar o erro “intersecting parts” após a perda de conexão com o ZooKeeper. #34096 (tavplubix).
  • Corrigidos os inserts assíncronos no formato Native. #34068 (Anton Popov).
  • Corrige um bug que impedia o servidor de iniciar quando tanto o armazenamento de acesso replicado quanto o Keeper (embutido no clickhouse-server) eram usados. Foram introduzidas duas configurações para o timeout do socket do Keeper, em vez de usar as configurações do usuário padrão: keeper_server.socket_receive_timeout_sec e keeper_server.socket_send_timeout_sec. Corrige #33973. #33988 (alesapin).
  • Corrigido segfault ao processar arquivo ORC com rodapé corrompido. Fecha #33797. #33984 (Kruglov Pavel).
  • Corrige o parsing de IPv6 em parâmetro de consulta (prepared statements) e a conversão de IPv6 para string. Fecha #33928. #33971 (Kruglov Pavel).
  • Corrige uma falha durante a leitura de tuplas aninhadas. Corrige #33838. #33956 (Anton Popov).
  • Corrigido o uso das funções array e tuple com argumentos literais em consultas distribuídas. Antes, isso podia levar ao erro Not found columns. #33938 (Anton Popov).
  • O combinador de função de agregação -If não processava corretamente o argumento de filtro Nullable. Isso corrige #27073. #33920 (alexey-milovidov).
  • Corrige uma possível condição de corrida ao fazer leitura em disco remoto (o sistema de arquivos virtual sobre S3 é um recurso experimental e ainda não está pronto para produção). #33912 (Amos Bird).
  • Corrige travamento caso uma UDF SQL seja criada com uma lambda com argumentos que não são identificadores. Fecha #33866. #33868 (Maksim Kita).
  • Corrigido o uso de colunas esparsas (que podem ser habilitadas pela configuração experimental ratio_of_defaults_for_sparse_serialization). #33849 (Anton Popov).
  • Corrigido o erro lógico replica is not readonly na consulta SYSTEM RESTORE REPLICA quando a réplica está realmente em modo somente leitura. Corrige #33806. #33847 (tavplubix).
  • Corrigido vazamento de memória no clickhouse-keeper quando a compressão é usada (padrão). #33840 (Azat Khuzhin).
  • Corrigida a análise de índice quando não há tipos comuns disponíveis. #33833 (Amos Bird).
  • Corrigida a inferência de esquema para JSONEachRow e JSONCompactEachRow. #33830 (Kruglov Pavel).
  • Corrigido o uso de dicionários externos com a fonte redis e um grande número de chaves. #33804 (Anton Popov).
  • Corrige bug no cliente que causava ‘Connection reset by peer’ no servidor. Fecha #33309. #33790 (Kruglov Pavel).
  • Corrigida a análise da consulta INSERT INTO … VALUES SETTINGS … (…), … #33776 (Kruglov Pavel).
  • Corrigido um bug na checagem da tabela ao criar uma parte de dados no formato wide e com projeção. #33774 (李扬).
  • Corrige uma pequena condição de corrida entre count() e INSERT/merges/… no MergeTree (é possível retornar uma quantidade incorreta de linhas para SELECT com optimize_trivial_count_query). #33753 (Azat Khuzhin).
  • Lançar uma exceção quando a solicitação de listagem de diretório falhar no armazenamento HDFS. #33724 (LiuNeng).
  • Corrige mutação quando a tabela contém projeções. Isso corrige #33010. Isso corrige #33275. #33679 (Amos Bird).
  • Determina corretamente o banco de dados atual quando CREATE TEMPORARY TABLE AS SELECT é consultado dentro de uma sessão HTTP nomeada. Este é um caso de uso muito raro. Isso fecha #8340. #33676 (alexey-milovidov).
  • Permitir algumas consultas com ordenação, LIMIT BY, ARRAY JOIN e funções lambda. Isso fecha #7462. #33675 (alexey-milovidov).
  • Corrige um bug em “zero copy replication” (um recurso que está em desenvolvimento e não deve ser usado em produção) que causava duplicação de dados em caso de TTL move. Corrige #33643. #33642 (alesapin).
  • Correção de Chunk should have AggregatedChunkInfo in GroupingAggregatedTransform (no caso de optimize_aggregation_in_order = 1). #33637 (Azat Khuzhin).
  • Corrige o erro Bad cast from type ... to DB::DataTypeArray, que pode ocorrer quando a tabela tem uma coluna Nested com pontos no nome e um valor padrão é gerado para ela (por exemplo, durante um insert, quando a coluna não é listada). Continuação de #28762. #33588 (Alexey Pavlenko).
  • A exportação para arquivos lz4 foi corrigida. Resolve #31421. #31862 (Kruglov Pavel).
  • Corrige um possível travamento se group_by_overflow_mode estivesse definido como any (GROUP BY aproximado) e a agregação fosse realizada em uma única coluna do tipo LowCardinality. #34506 (DR).
  • Corrigida a inserção em tabelas temporárias por meio do protocolo cliente-servidor gRPC. Corrige #34347, problema #2. #34364 (Vitaly Baranov).
  • Corrigido o problema #19429. #34225 (Vitaly Baranov).
  • Corrigido o problema #18206. #33977 (Vitaly Baranov).
  • Este PR permite usar vários armazenamentos LDAP na mesma lista de diretórios de usuários. Isso funcionava antes, mas deixou de funcionar porque os testes de LDAP estão desativados (eles fazem parte dos testes do testflows). #33574 (Vitaly Baranov).

Lançamento do ClickHouse v22.1, 2022-01-18. Apresentação, Vídeo

Notas de atualização

  • As funções left e right antes eram implementadas no parser e agora têm funcionalidade completa. Consultas distribuídas com funções left ou right sem aliases podem lançar exceção se o cluster contiver versões diferentes do clickhouse-server. Se você estiver atualizando seu cluster e encontrar esse erro, deve concluir a atualização para garantir que todos os nós tenham a mesma versão. Você também pode adicionar aliases (AS something) às colunas nas suas consultas para evitar esse problema. #33407 (alexey-milovidov).
  • O uso de recursos por subconsultas escalares passa a ser totalmente contabilizado a partir desta versão. Com essa mudança, as linhas lidas em subconsultas escalares agora são registradas no query_log. Se a subconsulta escalar estiver em cache (repetida ou chamada para várias linhas), as linhas lidas serão contadas apenas uma vez. Essa mudança permite encerrar consultas com KILL e reportar o progresso enquanto elas executam subconsultas escalares. #32271 (Raúl Marín).

novo recurso

  • Implementar inferência de esquema para formatos de entrada de dados. Permitir omitir a estrutura (ou escrever apenas auto) em funções de tabela file, url, s3, hdfs e nos parâmetros do clickhouse-local. Permitir omitir a estrutura na consulta CREATE para os motores de tabela File, HDFS, S3, URL, Merge, Buffer, Distributed e ReplicatedMergeTree (se novas réplicas forem adicionadas). #32455 (Kruglov Pavel).
  • Detectar o formato com base na extensão do arquivo nas funções de tabela file/hdfs/s3/url e nos motores de tabela HDFS/S3/URL, além de SELECT INTO OUTFILE e INSERT FROM INFILE #33565 (Kruglov Pavel). Fecha #30918. #33443 (OnePiece).
  • Uma ferramenta para coletar dados de diagnóstico caso precise de suporte. #33175 (Alexander Burmak).
  • Descoberta automática de clusters via Zoo/Keeper. Permite adicionar réplicas ao cluster sem alterar a configuração em cada servidor. #31442 (vdimir).
  • Implementa o mecanismo de tabela Hive para acessar o Apache Hive a partir do ClickHouse. Isso implementa: #29245. #31104 (taiyang-li).
  • Adicionadas as funções de agregação cramersV, cramersVBiasCorrected, theilsU e contingency. Essas funções calculam a dependência (medida de associação) entre valores categóricos. Todas elas usam tabulação cruzada (histograma de pares) na implementação. Você pode imaginá-las como um coeficiente de correlação, mas para quaisquer valores discretos (não necessariamente numéricos). #33366 (alexey-milovidov). Implementação inicial por Vanyok-All-is-OK e antikvist.
  • Adicionada a função de tabela hdfsCluster, que permite processar arquivos do HDFS em paralelo a partir de vários nós em um cluster especificado, de forma semelhante a s3Cluster. #32400 (Zhichang Yu).
  • Adicionado suporte a discos com Azure Blob Storage como backend, de forma semelhante ao que foi feito para discos com AWS S3 como backend. #31505 (Jakub Kuklis).
  • Permite COMMENT em CREATE VIEW (em todos os tipos de VIEW). #31062 (Vasily Nemkov).
  • Reinicialize dinamicamente as portas e os protocolos de escuta quando a configuração for alterada. #30549 (Kevin Michel).
  • Adicionadas as funções left, right, leftUTF8, rightUTF8. Corrigido um erro na implementação da função substringUTF8 com offset negativo (offset a partir do fim da string). #33407 (alexey-milovidov).
  • Adicionadas novas funções para o sistema de coordenadas H3: h3HexAreaKm2, h3CellAreaM2, h3CellAreaRads2. #33479 (Bharat Nallan).
  • Adicionada a função MONTHNAME. #33436 (usurai).
  • Adicionada a função arrayLast. Fecha #33390. #33415 Adicionada a função arrayLastIndex. #33465 (Maksim Kita).
  • Adicionada a função decodeURLFormComponent, ligeiramente diferente de decodeURLComponent. Fecha #10298. #33451 (SuperDJY).
  • Permite separar as regras de rollup do GraphiteMergeTree para métricas simples e com tags (campo opcional rule_type). #33494 (Michail Safronov).

Melhoria de desempenho

  • Suporte para mover condições para PREWHERE (configuração optimize_move_to_prewhere) em tabelas com mecanismo Merge, se todas as tabelas subjacentes oferecerem suporte a PREWHERE. #33300 (Anton Popov).
  • Tratamento mais eficiente de globs para armazenamento por URL. Agora é possível consultar facilmente milhões de URLs em paralelo, com novas tentativas. Fecha #32866. #32907 (Kseniia Sumarokova).
  • Evita retrocesso exponencial no parser. Isso fecha #20158. #33481 (alexey-milovidov).
  • O uso indevido da função untuple estava levando a uma complexidade exponencial na análise de consultas (detectado por um fuzzer). Isso fecha #33297. #33445 (alexey-milovidov).
  • Reduz a memória alocada para dicionários com atributos de string. #33466 (Maksim Kita).
  • Pequena melhoria de desempenho da função reinterpret. #32587 (alexey-milovidov).
  • Alteração pouco significativa. Em casos extremamente raros, quando uma parte de dados é perdida em todas as réplicas, após a mesclagem de algumas partes de dados, as consultas subsequentes podem ignorar menos partições durante o partition pruning. Isso dificilmente afeta algo. #32220 (Azat Khuzhin).
  • Melhora o desempenho de gravação do clickhouse-keeper ao otimizar a lógica de cálculo do tamanho. #32366 (zhanglistar).
  • Otimiza a materialização de PROJECTION de uma única parte. Isso fecha #31669. #31885 (Amos Bird).
  • Melhora o desempenho de consultas às tabelas de sistema. #33312 (OnePiece).
  • Otimiza a seleção de partes do MergeTree que podem ser movidas entre volumes. #33225 (OnePiece).
  • Corrige o desempenho do dict sparse_hashed com chaves sequenciais (função de hash incorreta). #32536 (Azat Khuzhin).

Recurso experimental

  • Leitura paralela a partir de várias réplicas dentro de um shard durante uma consulta distribuída, sem usar chave de amostragem. Para habilitar isso, defina allow_experimental_parallel_reading_from_replicas = 1 e max_parallel_replicas com qualquer valor numérico. Isso fecha #26748. #29279 (Nikita Mikhaylov).
  • Implementada serialização esparsa. Ela pode reduzir o uso de espaço em disco e melhorar o desempenho de algumas consultas em colunas que contêm muitos valores padrão (zero). Ela pode ser habilitada definindo ratio_for_sparse_serialization. A serialização esparsa será escolhida dinamicamente para a coluna se a proporção entre o número de valores padrão e o número total de valores ficar acima desse limite. A serialização (padrão ou esparsa) será fixada para cada coluna em uma parte, mas pode variar entre as partes. #22535 (Anton Popov).
  • Adicionado o recurso “TABLE OVERRIDE” para personalizar os esquemas de tabelas do MaterializedMySQL. #32325 (Stig Bakken).
  • Adicionada a consulta EXPLAIN TABLE OVERRIDE. #32836 (Stig Bakken).
  • Suporte à cláusula TABLE OVERRIDE para MaterializedPostgreSQL. RFC: #31480. #32749 (Kseniia Sumarokova).
  • Alterado o caminho do ZooKeeper para as marcas zero-copy de dados compartilhados. Observe que “zero-copy replication” é um recurso não indicado para produção (ainda em estágio inicial de desenvolvimento) e que, de todo modo, você não deveria usar. Mas, caso tenha usado, tenha essa mudança em mente. #32061 (ianton-ru).
  • Suporte à cláusula Events para a consulta watch de WINDOW VIEW. #32607 (vxider).
  • Corrigido o ACL com hash numérico explícito em clickhouse-keeper: agora o comportamento é consistente com o ZooKeeper, e o digest gerado é sempre aceito. #33249 (小路). #33246.
  • Corrigida a remoção inesperada de PROJECTION ao desanexar partes. #32067 (Amos Bird).

Melhoria

  • Agora, as funções de conversão de data e hora que geram horários anteriores a 1970-01-01 00:00:00 passarão a ser limitadas a zero, em vez de causar overflow. #29953 (Amos Bird). Isso também corrige um bug na análise de índice caso a função de truncamento de data produzisse um resultado anterior ao epoch Unix.
  • Sempre mostrar o uso de recursos (uso total de CPU, uso total de RAM e uso máximo de RAM por host) no cliente. #33271 (alexey-milovidov).
  • Aprimora a serialização e a desserialização do tipo Bool e verifica o intervalo de valores. #32984 (Kruglov Pavel).
  • Se uma configuração inválida for definida com a consulta SET ou por meio dos parâmetros de consulta na requisição HTTP, a mensagem de erro incluirá sugestões semelhantes ao texto da configuração inválida (se houver). #32946 (Antonio Andelic).
  • Suporte a sugestões para nomes de configurações digitados incorretamente no clickhouse-client e no clickhouse-local. Fecha #32237. #32841 (凌涛).
  • Permite usar colunas virtuais em visões materializadas. Fecha #11210. #33482 (OnePiece).
  • Adiciona uma configuração para desativar o IPv6 no clickhouse-keeper, se necessário. Isso fecha #33381. #33450 (Wu Xueyang).
  • Adiciona mais informações a system.build_options sobre a revisão atual do Git. #33431 (taiyang-li).
  • clickhouse-local: rastrear o uso de memória com a opção --max_memory_usage_in_client. #33341 (Azat Khuzhin).
  • Permite intervalos negativos na função intervalLengthSum. O comprimento deles também será adicionado. Isso fecha #33323. #33335 (alexey-milovidov).
  • LineAsString pode ser usado como formato de saída. Isso fecha #30919. #33331 (Sergei Trifonov).
  • Adiciona suporte a <secure/> na configuração de cluster, como forma alternativa a <secure>1</secure>. Fecha #33270. #33330 (SuperDJY).
  • Ao pressionar Ctrl+C duas vezes, clickhouse-benchmark será encerrado imediatamente, sem esperar pelas consultas em execução. Isso fecha #32586. #33303 (alexey-milovidov).
  • Adicionado suporte a timestamp Unix com milissegundos na função parseDateTimeBestEffort. #33276 (Ben).
  • Permite cancelar a consulta durante a leitura de dados de tabela externa nos formatos Arrow / Parquet / ORC — antes, o cancelamento falhava no caso de arquivos grandes e com a configuração input_format_allow_seeks definida como false. Fecha #29678. #33238 (Kseniia Sumarokova).
  • Se o engine da tabela oferecer suporte à cláusula SETTINGS, permita passar as configurações como pares chave-valor ou via configuração. Adicione esse suporte ao MySQL. #33231 (Kseniia Sumarokova).
  • Impedir corretamente chaves primárias Nullable, quando necessário. Isso é para #32780. #33218 (Amos Bird).
  • Adiciona nova tentativa para conexões PostgreSQL caso ainda não tenha sido obtido nada. Fecha #33199. #33209 (Kseniia Sumarokova).
  • Validação das chaves de configuração para dicionários externos. #33095. #33130 (Kseniia Sumarokova).
  • Enviar informações do perfil no clickhouse-local. Fecha #33093. #33097 (Kseniia Sumarokova).
  • Avaliação de curto-circuito: suporte à função throwIf. Fecha #32969. #32973 (Maksim Kita).
  • (Isso só acontece em compilações não oficiais). Corrigida uma falha de segmentação ao inserir dados em colunas compactadas Decimal, String, FixedString e Array. Isso encerra #32939. #32940 (N. Kolotov).
  • Adicionado suporte para especificar uma subconsulta como uma função SQL definida pelo usuário. Exemplo: CREATE FUNCTION test AS () -> (SELECT 1). Fecha #30755. #32758 (Maksim Kita).
  • Melhorado o suporte à compressão gRPC para #28671. #32747 (Vitaly Baranov).
  • Descarrega todas as partes de dados em memória quando o WAL não estiver habilitado ao desligar o servidor ou desanexar a tabela. #32742 (nauta).
  • Permite controlar os timeouts de conexão para MySQL (anteriormente, havia suporte apenas para source de dicionário). Fecha #16669. Antes, o valor padrão de connect_timeout era muito baixo; agora ele é configurável. #32734 (Kseniia Sumarokova).
  • Suporte à opção authSource para o mecanismo de armazenamento MongoDB. Fecha #32594. #32702 (Kseniia Sumarokova).
  • Adicionado suporte ao tipo Date32 na função de tabela genarateRandom. #32643 (nauta).
  • Adicionadas as configurações max_concurrent_select_queries e max_concurrent_insert_queries para controlar consultas concorrentes por tipo de consulta. Fecha #3575. #32609 (SuperDJY).
  • Melhorado o tratamento de estruturas aninhadas com colunas ausentes ao ler dados no formato Protobuf. Em seguimento a https://github.com/ClickHouse/ClickHouse/pull/31988. #32531 (Vitaly Baranov).
  • Permitir credenciais vazias para o mecanismo MongoDB. Fecha #26267. #32460 (Kseniia Sumarokova).
  • Desativa algumas otimizações para funções de janela que podem causar exceções. Fecha #31535. Fecha #31620. #32453 (Kseniia Sumarokova).
  • Permite conectar-se ao MongoDB 5.0. Fecha #31483,. #32416 (Kseniia Sumarokova).
  • Habilita a comparação entre Decimal e Float. Corrige #22626. #31966 (flynn).
  • Adicionadas as configurações command_read_timeout e command_write_timeout para StorageExecutable, StorageExecutablePool, ExecutableDictionary, ExecutablePoolDictionary e ExecutableUserDefinedFunctions. A configuração command_read_timeout controla o tempo limite para ler dados da stdout do comando, em milissegundos. A configuração command_write_timeout controla o tempo limite para gravar dados na stdin do comando, em milissegundos. Adicionada a configuração command_termination_timeout para ExecutableUserDefinedFunction, ExecutableDictionary e StorageExecutable. Adicionada a configuração execute_direct para ExecutableUserDefinedFunction, com valor padrão true. Adicionada a configuração execute_direct para ExecutableDictionary e ExecutablePoolDictionary, com valor padrão false. #30957 (Maksim Kita).
  • As funções de agregação de bitmap retornarão o resultado correto para argumento fora do intervalo, em vez de fazer wraparound. #33127 (DR).
  • Correção da análise de consultas incorretas com a instrução FROM INFILE. #33521 (Kruglov Pavel).
  • Não permitir gravação em S3 se o caminho contiver globs. #33142 (Kruglov Pavel).
  • A opção --echo não era utilizada pelo clickhouse-client no modo batch ao executar uma única consulta. #32843 (N. Kolotov).
  • Use a opção --database no clickhouse-local. #32797 (Kseniia Sumarokova).
  • Corrigido um código surpreendentemente ruim da função SQL comum file. Agora ela oferece suporte a links simbólicos. #32640 (alexey-milovidov).
  • Atualização do modification_time da parte de dados em system.parts após a movimentação da parte #32964. #32965 (save-my-heart).
  • Possível problema, não pode ser explorado: pode ocorrer overflow de inteiro no redimensionamento de array. #33024 (varadarajkumar).

Melhorias de Compilação/Testes/Empacotamento

  • Adicionados pacotes, testes funcionais e builds do Docker para a versão AArch64 (ARM) do ClickHouse. #32911 (Mikhail f. Shiryaev). #32415
  • O ClickHouse foi preparado para ser compilado com musl-libc. Isso não é habilitado por padrão. #33134 (alexey-milovidov).
  • O script de instalação agora funciona no FreeBSD. Isso fecha #33384. #33418 (alexey-milovidov).
  • Adicionado actionlint aos workflows do GitHub Actions, com verificação dos arquivos de workflow via act --list para validar a sintaxe correta. #33612 (Mikhail f. Shiryaev).
  • Adicionados mais testes para o recurso de chave primária Nullable. Também foram adicionados testes com diferentes types e kinds de MergeTree, além de dados gerados aleatoriamente. #33228 (Amos Bird).
  • Adicionada uma ferramenta simples para visualizar testes instáveis no navegador. #33185 (alexey-milovidov).
  • Habilitada a compilação hermética para builds compartilhadas. Isso é voltado principalmente para desenvolvedores. #32968 (Amos Bird).
  • Atualizados libc++ e libc++abi para as versões mais recentes. #32484 (Raúl Marín).
  • Adicionado teste de integração para o cliente .NET externo (ClickHouse.Client). #23230 (Oleg V. Kozlyuk).
  • Informações do git foram injetadas no arquivo binário do clickhouse. Assim, fica mais fácil obter a revisão do código-fonte a partir desse arquivo binário. #33124 (taiyang-li).
  • Removido código obsoleto do ConfigProcessor. O código específico da Yandex não é mais usado. Esse código continha um pequeno defeito. O defeito foi relatado por Mallik Hassan em #33032. Isso fecha #33032. #33026 (alexey-milovidov).

Correção de bug (comportamento incorreto visível ao usuário em lançamento oficial estável ou pré-estável)

  • Várias correções na análise de formatos. Isso é relevante se o clickhouse-server permitir acesso de gravação a um invasor. Dados de entrada especialmente elaborados para o formato Native podem levar à leitura de memória não inicializada ou a um travamento. Isso é relevante se o clickhouse-server permitir acesso de gravação a um invasor. #33050 (Heena Bansal). Corrigido um problema de índice fora dos limites no tipo Union do Apache Avro, no formato binário do Apache Avro. #33022 (Harry Lee). Corrigido o desreferenciamento de ponteiro nulo em dados LowCardinality ao desserializar dados LowCardinality no formato Native. #33021 (Harry Lee).
  • O handler do ClickHouse Keeper removerá corretamente a operação após o envio da resposta. #32988 (JackyWoo).
  • Possível erro de cálculo de quotas em uma unidade: o limite da quota não foi atingido, mas acabou sendo excedido. Isso corrige #31174. #31656 (sunny).
  • Corrigido o CAST de String para IPv4 ou IPv6, e vice-versa. Corrigida a mensagem de erro em caso de falha na conversão. #29224 (Dmitry Novik) #27914 (Vasily Nemkov).
  • Corrigida uma exceção como Unknown aggregate function nothing durante a execução em um servidor remoto. Isso corrige #16689. #26074 (hexiaoting).
  • Corrige o banco de dados errado para JOIN sem banco de dados explícito em consultas distribuídas (Corrige: #10471). #33611 (Azat Khuzhin).
  • Corrigida falha de segmentação no formato Apache Avro que ocorre após a segunda inserção no arquivo. #33566 (Kruglov Pavel).
  • Corrige falha de segmentação no formato Apache Arrow caso o esquema contenha o tipo Dictionary. Fecha #33507. #33529 (Kruglov Pavel).
  • As configurações offset e limit definidas fora da consulta podem ser aplicadas incorretamente a views. Fecha #33289 #33518 (hexiaoting).
  • Corrige uma exceção Block structure mismatch que pode ocorrer durante a inserção em uma tabela com uma coluna LowCardinality aninhada com valor padrão. Corrige #33028. #33504 (Nikolai Kochetov).
  • Corrige expressões de Dicionário para os atributos mínimo e máximo de intervalo de range_hashed quando criados com DDL. Fecha #30809. #33478 (Maksim Kita).
  • Corrige possível uso após liberação durante INSERT em visão materializada com DROP concorrente (Azat Khuzhin).
  • Não tente ler após o EOF (como contorno para um bug no kernel do Linux); esse bug pode ser reproduzido nos kernels (3.14..5.9) e requer index_granularity_bytes=0 (ou seja, desative a granularidade adaptativa do índice). #33372 (Azat Khuzhin).
  • Os comandos SYSTEM SUSPEND e SYSTEM ... THREAD FUZZER não contavam com controle de acesso. Isso foi corrigido. Autor: Kevin Michel. #33333 (alexey-milovidov).
  • Correção para quando o COMMENT de dicionários não aparece em system.tables e system.dictionaries. Permite modificar o comentário do mecanismo Dictionary. Fecha #33251. #33261 (Maksim Kita).
  • Adiciona inserções assíncronas (com a configuração async_insert ativada) ao log de consultas. Antes, essas consultas não apareciam no log de consultas. #33239 (Anton Popov).
  • Corrigido o envio de expressões WHERE 1 = 0 em consultas a bancos de dados externos. Fecha #33152. #33214 (Kseniia Sumarokova).
  • Corrige a validação de DDL para MaterializedPostgreSQL. Corrige a configuração materialized_postgresql_allow_automatic_update. Fecha #29535. #33200 (Kseniia Sumarokova). Garante que slots de replicação não utilizados sejam sempre removidos. Encontrado em #26952. #33187 (Kseniia Sumarokova). Corrige o detach/attach de tabelas MaterializedPostreSQL com schema não padrão (remoção/adição à replicação). Encontrado em #29535. #33179 (Kseniia Sumarokova). Corrige o DROP do banco de dados MaterializedPostgreSQL. #33468 (Kseniia Sumarokova).
  • A métrica StorageBufferBytes às vezes era calculada de forma incorreta. #33159 (xuyatian).
  • Corrige o erro Invalid version for SerializationLowCardinality key column ao ler uma coluna LowCardinality com local_filesystem_read_prefetch ou remote_filesystem_read_prefetch habilitados. #33046 (Nikolai Kochetov).
  • Corrige a leitura de arquivo vazio na table function s3. Fecha #33008. #33037 (Kseniia Sumarokova).
  • Corrige o vazamento de Context no caso de cancel_http_readonly_queries_on_client_close (ou seja, o vazamento de tabelas externas que haviam sido enviadas ao servidor e de outros recursos). #32982 (Azat Khuzhin).
  • Corrige a saída incorreta de tuplas no formato CSV ao usar um delimitador CSV personalizado. #32981 (Kruglov Pavel).
  • Corrige a verificação da URL do HDFS, que não permitia usar o endereço HA do namenode. O bug foi introduzido em https://github.com/ClickHouse/ClickHouse/pull/31042. #32976 (Kruglov Pavel).
  • Corrigido o erro que lançava a exceção de argumento posicional fora dos limites para argumentos não posicionais. Fecha #31173#event-5789668239. #32961 (Kseniia Sumarokova).
  • Corrige UB em caso de EOF inesperado ao preencher um Set a partir de uma consulta HTTP (ou seja, se o cliente interrompesse no meio da operação, isto é, timeout 0.15s curl -Ss -F 's=@t.csv;' 'http://127.0.0.1:8123/?s_structure=key+Int&query=SELECT+dummy+IN+s' e com t.csv grande o suficiente). #32955 (Azat Khuzhin).
  • Corrige uma regressão na função replaceRegexpAll. A função se comportava incorretamente quando a substring correspondente estava vazia. Isso fecha #32777. Isso fecha #30245. #32945 (alexey-milovidov).
  • Corrigida a leitura de stripe no formato ORC. #32929 (kreuzerkrieg).
  • topKWeightedState falhava com alguns tipos de entrada. #32487. #32914 (vdimir).
  • Corrigida a exceção Single chunk is expected from view inner query (LOGICAL_ERROR) em visão materializada. Corrige #31419. #32862 (Nikolai Kochetov).
  • Corrigida a otimização com lazy seek para leituras assíncronas em sistemas de arquivos remotos. Fecha #32803. #32835 (Kseniia Sumarokova).
  • O mecanismo de tabela MergeTree podia ignorar silenciosamente algumas mutações se houvesse muitas mutações em execução ou em caso de alto consumo de memória; isso já foi corrigido. Corrige #17882. #32814 (tavplubix).
  • Evita reutilizar o cache de subconsultas escalares ao processar blocos da MV. Isso corrige um bug quando a consulta escalar faz referência à tabela de origem, mas significa que todas as subconsultas escalares na definição da MV serão calculadas para cada bloco. #32811 (Raúl Marín).
  • Corrigido um problema em que o servidor podia não iniciar se o banco de dados com engine MySQL não conseguisse se conectar ao servidor MySQL. Corrige #14441. #32802 (tavplubix).
  • Corrige a falha ao usar a função fuzzBits, fecha #32737. #32755 (SuperDJY).
  • Corrige o erro Column is not under aggregate function no caso de MV com GROUP BY (list of columns) (que é interpretado como GROUP BY tuple(...)) em Kafka/RabbitMQ. Corrige #32668 e #32744. #32751 (Nikolai Kochetov).
  • Corrige a consulta ALTER TABLE ... MATERIALIZE TTL nos modos TTL ... DELETE WHERE ... e TTL ... GROUP BY .... #32695 (Anton Popov).
  • Corrigida a otimização optimize_read_in_order nos casos em que o mecanismo de tabela é Distributed ou Merge e as tabelas MergeTree subjacentes têm uma função monótona no prefixo da chave de ordenação. #32670 (Anton Popov).
  • Corrigida a exceção LOGICAL_ERROR quando o destino de uma visão materializada é uma tabela JOIN ou uma tabela SET. #32669 (Raúl Marín).
  • A inserção no S3 com upload multipart para o Google Cloud Storage pode causar um abort. #32504. #32649 (vdimir).
  • Corrige uma possível exceção ao iniciar o armazenamento RabbitMQ, adiando a criação do canal. #32584 (Kseniia Sumarokova).
  • Corrigido o tempo de vida da tabela (ou seja, possível uso após a liberação de memória) em caso de DROP TABLE e INSERT executados em paralelo. #32572 (Azat Khuzhin).
  • Corrigidas as inserções assíncronas com os formatos CustomSeparated, Template, Regexp, MsgPack e JSONAsString. Anteriormente, as inserções assíncronas com esses formatos não liam nenhum dado. #32530 (Kruglov Pavel).
  • Correção da função groupBitmapAnd em tabela distribuída. #32529 (minhthucdao).
  • Corrige falha no JOIN encontrada pelo fuzzer, fecha #32458. #32508 (vdimir).
  • Tratamento adequado do caso de duplicação de colunas no Apache Arrow. #32507 (Dmitriy Mokhnatkin).
  • Corrige um problema de formatação ambígua de consultas distribuídas que causava erros quando algumas colunas da tabela se chamavam ALL ou DISTINCT. Isso encerra #32391. #32490 (alexey-milovidov).
  • Corrige falhas em consultas que tentam usar índices de skipping ainda não materializados. Corrige #32292 e #30343. #32359 (Anton Popov).
  • Corrigida a consulta select com falha quando há mais de 2 políticas de linha na mesma coluna, a partir da segunda consulta na mesma sessão. #31606. #32291 (SuperDJY).
  • Corrigida a conversão de timestamp Unix fracionário para DateTime64; a parte fracionária estava invertida para valores negativos de timestamp Unix (anteriores a 1970-01-01). #32240 (Ben).
  • Algumas entradas da fila de replicação podem ficar travadas por temporary_directories_lifetime (1 dia por padrão) com Directory tmp_merge_<part_name> ou Part ... (state Deleting) already exists, but it will be deleted soon ou erro semelhante. Isso foi corrigido. Corrige #29616. #32201 (tavplubix).
  • Corrigido o parsing do transformador de coluna APPLY lambda, que podia levar ao travamento do cliente/servidor. #32138 (Kruglov Pavel).
  • Corrige o base64Encode, que adicionava bytes extras ao final em strings pequenas. #31797 (Kevin Michel).
  • Corrige uma possível falha (ou resultado incorreto) em casos com argumentos LowCardinality em função de janela. Corrige #31114. #31888 (Nikolai Kochetov).
  • Corrigido travamento com o comando DROP TABLE system.query_log sync. #33293 (zhanghuajie).
Última modificação em 10 de junho de 2026