Lançamento do ClickHouse 22.12, 2022-12-15. Apresentação, Vídeo
Notas de upgrade
- Foi corrigida uma incompatibilidade retroativa na (de)serialização dos estados das funções de agregação
min,max,any*,argMin,argMaxcom argumentoString. 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 deanyState('foobar')emstate_column, então a versão incompatível exibirá'foobar\0'emanyMerge(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 deanyState('abrac\0dabra\0')emstate_column, então versões mais recentes exibirão'abrac\0dabra'emanyMerge(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 comSET 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 TABLEeSELECT 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
concatWithSeparatore o aliasconcat_ws, para compatibilidade com Spark SQL. Também foi adicionada a funçãoconcatWithSeparatorAssumeInjectivecomo uma variante para habilitar a otimização de GROUP BY, de forma semelhante aconcatAssumeInjective. #43749 (李扬). - Foram adicionadas as funções
multiplyDecimaledivideDecimalpara operações decimais com precisão fixa. #42438 (Andrey Zvonov). - Adicionada a tabela
system.movescom 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 sistemadatabases, 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
xxHash32exxHash64no 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 queshow_named_collections = 1esteja definido para que seja possível visualizá-las. #43325 (Kseniia Sumarokova). A tabelasystem.named_collectionsfoi introduzida em #43147 (Kseniia Sumarokova).
Melhoria de desempenho
- Adicionadas as configurações
max_streams_for_merge_tree_readingeallow_asynchronous_read_from_io_pool_for_merge_tree. A configuraçãomax_streams_for_merge_tree_readinglimita o número de streams de leitura para tabelas MergeTree. A configuraçãoallow_asynchronous_read_from_io_pool_for_merge_treehabilita um pool de E/S em segundo plano para fazer leituras em tabelasMergeTree. Isso pode aumentar o desempenho de queries limitadas por E/S se usada em conjunto commax_streams_to_max_threads_ratiooumax_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_filesystemnão respeitavam a granularidade adaptativa. Linhas grandes não reduziam o número de linhas lidas (como era feito paramerge_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_aggregationtiver um valor muito pequeno. O valor padrão dessa configuração foi aumentado para10^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_resultsestiver 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
CREATEpara evitar falhas durante o carregamento na inicialização. Além disso, agora as UDFs podem ser usadas como expressõesDEFAULTpara 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_xnão exige mais a serialização manual do valor do parâmetro como string. Por exemplo, a consultaSET param_a = '[\'a\', \'b\']'agora pode ser escrita comoSET 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).
filesystemAvailablee funções relacionadas passam a oferecer suporte a um argumento opcional com o nome do disco, efilesystemFreeé alterada parafilesystemUnreserved. 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_rulesno 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
unhexagora é compatível com argumentosFixedString. 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
S3e na função de tabelas3, com os formatosParquet,ArroweORC. #43329 (chen). - Adicionada a coluna
table_uuidà tabelasystem.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-orderem um plano de consulta. Ela vem habilitada por padrão (mas funciona apenas em conjunto comoptimize_aggregation_in_order, que vem desabilitado por padrão). Definaquery_plan_aggregation_in_order = 0para usar a versão anterior baseada em AST. #43592 (Nikolai Kochetov). - Permite coletar profile events com
trace_type = 'ProfileEvent'emsystem.trace_loga cada incremento, com a pilha de chamadas atual, o nome do profile event e o valor do incremento. Isso pode ser habilitado pela configuraçãotrace_profile_eventse usado para investigar o desempenho das consultas. #43639 (Anton Popov). - Adicionada a nova configuração
input_format_max_binary_string_sizepara 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 functionhdfsCluster. #43236 (chen). - Corrige o suporte de
s3ao caractere curinga?. Fecha #42731. #43253 (chen). - Corrige as funções
arrayFirstOrNullearrayLastOrNullpara que retornemnullquando o array contém elementosNullable. #43274 (Duc Canh Le). - Corrige a contabilização incorreta de
UserTimeMicroseconds/SystemTimeMicrosecondsrelacionada às tabelas Kafka. #42791 (Azat Khuzhin). - Não suprima exceções em discos
web. Corrija as retentativas do discoweb. #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çãoUNKNOWN_TABLEouTABLE_IS_DROPPEDe 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
LowCardinalityao usar execução de função em curto-circuito. #43311 (Kruglov Pavel). - Corrigidas consultas com
SAMPLE BYe otimização de prewhere em tabelas que usam o mecanismoMerge. #43315 (Antonio Andelic). - Verifique e compare o conteúdo do arquivo
format_versionemMergeTreeDatapara 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_parametersestá definido. #43350 (Nikolay Degterinsky). MaterializeMySQL(recurso experimental) oferece suporte ao DDL:drop table t1, t2e é compatível com a maior parte do DDLDROPdo MySQL. #43366 (zzsmdfj).session_log(recurso experimental): Corrigida a impossibilidade de fazer login (devido à falha na criação da entradasession_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 Nothingnas funçõesif/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+LIMITpode retornar menos linhas do que o esperado. Corrige #43377. #43410 (Igor Nikonov). - Corrigido
sumMapparaNullable(Decimal(...)). #43414 (Azat Khuzhin). - Corrige
date_diffpara 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-copieratualizar o status eattach_is_doneno 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
s3Clusterlança o erroNOT_FOUND_COLUMN_IN_BLOCK. Fecha #43534. #43629 (chen). - Corrige o possível erro lógico
Array sizes mismatchedao 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 BYdistribuído com uma colunaALIASentre 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 SETTINGcomON 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
Joinno lado direito ao usarUSING. #43963 (Vladimir C). Corrige um bug na ordem incorreta das chaves no mecanismo de tabelaJoin. #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
JSONExtractagora 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
HudieDeltaLakeem modo somente leitura, apenas para tabelas no S3. #41054 (Daniil Rubin, Kseniia Sumarokova). - Adicionada a função de tabela
hudiedeltaLake. #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_plainpara operações de gravação única e múltiplas leituras. Implementa oATTACHde tabelaMergeTreeno discos3_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
csnppara criar snapshots manualmente no ClickHouse Keeper. Além disso,lgiffoi 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çãorandno 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_onlypara otimizar partes antigas apenas no nível da partição inteira. #42659 (Antonio Andelic). - Adicionada uma implementação genérica para
named collectionsestruturadas arbitrárias, tipo de acesso esystem.named_collections. #43147 (Kseniia Sumarokova).
Melhoria de desempenho
- A função
matchpode 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
Objectdentro de outros tipos, comoArray(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_readonlyemsystem.table_functionspara 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_metricspassa a ter documentação incorporada. Essa documentação também é exportada para o Prometheus. Foi corrigido um erro nas métricas de discoscache: elas eram calculadas apenas para um discocachearbitrá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_logquanto em/var/log/clickhouse-server/*.loge 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/ttyestiver 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
FixedStringnas funções de codificação em base64. #42285 (ltrk2). - Adicionadas as colunas
bytes_on_diskepathasystem.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_functionstem 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
tokenspara permitir definir o número máximo de tokens retornados por funções relacionadas (desabilitado por padrão). #42673 (李扬). - Permite o uso de argumentos
Date32nas funçõesformatDateTimeeFROM_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
FailedAsyncInsertQuerypara inserts assíncronos. #42814 (Krzysztof Góralski). - Implementada a otimização
read-in-ordersobre o plano de consulta. Ela vem habilitada por padrão. Definaquery_plan_read_in_order = 0para 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
osse o mecanismo de tabelaOSS(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_SCHEMApara 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 functions3Cluster. #43131 (chen). - Correção da inferência de esquema no
s3Clustere melhoria nohdfsCluster. #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_ERRORArguments 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)Int128e(U)Int256foram corretamente verificados emPREWHERE. #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
webquando o arquivo não existe (ou emOPTIMIZE TABLE FINAL, que também pode eventualmente apresentar o mesmo erro). #42767 (Azat Khuzhin). - Corrige o mapeamento de
auth_typeemsystem.session_log, incluindoSSL_CERTIFICATEentre 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/upperUTF8nos 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
PostgreSQLcaso 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
ifno 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
indentproduzido pela ferramentagit-importfoi calculado incorretamente. Veja https://clickhouse.com/docs/getting-started/example-datasets/github/. #43191 (Alexey Milovidov). - Corrigido o comportamento inesperado dos tipos
Intervalcom 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 TIMEOUTparaLIVE 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çõesUSE. 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
S3como 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_namepara 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
javaHashpassou a oferecer suporte a inteiros. #41131 (JackyWoo). - Adicionar suporte ao OpenTelemetry em DDL ON CLUSTER (requer que
distributed_ddl_entry_format_versionseja 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 (comwait_for_async_insert=0)) para melhor introspecção. #42040 (Anton Popov). - Adicionado suporte aos métodos
lz4,bz2esnappynoAccept-Encodingdo 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
insertFromde ColumnAggregateFunction para compartilhar Aggregate State em alguns casos. #41960 (flynn). - Escrita mais rápida em disks
azure_blob_storage(respeitamax_single_part_upload_sizeem 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 comenable_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 comallow_no_password, ela impede a criação de um usuário sem senha, a menos queIDENTIFIED WITH no_passwordseja 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 comoSELECT * FROM (EXPLAIN PIPELINE SELECT col FROM TABLE ORDER BY col)passaram a ser válidas. #40630 (Vladimir C). - Permite alterar
async_insert_max_data_sizeouasync_insert_busy_timeout_msno 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/Mapnão funcionavam nesses casos, e usá-los gerava uma exceção comoState 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à tabelasystem.diskspara 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 usarFZF_DEFAULT_OPTS/SKIM_DEFAULT_OPTIONSpara 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 existentetryBase64Decode. #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 comLIMITpequeno. #41852 (Vitaly Baranov). - Não adicione a exceção “TABLE_IS_DROPPED” ao
system.errorsse ela ocorrer durante um SELECT em uma tabela de sistema e for ignorada. #41908 (AlfVII). - Melhorada a opção
enable_extended_results_for_datetime_functionspara retornar resultados do tipo DateTime64 para as funçõestoStartOfDay,toStartOfHour,toStartOfFifteenMinutes,toStartOfTenMinutes,toStartOfFiveMinutes,toStartOfMinuteetimeSlot. #41910 (Roman Vasin). - Aprimora a inferência do tipo
DateTimepara formatos de texto. Agora, ela respeita a configuraçãodate_time_input_formate 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 comocount(*). 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
Datefora do intervalo em CSV. #42044 (Andrey Zvonov). parseDataTimeBestEffortagora 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
Date32na 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
Date32na funçãodateName. #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_CRONFILEpara evitar a execução do comandosede o consequente erro de arquivo não encontrado durante a instalação. #42081 (Chun-Sheng, Li). - Atualizado o cctz para
2022epara 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
LowCardinalitycom tipos inteiros grandes. #42342 (Duc Canh Le). - Várias correções no disco
web. #41652 (Kseniia Sumarokova). - Corrige um problema que faz o
docker runfalhar sehttps_portnã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 BYouGROUP BYem colunas do prefixo da chave de ordenação, envolvidas em funções monotônicas, com a otimização “read in order” habilitada (configuraçõesoptimize_read_in_ordereoptimize_aggregation_in_order). #41701 (Anton Popov). - Corrige uma possível falha em
SELECTda tabelaMergecom a configuraçãooptimize_monotonous_functions_in_order_byhabilitada. 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
ReplicatedMergeTreese 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_credentialsna 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
ReplicatedMergeTreede iniciar a replicação. Corrige #40957. #41981 (Alexander Tokmakov). toDateTime64agora 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
bzip2em arquivosbzip2específicos. #42046 (Nikolay Degterinsky). - Corrigida a função SQL
toLastDayOfMonthcom 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=readao 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
runningDifferenceao usá-la com o tipoDate32. Anteriormente, era usadoDate, o que podia causar alguns erros lógicos, comoBad 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çãoaggregate_functions_null_for_emptyna configuração do servidor. Isso encerra #41647. #42198 (Alexey Milovidov). - Corrige a leitura de tabelas
Bufferem 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, masbackground_merges_mutations_concurrency_rationão. #42315 (nvartolomei). ALTER UPDATEde uma parte anexada (com colunas diferentes do esquema da tabela) poderia criar metadadoscolumns.txtinvá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_filtersnão era aplicada ao armazenamentoDistributed. 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).
AggregateFunctionQuantileagora funciona corretamente com colunas UInt128. Antes, o estado de quantile interpretava colunasUInt128comoInt128, o que poderia levar a resultados incorretos. #42473 (Antonio Andelic).- Corrige o erro de asserção bad_cast durante INSERT em índices
Annoysobre colunas que não são Float32. Os índicesAnnoysã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_Casteaccurate_CastOrNull(elas diferem deaccurateCasteaccurateCastOrNullpelo sublinhado no nome e não são afetadas pelo valor da configuraçãocast_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
MeiliSearchparameilisearch. #40709 (Alexey Milovidov). - Adicionado um teste para garantir que toda nova função seja documentada. Veja #40649. As funções
lemmatize,synonyms,stemnã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 DISTINCTeEXCEPT DISTINCT. #40792 (Duc Canh Le). - Adiciona o novo formato de entrada/saída
JSONObjectEachRow- Suporte à importação nos formatosJSON/JSONCompact/JSONColumnsWithMetadata. Adiciona a nova configuraçãoinput_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çãoinput_format_json_validate_utf8; quando ela está habilitada, todos os formatosJSONvalidam sequências UTF-8. Ela ficará desabilitada por padrão. Observe que essa configuração não afeta os formatos de saídaJSON/JSONCompact/JSONColumnsWithMetadata; eles sempre validam sequências UTF-8 (essa exceção foi feita por motivos de compatibilidade). - Adiciona a nova configuraçãoinput_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çãooutput_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_sizeao 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_ordernos casos em que algumas colunas da chave de ordenação permanecem constantes após a aplicação da cláusulaWHERE. Por exemplo, em uma consulta comoSELECT ... FROM table WHERE a = 'x' ORDER BY a, b, em quetabletem a seguinte definição de armazenamento:MergeTree ORDER BY (a, b). #38715 (Anton Popov). - Filtrar mutuamente os fluxos unidos de
full_sorting_joinantes 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
copynativo quando possível, em vez de copiar pela memória doclickhouse-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 (
uniqStatedo 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
ReplicatedMergeTreeficarã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_functionspara 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 porcatboostEvaluate(). #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
SETTINGSna consultaDELETE .... #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:NumberOfDetachedPartseNumberOfDetachedByUserParts. #40779 (Sema Checherinda). - Permite CONSTRAINTs para tabelas ODBC e JDBC. #34551 (Alexey Milovidov).
- N’ão imprima
SETTINGSmais 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_hostapenas 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--structurenã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,Datepara 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
Mergebaseada emViewnã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
DatecomoDateTimeeDateTime64. Isso implementa a melhoria proposta em #36949. #40474 (Alexey Milovidov). - Permite a conversão de
StringcomDateTime64, como2022-08-22 01:02:03.456, paraDateeDate32. Permite a conversão deStringcomDateTime, como2022-08-22 01:02:03, paraDate32. 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
urlquando 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
%zpara formatar o offset do fuso horário emformatDateTime. #40736 (Cory Levy). - O modo interativo do
clickhouse-clientagora 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
DELETEeUPDATEpara o armazenamentoEmbeddedRocksDB. #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_filesde 1 para 0 ou de 0 para 1. #41330 (Kseniia Sumarokova). - Adicionada a configuração
allow_suspicious_fixed_string_typespara impedir que os usuários criem colunas do tipo FixedString com tamanho > 256. #41495 (Duc Canh Le). - Adicionado
has_lightweight_deleteao system.parts. #41564 (Kseniia Sumarokova).
Melhorias de compilação/testes/empacotamento
- Passar a exigir documentação para cada configuração. #40644 (Alexey Milovidov).
- Exigir documentação para todas as métricas atuais. #40645 (Alexey Milovidov).
- Passou a exigir documentação para cada contador de eventos de profile. A documentação foi escrita onde faltava. #40646 (Alexey Milovidov).
- Permite uma compilação mínima do
clickhouse-localao corrigir algumas dependências. #40460 (Alexey Milovidov). Ele tem menos de 50 MiB. - Calcule e informe a cobertura de funções SQL nos testes. #40593. #40647 (Alexey Milovidov).
- Exigir documentação para cada configuração do MergeTree. #40648 (Alexey Milovidov).
- Um protótipo de documentação de referência integrada para componentes uniformes de alto nível do servidor. #40649 (Alexey Milovidov).
- Verificaremos todas as consultas dos testes de desempenho modificados para garantir que todas as consultas modificadas foram testadas. #40322 (Nikita Taranov).
- Correção dos pacotes TGZ. #40681 (Mikhail f. Shiryaev).
- Corrigidos os símbolos de depuração. #40873 (Azat Khuzhin).
- A configuração de CI foi ampliada para criar uma compilação x86 apenas com SSE2. Útil para hardware antigo ou embarcado. #40999 (Robert Schulze).
- Atualizado para llvm/clang 15. #41046 (Azat Khuzhin).
- Continuação de #40938. Corrige a violação de ODR na classe
Loggers. Corrige #40398 e #40937. #41060 (Dmitry Novik). - Adiciona binários do macOS aos assets de lançamento no GitHub, corrigindo #37718. #41088 (Mikhail f. Shiryaev).
- A biblioteca c-ares agora faz parte do sistema de compilação do ClickHouse. #41239 (Robert Schulze).
- Remova o
dlopendo código principal do ClickHouse. Ele permanece no library-bridge e no odbc-bridge. #41428 (Alexey Milovidov). - Não permita
dlopenno binário principal do ClickHouse, pois isso é prejudicial e inseguro. Não o usamos. Mas ele pode ser usado por algumas bibliotecas para implementar “plugins”. Desencorajamos veementemente a técnica ultrapassada de carregar bibliotecas perigosas e não controladas de terceiros no espaço de endereçamento do processo, porque isso é insano. #41429 (Alexey Milovidov). - Adicionado o campo
sourceaos pacotes .deb,nfpmatualizado. #41531 (Mikhail f. Shiryaev). - Suporte ao DWARF-5 no parser DWARF interno. #40710 (Azat Khuzhin).
- Adicionar injeção de falhas no cliente do ZooKeeper para testes #30498 (Alexander Tokmakov).
- Adição de testes sem estado com armazenamento S3, debug e tsan #35262 (Kseniia Sumarokova).
- Teste de estresse com S3 #36837 (alesapin).
- Habilitar
concurrency-mt-unsafenoclang-tidy#40224 (Alexey Milovidov).
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
categorialInformationValuetinha 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
encryptecontingencyquando 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
Nestedausentes 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
Bufferrecursivas. 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 oOvercommitTracker, porque oProcessList::mutexjá 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_regexpnã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 outrosDESCRIBE 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_logcom 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_orderejoin_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
OFFSETem uma subconsulta e a cláusulaWHEREna 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_keyativado. 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 COLUMNcom colunas do tipoObject. #41290 (Anton Popov). - Corrigido o erro “No node” ao fazer SELECT em
system.distributed_ddl_queuequando não hádistributed_ddl.pathna configuração. Corrige #41096. #41296 (young scott). - Corrige o erro lógico incorreto
Expected relative pathno 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_inserthabilitada) em colunas do tipoObject. 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 forReplicatede o nome do cluster e o nome do banco de dados forem iguais. Por causa disso,DROP PARTITION ON CLUSTERfuncionava de forma inesperada comReplicated. Isso foi corrigido; agora, a cláusulaON 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 QUERYou 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 BYe1500 <= LIMIT <= max_block_sizepodiam 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 stuckem consultas comOFFSET. O erro foi identificado comenable_optimize_predicate_expression = 0e uma condição sempre falsa na cláusulaWHERE. 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
Date32eDateTime64ampliado 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 valor1899-01-01era ajustado para1925-01-01, na nova versão ele será ajustado para1900-01-01. Isso altera o comportamento do arredondamento comtoStartOfIntervalse você passarINTERVAL 3 QUARTERaté 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 FROMem 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ísticarows_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
s3Clusterem tabelas com engineDistributedeReplicated#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 inferirInt64em vez deFloat64. -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çõesnow64InBlocknemtodayInBlock. #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
OrdinaryparaAtomic. Crie um arquivo vazioconvert_ordinary_to_atomicno diretórioflags, e todos os bancos de dadosOrdinaryserã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_limitpara 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
SLRUpara 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).
DISTINCTem ordem comORDER 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 + usarDistinctSortedChunkTransformpara o distinct final quando as colunas deDISTINCTcorresponderem às colunas deORDER BY, mas renomeá-lo paraDistinctSortedStreamTransformemEXPLAIN PIPELINE→ isso melhora significativamente o uso de memória + remover alocações desnecessárias no loop crítico emDistinctSortedChunkTransform. #39432 (Igor Nikonov). UsarDistinctSortedTransformsomente quando a descrição de ordenação for aplicável às colunas deDISTINCT; caso contrário, recorrer à implementação comum deDISTINCT+ isso permite fazer menos verificações durante a execução deDistinctSortedTransform. #39528 (Igor Nikonov). Correção:DistinctSortedTransformnã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 umDISTINCTcomum (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
clustere 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
AggregateFunctione as representações de estado, porque otimizações como #35788 tratarãocount(not null columns)comocount(), 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 colunainternal, permitido que o usuário defina o ID da operação, adicionadas as colunasnum_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 consultasCREATE TABLE ... ON CLUSTERpodem ser normalizadas primeiro no iniciador sedistributed_ddl_entry_format_versionestiver definido como 3 (valor padrão). Isso significa que consultasON CLUSTERpodem não funcionar se o iniciador não pertencer ao cluster especificado na consulta. Corrige #37318, #39500 - Ignora a cláusulaON CLUSTERse o banco de dados forReplicatede o nome do cluster for igual ao nome do banco de dados. Relacionado a #35570 - Pequenas correções diversas no engine de banco de dadosReplicated- Verifica a consistência dos metadados ao iniciar o banco de dadosReplicatede 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).
timeSlotsagora 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 SEMIeLEFT ANTIcom tabelasEmbeddedRocksDB. #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--savee--loadpara 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,truepor padrão. #39755 (Antonio Andelic). - Passa a oferecer suporte à análise de chave primária para
row_policy_filtereadditional_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,parseDateTime64BestEffortUSOrNulleparseDateTime64BestEffortUSOrZero, fechando #37492. #40015 (Tanya Bragin). - Amplie o
system.processors_profile_logcom mais informações, como o número de linhas de entrada. #40121 (Amos Bird). - Exibir o tempo no servidor em
clickhouse-benchmarkpor 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--randomizede--randomize 1para 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=breakethrow). Por exemplo, se você configuroumax_rows_to_readcomread_overflow_mode = 'break', observar o valor do contadorOverflowBreakpermitirá 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:
FilesystemCacheSizeeFilesystemCacheElements. #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 comoconfe 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çãoexternemregisterFunctions.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
chownpara 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
INfor usado com uma tabela comENGINE = Setque 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 BYpara corresponder aoORDER BYdas projeções (antes, ele simplesmente retornava um resultado não ordenado). #38725 (Azat Khuzhin). - Não otimize funções em instruções
GROUP BYse 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
Tuplevazio. Fecha #39051 Adiciona 2 novas configuraçõesinput_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 astd::terminate). #39458 (Kruglov Pavel). - Corrigido o armazenamento de colunas do tipo
Objectna 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-overflowno 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') quandoO_DIRECTestá habilitado (pela configuraçãomin_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 INDEXcomON CLUSTERou em banco de dadosReplicatedeReplicatedMergeTree. 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 comROWS 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_stringeoutput_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
metado 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
EmbeddedRocksDBpor 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_DATAcomlocal_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
mkdirdo 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
hashIde o parâmetrosaltque não estava sendo usado. #40002 (Raúl Marín). - Os operadores
EXCEPTeINTERSECTpodem 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óriotmp-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
arrayDifferenceem `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_argumentspor padrão. Ela permite consultas comoSELECT ... 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_quotespor padrão. Veja #37096. (Kruglov Pavel). - O motor de banco de dados
Ordinarye a sintaxe antiga de definição de armazenamento para tabelas*MergeTreeestão obsoletos. Por padrão, não é possível criar novas databases com o engineOrdinary. Se a databasesystemusar o engineOrdinary, ela será convertida automaticamente paraAtomicna inicialização do servidor. Há configurações para manter o comportamento anterior (allow_deprecated_database_ordinaryeallow_deprecated_syntax_for_merge_tree), mas elas podem ser removidas em lançamentos futuros. #38335 (Alexander Tokmakov). - Forçe a reescrita de
comma joinparainnerpor padrão (defina o valor padrãocross_to_inner_join_rewrite = 2). Para manter o comportamento anterior, definacross_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
directpara tabelasEmbeddedRocksDB; 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 tabelaMongoDB. #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çãoadditional_result_filter, que especifica uma condição de filtragem adicional para o resultado da consulta. Fecha #37918. #38475 (Nikolai Kochetov). - Adiciona a configuração
compatibilitye a tabela de sistemasystem.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)etranslateUTF8(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_serveremax_remote_write_network_bandwidth_for_server. #39095 (Sergei Trifonov). - Adicionada a configuração
group_by_use_nullspara 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
SELECTno banco de dadossystem. Detalhes: #38970 (Vitaly Baranov). - As funções
multiMatchAny,multiMatchAnyIndex,multiMatchAllIndicese suas variantes aproximadas agora aceitam um argumento de Array de padrões não constante. #38485 (Robert Schulze). A função SQLmultiSearchAllPositionsagora aceita argumentos de substring de busca não constantes. #39167 (Robert Schulze). - Adiciona a configuração
zstd_window_log_maxpara 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
ALTERpara tabelasHive. #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
urlvia SQL. Fecha #37897. #38176 (Kseniia Sumarokova). - Adicionado o binário
clickhouse-diagnosticsaos pacotes. #38647 (Mikhail f. Shiryaev).
Funcionalidade experimental
- Adiciona a nova configuração
implicit_transactionpara 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 doMergeTreee das funções de janela usando a versão em lote deBinaryHeap. #38022 (Maksim Kita). - Maior paralelismo na execução de consultas com
FINAL#36396 (Nikita Taranov). - Corrige uma regressão significativa no desempenho de
joinintroduzida em #35616. É curioso que consultasjoincomuns, 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
copyOverlap32Shuffleotimizado 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 deORDER 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_tracequando 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_logfoi 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_namespara evitar reescrever o nome do identificador ao reescrever múltiplos JOINs, fecha #34697. #38149 (Vladimir C).
- Adicionada a configuração
- 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_defineddurante 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 emstore/(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 CACHEpara mostrar as configurações de cache da config. Adiciona a consultaSHOW CACHESpara 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).
filesystemAvailablee funções semelhantes agora funcionam noclickhouse-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 fileno ClickHouse client / local (semelhante ao psql \i). #38813 (Kseniia Sumarokova). - Nova opção
optimize = 1emEXPLAIN 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_hashde 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 deremoveFileIfExists, o que na prática comprometia aproximadamente metade da funcionalidade deremove. Detecção automática da APIDeleteObjectsdo S3, que não é compatível com o GCS. Isso permitirá usar o GCS sem precisar definir explicitamentesupport_batch_delete=0na 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_closena conexão do engine PostgreSQL. Fecha #31486. #38363 (Kseniia Sumarokova). - Permitir o modificador
NULLna declaração de colunas em funções de tabela. #38816 (Kruglov Pavel). - Desative
mutations_finalizing_taskantes do desligamento para evitar erros benignosTABLE_IS_READ_ONLYao 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
rewriteemEXPLAIN 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 ferramentaclickhouse-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.errorsquando o disco não for rotacional. #39216 (Raúl Marín). - A métrica
result_bytespara consultasINSERTemsystem.query_logmostra o número de bytes inseridos. Antes, esse valor estava incorreto e era armazenado com o mesmo valor deresult_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
RabbitMQsem os argumentos padrãox-max-lengthex-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|noarchpara 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/Decimal256com 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
mapUpdateemapFilterao usar um argumentomapconstante. Fecha #38547. #38553 (hexiaoting). - Corrige as informações de monotonicidade de
toHourpara 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
seekno 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_directorypara 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
LowCardinalityna funçãotuple. Antes, o tipoLowCardinalityera removido, e os elementos da tupla criada ficavam com o tipo subjacente deLowCardinality. #39113 (Anton Popov). - Corrige o erro
Block structure mismatch, que podia ocorrer ao fazerINSERTem uma tabela comMATERIALIZED VIEWanexada e com a configuraçãoextremes = 1habilitada. Fecha #29759 e #38729. #39125 (Nikolai Kochetov). - Corrige um resultado inesperado de consulta quando
optimize_trivial_count_queryeempty_result_for_aggregation_by_empty_setestão ambos definidos como true. Isso corrige #39140. #39155 (Amos Bird). - Corrigido o erro
Not found column Type in blockemSELECTs comPREWHEREe 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
MergeTreeque armazenam dados no S3. #37978 (Anton Popov). - Corrige possível travamento em
Distributedcom 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 (aTuple(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 Chunkno 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
DISTINCTeLIMIT. 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
rankCorrfuncionará corretamente mesmo que alguns argumentos sejam NaN. Isso corrige #38396. #38722 (Alexey Milovidov). - Corrigido
parallel_view_processing=1comoptimize_trivial_insert_select=1. Corrigidomax_insert_threadsao 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
secondscomo 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_objectspor 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 (’') 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 comROLLUP,CUBEouGROUPING 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,ILIKEematch. #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_defaultque permite inserir NULL como valor padrão no formato Avro. Fecha #18925 Fecha #37378 Fecha #32899. #37525 (Kruglov Pavel). - Adicionada a ferramenta
clickhouse-diskspara 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
SALTemCREATE 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_linespara permitir pular um número especificado de linhas no início do arquivo nos formatos CSV/TSV. #37537 (Kruglov Pavel). - A função
showCertificatemostra 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
POPULATEparaWINDOW VIEW. #36945 (vxider). - Adiciona suporte a
ALTER TABLE ... MODIFY QUERYparaWINDOW VIEW. #37188 (vxider). - Este PR altera o comportamento da sintaxe
ENGINEemWINDOW VIEWpara deixá-lo igual ao deMATERIALIZED 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
selectde 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çãoinput_format_skip_unknown_fieldspor padrão, porque, caso contrário, ao fazerselectde 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_serializationem tabelasMergeTree) são usadas como argumentos em funções de agregação. #37617 (Anton Popov). - Otimizada a função
COALESCEcom dois argumentos. #37666 (Anton Popov). - Substitui
multiIfporifquandomultiIftem apenas uma condição, pois a funçãoiftem melhor desempenho. #37695 (Anton Popov). - Melhora o desempenho das funções
dictGetDescendantsedictGetChildren, 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 especificarBIDIRECTIONALpara atributosHIERARHICAL; o dicionário manterá em memória um índice de pai para filhos, de modo que as funçõesdictGetDescendantsedictGetChildrennã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 100ficou 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
hasAllusando 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
notcom 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
threadpoolao 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
_filee_pathao 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
Stringem vez deBinarynos 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_inferenceao total de linhas lidas em todos os arquivos dos globs. Anteriormente, a configuraçãoinput_format_max_rows_to_read_for_schema_inferenceera aplicada separadamente a cada arquivo no glob e, no caso de um grande número de valores nulos, poderíamos ler as primeirasinput_format_max_rows_to_read_for_schema_inferencelinhas 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
CLUSTERseparado (e a diretiva de configuraçãoaccess_control_improvements.on_cluster_queries_require_cluster_grant, para manter compatibilidade com versões anteriores, com padrãofalse). #35767 (Azat Khuzhin). - Adicionado suporte à inferência de esquema para
hdfsCluster. #35812 (Nikita Mikhaylov). - Implementar o algoritmo de balanceamento de carga
least_usedpara 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-Summaryquandosend_progress_in_http_headers=0(antes, retornava apenas zeros). - Modifique o endpoint HTTP para retornar o cabeçalhoX-ClickHouse-Exception-Codequando o progresso tiver sido enviado anteriormente (send_progress_in_http_headers=1) - Modifique o endpoint HTTP para retornarHTTP_REQUEST_TIMEOUT(408) em vez deHTTP_INTERNAL_SERVER_ERROR(500) em casos de erroTIMEOUT_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 tipoNothing; agora, essas consultas retornam um array vazio do tipoArray(Nothing). Também foi adicionado suporte a arrays de tipos Nullable em funções como arrayFilter/arrayFill. Antes, consultas comoselect 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 NULLlogo 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_microsecondspara 5 segundos. Adicione informações sobreOvercommitTrackerà mensagem da exceção de OOM. Adicione o evento de perfilMemoryOvercommitWaitTimeMicroseconds. #37460 (Dmitry Novik). - Não exibir
-0.0como 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
ProfileEventspara inspecionar o tipo das partes gravadas (inseridas ou mescladas) (Inserted{Wide/Compact/InMemory}Parts,MergedInto{Wide/Compact/InMemory}Parts. Adicionada a colunapart_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
dumpColumnStructurena 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_deleteparaDiskS3a 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,dictGetDescendantspassaram a oferecer suporte ao atributoHIERARCHICALNullable 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_tmpao 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_partestiver 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 OPTIONagora permite queAexecuteGRANT CREATE VIEW ON test.* TO B. #38017 (Vitaly Baranov).
Melhorias de compilação/testes/empacotamento
- Usar
clang-14e a versão 14 da infraestrutura LLVM para compilações. Isso fecha #34681. #34754 (Alexey Milovidov). Observação: oclang-14tem 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 ... INTERSECTeEXCEPT SELECTcom tipos String constantes. #37738 (Antonio Andelic). - Corrige
GROUP BYdeAggregateFunction(ou seja, você fazGROUP BYna coluna que tem o tipoAggregateFunction). #37093 (Azat Khuzhin). - (WINDOW VIEW experimental) Corrige
addDependencyem 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
addDependencydo construtor parastartup()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
Objectexperimental) Corrige alguns casos de inserção de arrays aninhados em colunas do tipoObject. #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 SETSfor usado comROLLUPouCUBE. #37367 (Dmitry Novik). - Corrigido LOGICAL_ERROR em getMaxSourcePartsSizeForMerge durante as mesclagens (caso tenham sido especificados em
config.xml(nova forma), e não emusers.xml(forma descontinuada), valores não padrão mais altos debackground_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_ordercomGROUPING SETS(corrigeLOGICAL_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 FILLcom intervalos negativos na cláusulaSTEP. 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 tableem 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_byem consultas distribuídas. Corrige #36037. #37724 (Anton Popov). - Corrige um possível erro lógico:
Invalid Field get from type UInt64 to type Float64na função de tabelavalues. 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
toStringem DatatypeDate32. #37775 (LiuNeng). - A configuração
dead_session_check_period_msdo 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_requestsesteja desabilitado). #37826 (Azat Khuzhin). - (WINDOW VIEW experimental) Não remova a tabela de destino interna ao executar
ALTER TABLE ... MODIFY QUERYno 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 FILLquandoORDER BYdeve ser aplicado após o resultado deWITH FILL(por exemplo, em uma consulta externa). O resultado incorreto era causado pela otimização de expressões deORDER 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
DateTime64antes 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
OPTIMIZEnão incrementam mais as métricasSelectedRowseSelectedBytes. Eles (ainda) continuarão incrementandoMergedRowseMergedUncompressedBytes, 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-cfb128eaes-256-cfb128foram removidas porque não estão incluídas na versão do BoringSSL certificada para FIPS. - A configuração
max_memory_usagefoi removida do perfil de usuário padrão emusers.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_threadsagora 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 emquery_thread_logpassou 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,h3Distanceeh3HexRing. #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_rowsetotal_bytesemsystem.tablespara tabelas temporárias. #36401. #36439 (xiedeyantu). - Permite sobrescrever
parts_to_delay_inserteparts_to_throw_insertcom 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
WATCHno WindowView: 1. Reduz a latência na disponibilização dos resultados da consulta ao acionar o sinalfire_condition. 2. Torna a operação de cancelamento da consulta (ctrl-c) mais rápida, verificandoisCancelled()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
wyHash64para 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çãoFORCE. #36639 (Kseniia Sumarokova). - Melhoria para dados semiestruturados: permite converter colunas do tipo
Object(...)emObject(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
avgesumquando 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 campoevent_time_microsecondsfoi 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
Filee nas funções de tabelafilequando 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
HashJoinpadrã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 tcomoselect 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
memcpydesnecessá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,s3eurl. #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_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_tablepermite ignorar a palavra-chaveAUTO_INCREMENTem uma declaração de coluna para simplificar a migração do MySQL. #37178 (Igor Nikonov). - Adiciona os aliases
JSONLineseNDJSONparaJSONEachRow. 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 SELECTnoclickhouse-localpara 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_sizese tornaram obsoletas e podem aparecer no nível superior da configuração, mas o ClickHouse gera uma exceção comoError 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_sentasystem.processese 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
CLUSTERseparado (e a diretiva de configuraçãoaccess_control_improvements.on_cluster_queries_require_cluster_grant, por retrocompatibilidade, com valor padrãofalse). #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íamosgoogle.protobuf.StringValue testno 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_typenas configurações predefinidas e estáticas de handlers HTTP. #34916 (Roman Nikonov). - Alertar corretamente ao usar
clickhouse-client --filesem--externalantes. 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-keeperpara a arquiteturax86_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
PowerPC64LEagora estão disponíveis no script de instalação universalcurl https://clickhouse.com/ | she por link diretohttps://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 IDda URI, se presente, e recompô-la sem ele. - [x] Configurar o objetoAWS HTTP URIcom 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 tipoObjectna expressãoWHEREde consultasUPDATEouDELETE, bem como manipular (DROP,MODIFY) subcolunas individuais. Corrige #37205. #37266 (Anton Popov). - O Kafka não precisa de
group.idna 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_watermarkapó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 EVENTSdo WindowView não será encerrada por causa do fragmento não vazio criado emWindowViewSource.h:58. #37182 (vxider). - Ativa
enable_global_with_statementpara 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 BYcomAggregateFunction(ou seja, você usaGROUP BYna coluna que tem o tipoAggregateFunction). #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 BYem 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
TRUNCATEem banco de dadosReplicated. 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 chamar
writeIntoWindowViewcom 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_sizeno 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, colunasNestednã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
Objecta partir de vários arquivos, por exemplo, por meio da função de tabelafilecom 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/groupBitmapXorStateem 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 columnpodia 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
CREATEquando 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 usarINTERPOLATEcom uma tabelaENGINE = MergeTree. #36549 (Yakov Olkhovskiy). - Corrige um possível erro com literais em
WHEREem 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_enabledpara 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
ClickHouseDictionarySourcese 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 COLUMNde uma coluna aninhada com partes compactas (ou seja,ALTER TABLE x DROP COLUMN n, quando existe a colunan.d). #35797 (Azat Khuzhin). - Corrige o erro de intervalo de comprimento na função substring quando
offsetelengthsão constantes negativas esnã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_insertpara 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 parakostikConsistentHash. 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 tabelasystem.processors_profile_logo 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 BYTESpara limitar a quantidade de bytes gravados durante consultas de insert. #35736 (Anton Popov). - Adicionada a função
flattenTuple. Ela recebe umTuplenomeado aninhado como argumento e retorna umTupleachatado, cujos elementos correspondem aos caminhos doTupleoriginal. Ex.:Tuple(a Int, Tuple(b Int, c Int)) -> Tuple(a Int, b Int, c Int).flattenTuplepode ser usada para selecionar todos os caminhos do tipoObjectcomo colunas separadas. #35690 (Anton Popov). - Adicionadas as funções
arrayFirstOrNull,arrayLastOrNull. Fecha #35238. #35414 (Maksim Kita). - Adicionadas as funções
minSampleSizeContinouseminSampleSizeConversion. 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:permissiveerestrictive. Uma política de linhasimpleadiciona um novo filtro a uma tabela sem efeitos colaterais, como acontecia com as políticaspermissiveerestrictive. #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çõestoStartOf[Milli|Micro|Nano]second(). Adicionados[add|subtract][Milli|Micro|Nano]seconds(). #34353 (Andrey Zvonov).
recurso experimental
- Adicionado suporte a transações para tabelas
MergeTreesimples. 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
Objectno formatoJSONEachRow. Permite converter colunas do tipoMapem colunas do tipoObject. #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 consultadrop remote filesystem cache. Adiciona introspecção de metadados do S3 com a tablesystem.remote_data_paths. Fecha #34021. Adiciona uma opção de cache para merges, com o modoread_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 BYquando possível. Por exemplo, na consultaSELECT sipHash64(number) FROM numbers(1e8) ORDER BY number LIMIT 5, a funçãosipHash64seria avaliada apósORDER BYeLIMIT, 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_threadsemax_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_threadsemax_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_inferencepara 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çãocolumn_names_for_schema_inferencepara 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 des3es3Clusterforam 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_matchingeinput_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_secureemsystem.query_log, que indica se o cliente está usando uma conexão segura via TCP ou HTTP. #35705 (Antonio Andelic). - Agora
kafka_num_consumerspode 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 SETTINGnão é mais permitido para configurações inexistentes na família de motores MergeTree. Corrige #35816. #35884 (alesapin). - Agora, algumas consultas
ALTER MODIFY COLUMNpara os tiposArrayseNullablepodem ser feitas em nível de metadados, sem mutações. Por exemplo, alterar deArray(Enum8('Option1'=1))paraArray(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_hostspara tabelas Hive. #35743 (李扬). - Implementado
send_logs_levelno clickhouse-local. Fecha #35653. #35716 (Kseniia Sumarokova). - Fecha #35641 Permite colunas
EPHEMERALsem expressão padrão explícita. #35706 (Yakov Olkhovskiy). - Adicionado o contador de eventos de profile
AsyncInsertBytesrelativo 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_remoteeuse_hedged_requestsestivesse 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_serviceno 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,--hoste--portà ferramentaclickhouse-diagnostics. #35422 (李扬). - Adicionado suporte a UUID para motores Postgres. Fecha #35384. #35403 (Kseniia Sumarokova).
- Para a função de tabela
s3cluster,HDFSClusterouhive, não é possível obter oAccessTypecorreto comStorageFactory::instance().getSourceAccessType(getStorageTypeName()). Este PR corrige isso. #35365 (李扬). - Removida a opção
--testmodedo 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
portnã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
minmaxpara 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_readno caso de leitura na ordem da chave de ordenação e com limite especificado. Anteriormente, a exceçãoLimit for rows or bytes to read exceededpodia 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 scriptreleaseem favor depackages/build- Compila tudo na imagem clickhouse/binary-builder (limpeza: clickhouse/deb-builder) - Adiciona remoção de símbolos no cmake (todo: use bin_dir/clickhouse/$binary.debug) - Corrige o problema com símbolos DWARF - Adiciona pacotes APK do Alpine - Renomeiaalienparaadditional_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
blackao 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:headeclickhouse/clickhouse-keeper:headpara 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_errorpara 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_logporque 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
Objectquando 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_COLUMNSquando 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 granuleao ler subcolunas do tipo experimentalObject. #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_hostsantes da inferência de esquema no URL engine. Fecha #35064. #35619 (Kruglov Pavel). - Corrigido o
HashJoinquando colunas do tipoLowCardinalitysã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_synchronouslyfuncionava incorretamente para a consultaATTACH TABLEquando uma tabela em estadodetached, 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
throwIfcom 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
ifquando o tipo da coluna resultante difere do tipo de dado resultante, o que causava erros lógicos comoLogical 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_sizepequeno. #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 exceededduranteINSERTao adicionarmax_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
arrayCompactse 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 emarrayCompact, poderá restaurar o comportamento antigo envolvendo os argumentos dearrayCompactemarrayMap. 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')ecast(value, 'IPv6')se comportem da mesma forma que as funçõestoIPv4etoIPv6. Foi alterado o comportamento quando um endereço IP incorreto é passado para as funçõestoIPv4,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çõesIPv4StringToNumOrDefault,IPv4StringToNumOrNull,IPv6StringToNumOrDefault,IPv6StringOrNulltoIPv4OrDefault,toIPv4OrNull,toIPv6OrDefault,toIPv6OrNull. As funçõesIPv4StringToNumOrDefault,toIPv4OrDefault,toIPv6OrDefaultdevem ser usadas se a lógica anterior dependia deIPv4StringToNum,toIPv4,toIPv6retornarem o valor padrão para endereços inválidos. Adicionada a configuraçãocast_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 exemploSELECT * 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.zookeepersem restrições de caminho ou com uma expressãolike. Essas leituras podem gerar uma carga bastante alta no ZooKeeper, então, para habilitar essa funcionalidade, você precisa ativar a configuraçãoallow_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
startsWitheendsWithpara 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.mapFilter3.mapMap.mapFilteremapMapsã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_USEReCLICKHOUSE_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.key2ou com o operador CASTdata.key1.key2::Int64. - Adicionada a configuração
database_replicated_allow_only_replicated_engine. Quando habilitada, permite criar apenas tabelasReplicatedou tabelas com motores sem estado em bancos de dadosReplicated. #35214 (Nikolai Kochetov). Observe que o banco de dadosReplicatedainda é uma funcionalidade experimental.
Melhoria de desempenho
- Melhora o desempenho da inserção em tabelas
MergeTreecom 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
INextensas. Melhora o desempenho do Dicionáriodirectquando a origem éClickHouse. Melhora o desempenho das funçõesdetectCharset,detectLanguageUnknown. #34888 (Maksim Kita). - Melhora o desempenho da função de agregação
anycom 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
keypara as funçõesdictGetHierarchy,dictIsIn,dictGetChildren,dictGetDescendants. Corrige #34970. #35027 (Maksim Kita). - A consulta
EXPLAIN ASTpode 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
s3ou o mecanismo de tabela, o tipo de conteúdo dos arquivos era definido incorretamente comoapplication/xmldevido 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 POLICYsempre mostraráAS permissiveouAS restrictivena 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_passwordeallow_no_passwordforam 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
DateTime64no formatoArrow, 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
--testmodeparaclickhouse-local. Esse parâmetro permite interpretar as dicas de teste que usamos nos testes funcionais. #35264 (Kseniia Sumarokova). - Adicionado
distributed_depthao log de consultas. É como uma variante mais detalhada deis_initial_query#35207 (李扬). - Passa a respeitar
remote_url_allow_hostspara as funções de tabelaMySQLePostgreSQL. #35191 (Heena Bansal). - Adicionado o campo
disk_nameemsystem.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çãoparallel_distributed_insert_select) na função de tabelaview(). #35132 (Azat Khuzhin). - Rastreamento de memória mais preciso durante o
INSERTemBuffercomAggregateFunction. #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
TTLpor coluna emCREATE TABLE ASse o novo mecanismo de tabela não oferecer suporte a ele (ou seja, se o mecanismo não for da famíliaMergeTree). #34938 (Azat Khuzhin). - Permite strings
LowCardinalityem índicesngrambf_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_usagefuncione 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 columnXem tabelas com motoresMergeTreefuncionarão instantaneamente quandocolumnXfor uma colunaALIAS. 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()paraparallel_distributed_insert_select. #34728 (Azat Khuzhin). - Não redefina o logging configurado pelas opções de linha de comando
--log-file/--errorlog-fileem 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
NativeeJSONEachRow. Fecha #34604. #34653 (Maksim Kita). MaterializedMySQL(funcionalidade experimental) agora oferece suporte amaterialized_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
ctimeemtimedo 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_MORE_INPUTemHadoopSnappyDecoderé executado várias vezes (>=3) para um único bloco compactado. Isso faz com que os dados de entrada sejam copiados para o local errado emHadoopSnappyDecoder::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()' failedao usar compactação bzip2 com um valor pequeno da configuraçãomax_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çãomax_read_buffer_size. #35295 (Kruglov Pavel). Ao usar compactaçãobrotlicom um valor pequeno da configuraçãomax_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 TABLEno caso de colunas esparsas estarem habilitadas na tabela. #35274 (Anton Popov). - Evite
std::terminateem 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 TOTALScasoHAVINGretorne 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 overridesdo MaterializedPostgreSQL (funcionalidade experimental) paraPARTITION BYetc. 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_inpara colunas com sinal e valores negativos. #35134 (Azat Khuzhin). - A opção
update_lagna configuração de Dicionário externo não podia ser usada e exibia a mensagem de erroUnexpected 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_subcolumnsestá habilitada. Fecha #33798. #35079 (qieqieplus). - Corrigida a leitura da tabela
system.asynchronous_insertsquando 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
inemwhereem 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
INSERTem 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 byde múltiplas colunas noWindowView(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 directorycomfsync_part_directoryhabilitado e a mesclagem vertical. #34739 (Azat Khuzhin). - Corrige a serialização/exibição das consultas de sistema
RELOAD MODEL,RELOAD FUNCTION,RESTART DISKquando usadas comON CLUSTER. Fecha #34514. #34696 (Maksim Kita). - Corrige
allow_experimental_projection_optimizationcomenable_global_with_statement(antes, isso podia levar ao erroStack size too largeno caso de múltiplas expressões na cláusulaWITH, 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_sizeem 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_finalfoi introduzida e fica desativada por padrão). #34243 (Azat Khuzhin).
novo recurso
- Projeções estão prontas para produção.
allow_experimental_projection_optimizationpassa 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 noHDFS. Por padrão, lança uma exceção ao tentar sobrescrever um arquivo noS3. 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, comoParquet,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
DEFAULTem instruções INSERT. Fecha #6331. #33141 (Andrii Buriachevskyi). - O especificador de coluna
EPHEMERALfoi adicionado à consultaCREATE TABLE. Fecha #9436. #34424 (yakov-olkhovskiy). - Suporte à cláusula
IF EXISTSno recursoTTL 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 deMOVE TTLse 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-localpelo 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
DEGREESeRADIANSpara 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
bitSlicepara 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çõesguaranteedpara limites de memória, que representam limites flexíveis de memória. Caso o limite rígido de memória seja atingido, oMemoryTrackertenta cancelar a consulta com maior overcommit. A nova configuraçãomemory_usage_overcommit_max_wait_microsecondsespecifica 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,TIMEeGEOMETRYnoMaterializedMySQL(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_orderse o prefixo da chave de ordenação já estiver ordenado. Por exemplo, se tivermos a chave de ordenaçãoORDER BY (a, b)na tabela e uma consulta com as cláusulasWHERE 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).
FlatDictionarymelhora 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
_filee_path(em motores de tabela do tipo arquivo) agora sãoLowCardinality— 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_threadsnão surtia efeito. Veja #4699. #34310 (alexey-milovidov). - Melhora no desempenho do formato
LineAsString. Fecha #34303. #34306 (alexey-milovidov). - Otimizado
quantilesExact{Low,High}para usarnth_elementem vez desort. #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 BYcom a adição de suporte a x86-64 AVX-512 para as funçõesmemcmpSmall, 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_hashedquando 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-keepere corrige diversos vazamentos de memória na biblioteca NuRaft. #33329 (alesapin).
Melhoria
- Suporte a inserções assíncronas no
clickhouse-clientpara consultas com dados inline. #34267 (Anton Popov). - As funções
dictGet,dictHasconvertem 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 intervalosstarteendtêm o tipoNullable;convert_null_range_bound_to_openétruepor padrão. Fecha #29791. Agora é possível especificarFloat,Decimal,DateTime64,Int128,Int256,UInt128,UInt256como tipos de intervalo.RangeHashedDictionarypassou a oferecer suporte a valores de intervalo que excedem o tipoInt64. Fecha #28322. Adicionada a opçãorange_lookup_strategypara especificar o tipo de lookup de intervalomin,max; por padrão, émin. Fecha #21647. Corrigidos os cálculos de bytes alocados. Corrigido o nome do tipo emsystem.dictionariesno caso deComplexKeyHashedDictionary. #33927 (Maksim Kita). - Os dicionários
flat,hashedehashed_arrayagora oferecem suporte à criação com atributos vazios, permitindo ler as chaves e usardictHas. Corrige #33820. #33918 (Maksim Kita). - Adicionado suporte ao tipo de dado
DateTime64em 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-clientpara esse tipo de consulta). #34498 (Dmitry Novik). - Reconhecimento da extensão
.jsonlpara 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_factores3_upload_part_size_multiply_parts_count_threshold. Agora, sempre ques3_upload_part_size_multiply_parts_count_thresholdpartes forem carregadas para o S3 a partir de uma única consulta,s3_min_upload_part_sizeserá multiplicado pors3_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-localque podem ser sobrescritos por —input-format e —output-format. Fecha #30631. #34352 (李扬). - Adicionadas opções ao
clickhouse-format. Isso fecha #30528:max_query_sizeemax_parser_depth. #34349 (李扬). - Melhor tratamento de entradas prévias antes da inicialização do cliente. Relacionado a #34308. #34336 (Amos Bird).
REGEXP_MATCHESeREGEXP_REPLACEsão aliases de função para compatibilidade com o PostgreSQL. Fecha #30885. #34334 (李扬).- Alguns servidores esperam um cabeçalho
User-Agentem suas solicitações HTTP. Foi adicionada às solicitações HTTP uma entrada de cabeçalhoUser-Agentno 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 erroDEADLOCK_AVOIDEDem 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-hhmmssna funçãoparseDateTimeBestEffort. 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 KEYdo Dicionário comoPRIMARY KEY (id, value); anteriormente, havia suporte apenas aPRIMARY KEY id, value. Fecha #34135. #34141 (Maksim Kita). - Um argumento opcional para
splitByCharque 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
UUIDno formato de entrada/saídaMsgPack. #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
SYSTEMcom a cláusulaON 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 FUNCTIONA consultaEXPLAIN 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)paraArray(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 paraInt64. Isso fecha: #14648. #33505 (Andrey Zvonov). - Reimplementação de
_shard_numcom base em constantes (veja #7624) usando a funçãoshardNum()(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çõesmin_session_timeout_msesession_timeout_ms. #33288 (JackyWoo). - Adicionado suporte ao tipo de dados
UUIDnas funçõeshexebin. #32170 (Frank Chen). - Corrige a leitura de subcolunas com pontos nos nomes. Em particular, foi corrigida a leitura de colunas
Nestedquando 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 comVALUES. - Corrigeview_duration_msnoquery_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-testporque 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_replicascommax_parallel_replicasigual 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/roundBankersao 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 deoptimize_aggregation_in_order = 1edistributed_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 maskna 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 DATABASEem bancos de dados com engineMemory. 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,S3eURL, 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
Filetable 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_secekeeper_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
arrayetuplecom argumentos literais em consultas distribuídas. Antes, isso podia levar ao erroNot found columns. #33938 (Anton Popov). - O combinador de função de agregação
-Ifnão processava corretamente o argumento de filtroNullable. 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 readonlyna consultaSYSTEM RESTORE REPLICAquando a réplica está realmente em modo somente leitura. Corrige #33806. #33847 (tavplubix). - Corrigido vazamento de memória no
clickhouse-keeperquando 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
JSONEachRoweJSONCompactEachRow. #33830 (Kruglov Pavel). - Corrigido o uso de dicionários externos com a fonte
redise 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 deoptimize_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 colunaNestedcom 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
lz4foi corrigida. Resolve #31421. #31862 (Kruglov Pavel). - Corrige um possível travamento se
group_by_overflow_modeestivesse definido comoany(GROUP BYaproximado) e a agregação fosse realizada em uma única coluna do tipoLowCardinality. #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
lefterightantes eram implementadas no parser e agora têm funcionalidade completa. Consultas distribuídas com funçõesleftourightsem 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 tabelafile,url,s3,hdfse nos parâmetros doclickhouse-local. Permitir omitir a estrutura na consulta CREATE para os motores de tabelaFile,HDFS,S3,URL,Merge,Buffer,DistributedeReplicatedMergeTree(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/urle nos motores de tabelaHDFS/S3/URL, além deSELECT INTO OUTFILEeINSERT 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,theilsUecontingency. 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 as3Cluster. #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
COMMENTemCREATE 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çãosubstringUTF8com 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çãoarrayLastIndex. #33465 (Maksim Kita). - Adicionada a função
decodeURLFormComponent, ligeiramente diferente dedecodeURLComponent. Fecha #10298. #33451 (SuperDJY). - Permite separar as regras de rollup do
GraphiteMergeTreepara métricas simples e com tags (campo opcional rule_type). #33494 (Michail Safronov).
Melhoria de desempenho
- Suporte para mover condições para
PREWHERE(configuraçãooptimize_move_to_prewhere) em tabelas com mecanismoMerge, se todas as tabelas subjacentes oferecerem suporte aPREWHERE. #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
untupleestava 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-keeperao 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_hashedcom 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 = 1emax_parallel_replicascom 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:00passarã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
Boole verifica o intervalo de valores. #32984 (Kruglov Pavel). - Se uma configuração inválida for definida com a consulta
SETou 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_optionssobre 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). LineAsStringpode 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-benchmarkserá 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
PostgreSQLcaso 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
authSourcepara o mecanismo de armazenamentoMongoDB. Fecha #32594. #32702 (Kseniia Sumarokova). - Adicionado suporte ao tipo
Date32na função de tabelagenarateRandom. #32643 (nauta). - Adicionadas as configurações
max_concurrent_select_queriesemax_concurrent_insert_queriespara 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
DecimaleFloat. Corrige #22626. #31966 (flynn). - Adicionadas as configurações
command_read_timeoutecommand_write_timeoutparaStorageExecutable,StorageExecutablePool,ExecutableDictionary,ExecutablePoolDictionaryeExecutableUserDefinedFunctions. A configuraçãocommand_read_timeoutcontrola o tempo limite para ler dados da stdout do comando, em milissegundos. A configuraçãocommand_write_timeoutcontrola o tempo limite para gravar dados na stdin do comando, em milissegundos. Adicionada a configuraçãocommand_termination_timeoutparaExecutableUserDefinedFunction,ExecutableDictionaryeStorageExecutable. Adicionada a configuraçãoexecute_directparaExecutableUserDefinedFunction, com valor padrão true. Adicionada a configuraçãoexecute_directparaExecutableDictionaryeExecutablePoolDictionary, 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
S3se o caminho contiver globs. #33142 (Kruglov Pavel). - A opção
--echonão era utilizada peloclickhouse-clientno modo batch ao executar uma única consulta. #32843 (N. Kolotov). - Use a opção
--databaseno 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_timeda parte de dados emsystem.partsapó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
actionlintaos workflows do GitHub Actions, com verificação dos arquivos de workflow viaact --listpara 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++elibc++abipara 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-serverpermitir acesso de gravação a um invasor. Dados de entrada especialmente elaborados para o formatoNativepodem levar à leitura de memória não inicializada ou a um travamento. Isso é relevante se oclickhouse-serverpermitir 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 dadosLowCardinalityao desserializar dadosLowCardinalityno 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 nothingdurante 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
Avroque ocorre após a segunda inserção no arquivo. #33566 (Kruglov Pavel). - Corrige falha de segmentação no formato Apache
Arrowcaso o esquema contenha o tipoDictionary. Fecha #33507. #33529 (Kruglov Pavel). - As configurações
offsetelimitdefinidas fora da consulta podem ser aplicadas incorretamente a views. Fecha #33289 #33518 (hexiaoting). - Corrige uma exceção
Block structure mismatchque pode ocorrer durante a inserção em uma tabela com uma colunaLowCardinalityaninhada 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_hashedquando 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 SUSPENDeSYSTEM ... THREAD FUZZERnão contavam com controle de acesso. Isso foi corrigido. Autor: Kevin Michel. #33333 (alexey-milovidov). - Correção para quando o
COMMENTde dicionários não aparece emsystem.tablesesystem.dictionaries. Permite modificar o comentário do mecanismoDictionary. Fecha #33251. #33261 (Maksim Kita). - Adiciona inserções assíncronas (com a configuração
async_insertativada) 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 = 0em 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 columnao ler uma colunaLowCardinalitycomlocal_filesystem_read_prefetchouremote_filesystem_read_prefetchhabilitados. #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
CSVao 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 comt.csvgrande 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). topKWeightedStatefalhava 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 seekpara leituras assíncronas em sistemas de arquivos remotos. Fecha #32803. #32835 (Kseniia Sumarokova). - O mecanismo de tabela
MergeTreepodia 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
MySQLnã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 functionno caso de MV comGROUP BY (list of columns)(que é interpretado comoGROUP BY tuple(...)) emKafka/RabbitMQ. Corrige #32668 e #32744. #32751 (Nikolai Kochetov). - Corrige a consulta
ALTER TABLE ... MATERIALIZE TTLnos modosTTL ... DELETE WHERE ...eTTL ... GROUP BY .... #32695 (Anton Popov). - Corrigida a otimização
optimize_read_in_ordernos casos em que o mecanismo de tabela éDistributedouMergee as tabelasMergeTreesubjacentes 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,MsgPackeJSONAsString. Anteriormente, as inserções assíncronas com esses formatos não liam nenhum dado. #32530 (Kruglov Pavel). - Correção da função
groupBitmapAndem 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
ALLouDISTINCT. 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
selectcom 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
timestampUnix fracionário paraDateTime64; a parte fracionária estava invertida para valores negativos detimestampUnix (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) comDirectory tmp_merge_<part_name>ouPart ... (state Deleting) already exists, but it will be deleted soonou 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
LowCardinalityem função de janela. Corrige #31114. #31888 (Nikolai Kochetov). - Corrigido travamento com o comando
DROP TABLE system.query_log sync. #33293 (zhanghuajie).