Sumário
lançamento do ClickHouse v24.11, 2024-11-26
lançamento do ClickHouse v24.10, 2024-10-31
lançamento do ClickHouse v24.9, 2024-09-26
lançamento do ClickHouse v24.8 LTS, 2024-08-20
lançamento do ClickHouse v24.7, 2024-07-30
lançamento do ClickHouse v24.6, 2024-07-01
lançamento do ClickHouse v24.5, 2024-05-30
lançamento do ClickHouse v24.4, 2024-04-30
lançamento do ClickHouse v24.3 LTS, 2024-03-26
lançamento do ClickHouse v24.2, 2024-02-29
lançamento do ClickHouse v24.1, 2024-01-30
Changelog de 2023
Lançamento do ClickHouse 24.12, 2024-12-19. Apresentação, Vídeo
Alteração incompatível com versões anteriores
- As funções
greatesteleastagora passam a ignorar valores de entrada NULL, enquanto antes retornavam NULL se um dos argumentos fosse NULL. Por exemplo,SELECT greatest(1, 2, NULL)agora retorna 2. Isso torna o comportamento compatível com o PostgreSQL, mas, ao mesmo tempo, quebra a compatibilidade com o MySQL, que retorna NULL. Para manter o comportamento anterior, defina a configuraçãoleast_greatest_legacy_null_behavior(padrão:false) comotrue. #65519 #73344 (kevinyhzou). - Uma nova integração com o MongoDB agora é a padrão. Usuários que preferirem usar o driver legado do MongoDB (baseado no driver Poco) podem habilitar a configuração do servidor
use_legacy_mongodb_integration. #73359 (Kirill Nikiforov.
Novo recurso
- Tipos
JSON/Dynamic/Variantpassam de recursos experimentais para beta. #72294 (Pavel Kruglov). Também fizemos o backport de todas as correções, bem como dessa alteração, para a 24.11. - A evolução de esquema para o formato de armazenamento de dados Iceberg oferece ao usuário amplas opções para modificar o esquema da tabela. A ordem das colunas, os nomes das colunas e extensões simples de tipos podem ser alterados internamente. #69445 (Daniil Ivanik).
- Integração com o Iceberg REST Catalog: um novo mecanismo de banco de dados, chamado Iceberg, que integra todo o catálogo ao ClickHouse. #71542 (Kseniia Sumarokova).
- Adicionado cache do índice primário para tabelas
MergeTree(pode ser habilitado pela configuração da tabelause_primary_key_cache). Se o carregamento sob demanda e o cache estiverem habilitados para o índice primário, ele será carregado no cache conforme necessário (semelhante ao mark cache), em vez de ficar em memória o tempo todo. Adicionado o pré-aquecimento do índice primário em inserts/merges/fetches de partes de dados e nas reinicializações da tabela (pode ser habilitado pela configuraçãoprewarm_primary_key_cache). Isso reduz o uso de memória em tabelas enormes em armazenamento compartilhado, e testamos isso em tabelas com mais de um quatrilhão de registros. #72102 (Anton Popov). #72750 (Alexander Gololobov). - Implementado o comando
SYSTEM LOAD PRIMARY KEYpara carregar os índices primários de todas as partes de uma tabela especificada ou de todas as tabelas, se nenhuma tabela for especificada. Isso será útil em benchmarks e para evitar latência adicional durante a execução de consultas. #66252 #67733 (ZAWA_ll). - Adicionada uma consulta para anexar tabelas
MergeTreecomoReplicatedMergeTreee vice-versa:ATTACH TABLE ... AS REPLICATEDeATTACH TABLE ... AS NOT REPLICATED. #65401 (Kirill). - Uma nova configuração,
http_response_headers, que permite personalizar os cabeçalhos de resposta HTTP. Por exemplo, você pode instruir o navegador a exibir uma imagem armazenada no banco de dados. Isso fecha #59620. #72656 (Alexey Milovidov). - Adiciona a função
toUnixTimestamp64Second, que converte umDateTime64em um valorInt64com precisão fixa de segundos, permitindo retornar um valor negativo se a data for anterior à epoch Unix. #70597 (zhanglistar). #73146 (Robert Schulze). - Adiciona a nova configuração
enforce_index_structure_match_on_partition_manipulationpara permitir o attach quando o conjunto de projeções e índices secundários da tabela de origem for um subconjunto dos da tabela de destino. Fecha #70602. #70603 (zwy991114). - Foi adicionada a sintaxe ALTER USER
{ADD|MODIFY|DROP SETTING}, ALTER USER{ADD|DROP PROFILE}, e o mesmo para ALTER ROLE e ALTER PROFILE. Assim, em vez de substituir todo o conjunto de configurações, você pode modificá-lo. #72050 (pufit). - Adicionada a função
arrayPRAUC, que calcula a AUC (Área Sob a Curva) da curva de Precisão-Recall. #72073 (Emmanuel). - Adiciona a função
indexOfAssumeSortedpara tipos de array. Otimiza a busca no caso de um array ordenado em ordem não decrescente. O efeito é perceptível em arrays muito grandes (mais de 100.000 elementos). #72517 (Eric Kurbanov). - Permite usar um delimitador como segundo argumento opcional da função de agregação
groupConcat. #72540 (Yarik Briukhovetskyi). - A função
translateagora permite excluir caracteres se o argumentofromcontiver mais caracteres do que o argumentoto. Exemplo:SELECT translate('clickhouse', 'clickhouse', 'CLICK')agora retornaCLICK. #71441 (shuai.xu).
Recursos experimentais
- Uma nova configuração do MergeTree,
allow_experimental_reverse_key, que habilita o suporte à ordem de classificação decrescente nas chaves de ordenação do MergeTree. Isso é útil para análise de séries temporais, especialmente para consultas TopN. Exemplo de uso:ENGINE = MergeTree ORDER BY (time DESC, key)- ordem decrescente para o campotime. #71095 (Amos Bird).
Melhoria de desempenho
- Reordenação de JOIN. Foi adicionada uma opção para selecionar o lado do join que atuará como tabela interna (build) no plano de consulta. Isso é controlado por
query_plan_join_swap_table, que pode ser definido comoauto. Nesse modo, o ClickHouse tentará escolher a tabela com o menor número de linhas. #71577 (Vladimir Cherkasov). - Agora, o algoritmo
parallel_hashserá usado (quando aplicável) quando a configuraçãojoin_algorithmestiver definida comodefault. As duas alternativas anteriores (directehash) ainda serão consideradas quando não for possível usarparallel_hash. #70788 (Nikita Taranov). - Adiciona a opção de extrair expressões comuns de expressões
WHEREeONpara reduzir o número de tabelas hash usadas durante junções. Isso faz sentido quando a condiçãoJOIN ONtem partes em comum dentro deANDem diferentes partes deOR. Pode ser habilitado comoptimize_extract_common_expressions = 1. #71537 (János Benjamin Antal). - Permite usar índices em
SELECTquando uma coluna indexada é convertida com CAST paraLowCardinality(String), o que pode ocorrer quando uma consulta é executada em uma tabela Merge com algumas tabelas usandoStringe outrasLowCardinality(String). #71598 (Yarik Briukhovetskyi). - Durante a execução da consulta com réplicas paralelas e plano local ativado, não faça análise de índice nos workers. O coordenador escolherá os intervalos que os workers devem ler com base na análise de índice feita do seu lado (no iniciador da consulta). Isso faz com que consultas curtas com réplicas paralelas tenham latência tão baixa quanto a de consultas em um único nó. #72109 (Igor Nikonov).
- O uso de memória de
clickhouse disks remove --recursivefoi reduzido em discos de armazenamento de objetos. #67323 (Kirill). - Traz de volta a otimização para a leitura de subcolunas de uma única coluna em partes compactas de #57631. Ela foi removida acidentalmente. #72285 (Pavel Kruglov).
- Aceleração da ordenação de colunas
LowCardinality(String)com a desvirtualização de chamadas no comparador. #72337 (Alexander Gololobov). - Otimização da função
argMin/argMaxpara alguns tipos de dados simples. #72350 (alesapin). - Otimiza o bloqueio no rastreador de memória com bloqueios compartilhados para reduzir a contenção, melhorando o desempenho em sistemas com um número muito alto de CPUs. #72375 (Jiebin Sun).
- Adicionada uma nova configuração,
use_async_executor_for_materialized_views. Permite usar execução assíncrona e, potencialmente, multithread da consulta da visão materializada; isso pode acelerar o processamento das visões durante INSERT, mas também consome mais memória. #72497 (alesapin). - Melhorado o desempenho da deserialização dos estados de funções de agregação (no tipo de dado
AggregateFunctione em consultas distribuídas). Melhorado ligeiramente o desempenho do parsing do formatoRowBinary. #72818 (Anton Popov). - Divisão de intervalos durante a leitura com réplicas paralelas, na ordem da chave da tabela, para consumir menos memória durante a leitura. #72173 (JIaQi).
- Acelera as inserções no MergeTree quando há um único valor de chave de partição no lote inserido. #72348 (alesapin).
- Implementada a criação paralela de tabelas durante a restauração de um backup. Antes deste PR, o comando
RESTOREsempre criava tabelas em uma thread, o que podia ser lento no caso de backups com muitas tabelas. #72427 (Vitaly Baranov). - Descartar o mark cache pode levar um tempo considerável se ele for grande. Se mantivermos o mutex do Context durante esse processo, isso bloqueará muitas outras atividades; nem mesmo novas conexões de cliente poderão ser estabelecidas até que ele seja liberado. Além disso, manter esse mutex não é realmente necessário para sincronização: basta ter uma referência local ao cache via shared ptr. #72749 (Alexander Gololobov).
Melhoria
- Removida a configuração
allow_experimental_join_condition, permitindo condições não equi por padrão. #69910 (Vladimir Cherkasov). - As configurações da config do servidor (users.xml) agora também se aplicam ao cliente. Útil para configurações de formato, por exemplo,
date_time_output_format. #71178 (Michael Kolupaev). - Uso automático de disco para
GROUP BY/ORDER BY, com base no uso de memória do servidor/usuário. Controlado pelas configurações de consultamax_bytes_ratio_before_external_group_by/max_bytes_ratio_before_external_sort. #71406 (Azat Khuzhin). - Adicionada uma nova lógica de cancelamento:
CancellationCheckerverifica os timeouts de cada consulta iniciada e as interrompe quando o timeout é atingido. #69880 (Yarik Briukhovetskyi). - Suporte a ALTER de
ObjectparaJSON, o que significa que agora é possível migrar facilmente do tipo Object, que está obsoleto. #71784 (Pavel Kruglov). - Permite valores desconhecidos em Set que não estejam presentes em Enum. Corrige #72662. #72686 (zhanglistar).
- Adiciona suporte ao operador de busca em strings (por exemplo, LIKE) para o tipo de dado
Enum, implementando #72661. #72732 (zhanglistar). - Algumas consultas ALTER USER inválidas foram aceitas. Corrige #71227. #71286 (Arthur Passos).
- Respeita
prefer_locahost_replicaao montar o plano paraINSERT ... SELECTdistribuído. #72190 (filimonov). - O Azure violou a especificação do Iceberg, rotulando incorretamente o Iceberg v1 como Iceberg v2. O problema é descrito aqui. O Azure Iceberg Writer cria arquivos de metadados do Iceberg (assim como arquivos de manifesto) que violam a especificação. Agora tentamos ler metadados no formato Iceberg v1 com o leitor v2 (porque eles os gravam dessa forma) e adicionamos um erro para quando eles não criam os campos correspondentes em um arquivo de manifesto. #72277 (Daniil Ivanik).
- Agora é permitido usar
CREATE MATERIALIZED VIEWcomUNION [ALL]na consulta. O comportamento é o mesmo de uma visão materializada comJOIN: apenas a primeira tabela na expressãoSELECTfuncionará como gatilho para insert; todas as outras tabelas serão ignoradas. No entanto, se houver várias referências à primeira tabela (por exemplo, UNION com ela mesma), todas elas serão processadas como o bloco de dados inserido. #72347 (alesapin). - Adicionada a validação da consulta de origem quando o ClickHouse é usado como origem para um dicionário. #72548 (Alexey Katsman).
- Garanta que o ClickHouse detecte as alterações do ZooKeeper ao recarregar a configuração. #72593 (Azat Khuzhin).
- Melhor aproximação do uso de memória das marcas armazenadas em cache para reduzir o uso total de memória do cache. #72630 (Antonio Andelic).
- Adicionada uma nova métrica
StartupScriptsExecutionState. A métrica pode ter três valores: 0 = os scripts de inicialização ainda não terminaram, 1 = os scripts de inicialização foram executados com sucesso, 2 = os scripts de inicialização falharam. Precisamos dessa métrica para saber se os scripts de inicialização estão sendo executados com sucesso na nuvem, especialmente após releases das configurações de base. #72637 (Miсhael Stetsyuk). - Adicione a nova métrica
MergeTreeIndexGranularityInternalArraysTotalSizeaosystem.metrics. Essa métrica é necessária para encontrar as instâncias com conjuntos de dados muito grandes suscetíveis à alta - Adiciona retentativas na criação de uma tabela replicada. #72682 (Vitaly Baranov).
- Adicionar
total_bytes_with_inactiveàsystem.tablespara contabilizar o total de bytes das partes inativas. #72690 (Kai Zhu). - Adicionadas configurações do MergeTree em
system.settings_changes. #72694 (Raúl Marín). - Suporte para o tipo JSON na função
notEmpty. #72741 (Pavel Kruglov). - Suporte ao parsing do erro GCS S3
AuthenticationRequired. #72753 (Vitaly Baranov). - Adicionado suporte ao tipo
Dynamicnas funçõesifNullecoalesce. #72772 (Pavel Kruglov). - Suporte a
Dynamicem funçõestoFloat64/touInt32/etc. #72989 (Pavel Kruglov). - Adicionar as configurações de requisição do S3
http_max_fields,http_max_field_name_size,http_max_field_value_sizee usá-las ao processar respostas da API do S3 durante a criação de backup ou a restauração. #72778 (Vitaly Baranov). - Excluir os metadados da tabela no Keeper em Storage S3(Azure)Queue somente após a remoção da última tabela que usa esses metadados. #72810 (Kseniia Sumarokova).
- Foram adicionados os eventos de perfil
JoinBuildTableRowCount/JoinProbeTableRowCount/JoinResultRowCount. #72842 (Vladimir Cherkasov). - Suporte a subcolunas na chave de ordenação do MergeTree e nos índices de salto. #72644 (Pavel Kruglov).
Correção de bug (comportamento incorreto perceptível ao usuário em uma versão estável oficial)
- Corrige possíveis partes que se sobrepõem no MergeTree (após a falha de uma operação de mover uma parte para o diretório detached, possivelmente devido a uma operação no armazenamento de objetos). #70476 (Azat Khuzhin).
- Corrige a detecção de erro quando um nome de tabela é longo demais. Fornece um diagnóstico informando o comprimento máximo permitido. Adiciona uma nova função
getMaxTableNameLengthForDatabase. #70810 (Yarik Briukhovetskyi). - Corrigidos processos zumbis após a falha do
clickhouse-library-bridge(este programa permite executar bibliotecas não seguras). #71301 (MikhailBurdukov). - Corrige o erro NoSuchKey durante o rollback da transação quando a criação de um diretório falha no disco
plain_rewritable. #71439 (Julia Kartseva). - Corrigida a serialização de valores
Dynamicnos formatos JSONPretty. #71923 (Pavel Kruglov). - Adicionar o nome do formato inferido à consulta CREATE nos motores
File/S3/URL/HDFS/Azure. Antes, o nome do formato era inferido toda vez que o servidor era reiniciado e, se os arquivos de dados especificados fossem removidos, isso causava erros durante a inicialização do servidor. #72108 (Pavel Kruglov). - Corrige bugs ao usar uma UDF na expressão JOIN ON com o analisador antigo. #72179 (Raúl Marín).
- Corrige alguns bugs menores em
StorageObjectStorage. É preciso habilitaruse_hive_partitioningpor padrão. #72185 (Yarik Briukhovetskyi). - Corrige um bug em que
min_age_to_force_merge_on_partition_onlyficava travado tentando mesclar repetidamente a mesma partição, que já havia sido mesclada em uma única parte, e deixava de mesclar partições com múltiplas partes. #72209 (Christoph Wurm). - Corrigido um travamento em
SimpleSquashingChunksTransformque ocorria em casos raros ao processar colunas esparsas. #72226 (Vladimir Cherkasov). - Corrigida uma condição de corrida em
GraceHashJoin, o que podia fazer com que algumas linhas ficassem ausentes na saída do join. #72233 (Nikita Taranov). - Corrigidas as consultas
ALTER DELETEcom a coluna_block_numbermaterializada (se a configuraçãoenable_block_number_columnestiver habilitada). #72261 (Anton Popov). - Corrigida uma corrida de dados quando
ColumnDynamic::dumpStructure()é chamado concorrentemente, por exemplo, no construtor deConcurrentHashJoin. #72278 (Nikita Taranov). - Corrige um possível
LOGICAL_ERRORcom colunas duplicadas emORDER BY ... WITH FILL. #72387 (Vladimir Cherkasov). - Corrigidos problemas de incompatibilidade de tipos em vários casos após aplicar
optimize_functions_to_subcolumns. #72394 (Anton Popov). - Use
AWS_CONTAINER_AUTHORIZATION_TOKEN_FILEem vez deAWS_CONTAINER_AUTHORIZATION_TOKEN_PATH. Corrigido #71074. #72397 (Konstantin Bogdanov). - Corrige falha ao analisar consultas
BACKUP DATABASE db EXCEPT TABLES db.table. #72429 (Konstantin Bogdanov). - Impedir a criação de
Variantvazio. #72454 (Pavel Kruglov). - Corrigida a formatação inválida de
result_part_pathemsystem.merges. #72567 (Konstantin Bogdanov). - Corrige o parsing de um glob com um elemento (como
{file}). #72572 (Konstantin Bogdanov). - Corrige a geração da consulta para o servidor seguidor em caso de consulta distribuída com
ARRAY JOIN. Corrige #69276. #72608 (Dmitry Novik). - Corrigido um bug em que
DateTime64 IN DateTime64não retornava nenhum resultado. #72640 (Yarik Briukhovetskyi). - Corrigidos metadados inconsistentes ao adicionar uma nova réplica a um banco de dados Replicated com uma tabela criada com
flatten_nested=0. #72685 (Alexander Tokmakov). - Corrige a configuração avançada de SSL na comunicação interna do Keeper. #72730 (Antonio Andelic).
- Corrigido o erro “No such key” no modo não ordenado do S3Queue quando a configuração
tracked_files_limité menor do que a taxa de surgimento de arquivos no S3. #72738 (Kseniia Sumarokova). - Corrige a exceção lançada no RemoteQueryExecutor quando um usuário não existe localmente. #72759 (Andrey Zvonov).
- Corrigidas as mutações com a coluna
_block_numbermaterializada (se a configuraçãoenable_block_number_columnestiver habilitada). #72854 (Anton Popov). - Corrige backup/restauração com disco regravável simples quando há arquivos vazios no backup. #72858 (Kseniia Sumarokova).
- Cancela corretamente inserts em DistributedAsyncInsertDirectoryQueue. #72885 (Antonio Andelic).
- Corrigida falha ao analisar dados incorretos em colunas esparsas (isso pode acontecer com a configuração
enable_parsing_to_custom_serializationhabilitada). #72891 (Anton Popov). - Corrige uma possível falha durante a restauração de backup. #72947 (Kseniia Sumarokova).
- Corrigido um bug no método JOIN
parallel_hashque podia ocorrer quando a consulta tem uma condição complexa na cláusulaONcom filtros de desigualdade. #72993 (Nikita Taranov). - Use as configurações padrão do formato durante o parsing de JSON para evitar falhas na desserialização. #73043 (Pavel Kruglov).
- Corrige travamento em transações com armazenamento sem suporte. #73045 (Raúl Marín).
- Corrige uma possível superestimação no rastreamento de memória (quando a diferença entre
MemoryTrackingeMemoryResidentseguia aumentando). #73081 (Azat Khuzhin). - Verificação de chaves JSON duplicadas durante o parsing de Tuple. Antes, isso podia causar o erro lógico
Invalid number of rows in Chunkdurante o parsing. #73082 (Pavel Kruglov).
Melhoria em Compilação/Testes/Empacotamento
- Todos os pequenos utilitários anteriormente armazenados na pasta
/utilse que exigiam compilação manual a partir do código-fonte agora fazem parte do pacote principal do ClickHouse. Isso fecha: #72404. #72426 (Nikita Mikhaylov). - Reverte a remoção de
/etc/systemd/system/clickhouse-server.serviceintroduzida na versão 22.3 #39323. #72259 (Mikhail f. Shiryaev). - Divide grandes unidades de tradução para evitar falhas de compilação devido a limitações de memória/CPU. #72352 (Yakov Olkhovskiy).
- OSX: Compilação com suporte a ICU, o que habilita collations, conversões de conjunto de caracteres e outros recursos de localização. #73083 (Raúl Marín).
Lançamento do ClickHouse 24.11, 2024-11-26. Apresentação, Vídeo
Alteração incompatível com versões anteriores
- Removidas as tabelas de sistema
generate_seriesegenerateSeries. Elas foram adicionadas por engano aqui: #59390. #71091 (Alexey Milovidov). - Removido
StorageExternalDistributed. Fecha #70600. #71176 (flynn). - Os motores de tabela Kafka, NATS e RabbitMQ agora são cobertos por grants próprios na hierarquia
SOURCES. Adicione grants a todos os usuários de banco de dados não padrão que criem tabelas com esses tipos de engine. #71250 (Christoph Wurm). - Verifique a consulta de mutação completa antes de executá-la (incluindo subconsultas). Isso evita a execução acidental de uma consulta inválida e o acúmulo de mutações mortas que bloqueiam mutações válidas. #71300 (Christoph Wurm).
- Renomeada a configuração do cache do filesystem
skip_download_if_exceeds_query_cacheparafilesystem_cache_skip_download_if_exceeds_per_query_cache_write_limit. #71578 (Kseniia Sumarokova). - Removido o suporte a argumentos
Enum, bem comoUInt128eUInt256, emdeltaSumTimestamp. Removido o suporte aInt8,UInt8,Int16eUInt16no segundo argumento (“timestamp”) dedeltaSumTimestamp. #71790 (Alexey Milovidov). - Ao recuperar dados diretamente de um dicionário usando o armazenamento Dictionary, a table function de dicionário ou um
SELECTdireto no próprio dicionário, agora basta ter a permissãoSELECTou a permissãodictGetpara o dicionário. Isso está alinhado com tentativas anteriores de evitar contornos de ACL: https://github.com/ClickHouse/ClickHouse/pull/57362 e https://github.com/ClickHouse/ClickHouse/pull/65359. Isso também torna a segunda delas retrocompatível. #72051 (Nikita Mikhaylov).
Recurso experimental
- Implementa
allow_feature_tiercomo um mecanismo global para desabilitar todos os recursos experimentais / beta. #71841 #71145 (Raúl Marín). - Corrige o possível erro
No such file or directorydevido a símbolos especiais não escapados em arquivos de subcolunas JSON. #71182 (Pavel Kruglov). - Adiciona suporte a ALTER de String para JSON. Este PR também altera a serialização dos tipos JSON e Dynamic para a nova versão V2. A versão antiga V1 ainda pode ser usada ao habilitar a configuração
merge_tree_use_v1_object_and_dynamic_serialization(ela pode ser usada durante a atualização para permitir reverter a versão sem problemas). #70442 (Pavel Kruglov). - Implementa um CAST simples de Map/Tuple/Object para o novo JSON por meio de serialização/desserialização a partir de uma string JSON. #71320 (Pavel Kruglov).
- Não permite tipos Variant/Dynamic em ORDER BY/GROUP BY/PARTITION BY/PRIMARY KEY por padrão, porque isso pode levar a resultados inesperados. #69731 (Pavel Kruglov).
- Proíbe tipos Dynamic/Variant em funções min/max para evitar confusão. #71761 (Pavel Kruglov).
Novo recurso
- Adicionada sintaxe SQL para descrever workload e gerenciamento de recursos. https://clickhouse.com/docs/operations/workload-scheduling. #69187 (Sergei Trifonov).
- Um novo tipo de dado,
BFloat16, representa números de ponto flutuante de 16 bits, com expoente de 8 bits, sinal e mantissa de 7 bits. Isso encerra #44206. Isso encerra #49937. #64712 (Alexey Milovidov). - Adicionada a consulta
CHECK GRANTpara verificar se o usuário/role atual recebeu o privilégio específico e se a tabela/coluna correspondente existe na memória. #68885 (Unalian). - Adicionadas as funções de tabela
iceberg[S3;HDFS;Azure]Cluster,deltaLakeCluster,hudiCluster. #72045 (Mikhail Artemenko). - Adicionada a capacidade de definir usuário/senha em http_handlers (para
dynamic_query_handler/predefined_query_handler). #70725 (Azat Khuzhin). - Adicionado suporte à cláusula de staleness no operador ORDER BY WITH FILL. #71151 (Mikhail Artemenko).
- Permite que cada método de autenticação tenha sua própria data de expiração, removendo essa configuração da entidade de usuário. #70090 (Arthur Passos).
- Adicionadas as novas funções
parseDateTime64,parseDateTime64OrNulleparseDateTime64OrZero. Em comparação com a função existenteparseDateTime(e variantes), elas retornam um valor do tipoDateTime64em vez deDateTime. #71581 (kevinyhzou).
Melhorias de desempenho
- Uso de memória otimizado para os valores da granularidade do índice quando a granularidade é constante para a parte. Foi adicionada a capacidade de sempre selecionar granularidade constante para a parte (configuração
use_const_adaptive_granularity), o que ajuda a garantir que ela permaneça sempre otimizada em memória. Isso ajuda, em workloads grandes (trilhões de linhas em armazenamento compartilhado), a evitar o crescimento constante do uso de memória pelos metadados (valores da granularidade do índice) das partes de dados. #71786 (Anton Popov). - Agora, as colunas dos blocos de entrada não são copiadas para
join_algorithm = 'parallel_hash'ao distribuí-las entre threads para processamento paralelo. #67782 (Nikita Taranov). - Algoritmo de mesclagem
Replacingotimizado para partes sem sobreposição. #70977 (Anton Popov). - Não listar partes detached em discos somente leitura e de gravação única nas métricas e em system.detached_parts. #71086 (Alexey Milovidov).
- Não calcule métricas assíncronas pesadas por padrão. A funcionalidade foi introduzida em #40332, mas não é adequado ter um job pesado em segundo plano necessário para apenas um único cliente. #71087 (Alexey Milovidov).
- Para os discos
plain_rewritable: não faça chamadas à API de armazenamento de objetos ao listar diretórios, pois isso pode ser pouco eficiente em termos de custo. Em vez disso, armazene a lista de nomes de arquivo em memória. As desvantagens são o aumento no tempo de carga inicial e na memória necessária para armazenar os nomes de arquivo. #70823 (Julia Kartseva). - Melhore o desempenho e a precisão do intervalo de coleta de
system.query_metric_logreduzindo a seção crítica. #71473 (Pablo Marcos). - Otimização da leitura em ordem por meio da geração de linhas virtuais, de modo que menos dados sejam lidos durante o merge sort, especialmente útil quando há várias partes. #62125 (Shichao Jin).
- Adicionada a configuração no servidor
async_load_system_database, que permite que o servidor seja iniciado com o banco de dados do sistema sem estar totalmente carregado. Isso ajuda a iniciar o ClickHouse mais rapidamente se houver muitas tabelas do sistema. #69847 (Sergei Trifonov). - Adicionado o parâmetro
--threadsaoclickhouse-compressor, o que permite compactar dados em paralelo. #70860 (Alexey Milovidov). - Adicionada uma configuração
prewarm_mark_cacheque permite carregar marcas no cache de marcas em inserts, merges, fetches de partes e na inicialização da tabela. #71053 (Anton Popov). - Ajusta o array index_granularity na memória ao tamanho necessário para reduzir o consumo de memória da família de motores de tabela MergeTree. #71595 (alesapin).
- Desativa a configuração
boundary_alignmentdo cache do sistema de arquivos para leituras sem disco, o que melhora o desempenho da leitura de arquivos remotos independentes com cache. #71827 (Kseniia Sumarokova). - Consultas como
SELECT * FROM table LIMIT ...costumavam carregar os índices das partes, embora eles não fossem usados. #71866 (Alexander Gololobov). - Habilite
parallel_replicas_local_planpor padrão. Criar um plano local completo no nó iniciador da consulta melhora o desempenho das réplicas paralelas com menor consumo de recursos e cria oportunidades para aplicar mais otimizações de consulta. #70171 (Igor Nikonov).
Melhoria
- Permitir usar o clickhouse com um argumento de arquivo, como
ch queries.sql. #71589 (Raúl Marín). - O formato
Vertical(que também é ativado quando você termina sua consulta com\G) passa a contar com os recursos dos formatos Pretty, como: - destaque dos separadores de milhar em números; - exibição de uma dica numérica de fácil leitura. #71630 (Alexey Milovidov). - Propaga roles de usuários externos do nó de origem da consulta para outros nós do cluster. Útil quando apenas o nó de origem tem acesso ao autenticador externo (como LDAP). #70332 (Andrey Zvonov).
- Foram adicionados os aliases
anyRespectNulls,firstValueRespectNullseanyValueRespectNullspara a função de agregaçãoany. Também foram adicionados os aliasesanyLastRespectNullselastValueRespectNullspara a função de agregaçãoanyLast. Isso permite usar uma sintaxe mais natural somente com camel case, em vez de uma sintaxe mista de camel case e underscore, por exemplo:SELECT anyLastRespectNullsStateIfem vez deanyLast_respect_nullsStateIf. #71403 (Peter Nguyen). - Adicionado o parâmetro de configuração
date_time_utc, permitindo que a formatação de logs em JSON ofereça suporte a data e hora em UTC no formato RFC 3339/ISO8601. #71560 (Ali). - Adicionado um novo tipo de cabeçalho para endpoints S3 para autenticação de usuário (
access_header). Isso permite obter um cabeçalho de acesso com a menor prioridade, que será substituído poraccess_key_idde qualquer outra fonte (por exemplo, um esquema de tabela ou uma coleção nomeada). #71011 (MikhailBurdukov). - Funções de ordem superior com arrays constantes e argumentos capturados constantes retornarão valores constantes. #58400 (Alexey Milovidov).
- Os nomes das etapas do plano de consulta (
EXPLAIN PLAN json=1) e os nomes dos processadores do pipeline (EXPLAIN PIPELINE compact=0,graph=1) agora têm um ID exclusivo como sufixo. Isso permite correlacionar a saída do Profiler dos processadores e os traces do OpenTelemetry com a saída do EXPLAIN. #63518 (qhsong). - Adicionada a opção de verificar se o objeto existe após ser gravado no Azure Blob Storage; isso é controlado pela configuração
check_objects_after_upload. #64847 (Smita Kulkarni). - Usa o banco de dados
Atomicpor padrão noclickhouse-local. Resolve os itens 1 e 5 de #50647. Fecha #44817. #68024 (Alexey Milovidov). - As exceções interrompem o protocolo HTTP para informar o cliente sobre o erro. #68800 (Sema Checherinda).
- Passa a informar os hosts que executam consultas de DDL distribuído ao criar replica_dir e marca as réplicas como ativas no DDLWorker. #69658 (tuanpach).
- Aguarde apenas réplicas ativas nas consultas de banco de dados ON CLUSTER se distributed_ddl_output_mode estiver definido como *_only_active. #69660 (tuanpach).
- Melhoria no tratamento de erros e no cancelamento de backups e restaurações
ON CLUSTER: - Se um backup ou uma restauração falhar em um host, será cancelado automaticamente nos outros hosts - Nenhum erro estranho deve ser gerado quando alguns hosts falharem enquanto outros continuarem o processamento - Se um backup ou uma restauração for cancelado em um host, será cancelado automaticamente nos outros hosts - Correção de problemas comtest_disallow_concurrency- agora a desativação da concorrência deve funcionar melhor - Backups e restaurações agora são muito mais resistentes a desconexões do ZooKeeper. #70027 (Vitaly Baranov). - Adiciona suporte a
ALTER TABLE ... MODIFY/RESET SETTING ...para determinadas configurações no armazenamento S3Queue. #70811 (Kseniia Sumarokova). - Adicionada a possibilidade de recarregar certificados de cliente da mesma forma que no procedimento de recarga dos certificados do servidor. #70997 (Roman Antonov).
- Permita configurar o tamanho do histórico do cliente e aumente o tamanho padrão. #71014 (Jiří Kozlovský).
- Suporte a tipos booleanos no leitor nativo de Parquet. #71055 (Arthur Passos).
- Repetir a tentativa em mais erros ao interagir com o S3, como “Malformed message”. #71088 (Alexey Milovidov).
- Redução do nível de log de algumas mensagens sobre S3. #71090 (Alexey Milovidov).
- Suporte para gravar arquivos HDFS com espaços. #71105 (exmy).
- Adicionadas configurações para limitar o número de tabelas replicadas, dicionários e views. #71179 (Kirill).
- Use
AWS_CONTAINER_AUTHORIZATION_TOKEN_FILEem vez deAWS_CONTAINER_AUTHORIZATION_TOKENse ele estiver disponível. Corrige #71074. #71269 (Konstantin Bogdanov). - Remove a criação do nó metadata_version no ZooKeeper da thread de reinicialização do ReplicatedMergeTree. O único cenário em que precisamos criar esse nó é quando o usuário atualiza de uma versão anterior à 20.4 diretamente para uma posterior à 24.10. O ClickHouse não oferece suporte a atualizações que abrangem mais de um ano, portanto devemos lançar uma exceção e pedir ao usuário que atualize gradualmente, em vez de criar o nó. #71385 (Miсhael Stetsyuk).
- Adiciona ao dashboard avançado os dashboards por host
Overview (host)eCloud overview (host). #71422 (alesapin). clickhouse-localusaSELECTimplícito por padrão, o que permite utilizá-lo como calculadora. Melhorado o realce de sintaxe para o modo deSELECTimplícito. #71620 (Alexey Milovidov).- Os aplicativos de linha de comando destacarão a sintaxe mesmo em múltiplas instruções. #71622 (Alexey Milovidov).
- Aplicações de linha de comando retornarão códigos de saída diferentes de zero em caso de erro. Em versões anteriores, a aplicação
disksretornava zero em caso de erro, e outras aplicações retornavam zero para os erros 256 (PARTITION_ALREADY_EXISTS) e 512 (SET_NON_GRANTED_ROLE). #71623 (Alexey Milovidov). - Quando o usuário/grupo é informado como ID, o
clickhouse sufalha. Este patch corrige isso para também aceitarUID:GID. #71626 (Mikhail f. Shiryaev). - Permite desativar o aumento do buffer de memória para o cache do sistema de arquivos por meio da configuração
filesystem_cache_prefer_bigger_buffer_size. #71640 (Kseniia Sumarokova). - Adicionada uma configuração separada
background_download_max_file_segment_sizepara definir o tamanho máximo do segmento de arquivo em downloads em segundo plano no cache do sistema de arquivos. #71648 (Kseniia Sumarokova). - Melhoria sutil no parsing do tipo JSON: se o bloco atual para o caminho JSON contiver valores de vários tipos, tente escolher o tipo mais adequado testando os tipos em uma ordem especial de melhor esforço. #71785 (Pavel Kruglov).
- Antes, ler de
system.asynchronous_metricsfazia com que fosse necessário aguardar a conclusão da atualização concorrente. Isso pode levar muito tempo se o sistema estiver sob alta carga. Com essa mudança, os valores coletados anteriormente sempre podem ser lidos. #71798 (Alexander Gololobov). - S3Queue e AzureQueue: defina
polling_max_timeout_mscomo 10 minutos epolling_backoff_mscomo 30 segundos. #71817 (Kseniia Sumarokova). - Atualiza
HostResolvertrês vezes durante um período dehistory. #71863 (Sema Checherinda). - Na página HTML do Advanced dashboard, foi adicionado um seletor suspenso para escolher o dashboard a partir da tabela
system.dashboards. #72081 (Sergei Trifonov). - Verifique se o banco de dados padrão está disponível após a autorização. Corrige #71097. #71140 (Konstantin Bogdanov).
Correção de bug (comportamento incorreto perceptível ao usuário em uma versão estável oficial)
- As partes deduplicadas durante a consulta
ATTACH PARTnão ficam mais com o prefixoattaching_. #65636 (Kirill). - Correção de um bug em que o DateTime64 perdia precisão na função
IN. #67230 (Yarik Briukhovetskyi). - Corrige um possível erro lógico ao usar funções com
IGNORE/RESPECT NULLSemORDER BY ... WITH FILL; fecha #57609. #68234 (Vladimir Cherkasov). - Corrigidos erros lógicos raros em inserções assíncronas com o formato
Nativequando o limite de memória é atingido. #68965 (Anton Popov). - Corrigido COMMENT em CREATE TABLE para coluna EPHEMERAL. #70458 (Yakov Olkhovskiy).
- Corrige um erro lógico em JSONExtract com LowCardinality(Nullable). #70549 (Pavel Kruglov).
- Permitir system drop replica zkpath quando houver outra réplica com o mesmo caminho no zk. #70642 (MikhailBurdukov).
- Corrige um crash e um vazamento de memória em AggregateFunctionGroupArraySorted. #70820 (Michael Kolupaev).
- Adicionada a capacidade de substituir o Content-Type por meio de cabeçalhos do usuário no engine URL. #70859 (Artem Iurin).
- Corrigido erro lógico em
StorageS3Queue“Não é possível criar um nó persistente em /processed porque ele já existe”. #70984 (Kseniia Sumarokova). - Corrigido o problema em que sessões nomeadas não eram encerradas e permaneciam travadas indefinidamente em determinadas circunstâncias. #70998 (Márcio Martins).
- Corrige o bug que não levava em conta a coluna _row_exists na opção de reconstrução da exclusão leve de projeções. #71089 (Shichao Jin).
- Corrige o problema
AT_* is out of rangeao rodar no Oracle Linux UEK 6.10. #71109 (Örjan Fors). - Corrige valor incorreto no system.query_metric_log devido a uma condição de corrida inesperada. #71124 (Pablo Marcos).
- Corrige o nome incorreto da função de agregação quantileExactWeightedInterpolated. O bug foi introduzido em https://github.com/ClickHouse/ClickHouse/pull/69619. cc @Algunenano. #71168 (李扬).
- Corrigida a exceção bad_weak_ptr com Dynamic na comparação de funções. #71183 (Pavel Kruglov).
- Verifica se o arquivo 7z lido está na máquina local. #71184 (Daniil Ivanik).
- Corrigido problema em que as configurações de formato eram ignoradas no Native format via HTTP e em Async Inserts. #71193 (Pavel Kruglov).
- Consultas SELECT executadas com a configuração
use_query_cache = 1não são mais rejeitadas se o nome de uma tabela de sistema aparecer como literal; por exemplo,SELECT * FROM users WHERE name = 'system.metrics' SETTINGS use_query_cache = true;agora funciona. #71254 (Robert Schulze). - Corrige o bug de aumento no uso de memória quando enable_filesystem_cache=1 está habilitado, mas o disco na configuração de armazenamento não tem nenhuma configuração de cache. #71261 (Kseniia Sumarokova).
- Corrige o possível erro “Cannot read all data” durante a desserialização do Dicionário LowCardinality da coluna Dynamic. #71299 (Pavel Kruglov).
- Corrigida a limpeza incompleta do formato de saída paralelo no cliente. #71304 (Raúl Marín).
- Adicionada a desescapagem que faltava em named collections. Sem essa correção, o clickhouse-server não consegue iniciar. #71308 (MikhailBurdukov).
- Corrige inserts assíncronos com blocos vazios via protocolo nativo. #71312 (Anton Popov).
- Corrige a formatação inconsistente da AST ao conceder privilégios curingas incorretos #71309. #71332 (pufit).
- Adiciona try/catch aos destrutores das partes de dados para evitar
std::terminate. #71364 (alesapin). - Verificação de tipos suspeitos e experimentais nas indicações de tipo em JSON. #71369 (Pavel Kruglov).
- Inicia também a thread worker de memória em sistemas operacionais que não sejam Linux (corrige #71051). #71384 (Alexandre Snarskii).
- Corrige o erro Invalid number of rows in Chunk na coluna Variant. #71388 (Pavel Kruglov).
- Corrige o erro de coluna “attgenerated” inexistente em versões mais antigas do PostgreSQL; corrige #60651. #71396 (0xMihalich).
- Para evitar poluir os logs do servidor, as tentativas de autenticação malsucedidas agora são registradas no nível
DEBUGem vez deERROR. #71405 (Robert Schulze). - Corrigido crash na função de tabela
mongodbao passar argumentos incorretos (por exemplo,NULL). #71426 (Vladimir Cherkasov). - Corrigida falha com optimize_rewrite_array_exists_to_has. #71432 (Raúl Marín).
- Corrigido o uso da configuração
max_insert_delayed_streams_for_parallel_writeem inserções. Antes, ela funcionava de forma incorreta, o que podia levar a alto uso de memória em inserções que gravam dados em várias partições. #71474 (Anton Popov). - Corrige um possível erro
Argument for function must be constant(analisador antigo) no caso em quearrayJoinaparentemente pode aparecer na condiçãoWHERE. Regressão após https://github.com/ClickHouse/ClickHouse/pull/65414. #71476 (Nikolai Kochetov). - Evita falha no SortCursor com 0 colunas (analisador antigo). #71494 (Raúl Marín).
- Corrige
Date32fora do intervalo causado por dados ORC não inicializados. Para mais detalhes, consulte https://github.com/apache/incubator-gluten/issues/7823. #71500 (李扬). - Corrige a contagem do tamanho da coluna na parte wide para os tipos Dynamic e JSON. #71526 (Pavel Kruglov).
- Correção no analisador quando a consulta em uma visão materializada usa IN com CTE. Fecha #65598. #71538 (Maksim Kita).
- Evita travamento ao usar uma UDF em uma restrição. #71541 (Raúl Marín).
- Retorna 0 ou o caractere padrão em vez de gerar um erro nas funções bitShift em caso de acesso fora dos limites. #71580 (Pablo Marcos).
- Corrigidas falhas no servidor ao usar visão materializada com certos motores. #71593 (Pervakov Grigorii).
- Array join com uma estrutura de dados aninhada que contém um alias para um array constante estava causando uma desreferenciação de ponteiro nulo. Isso encerra #71677. #71678 (Alexey Milovidov).
- Corrige LOGICAL_ERROR ao executar ALTER com uma tupla vazia. Isso corrige #71647. #71679 (Amos Bird).
- Não transforme um conjunto constante em predicados sobre colunas de partição no caso do operador NOT IN. #71695 (Eduard Karacharov).
- Corrige a mensagem de log de falha do script de inicialização do Docker para ficar mais clara. #71734 (Андрей).
- Corrige CAST de LowCardinality(Nullable) para Dynamic. Antes, isso podia causar o erro
Bad cast from type DB::ColumnVector<int> to DB::ColumnNullable. #71742 (Pavel Kruglov). - Corrigida a exceção em
toDayOfWeekna cláusulaWHEREcom chave primária do tipo DateTime64. #71849 (Yakov Olkhovskiy). - Corrigido o preenchimento de valores padrão após o parsing para colunas esparsas. #71854 (Anton Popov).
- Corrige erro na função GROUPING quando a entrada é um ALIAS em tabela distribuída, fecha #68602. #71855 (Vladimir Cherkasov).
- Corrige possível travamento ao usar
allow_experimental_join_condition, fecha #71693. #71857 (Vladimir Cherkasov). - Corrigidas instruções SELECT que usam a cláusula
WITH TIESe podem não retornar linhas suficientes. #71886 (wxybear). - Corrige a exceção TOO_LARGE_ARRAY_SIZE causada quando uma coluna resultante da avaliação de arrayWithConstant é erroneamente considerada como excedendo o limite de tamanho do array. #71894 (Udi).
clickhouse-benchmarkapresentou métricas incorretas para consultas que demoravam mais de um segundo. #71898 (Alexey Milovidov).- Corrige a corrida de dados entre o indicador de progresso e a tabela de progresso no clickhouse-client. Esse problema fica visível quando
FROM INFILEé usado. Intercepta teclas pressionadas durante consultasINSERTpara alternar a exibição da tabela de progresso. #71901 (Julia Kartseva). - Use Keepers auxiliares para a autodescoberta de clusters. #71911 (Anton Ivashkin).
- Corrigida a coluna rows_processed em system.s3/azure_queue_log, que estava com problema na versão 24.6. Fecha #69975. #71946 (Kseniia Sumarokova).
- Corrigido o caso em que as funções
s3/s3Clusterpodiam retornar um resultado incompleto ou lançar uma exceção. Isso ocorria ao usar um glob pattern na URI do S3 (comopattern/*) e quando existia um objeto vazio com a chavepattern/(esses objetos são criados automaticamente pelo S3 Console). Além disso, o valor padrão da configuraçãos3_skip_empty_filesmudou defalseparatrue. #71947 (Nikita Taranov). - Corrige um travamento no realce de sintaxe do
clickhouse-client. Fecha #71864. #71949 (Nikolay Degterinsky). - Corrige o erro
Illegal typeem tabelasMergeTreecom função monotônica binária emORDER BYquando o primeiro argumento é constante. Corrige #71941. #71966 (Nikolai Kochetov). - Permitir apenas consultas SELECT em EXPLAIN AST quando usado dentro de subconsulta. Outros tipos de consultas levam ao erro lógico: ‘Bad cast from type DB::ASTCreateQuery to DB::ASTSelectWithUnionQuery’ ou
Inconsistent AST formatting. #71982 (Pavel Kruglov). - Ao inserir um registro com
clickhouse-client, o cliente lê as descrições das colunas do servidor. Mas havia um bug: gravávamos as descrições na ordem errada; o correto é [statistics, ttl, settings]. #71991 (Han Fei). - Corrige a formatação dos comandos ALTER
MOVE PARTITION ... TO TABLE ...quandoformat_alter_commands_with_parenthesesestá habilitado. #72080 (János Benjamin Antal). - Corrige junções RIGHT / FULL em consultas com réplicas paralelas. Agora, junções RIGHT podem ser executadas com réplicas paralelas (a leitura da tabela à direita é distribuída). Junções FULL n’ão podem ser paralelizadas entre os nós e são executadas localmente. #71162 (Igor Nikonov).
- Corrige o problema em que o ClickHouse em contêineres Docker escrevia “get_mempolicy: Operation not permitted” na stderr devido a chamadas de sistema restritas. #70900 (filimonov).
- Corrige o registro metadata_version no ZooKeeper na thread de reinicialização, em vez da thread de attach. #70297 (Miсhael Stetsyuk).
- Esta é uma correção para a replicação “zero-copy”, que não tem suporte e será removida por completo. Não exclua um blob quando houver nós usando esse blob no ReplicatedMergeTree com replicação “zero-copy”. #71186 (Antonio Andelic).
- Esta é uma correção para a replicação “zero-copy”, que não é compatível e será removida por completo. Aquisição de um bloqueio compartilhado zero-copy antes de mover uma parte para um disco zero-copy, para evitar possível perda de dados se o Keeper estiver indisponível. #71845 (Aleksei Filatov).
Lançamento do ClickHouse 24.10, 2024-10-31. Apresentação, Vídeo
alteração incompatível com versões anteriores
- Agora é possível escrever
SETTINGSantes deFORMATem uma cadeia de consultas comUNIONquando as subconsultas estiverem entre parênteses. Isso fecha #39712. O comportamento também muda quando uma consulta tem a cláusula SETTINGS especificada duas vezes em sequência. A cláusula SETTINGS mais próxima terá preferência para a subconsulta correspondente. Nas versões anteriores, a cláusula SETTINGS mais externa podia ter preferência sobre a interna. #68614 (Alexey Milovidov). - A reordenação das condições de filtro da cláusula
[PRE]WHEREagora é permitida por padrão. Isso pode ser desativado definindoallow_reorder_prewhere_conditionscomofalse. #70657 (Nikita Taranov). - Remove a biblioteca
idxd-config, que tem uma licença incompatível. Isso também remove o codec Intel DeflateQPL experimental. #70987 (Alexey Milovidov).
Novo recurso
- Permite conceder acesso a prefixos com caractere curinga.
GRANT SELECT ON db.table_pefix_* TO user. #65311 (pufit). - Se você pressionar a barra de espaço durante a execução da consulta, o cliente exibirá uma tabela em tempo real com métricas detalhadas. Você pode habilitá-la globalmente com a nova opção
--progress-tableno clickhouse-client; a nova opção--enable-progress-table-toggleestá associada à opção--progress-tablee alterna a exibição da tabela de progresso ao pressionar a tecla de controle (Space). #63689 (Maria Khristenko), #70423 (Julia Kartseva). - Permite usar cache para arquivos lidos em motores de tabela com armazenamento de objetos e lagos de dados, usando o hash de ETag + caminho do arquivo como chave de cache. #70135 (Kseniia Sumarokova).
- Suporte à criação de uma tabela com uma consulta:
CREATE TABLE ... CLONE AS .... Isso clona o esquema da tabela de origem e depois anexa todas as partições à tabela recém-criada. Esse recurso é compatível apenas com tabelas da famíliaMergeTree. Fecha #65015. #69091 (tuanpach). - Adiciona uma nova tabela de sistema,
system.query_metric_log, que contém o histórico dos valores de memória e de métricas da tabelasystem.eventspara consultas individuais, gravados em disco periodicamente. #66532 (Pablo Marcos). - Uma consulta SELECT simples pode ser escrita usando SELECT implícito para permitir expressões em estilo de calculadora, por exemplo,
ch "1 + 2". Isso é controlado por uma nova configuração,implicit_select. #68502 (Alexey Milovidov). - Suporte ao modo
--copyno clickhouse local como atalho para conversão de formato #68503. #68583 (Denis Hananein). - Adiciona uma página HTML integrada para visualizar merges, disponível no caminho
/merges. #70821 (Alexey Milovidov). - Adicionado suporte à função
arrayUnion. #68989 (Peter Nguyen). - Permitir aliases SQL com parâmetros. #50665 (Anton Kozlov).
- Uma nova função de agregação
quantileExactWeightedInterpolated, que é uma versão interpolada baseada emquantileExactWeighted. Algumas pessoas podem se perguntar por que precisamos de uma novaquantileExactWeightedInterpolated, já que já temosquantileExactInterpolatedWeighted. O motivo é que a nova é mais precisa que a antiga. Isso é para compatibilidade com o Spark. #69619 (李扬). - Uma nova função
arrayElementOrNull. Ela retornaNULLse o índice do array estiver fora do intervalo ou se uma chave do map não for encontrada. #69646 (李扬). - Permite que os usuários especifiquem expressões regulares por meio dos novos campos
message_regexpemessage_regexp_negativeno arquivoconfig.xmlpara filtrar o logging. O logging é aplicado ao texto formatado sem cores para proporcionar uma experiência mais intuitiva aos desenvolvedores. #69657 (Peter Nguyen). - Adicionada a função
RIPEMD160, que calcula o hash criptográfico RIPEMD-160 de uma string. Exemplo:SELECT HEX(RIPEMD160('The quick brown fox jumps over the lazy dog'))retorna37F332F68DB77BD9D7EDD4969571AD671CF9DD3B. #70087 (Dergousov Maxim). - Suporte à leitura de tabelas
IcebergemHDFS. #70268 (flynn). - Suporte a CTE no formato
WITH ... INSERT, já que anteriormente só havia suporte paraINSERT ... WITH .... #70593 (Shichao Jin). - Integração com MongoDB: suporte a todos os tipos do MongoDB, às instruções WHERE e ORDER BY no lado do MongoDB, com restrição para expressões não suportadas pelo MongoDB. Observe que a nova integração está desabilitada por padrão; para usá-la, defina
<use_legacy_mongodb_integration>comofalsena configuração do servidor. #63279 (Kirill Nikiforov). - Uma nova função
getSettingOrDefaultfoi adicionada para retornar o valor padrão e evitar uma exceção caso uma configuração personalizada não seja encontrada no perfil atual. #69917 (Shankar).
Recurso experimental
- Views materializadas atualizáveis estão prontas para produção. #70550 (Michael Kolupaev). Views materializadas atualizáveis agora têm suporte em bancos de dados Replicated. #60669 (Michael Kolupaev).
- Réplicas paralelas passaram de experimental para beta. As configurações que controlam o comportamento dos algoritmos de réplicas paralelas foram reformuladas. Resumindo: o ClickHouse tem quatro algoritmos diferentes para leitura paralela envolvendo várias réplicas, o que se reflete na configuração
parallel_replicas_mode; o valor padrão éread_tasks. Além disso, foi adicionada a configuração de alternânciaenable_parallel_replicas. #63151 (Alexey Milovidov), (Nikita Mikhaylov). - Suporte ao tipo
Dynamicna maioria das funções, executando-as sobre tipos internos dentro deDynamic. #69691 (Pavel Kruglov). - Permite ler/gravar o tipo
JSONcomo uma string binária no formatoRowBinarycom as configuraçõesinput_format_binary_read_json_as_string/output_format_binary_write_json_as_string. #70288 (Pavel Kruglov). - Permite serializar/desserializar a coluna
JSONcomo uma única coluna String no Native format. Para saída, use a configuraçãooutput_format_native_write_json_as_string. Para entrada, use a versão de serialização1antes dos dados da coluna. #70312 (Pavel Kruglov). - Foi introduzido um modo especial (experimental) de merge selector para tabelas MergeTree, que o torna mais agressivo para partições próximas do limite de número de partes. Ele é controlado pela configuração em nível de MergeTree
merge_selector_use_blurry_base. #70645 (Nikita Mikhaylov). - Implementa ser/de genérico entre os tipos
Uniondo Avro eVariantdo ClickHouse. Resolve #69713. #69712 (Jiří Kozlovský).
Melhorias de desempenho
- Refatoração de
IDiskeIObjectStoragepara melhorar o desempenho. As tabelas dos armazenamentos de objetosplaineplain_rewritableserão inicializadas mais rapidamente. #68146 (Alexey Milovidov, Julia Kartseva). A API LIST do armazenamento de objetos não é mais chamada ao determinar se um arquivo ou diretório existe no disco plain_rewritable, pois isso pode gerar custos desnecessários. #70852 (Julia Kartseva). Redução do número de requisições à API HEAD do armazenamento de objetos no disco plain_rewritable. #70915 (Julia Kartseva). - Adicionada a capacidade de interpretar dados diretamente em colunas esparsas. #69828 (Anton Popov).
- Melhorado o desempenho do parsing de formatos com um grande número de valores ausentes (por exemplo,
JSONEachRow). #69875 (Anton Popov). - Oferece suporte à leitura paralela de grupos de linhas do Parquet e ao pré-carregamento de grupos de linhas no modo de execução com uma única thread. #69862 (LiuNeng).
- Adicionado suporte ao índice minmax para
pointInPolygon. #62085 (JackyWoo). - Usa filtros de Bloom na leitura de arquivos Parquet. #62966 (Arthur Passos).
- Renomeação sem bloqueio das partes para evitar que
INSERTafeteSELECT(devido ao bloqueio das partes) (em condições normais comfsync_part_directory, o QPS deSELECTcomINSERTem paralelo aumentou 2x; sob carga elevada, o efeito é ainda maior). Observe que, por enquanto, isso se aplica apenas aReplicatedMergeTree. #64955 (Azat Khuzhin). - Passa a respeitar
ttl_only_drop_partsemmaterialize ttl; lê apenas as colunas necessárias para recalcular o TTL e remove as partes substituindo-as por uma vazia. #65488 (Andrey Zvonov). - Otimizada a criação de threads no ThreadPool para minimizar a contenção em locks. A criação de threads agora é feita fora da seção crítica para evitar atrasos no agendamento de tarefas e no gerenciamento de threads em cenários de alta carga. Isso deixa o ClickHouse muito mais responsivo sob alta carga concorrente. #68694 (filimonov).
- Habilita a leitura de colunas de texto
LowCardinalitya partir deORC. #69481 (李扬). - Use
LowCardinalityparaProfileEventsem logs do sistema, comopart_log,query_views_log,filesystem_cache_log. #70152 (Alexey Milovidov). - Melhora no desempenho das funções
fromUnixTimestamp/toUnixTimestamp. #71042 (kevinyhzou). - Não desative a leitura não bloqueante do cache de páginas para o servidor inteiro ao ler a partir de uma E/S bloqueante. Isso causava piora no desempenho quando um único sistema de arquivos (por exemplo, tmpfs) não oferecia suporte à syscall
preadv2, enquanto outros ofereciam. #70299 (Antonio Andelic). ALTER TABLE .. REPLACE PARTITIONnão espera mais por mutações/merges que ocorram em outras partições. #59138 (Vasily Nemkov).- Não validar as ACLs ao sincronizá-las do Keeper. A validação já é feita durante a criação. Isso não deve fazer tanta diferença, mas há instalações com dezenas de milhares ou até mais usuários criados, e a validação desnecessária de hash pode levar muito tempo para ser concluída durante a inicialização do servidor (ele sincroniza tudo do Keeper). #70644 (Raúl Marín).
Melhoria
CREATE TABLE AScopiará aPRIMARY KEY,ORDER BYe cláusulas semelhantes (de tabelasMergeTree). #69739 (sakulali).- Suporte a XID de 64 bits no Keeper. Isso pode ser habilitado com o valor de configuração
use_xid_64. #69908 (Antonio Andelic). - Argumentos de linha de comando para configurações Bool passam a ser definidos como true quando nenhum valor é fornecido para o argumento (por exemplo,
clickhouse-client --optimize_aggregation_in_order --query "SELECT 1"). #70459 (davidtsuk). - Adicionadas configurações no nível do usuário
min_free_disk_bytes_to_perform_insertemin_free_disk_perform_to_throw_insertpara evitar inserções em discos quase cheios. #69755 (Marco Vilas Boas). - A documentação embutida das configurações será muito mais detalhada e completa do que a documentação no site. Este é o primeiro passo para que a documentação do site passe a ser sempre gerada automaticamente a partir do código-fonte. Isso tem implicações duradouras: - ficará garantido que todas as configurações estejam incluídas; - não haverá risco de os valores padrão ficarem obsoletos; - poderemos gerar essa documentação para cada versão do ClickHouse; - a documentação poderá ser exibida pelo próprio servidor mesmo sem acesso à Internet. Gerar a documentação do site a partir do código-fonte. #70289 (Alexey Milovidov).
- Permitir
needlevazio na funçãoreplace, com o mesmo comportamento do PostgreSQL. #69918 (zhanglistar). - Permitir
needlevazio nas funçõesreplaceRegexp*. #70053 (zhanglistar). - Links simbólicos para tabelas no diretório
data/database_name/passam a ser criados para os caminhos reais dos dados da tabela, de acordo com a política de armazenamento, em vez do diretóriostore/...no disco padrão. #61777 (Kirill). - Ao fazer o parsing de um campo
EnumdeJSON, uma string que contém um inteiro será interpretada como o elementoEnumcorrespondente. Isso fecha #65119. #66801 (scanhex12). - Permite usar
TRIMcom string vazia emLEADINGouTRAILINGsem efeito. Fecha #67792. #68455 (Peter Nguyen). - Melhorada a compatibilidade de
cast(timestamp as String)com o Spark. #69179 (Wenzheng Liu). - Sempre use o novo analisador para calcular expressões constantes quando
enable_analyzerestiver definido comotrue. Suporte para calcular argumentos da função de tabelaexecutablesem usar a consultaSELECTpara expressões constantes. #69292 (Dmitry Novik). - Adiciona a configuração
enable_secure_identifierspara impedir identificadores com caracteres especiais. #69411 (tuanpach). - Adiciona
show_create_query_identifier_quoting_rulepara definir o comportamento de aspas em identificadores no resultado da consultaSHOW CREATE TABLE. Valores possíveis: -user_display: Quando os identificadores forem palavras-chave. -when_necessary: Quando os identificadores forem um de{"distinct", "all", "table"}e quando isso puder gerar ambiguidade: nomes de coluna, nomes de atributos de Dicionário. -always: Sempre colocar aspas nos identificadores. #69448 (tuanpach). - Melhora na restauração das dependências das entidades de acesso #69563 (Vitaly Baranov).
- Se você executar o
clickhouse-clientou outro aplicativo de CLI, e ele demorar para iniciar devido a um servidor sobrecarregado, e você começar a digitar sua consulta, comoSELECT, as versões anteriores exibirão o restante do conteúdo do terminal ecoado antes de imprimir a mensagem de saudação, comoSELECTClickHouse local version 24.10.1.1.em vez deClickHouse local version 24.10.1.1.. Agora isso foi corrigido. Isso encerra #31696. #69856 (Alexey Milovidov). - Adicionada a nova coluna
readonly_durationà tabelasystem.replicas. Necessária para distinguir réplicas realmente em somente leitura das réplicas sentinela nos alertas. #69871 (Miсhael Stetsyuk). - Altere o tipo da configuração
join_output_by_rowlist_perkey_rows_thresholdpara um inteiro sem sinal. #69886 (kevinyhzou). - Melhora o logging de spans do OpenTelemetry para incluir as configurações da consulta. #70011 (sharathks118).
- Adicionar informações de diagnóstico sobre funções de array de ordem superior quando o tipo de resultado da lambda for inesperado. #70093 (ttanay).
- Melhoria no Keeper: menos bloqueios durante alterações no cluster. #70275 (Antonio Andelic).
- Adicionadas as palavras-chave
WITH IMPLICITeFINALao comandoSHOW GRANTS. Corrigido um pequeno bug relacionado a privilégios implícitos: #70094. #70293 (pufit). - Passa a respeitar
compatibilitynas configurações do MergeTree. O valor decompatibilityé obtido do perfildefaultna inicialização do servidor, e as configurações padrão do MergeTree são ajustadas de acordo. Alterações posteriores na configuraçãocompatibilitynão afetam as configurações do MergeTree. #70322 (Nikolai Kochetov). - Evite encher os logs com corpos grandes de resposta HTTP em caso de erros durante a comunicação entre servidores. #70487 (Vladimir Cherkasov).
- Foi adicionada uma nova configuração
max_parts_to_movepara controlar o número máximo de partes que podem ser movidas de uma vez. #70520 (Vladimir Cherkasov). - Limita a frequência de determinadas mensagens de log. #70601 (Alexey Milovidov).
CHECK TABLEcom o modificadorPARTfoi formatado incorretamente no cliente. #70660 (Alexey Milovidov).- Suporte à gravação do índice de coluna e do índice de deslocamento usando o gravador nativo do Parquet. #70669 (LiuNeng).
- Suporte ao parsing de
DateTime64com microssegundos e fuso horário na sintaxe Joda (“joda” é uma biblioteca Java popular para data e hora, e a “sintaxe Joda” é o estilo dessa biblioteca). #70737 (kevinyhzou). - Foi alterada a forma de determinar se um armazenamento em nuvem oferece suporte à exclusão em lote ou não. #70786 (Vitaly Baranov).
- Suporte à página v2 do Parquet no leitor nativo. #70807 (Arthur Passos).
- Uma verificação para conferir se a tabela tem
storage_policyediskdefinidos. Foi adicionada uma verificação para conferir se uma nova política de armazenamento é compatível com a anterior ao usar a configuraçãodisk. #70839 (Kirill). - Adicionados
system.s3_queue_settingsesystem.azure_queue_settings. #70841 (Kseniia Sumarokova). - As funções
base58Encodeebase58Decodeagora aceitam argumentos do tipoFixedString. Exemplo:SELECT base58Encode(toFixedString('plaintext', 9));. #70846 (Faizan Patel). - Adiciona a coluna
partitiona todos os tipos de entrada do log de partes. Anteriormente, ela era preenchida apenas para algumas entradas. Isso fecha #70819. #70848 (Alexey Milovidov). - Adiciona os eventos
MergeStarteMutateStartaosystem.part_log, o que ajuda na análise e na visualização de merges. #70850 (Alexey Milovidov). - Adicionado um evento de perfil sobre o número de partes de origem mescladas. Isso permite monitorar o fanout da MergeTree em produção. #70908 (Alexey Milovidov).
- Os downloads em segundo plano para o cache do sistema de arquivos foram habilitados novamente. #70929 (Nikita Taranov).
- Adiciona um novo algoritmo seletor de merge, chamado
Trivial, apenas para uso profissional. Ele é inferior ao seletor de mergeSimple. #70969 (Alexey Milovidov). - Suporte a
CREATE OR REPLACE VIEWatômico. #70536 (tuanpach) - Adicionado o modo
strict_onceà função de agregaçãowindowFunnelpara evitar contar o mesmo evento várias vezes caso ele corresponda a várias condições, resolvendo #21835. #69738 (Vladimir Cherkasov).
Correção de bug (comportamento incorreto visível ao usuário em uma versão estável oficial)
- Aplicar atualizações de configuração ao objeto de contexto global. Isso corrige problemas como o #62308. #62944 (Amos Bird).
- Correção de
ReadSettings, que não usava os valores definidos pelo usuário, pois apenas os valores padrão eram usados. #65625 (Kseniia Sumarokova). - Corrige a incompatibilidade de tipos em
sumMapFilteredao usar argumentos com sinal. #58408 (Chen768959). - Correção na monotonicidade de funções de conversão como toHour quando um argumento opcional de fuso horário é fornecido. #60264 (Amos Bird).
- Verificação
supportsPrewhereflexibilizada para tabelasMerge. Isso corrige #61064. Ela havia sido reforçada desnecessariamente em #60082. #61091 (Amos Bird). - Corrige o tratamento da configuração
use_concurrency_controlpara garantir a aplicação correta do limiteconcurrent_threads_soft_limit_num. Isso ativa o controle de concorrência por padrão, porque antes ele não funcionava corretamente. #61473 (Sergei Trifonov). - Corrige a otimização incorreta da cláusula
JOIN ONno caso de verificação deIS NULLsob qualquer outra função (comoNOT), o que pode levar a resultados incorretos. Fecha #67915. #68049 (Vladimir Cherkasov). - Impedir consultas
ALTERque invalidariam a consultaCREATEdas tabelas. #68574 (János Benjamin Antal). - Corrige a formatação inconsistente da AST para as funções
negate(-) eNOTcom tuplas e arrays. #68600 (Vladimir Cherkasov). - Corrige a inserção de um tipo incompleto em
Dynamicdurante a desserialização. Isso pode levar a errosParameter out of bound. #69291 (Pavel Kruglov). - Replicação zero-copy, que é experimental e não deve ser usada em produção: corrige loop infinito após
restore replicana MergeTree replicada com zero-copy. #69293 (MikhailBurdukov). - Restaura o valor padrão de
processing_threads_numpara o número de núcleos da CPU no armazenamentoS3Queue. #69384 (Kseniia Sumarokova). - Contorna o fluxo de
try/catchao de/serializar protobuf aninhado repetido em colunas aninhadas (corrige #41971). #69556 (Eliot Hautefeuille). - Corrigida uma falha ao inserir em uma coluna FixedString no mecanismo PostgreSQL. #69584 (Pavel Kruglov).
- Corrigida a falha ao executar
create view t as (with recursive 42 as ttt select ttt);. #69676 (Han Fei). - Corrigido
maxMapState, que gerava ‘Bad get’ quando o tipo do valor era DateTime64. #69787 (Michael Kolupaev). - Corrige
getSubcolumnem colunasLowCardinality, sobrescrevendouseDefaultImplementationForLowCardinalityColumnspara retornartrue. #69831 (Miсhael Stetsyuk). - Corrigido o bloqueio permanente de envios distribuídos caso um DROP de tabela distribuída falhasse. #69843 (Azat Khuzhin).
- Corrige consultas não canceláveis com WITH FILL e chaves NaN. Isso fecha #69261. #69845 (Alexey Milovidov).
- Ajusta o valor padrão do analyzer para o valor de compatibilidade antigo. #69895 (Raúl Marín).
- Não verificar dependências durante CREATE OR REPLACE VIEW ao executar DROP da tabela antiga. Antes, a consulta CREATE OR REPLACE falhava quando havia tabelas dependentes da view recriada. #69907 (Pavel Kruglov).
- Ajuste para Decimal. Corrige #69730. #69978 (Arthur Passos).
- Agora, DEFINER/INVOKER passarão a funcionar com views parametrizadas. #69984 (pufit).
- Corrige o parsing dos definidores de view. #69985 (pufit).
- Corrigido um bug em que o fuso horário podia alterar o resultado da consulta com argumentos do tipo
DateouDate32. #70036 (Yarik Briukhovetskyi). - Corrige
Block structure mismatchem consultas com views aninhadas e cláusulaWHERE. Corrige #66209. #70054 (Nikolai Kochetov). - Evite reutilizar colunas em diferentes tuplas nomeadas ao avaliar funções
tuple. Isso corrige #70022. #70103 (Amos Bird). - Correção de LOGICAL_ERROR incorreto ao substituir literais em intervalos. #70122 (Pablo Marcos).
- Verificação do tipo Nullable(Nothing) em ALTER TABLE MODIFY COLUMN/QUERY para evitar tabelas com esse tipo de dado. #70123 (Pavel Kruglov).
- Mensagem de erro apropriada para a consulta ilegal
JOIN ... ON *, fecha #68650. #70124 (Vladimir Cherkasov). - Corrigido resultado incorreto com índice de skipping. #70127 (Raúl Marín).
- Corrigida uma condição de corrida no método de descompressão de ColumnObject/ColumnTuple que poderia levar ao uso de memória heap após a liberação. #70137 (Pavel Kruglov).
- Corrige possível travamento no ALTER COLUMN com o tipo Dynamic. #70144 (Pavel Kruglov).
- Agora, o ClickHouse passará a considerar mais erros como passíveis de nova tentativa e não marcará as partes de dados como corrompidas em caso de erros desse tipo. #70145 (alesapin).
- Use o parâmetro
max_typesadequado ao criar o tipo Dynamic para a subcoluna JSON. #70147 (Pavel Kruglov). - Corrigido o problema de exibição da senha em
system.query_logpara usuários com método de autenticação por senha bcrypt. #70148 (Nikolay Degterinsky). - Corrigido o contador de eventos da interface nativa (InterfaceNativeSendBytes). #70153 (Yakov Olkhovskiy).
- Corrige possível travamento relacionado a colunas JSON. #70172 (Pavel Kruglov).
- Corrige diversos problemas no arrayMin e no arrayMax. #70207 (Raúl Marín).
- Respeita a configuração allow_simdjson no parser do tipo JSON. #70218 (Pavel Kruglov).
- Corrige uma desreferenciação de ponteiro nulo ao criar uma visão materializada com dois
SELECTs e umINTERSECT, por exemploCREATE MATERIALIZED VIEW v0 AS (SELECT 1) INTERSECT (SELECT 1);. #70264 (Konstantin Bogdanov). - Não modifique as configurações globais com scripts de inicialização. Antes, alterar uma configuração em um script de inicialização fazia com que ela fosse alterada globalmente. #70310 (Antonio Andelic).
- Corrige o ALTER do tipo
Dynamicao reduzir o parâmetro max_types, o que poderia causar uma falha no servidor. #70328 (Pavel Kruglov). - Corrige uma falha ao usar
WITH FILLincorretamente. #70338 (Raúl Marín). - Corrige um possível use-after-free em
SYSTEM DROP FORMAT SCHEMA CACHE FOR Protobuf. #70358 (Azat Khuzhin). - Corrigido travamento durante GROUP BY de subcoluna de subobjeto JSON. #70374 (Pavel Kruglov).
- Não faça o pré-carregamento de partes para mesclagens verticais se a parte não tiver linhas. #70452 (Antonio Andelic).
- Corrigida falha em
WHEREcom funções lambda. #70464 (Raúl Marín). - Corrigida a criação de tabelas com
CREATE ... AS table_function(...)em banco de dadosReplicated, quando a fonte da função de tabela está indisponível na réplica secundária. #70511 (Kseniia Sumarokova). - Ignore toda a saída do async insert com
wait_for_async_insert=1. Fecha #62644. #70530 (Konstantin Bogdanov). - Ignora frozen_metadata.txt ao percorrer o diretório shadow em system.remote_data_paths. #70590 (Aleksei Filatov).
- Corrigida a criação de funções de janela com estado em memória desalinhada. #70631 (Raúl Marín).
- Corrigidas falhas raras em
SELECT-s e merges após adicionar uma coluna do tipoArraycom expressão padrão não vazia. #70695 (Anton Popov). - A inserção na função de tabela s3 respeitará as configurações da consulta. #70696 (Vladimir Cherkasov).
- Corrige a recursão infinita ao inferir o esquema protobuf quando a opção de ignorar campos sem suporte está habilitada. #70697 (Raúl Marín).
- Desativa enable_named_columns_in_function_tuple por padrão. #70833 (Raúl Marín).
- Corrige a configuração processing_threads_num do engine de tabela S3Queue, que não surtia efeito quando era inferida a partir do número de núcleos de CPU no servidor. #70837 (Kseniia Sumarokova).
- Normaliza argumentos de tupla nomeada em estados de agregação. Isso corrige #69732. #70853 (Amos Bird).
- Corrige um erro lógico causado por zeros negativos na tabela hash de dois níveis. Isso fecha #70973. #70979 (Alexey Milovidov).
- Corrige
limit byelimit with tiesem ambientes distribuídos e com réplicas paralelas. #70880 (Nikita Taranov).
Lançamento do ClickHouse 24.9, 2024-09-26. Apresentação, Vídeo
Alteração incompatível com versões anteriores
- Expressões como
a[b].cagora são suportadas para tuplas nomeadas, assim como subscritos nomeados em expressões arbitrárias, por exemplo,expr().name. Isso é útil para processar JSON. Isso fecha #54965. Em versões anteriores, uma expressão na formaexpr().nameera interpretada comotupleElement(expr(), name), e o analisador de consultas procurava uma colunanameem vez do elemento de tupla correspondente; na nova versão, isso foi alterado paratupleElement(expr(), 'name'). Na maioria dos casos, a versão anterior não funcionava, mas é possível imaginar um cenário bastante incomum em que essa alteração poderia causar incompatibilidade: se você armazenasse nomes de elementos de tupla em uma coluna ou alias com um nome diferente do nome do elemento da tupla:SELECT 'b' AS a, CAST([tuple(123)] AS 'Array(Tuple(b UInt8))') AS t, t[1].a. É muito improvável que você tenha usado consultas desse tipo, mas ainda assim precisamos marcar essa alteração como potencialmente incompatível com versões anteriores. #68435 (Alexey Milovidov). - Quando a configuração
print_pretty_type_namesestá habilitada, ela imprime o tipo de dadoTupleem uma forma Pretty nas InstruçõesSHOW CREATE TABLE, na funçãoformatQuerye no modo interativo doclickhouse-cliente doclickhouse-local. Em versões anteriores, essa configuração era aplicada apenas a consultasDESCRIBEe atoTypeName. Isso fecha #65753. #68492 (Alexey Milovidov). - Não permitir a especificação explícita de UUID ao criar uma tabela em bancos de dados
Replicated. Além disso, não permitir a especificação explícita do caminho do Keeper e do nome da réplica para tabelas *MergeTree em bancos de dadosReplicated. Isso introduz uma nova configuraçãodatabase_replicated_allow_explicit_uuide altera o tipo dedatabase_replicated_allow_replicated_engine_argumentsde Bool para UInt64 #66104 (Alexander Tokmakov).
Novo recurso
- Permite que um usuário tenha vários métodos de autenticação, em vez de apenas um. Permite redefinir os métodos de autenticação para o método adicionado mais recentemente. Se você quiser executar instâncias na versão 24.8 e uma na 24.9 por algum tempo, é melhor definir
max_authentication_methods_per_user= 1 nesse período para evitar possíveis incompatibilidades. #65277 (Arthur Passos). - Adicionado suporte a
ATTACH PARTITION ALL FROM. #61987 (Kirill Nikiforov). - Adiciona a configuração
input_format_json_empty_as_default, que, quando habilitada, trata campos vazios em entradas JSON como valores padrão. Fecha #59339. #66782 (Alexis Arnaud). - Adicionadas as funções
overlayeoverlayUTF8, que substituem trechos de uma string por outra. Exemplo:SELECT overlay('Hello New York', 'Jersey', 11)retornaHello New Jersey. #66933 (李扬). - Adicionar suporte a exclusões leves em partições
DELETE FROM [db.]table [ON CLUSTER cluster] [IN PARTITION partition_expr] WHERE expr;#67805 (sunny). - Implementada a comparação de valores do tipo de dado
Intervalde diferentes domínios (como segundos e minutos), que agora são convertidos para o menor supertipo comum. #68057 (Yarik Briukhovetskyi). - Adiciona a configuração
create_if_not_existspara adotar por padrão o comportamentoIF NOT EXISTSem instruções CREATE. #68164 (Peter Nguyen). - Agora é possível ler tabelas
Icebergno Azure e localmente. #68210 (Daniil Ivanik). - Agora é possível remover entradas do cache de consultas por tag. Por exemplo, a entrada do cache de consultas criada por
SELECT 1 SETTINGS use_query_cache = true, query_cache_tag = 'abc'agora pode ser removida comSYSTEM DROP QUERY CACHE TAG 'abc'. #68477 (Michał Tabaszewski). - Adicionada criptografia de armazenamento para named collections. #68615 (Pablo Marcos).
- Adicionada a coluna virtual
_headersao mecanismo de tabelaURL. Fecha #65026. #68867 (flynn). - Adicionada a tabela
system.projectionspara acompanhar as projeções disponíveis. #68901 (Jordi Villar). - Adiciona a nova função
arrayZipUnalignedpara compatibilidade com o Spark (onde ela se chamaarrays_zip), permitindo arrays não alinhados com base naarrayZiporiginal. #69030 (李扬). - Adicionados os comandos
cp/mvao aplicativo de linha de comando do cliente Keeper, para copiar/mover nós atomicamente. #69034 (Mikhail Artemenko). - Adiciona o argumento
scale(padrão:true) à funçãoarrayAUC, o que permite pular a etapa de normalização (issue #69609). #69717 (gabrielmcg44).
Funcionalidade experimental
- Adiciona a configuração
input_format_try_infer_variants, que permite inferir o tipoVariantdurante a inferência de esquema para formatos de texto quando há mais de um tipo possível para elementos de coluna/array. #63798 (Shaun Struwig). - Adiciona as funções agregadas
distinctDynamicTypes/distinctJSONPaths/distinctJSONPathsAndTypespara melhor introspecção do conteúdo do tipo de coluna JSON. #68463 (Kruglov Pavel). - Novo algoritmo para determinar a unidade de distribuição de marcas entre réplicas paralelas por meio de um hash consistente. Quantidades diferentes de marcas são escolhidas para diferentes padrões de leitura para melhorar o desempenho. #68424 (Nikita Taranov).
- Anteriormente, a complexidade algorítmica da lógica de desduplicação de partes no processamento de anúncios de réplicas paralelas era O(n^2), o que podia levar um tempo considerável em tabelas com muitas partes (ou partições). Esta alteração reduz a complexidade para O(n*log(n)). #69596 (Alexander Gololobov).
- Melhorias em view materializada atualizável: modo append (
... REFRESH EVERY 1 MINUTE APPEND ...) para adicionar linhas à tabela existente em vez de sobrescrever a tabela inteira, novas tentativas (desabilitadas por padrão, configuradas na seção SETTINGS da consulta), consultaSYSTEM WAIT VIEW <name>que aguarda a atualização em execução no momento, além de algumas correções. #58934 (Michael Kolupaev). - Adicionado
min_maxcomo um novo tipo de estatística (experimental). Ele oferece suporte à estimativa de predicados de intervalo em colunas numéricas, por exemplox < 100. #67013 (JackyWoo). - Melhora o
castOrDefaultem colunas Variant/Dynamic para que funcione quando os tipos internos não forem conversíveis de forma alguma. #67150 (Kruglov Pavel). - A replicação de um subconjunto de colunas agora está disponível por meio do MaterializedPostgreSQL. Fecha #33748. #69092 (Kruglov Kirill).
Melhoria de desempenho
- Implementada a leitura apenas dos arquivos necessários para o particionamento Hive. #68963 (Yarik Briukhovetskyi).
- Melhora o desempenho de JOIN reorganizando a tabela da direita pelas chaves quando as chaves da tabela são densas em hash joins LEFT ou INNER. #60341 (kevinyhzou).
- Melhora o desempenho de ALL JOIN ao acrescentar a lista de linhas de forma lazy. #63677 (kevinyhzou).
- Carrega os metadados do cache do sistema de arquivos de forma assíncrona durante a inicialização, para tornar as reinicializações mais rápidas (controlado pela configuração
load_metadata_asynchronously). #65736 (Daniel Pozo Escalona). - As funções
arrayemapforam otimizadas para processar certos casos comuns muito mais rapidamente. #67707 (李扬). - Otimização simples na leitura de strings ORC, especialmente quando uma coluna não contém NULLs. #67794 (李扬).
- Melhorado o desempenho geral das mesclagens ao reduzir a sobrecarga do agendamento de suas etapas. #68016 (Anton Popov).
- Acelera as solicitações ao S3 quando nenhum profile está definido, as credenciais não estão definidas e o IMDS não está disponível (por exemplo, quando você está consultando um bucket público em uma máquina fora da Cloud). Isso fecha #52771. #68082 (Alexey Milovidov).
- Desvirtualiza o leitor de formato em
RowInputFormatWithNamesAndTypespara obter algum ganho de desempenho. #68437 (李扬). - Adiciona a mesclagem paralela para a função de agregação
uniqao agregar com GROUP BY por chave, para maximizar a utilização da CPU. #68441 (Jiebin Sun). - Adiciona a configuração
output_format_orc_dictionary_key_size_thresholdpara permitir que o usuário habilite a codificação por dicionário para colunas string no formato de saídaORC. Isso ajuda a reduzir significativamente o tamanho do arquivoORCde saída e a melhorar o desempenho de leitura. #68591 (李扬). - Introduz a nova requisição RemoveRecursive do Keeper, que remove um nó com toda a sua subárvore. #69332 (Mikhail Artemenko).
- Acelera o desempenho de inserção em uma tabela com índice de similaridade vetorial ao adicionar dados ao índice vetorial em paralelo. #69493 (flynn).
- Reduz o uso de memória de inserções em JSON usando um tamanho adaptativo para o buffer de escrita. Muitos arquivos criados por uma coluna JSON em uma parte wide contêm pouca quantidade de dados, e não faz sentido alocar um buffer de 1 MB para eles. #69272 (Kruglov Pavel).
- Evita devolver uma thread ao thread pool da junção hash concorrente, para evitar que a consulta crie threads em excesso. #69406 (Duc Canh Le).
Melhoria
- CREATE TABLE AS agora também copia PRIMARY KEY, ORDER BY e cláusulas semelhantes. No momento, isso é compatível apenas com a família MergeTree de motores de tabela. #69076 (sakulali).
- Foram reforçadas as partes do código relacionadas à análise sintática de pequenas entidades. Os seguintes bugs (menores) foram encontrados e corrigidos: - se uma tabela
DeltaLakeestiver particionada por Bool, o valor da partição será sempre interpretado como false; - a tabelaExternalDistributedestava usando apenas um shard entre os endereços fornecidos; o valor da configuraçãomax_threadse de configurações semelhantes era impresso como'auto(N)'em vez deauto(N). #52503 (Alexey Milovidov). - Use métricas específicas de cgroup para contabilizar o uso de CPU, em vez de métricas de todo o sistema. #62003 (Nikita Taranov).
- O agendamento de E/S para discos S3 remotos agora é feito no nível dos fluxos dos sockets HTTP (em vez de requisições S3 inteiras) para resolver problemas de throttling com
bandwidth_limit. #65182 (Sergei Trifonov). - As funções
upperUTF8elowerUTF8anteriormente só conseguiam converter caracteres cirílicos para maiúsculas / minúsculas. Essa limitação foi removida, e agora caracteres de qualquer idioma são convertidos para maiúsculas/minúsculas. Exemplo:SELECT upperUTF8('Süden')agora retornaSÜDEN. #65761 (李扬). - Quando ocorre uma exclusão leve em uma tabela com projeção(ões), embora os usuários possam optar por gerar uma exceção (por padrão) ou descartar a projeção quando a exclusão leve ocorrer, agora há uma terceira opção: manter a exclusão leve e depois reconstruir a(s) projeção(ões). #66169 (jsc0218).
- Duas opções (
dns_allow_resolve_names_to_ipv4edns_allow_resolve_names_to_ipv6) foram adicionadas para permitir o bloqueio de conexões por família de IP. #66895 (MikhailBurdukov). - Tornar configurável a opção de ignorar Ctrl-Z (ignore_shell_suspend) no clickhouse-client. #67134 (Azat Khuzhin).
- Aprimora a validação de UTF-8 em formatos JSON de saída. Garante que JSON válido seja gerado em caso de determinadas sequências de bytes nos dados de resultado. #67938 (mwoenker).
- Adicionados eventos de perfil para merges e mutações, melhorando a introspecção. #68015 (Anton Popov).
- ODBC: obter http_max_tries a partir da configuração do servidor. #68128 (Rodolphe Dugé de Bernonville).
- Adicionado suporte a curingas para identificação de usuários na extensão SubjectAltName do X.509. #68236 (Marco Vilas Boas).
- Aprimorada a inferência de esquema para datas e horas. Agora,
DateTime64é usado apenas quando a data e hora têm parte fracionária; caso contrário, é usado oDateTimenormal. A inferência deDate/DateTimeagora está mais rigorosa, especialmente quandodate_time_input_format='best_effort', para evitar inferir datas e horas a partir de strings em casos limítrofes. #68382 (Kruglov Pavel). - Removido o código antigo de named collections de dictionaries e substituído pelo novo, que permite usar named collections criadas com DDL em dictionaries. Fecha #60936, fecha #36890. #68412 (Kseniia Sumarokova).
- Use HTTP/1.1 em vez de HTTP/1.0 (padrão) para autenticadores HTTP externos. #68456 (Aleksei Filatov).
- Adicionado um novo conjunto de métricas para introspecção do pool de threads, oferecendo informações mais detalhadas sobre o desempenho e o comportamento desse pool de threads. #68674 (filimonov).
- Adicionado suporte a parâmetros de consulta em inserts assíncronos com o formato
Values. #68741 (Anton Popov). - Suporte para
Date32emdateTruncetoStartOfInterval. #68874 (LiuNeng). - Adicionar as colunas
plan_step_nameeplan_step_descriptionàsystem.processors_profile_log. #68954 (Alexander Gololobov). - Suporte ao idioma espanhol nos dicionários embutidos. #69035 (Vasily Okunev).
- Adiciona a arquitetura da CPU à mensagem curta com informações sobre falha. #69037 (Konstantin Bogdanov).
- As consultas falharão mais rapidamente se não for possível estabelecer uma nova conexão com o Keeper durante as tentativas. #69148 (Raúl Marín).
- Atualizar o Database Factory para permitir que motores de banco de dados definidos pelo usuário tenham argumentos, configurações e sobrescritas de tabela (semelhante ao StorageFactory). #69201 (NikBarykin).
- O modo de restauração que substitui todos os motores de tabela externos e funções pelo motor
Null(configuraçõesrestore_replace_external_engines_to_null,restore_replace_external_table_functions_to_null) falhava se a tabela tivesse SETTINGS. Agora, nesse caso, ele remove os SETTINGS da definição da tabela e permite restaurar essas tabelas. #69253 (Ilya Yatsishin). - CLICKHOUSE_PASSWORD está corretamente escapado para XML no entrypoint da imagem do ClickHouse. #69301 (aohoyd).
- Permitir argumentos vazios para
arrayZip/arrayZipUnaligned, como já ocorreu com concat em https://github.com/ClickHouse/ClickHouse/pull/65887. Isso serve para compatibilidade com o Spark no backend CH do Gluten. #69576 (李扬). - Suporte a opções de SSL mais avançadas para a comunicação interna do Keeper (por exemplo, chaves privadas protegidas por senha). #69582 (Antonio Andelic).
- A análise de índices pode levar um tempo considerável em tabelas grandes com muitas partes ou partições. Essa mudança deve possibilitar interromper uma consulta pesada nessa etapa. #69606 (Alexander Gololobov).
- Mascaramento de informações sensíveis na função de tabela
gcs. #69611 (Vitaly Baranov). - Reconstrução da projeção para mesclagens que reduzem o número de linhas. #62364 (cangyin).
Correção de bug (mau funcionamento perceptível ao usuário em uma release estável oficial)
- Corrige a anexação de tabela quando o
dbnamedo PostgreSQL contém ”-” no engine MaterializedPostgreSQL, que é experimental e sem suporte. #62730 (takakawa). - Corrigido erro em colunas geradas no engine MaterializedPostgreSQL experimental e totalmente sem suporte quando a ordenação de adnum está quebrada #63161. Corrigido erro na coluna id com a expressão nextval como padrão no MaterializedPostgreSQL experimental e totalmente sem suporte quando há colunas geradas na tabela. Corrigido erro ao remover a publication com símbolos fora de [a-z1-9-]. #67664 (Kruglov Kirill).
- Storage Join com suporte a colunas Nullable na tabela da esquerda, corrige #61247. #66926 (vdimir).
- Resultado incorreto de consulta com réplicas paralelas (também ao distribuir consultas) quando o operador
INcontém conversão para Decimal(). O bug foi introduzido com o novo analisador. #67234 (Igor Nikonov). - Corrige o problema em que
alter modify order bygera metadados inconsistentes. #67436 (iceFireser). - Corrige o limite superior da função
fromModifiedJulianDay. O valor correto deveria ser9999-12-31, mas foi definido incorretamente como9999-01-01. #67583 (PHO). - Correção de um problema em que o índice não estava no início da tupla durante a consulta
IN. #67626 (Yarik Briukhovetskyi). - Corrigida a expiração no
RoleCache. #67748 (Vitaly Baranov). - Corrige blocos ausentes na window view devido à lentidão ao gravar na view. #67983 (Raúl Marín).
- Corrige um problema no MSan causado por um formato de data incorreto. #68105 (JackyWoo).
- Corrigida uma falha na filtragem de Parquet quando os tipos de dados no arquivo diferem substancialmente dos tipos solicitados (por exemplo,
... FROM file('a.parquet', Parquet, 'x String'), mas o arquivo contémx Int64). Sem essa correção, useinput_format_parquet_filter_push_down = 0como solução alternativa. #68131 (Michael Kolupaev). - Corrige travamento em
lag/leadintroduzido em #67091. #68262 (lgbo). - Tentativa de corrigir falha no Postgres quando a consulta é cancelada. #68288 (Kseniia Sumarokova).
- Após https://github.com/ClickHouse/ClickHouse/pull/61984,
schema_inference_make_columns_nullable=0ainda pode fazer com que colunas se tornemNullablenos formatos Parquet/Arrow. A mudança não era compatível com versões anteriores, e os usuários notaram as alterações no comportamento. Este PR faz com queschema_inference_make_columns_nullable=0volte a funcionar como antes (nenhuma colunaNullableserá inferida) e introduz o novo valorautopara essa configuração, que fará com que as colunas sejamNullableapenas se os dados contiverem informações sobre nulabilidade. #68298 (Kruglov Pavel). - Corrige #50868. Pequenos valores constantes de DateTime64 retornados por uma subconsulta aninhada em uma consulta distribuída eram incorretamente convertidos em NULL, causando erros e possivelmente resultados incorretos de consulta. #68323 (Shankar).
- Corrige a falta do modo de sincronização de réplica na consulta
SYSTEM SYNC REPLICA. #68326 (Duc Canh Le). - Corrige um erro na condição de chave. #68354 (Han Fei).
- Corrige falha ao remover ou renomear uma role usada no diretório externo de usuários LDAP. #68355 (Andrey Zvonov).
- Corrige o valor da coluna Progress de system.view_refreshes quando maior que 1 #68377. #68378 (megao).
- Processar corretamente as flags de regexp. #68389 (Han Fei).
- O operador de conversão de tipo no estilo PostgreSQL (
::) funciona corretamente até mesmo com literais hexadecimais e de strings binárias no estilo SQL (por exemplo,SELECT x'414243'::String). Isso corrige #68324. #68482 (Alexey Milovidov). - Pequena correção para https://github.com/ClickHouse/ClickHouse/pull/68131. #68494 (Chang chen).
- Corrige #68239 SAMPLE n, em que n é um inteiro. #68499 (Denis Hananein).
- Corrigido um bug em mann-whitney-utest quando os tamanhos de duas distribuições não são iguais. #68556 (Han Fei).
- Após uma reinicialização inesperada, a replicação do ReplicatedMergeTree não inicia devido ao tratamento anormal da parte marcada como covered-by-broken. #68584 (baolin).
- Corrige
LOGICAL_ERRORs quando as funçõessipHash64Keyed,sipHash128KeyedousipHash128ReferenceKeyedsão aplicadas a arrays ou tuplas vazios. #68630 (Robert Schulze). - O índice de texto completo pode filtrar colunas incorretas ao indexar várias colunas, pois não redefinia o row_id entre colunas diferentes; o procedimento para reproduzir o problema está em tests/queries/0_stateless/03228_full_text_with_multi_col.sql. Sem isso. #68644 (siyuan).
- Corrige os caracteres inválidos ‘\t’ e ‘\n’ em replica_name ao criar uma tabela Replicated, o que causa a interpretação incorreta de ‘réplica de origem’ em LogEntry. Mencionado na issue #68640. #68645 (Zhigao Hong).
- Adicionadas novamente as colunas virtuais
_tablee_databaseàs tabelas distribuídas. Elas estavam disponíveis até a versão 24.3. #68672 (Anton Popov). - Corrige possível erro
Size of permutation (0) is less than required (...)durante a permutação da coluna Variant. #68681 (Kruglov Pavel). - Corrige possível erro
DB::Exception: Block structure mismatch in joined block stream: different columns:com a nova coluna JSON. #68686 (Kruglov Pavel). - Corrige um problema com chaves constantes materializadas ao calcular o hash de maps com arrays como chaves nas funções
sipHash(64/128)Keyed. #68731 (Salvatore Mesoraca). - Faça com que
ColumnsDescription::toStringformate cada coluna usando o mesmo objetoIAST::FormatState. Isso resulta na gravação, em disco e no ZooKeeper, de metadados de colunas uniformes. #68733 (Miсhael Stetsyuk). - Corrige a mesclagem de dados agregados em
grouping sets. #68744 (Nikolai Kochetov). - Corrige um erro lógico ao criar uma MergeTree replicada, alterar uma coluna e depois executar MODIFY STATISTICS. #68820 (Han Fei).
- Corrigida a resolução de subcolunas dinâmicas de subconsultas no analisador. #68824 (Kruglov Pavel).
- Corrige o parsing dos metadados de tipos complexos no DeltaLake. Fecha #68739. #68836 (Kseniia Sumarokova).
- Corrigidas as inserções assíncronas nos casos em que os metadados da tabela são alterados (por consultas
ALTER ADD/MODIFY COLUMN) após a inserção, mas antes de serem gravadas na tabela. #68837 (Anton Popov). - Corrige uma exceção inesperada ao passar uma tupla vazia para um array. Isso corrige #68618. #68848 (Amos Bird).
- Corrigido o parsing de comandos de mutações que afetam apenas metadados. #68935 (János Benjamin Antal).
- Corrige um possível resultado incorreto durante a mesclagem do estado anyHeavy. #68950 (Raúl Marín).
- Corrigida a escrita em visões materializadas com a configuração
optimize_functions_to_subcolumnshabilitada. #68951 (Anton Popov). - Não use o cache de serializações em métodos const da coluna Dynamic. Isso poderia levar ao uso de um valor não inicializado ou até mesmo a uma condição de corrida durante agregações. #68953 (Kruglov Pavel).
- Corrigido erro de parsing em que NULL deveria ser inserido como valor padrão em alguns casos durante o parsing do tipo JSON. #68955 (Kruglov Pavel).
- Correção de
Content-Encoding, que não era enviado em algumas respostas compactadas. #64802. #68975 (Konstantin Bogdanov). - Houve casos em que o caminho era concatenado incorretamente e continha a parte
//; esse problema foi resolvido com a normalização do caminho. #69066 (Yarik Briukhovetskyi). - Corrigido erro lógico quando há async insert vazio. #69080 (Han Fei).
- Corrigida uma condição de corrida na exibição do progresso no clickhouse-client durante o cancelamento da consulta. #69081 (Sergei Trifonov).
- Corrige um bug em que o índice de similaridade vetorial (atualmente experimental) não era utilizado ao usar a distância de cosseno como função de distância. #69090 (flynn).
- Esta alteração corrige um problema em que tentar criar novamente um banco de dados Replicated após uma falha do servidor durante o processo inicial de criação podia resultar em erro. #69102 (Miсhael Stetsyuk).
- Não inferir o tipo Bool a partir de String em CSV quando
input_format_csv_try_infer_numbers_from_strings = 1, porque não permitimos a leitura de valores bool a partir de strings. #69109 (Kruglov Pavel). - Corrige erros de análise sintática no cliente ao processar consultas EXPLAIN AST INSERT quando
--multiqueryestá habilitado. #69123 (wxybear). - A cláusula
UNIONem subconsultas não era tratada corretamente em consultas com réplicas paralelas e causava o LOGICAL_ERRORDuplicate announcement received for replica. #69146 (Igor Nikonov). - Corrigida a propagação do argumento de estrutura no s3Cluster. Anteriormente, a expressão
DEFAULTda coluna podia se perder ao enviar a consulta para as réplicas no s3Cluster. #69147 (Kruglov Pavel). - Respeitar as configurações do formato Values durante a conversão de uma expressão para o tipo de destino. #69149 (Kruglov Pavel).
- Corrige o
clickhouse-client --queries-filepara usuários com acesso somente leitura (antes falhava comCannot modify 'log_comment' setting in readonly mode). #69175 (Azat Khuzhin). - Corrigida uma condição de corrida no clickhouse-client quando ele é redirecionado via pipe para um processo que termina antecipadamente. #69186 (vdimir).
- Corrige resultados incorretos de uniq e GROUP BY para tipos JSON/Dynamic. #69203 (Kruglov Pavel).
- Corrigida a detecção do formato no INFILE para inserts assíncronos. Se o formato não for explicitamente definido na cláusula FORMAT, ele poderá ser detectado pela extensão do arquivo INFILE. #69237 (Julia Kartseva).
- Após este problema, há várias réplicas de tabelas em produção em que o valor do nó
metadata_versioné igual a0e, ao mesmo tempo, difere da versão do nómetadatada respectiva tabela. Isso faz com que consultasalterfalhem nessas réplicas. #69274 (Miсhael Stetsyuk). - Marcar o tipo Dynamic como um tipo não seguro para chave primária, para evitar problemas com Fields. #69311 (Kruglov Pavel).
- Melhora a restauração das dependências de entidades de acesso. #69346 (Vitaly Baranov).
- Corrige o comportamento indefinido quando falham todas as tentativas de obter uma conexão para inserções. #69390 (Pablo Marcos).
- Fecha #69135. Se tentarmos reutilizar dados de join para
crossjoin, isso não é possível no ClickHouse no momento. É melhor manterhave_compressedemreuseJoinedData. #69404 (lgbo). - Faz a função
materialize()retornar uma coluna completa quando o parâmetro é uma coluna esparsa. #69429 (Alexander Gololobov). - Corrigido o
LOGICAL_ERRORna funçãosqidDecode(#69450). #69451 (Robert Schulze). - Correção rápida para o problema do s3queue no 24.6 ou para consulta CREATE com banco de dados replicado. #69454 (Kseniia Sumarokova).
- Corrigido um caso em que o consumo de memória ficava excessivamente alto devido ao squashing em consultas
INSERT INTO ... SELECTouCREATE TABLE AS SELECT. #69469 (Yarik Briukhovetskyi). - As instruções
SHOW COLUMNSeSHOW INDEXagora funcionam corretamente caso a tabela tenha pontos no nome. #69514 (Salvatore Mesoraca). - O uso do cache de consultas para consultas com modo de overflow != ‘throw’ agora é proibido. Isso evita situações em que resultados de consulta potencialmente truncados e incorretos poderiam ser armazenados no cache de consultas. (issue #67476). #69549 (Robert Schulze).
- Mantenha a ordem original das condições ao movê-las para prewhere. Anteriormente, a ordem podia mudar, o que podia levar à falha de consultas quando ela é importante. #69560 (Kruglov Pavel).
- Corrige o pré-processamento de várias solicitações do Keeper após o erro ZNOAUTH. #69627 (Antonio Andelic).
- Corrige o METADATA_MISMATCH que pode ter ocorrido devido a TTL com cláusula WHERE em DatabaseReplicated ao criar uma nova réplica. #69736 (Nikolay Degterinsky).
- Corrigidas as configurações
tracked_file_ttl_secdeStorageS3(Azure)Queue. Ela era gravada no Keeper com a chavetracked_file_ttl_sec, mas lida comotracked_files_ttl_sec, o que era um erro de digitação. #69742 (Kseniia Sumarokova). - Use tryconvertfieldtotype em gethyperrectangleforrowgroup. #69745 (Miсhael Stetsyuk).
- Reverte “Corrigir prewhere sem colunas e sem granularidade adaptativa do índice (quase sem nada)”’. Devido a essa reversão, alguns erros podem ocorrer ao ler partes de dados produzidas por versões antigas do CH (provavelmente de 2021 ou anteriores). #68897 (Alexander Gololobov).
Lançamento do ClickHouse 24.8 LTS, 2024-08-20. Apresentação, Vídeo
Alteração incompatível com versões anteriores
clickhouse-clienteclickhouse-localagora usam por padrão o modo de múltiplas consultas (em vez do modo de consulta única). Por exemplo,clickhouse-client -q "SELECT 1; SELECT 2"agora funciona, enquanto antes os usuários precisavam adicionar--multiquery(ou-n). A opção--multiquery/-ntornou-se obsoleta. Consultas INSERT em instruções com múltiplas consultas recebem tratamento especial com base na cláusula FORMAT: se o FORMAT forVALUES(o caso mais comum), o fim da instrução INSERT é representado por um ponto e vírgula;ao final da consulta. Para todos os outros FORMATs (por exemplo,CSVouJSONEachRow), o fim da instrução INSERT é representado por duas quebras de linha\n\nao final da consulta. #63898 (FFish).- Em versões anteriores, era possível usar uma sintaxe alternativa para os tipos de dados
LowCardinality, acrescentandoWithDictionaryao nome do tipo de dado. Era uma implementação funcional inicial, e nunca foi documentada nem exposta ao público. Agora, ela está obsoleta. Se você usou essa sintaxe, precisa executar ALTER em suas tabelas e renomear os tipos de dados paraLowCardinality. #66842 (Alexey Milovidov). - Corrige erros lógicos no armazenamento
Bufferusado com tabela de destino distribuída. Esta é uma alteração incompatível com versões anteriores: consultas que usamBuffercom uma tabela de destino distribuída podem deixar de funcionar se a tabela aparecer mais de uma vez na consulta (por exemplo, em um self-join). #67015 (vdimir). - Em versões anteriores, chamar funções para distribuições aleatórias baseadas na função gama (como Chi-Squared, Student e Fisher) com argumentos negativos próximos de zero levava a um tempo de computação muito longo ou a um loop infinito. Na nova versão, chamar essas funções com argumentos nulos ou negativos produzirá uma exceção. Isto encerra #67297. #67326 (Alexey Milovidov).
- A tabela de sistema
text_logestá habilitada por padrão. Isso é totalmente compatível com versões anteriores, mas você pode notar um aumento sutil no uso do disco local (essa tabela de sistema ocupa uma quantidade mínima de espaço em disco). #67428 (Alexey Milovidov). - Em versões anteriores,
arrayWithConstantpodia ser lenta quando solicitada a gerar arrays muito grandes. Na nova versão, ela está limitada a 1 GB por array. Isto encerra #32754. #67741 (Alexey Milovidov). - Corrige a formatação do modificador REPLACE (proíbe omitir os parênteses). #67774 (Azat Khuzhin).
- Backport em #68349: reimplementa o tipo
Dynamic. Agora, quando o limite de tipos de dados dinâmicos é atingido, novos tipos não são convertidos para String, mas armazenados em uma estrutura de dados especial em formato binário, com o tipo de dado codificado em binário. Agora, qualquer tipo já inserido na colunaDynamicpode ser lido dela como subcoluna. #68132 (Kruglov Pavel).
Novo recurso
- Adicionada uma nova configuração do
MergeTree,deduplicate_merge_projection_mode, para controlar as projeções durante as mesclagens (para motores específicos) e a consultaOPTIMIZE DEDUPLICATE. Opções compatíveis:throw(gera uma exceção caso a projeção não tenha suporte completo para o motor *MergeTree),drop(remove a projeção durante a mesclagem se ela própria não puder ser mesclada de forma consistente) erebuild(reconstrói a projeção do zero, o que é uma operação pesada). #66672 (jsc0218). - Adiciona a coluna virtual
_etagao mecanismo de tabela S3. Corrige #65312. #65386 (skyoct). - Foi adicionado um mecanismo de marcação (
namespace) ao cache de consultas. As mesmas consultas com tags diferentes são consideradas distintas pelo cache de consultas. Exemplo:SELECT 1 SETTINGS use_query_cache = 1, query_cache_tag = 'abc'eSELECT 1 SETTINGS use_query_cache = 1, query_cache_tag = 'def'agora criam entradas distintas no cache de consultas. #68235 (sakulali). - Agora há suporte a mais variantes de strictness de JOIN (
LEFT/RIGHT SEMI/ANTI/ANY JOIN) com condições de desigualdade que envolvem colunas das tabelas da esquerda e da direita. Ex.:t1.y < t2.y(consulte a configuraçãoallow_experimental_join_condition). #64281 (lgbo). - Interpretar o particionamento no estilo Hive para diferentes motores (
File,URL,S3,AzureBlobStorage,HDFS). O particionamento no estilo Hive organiza os dados em subdiretórios particionados, tornando mais eficiente consultar e gerenciar grandes volumes de dados. Atualmente, ele cria apenas colunas virtuais com o nome e os dados correspondentes. O próximo PR introduzirá a filtragem de dados adequada (ganho de desempenho). #65997 (Yarik Briukhovetskyi). - Adicionada a função
printfpara compatibilidade com o Spark (mas você pode usar a funçãoformatjá existente). #66257 (李扬). - Adicionadas as opções
restore_replace_external_engines_to_nullerestore_replace_external_table_functions_to_nullpara substituir motores externos e table_engines pelo motorNull, o que pode ser útil para testes. Deve funcionar com RESTORE e com a criação explícita de tabelas. #66536 (Ilya Yatsishin). - Adicionado suporte à leitura da geometria
MULTILINESTRINGno formatoWKTusando a funçãoreadWKTLineString. #67647 (Jacob Reckhard). - Adiciona uma nova função de tabela
fuzzQuery. Essa função permite modificar uma string de consulta específica com variações aleatórias. Exemplo:SELECT query FROM fuzzQuery('SELECT 1') LIMIT 5;. #67655 (pufit). - Adiciona a consulta
ALTER TABLE ... DROP DETACHED PARTITION ALLpara remover todas as partições em estado detached. #67885 (Duc Canh Le). - Adiciona a estatística
rows_before_aggregation_at_leastà resposta da consulta quando uma nova configuração,rows_before_aggregation, está habilitada. Essa estatística representa o número de linhas lidas antes da agregação. No contexto de uma consulta distribuída, ao usargroup byou a função de agregaçãomaxsem umlimit,rows_before_aggregation_at_leastpode refletir o número de linhas acessadas pela consulta. #66084 (morning-color). - Suporte à consulta
OPTIMIZEem tabelasJoinpara reduzir o uso de memória. #67883 (Duc Canh Le). - Permite executar a consulta instantaneamente no play ao adicionar
&run=1à URL #66457 (Aleksandr Musorin).
Recurso experimental
- Implementado um novo tipo de dado
JSON. #66444 (Kruglov Pavel). - Adicionado o novo engine de tabela
TimeSeries. #64183 (Vitaly Baranov). - Adicionado um novo engine de armazenamento experimental
Kafkapara armazenar offsets no Keeper em vez de depender do commit deles no Kafka. Isso torna atômico o commit nas tabelas do ClickHouse em relação ao consumo da fila. #57625 (János Benjamin Antal). - Passa a usar um método adaptativo para calcular o tamanho da tarefa de leitura (adaptativo significa que ele depende dos tamanhos das colunas lidas) para réplicas paralelas. #60377 (Nikita Taranov).
- Adicionado o tipo de estatística
count_min(count-min sketches), que fornece estimativas de seletividade para predicados de igualdade, comocol = 'val'. Os tipos de dados compatíveis são string, date, datetime e tipos numéricos. #65521 (JackyWoo).
Melhoria de desempenho
- A configuração
optimize_functions_to_subcolumnsvem habilitada por padrão. #68053 (Anton Popov). - Armazena os metadados do diretório de disco
plain_rewritableno layout__meta, separadamente dos dados do MergeTree no armazenamento de objetos. Move o discoplain_rewritablepara uma estrutura plana de diretórios. #65751 (Julia Kartseva). - Melhora o squashing de colunas (uma operação que ocorre em consultas INSERT) para os tipos
String/Array/Map/Variant/Dynamic, reservando antecipadamente a memória necessária para todas as subcolunas. #67043 (Kruglov Pavel). - Acelera
SYSTEM FLUSH LOGSe faz flush dos logs no desligamento. #67472 (Sema Checherinda). - Melhora o desempenho geral das merges ao reduzir a sobrecarga das etapas de agendamento. #68016 (Anton Popov).
- Acelera a remoção de tabelas na consulta
DROP DATABASE, aumentando o valor padrão dedatabase_catalog_drop_table_concurrencypara 16. #67228 (Nikita Mikhaylov). - Evita alocar capacidade excessiva para a coluna de array ao gravar em ORC. O desempenho aumenta em 15% para uma coluna Array. #67879 (李扬).
- Acelera significativamente as mutações em MergeTree não replicado #66911 #66909 (Alexey Milovidov).
Melhoria
- A configuração
allow_experimental_analyzerfoi renomeada paraenable_analyzer. O nome antigo é mantido como um alias. Isso significa que o Analyzer não está mais em beta e foi oficialmente promovido para produção. #66438 (Nikita Mikhaylov). - Melhoria na inferência de esquema de valores de data e hora. Agora,
DateTime64é usado apenas quando a data e hora tem parte fracionária; caso contrário, usa-se oDateTimecomum. A inferência deDate/DateTimeagora está mais rigorosa, especialmente quandodate_time_input_format='best_effort', para evitar inferir valores de data e hora a partir de strings em casos-limite. #68382 (Kruglov Pavel). - O servidor ClickHouse agora oferece suporte à nova configuração
max_keep_alive_requests. Para conexões HTTP keep-alive com o servidor, ela funciona em conjunto comkeep_alive_timeout— se o tempo limite de inatividade não tiver expirado, mas já tiverem sido feitas mais demax_keep_alive_requestssolicitações por essa conexão, ela será fechada pelo servidor. #61793 (Nikita Taranov). - Várias melhorias no dashboard avançado. Fecha #67697. Fecha #63407. Fecha #51129. Fecha #61204. #67701 (Alexey Milovidov).
- Não exigir privilégio para REMOTE ao criar uma tabela distribuída: basta um privilégio para o mecanismo Distributed. #65419 (jsc0218).
- Não inclua explicitamente os logs do Keeper na imagem Docker, para permitir sobrescrita. #65564 (Azat Khuzhin).
- Foi introduzida a configuração
use_same_password_for_base_backuppara as consultasBACKUPeRESTORE, permitindo criar e restaurar backups incrementais em/de arquivos protegidos por senha. #66214 (Samuele). - Ignora
async_load_databasespara a consultaATTACH(anteriormente, era possível que ATTACH retornasse antes que as tabelas fossem anexadas). #66240 (Azat Khuzhin). - Adicionados logs e métricas para conexões recusadas (quando não há recursos suficientes). #66410 (Alexander Tokmakov).
- Suporte adequado ao tipo
UUIDpara o engine MongoDB. #66671 (Azat Khuzhin). - Adicionadas métricas de latência de replicação e de tempo de recuperação. #66703 (Miсhael Stetsyuk).
- Adicionada a métrica
DiskS3NoSuchKeyErrors. #66704 (Miсhael Stetsyuk). - Garante que a cláusula
COMMENTfuncione em todos os motores de tabela. #66832 (Joe Lynch). - A função
mapFromArraysagora aceitaMap(K, V)como primeiro argumento. Por exemplo,SELECT mapFromArrays(map('a', 4, 'b', 4), ['aa', 'bb'])agora funciona e retorna{('a',4):'aa',('b',4):'bb'}. Além disso, se o 1º argumento for um Array, ele agora também pode ser do tipoArray(Nullable(T))ouArray(LowCardinality(Nullable(T))), desde que os valores reais do array não sejamNULL. #67103 (李扬). - Passa a ler a configuração do
clickhouse-locala partir de~/.clickhouse-local. #67135 (Azat Khuzhin). - Renomeie a configuração
input_format_orc_read_use_writer_time_zoneparainput_format_orc_reader_timezonee permita que o usuário defina o fuso horário do leitor. #67175 (kevinyhzou). - Reduzido o nível do erro
Socket is not connectedquando a conexão HTTP é imediatamente resetada pela outra ponta após ser estabelecida, fecha #34218. #67177 (vdimir). - Adicionada a capacidade de carregar dashboards de
system.dashboardsa partir da configuração (uma vez definidos, eles substituem o conjunto padrão de dashboards). #67232 (Azat Khuzhin). - As window functions em SQL tradicionalmente usam snake case. O ClickHouse usa
camelCase, então foram criados novos aliases:denseRank()epercentRank(). Essas novas funções podem ser chamadas exatamente da mesma forma que as funções originaisdense_rank()epercent_rank(). Tanto a sintaxe em snake case quanto a em camelCase continuam disponíveis. Um novo teste para cada uma dessas funções também foi adicionado. Isso fecha #67042. #67334 (Peter Nguyen). - Detecta automaticamente o formato do arquivo de configuração se ele não for
.xml,.ymlou.yaml. Se o arquivo começar com <, pode ser XML; caso contrário, pode ser YAML. Isso é útil ao fornecer um arquivo de configuração por um pipe:clickhouse-server --config-file <(echo "hello: world"). #67391 (sakulali). - As funções
formatDateTimeeformatDateTimeInJodaSyntaxagora consideram o parâmetro de formato opcional. Se ele não for especificado, assumem-se as strings de formato%Y-%m-%d %H:%i:%seyyyy-MM-dd HH:mm:ss. Exemplo:SELECT parseDateTime('2021-01-04 23:12:34')agora retorna o valor DateTime2021-01-04 23:12:34(antes, isso gerava uma exceção). #67399 (Robert Schulze). - Repetir automaticamente as solicitações ao Keeper no KeeperMap quando falharem por timeout ou perda de conexão. #67448 (Antonio Andelic).
- Adicionado
-no-pieàs compilações do Linux Aarch64 para permitir a introspecção adequada e a simbolização dos stacktraces após a reinicialização do ClickHouse. #67916 (filimonov). - Adicionados eventos de perfil para merges e mutações, para facilitar a introspecção. #68015 (Anton Popov).
- Remoção de logs desnecessários para
MergeTreenão replicado. #68238 (Daniil Ivanik).
Melhoria em Build/Testes/Empacotamento
- A verificação de instabilidade dos testes de integração não executará cada caso de teste várias vezes para encontrar mais problemas nos testes e torná-los mais confiáveis. Ela usa a biblioteca
pytest-repeatpara executar o caso de teste várias vezes no mesmo ambiente. É importante limpar tabelas e outras entidades ao final de um caso de teste para que ele seja aprovado. A repetição é muito mais rápida do que várias execuções do pytest, pois inicia os contêineres necessários apenas uma vez. #66986 (Ilya Yatsishin). - Desbloqueado o uso do CLion com ClickHouse. Em versões anteriores, o CLion congelava por um minuto a cada tecla pressionada. Isso fecha #66994. #66995 (Alexey Milovidov).
- getauxval: evita uma falha durante um re-exec do sanitizer devido à alta entropia de ASLR em kernels Linux mais recentes. #67081 (Raúl Marín).
- Algumas partes do código do cliente foram extraídas para um único arquivo, e o nível mais alto possível de otimização é aplicado a elas mesmo em builds de depuração. Isso fecha: #65745. #67215 (Nikita Mikhaylov).
correção de bug
- Aplicável apenas ao tipo de dados Variant experimental. Corrige falha com o tipo Variant + AggregateFunction. #67122 (Kruglov Pavel).
- Corrige travamento no DistributedAsyncInsert quando a conexão está vazia. #67219 (Pablo Marcos).
- Corrige o travamento de
uniqeuniqThetacom o argumentotuple(). Fecha #67303. #67306 (flynn). - Corrige #66026. Evita percorrer argumentos não resolvidos de função de tabela em
ReplaceTableNodeToDummyVisitor. #67522 (Dmitry Novik). - Corrigido um possível estouro de pilha na função
JSONMergePatch. Essa função foi renomeada dejsonMergePatchparaJSONMergePatchporque o nome anterior estava incorreto. O nome anterior ainda é mantido por compatibilidade. Melhorado o diagnóstico de erros na função. Isso encerra #67304. #67756 (Alexey Milovidov). - Corrigida uma desreferenciação de ponteiro NULL, acionada por uma consulta especialmente elaborada, que derrubava o servidor por meio de hopEnd, hopStart, tumbleEnd e tumbleStart. #68098 (Salvatore Mesoraca).
- Corrigido
Not-ready Setem algumas tabelas de sistema ao aplicar filtros com subconsultas. #66018 (Michael Kolupaev). - Corrigida a leitura das subcolunas após a consulta
ALTER ADD COLUMN. #66243 (Anton Popov). - Corrige literais booleanos na consulta enviada para o banco de dados externo (para motores como
PostgreSQL). #66282 (vdimir). - Corrige a formatação da consulta com expressão
JOIN ONcom alias, por exemplo,... JOIN t2 ON (x = y) AS e ORDER BY xdeve ser formatada como... JOIN t2 ON ((x = y) AS e) ORDER BY x. #66312 (vdimir). - Corrigido
cluster()para o segredo entre servidores (preserva o usuário inicial como antes). #66364 (Azat Khuzhin). - Corrige um possível erro em tempo de execução ao converter um campo Array com valores nulos para Array(Variant). #66727 (Kruglov Pavel).
- Correção de deadlock ocasional em Context::getDDLWorker. #66843 (Alexander Gololobov).
- Corrige a criação da tabela KeeperMap após um drop incompleto. #66865 (Antonio Andelic).
- Corrigido o erro de parte corrompida ao restaurar para um disco
s3_plain_rewritable. #66881 (Vitaly Baranov). - Em casos raros, o ClickHouse podia considerar as partes corrompidas devido a algumas projeções inesperadas no disco. Agora isso foi corrigido. #66898 (alesapin).
- Corrige a detecção incorreta de formato na inferência de esquema, que poderia levar ao erro lógico Format doesn’t support schema inference. #66899 (Kruglov Pavel).
- Corrige um possível deadlock ao cancelar uma consulta com réplicas paralelas. #66905 (Nikita Taranov).
- Proíbe
create as selectmesmo quandodatabase_replicated_allow_heavy_createestá definido. Isso foi proibido incondicionalmente na 23.12 e acidentalmente permitido por essa configuração na 24.7, que não chegou a ser lançada. #66980 (vdimir). - A leitura de
numberspodia, incorretamente, gerar uma exceção quando o limitemax_rows_to_readestava definido. Isso fecha #66992. #66996 (Alexey Milovidov). - Adicionada a conversão adequada de tipos às funções de janela lagInFrame e leadInFrame - corrige o teste do msan. #67091 (Yakov Olkhovskiy).
- TRUNCATE DATABASE era usado para interromper a replicação como se fosse uma consulta DROP DATABASE; isso foi corrigido. #67129 (Alexander Tokmakov).
- Use um contexto de cliente separado em
clickhouse-local. #67133 (Vitaly Baranov). - Corrigido o erro
Cannot convert column because it is non constant in source stream but must be constant in result.em uma consulta que lê da tabelaMergesobre a tabelaDistriburtedcom um shard. #67146 (Nikolai Kochetov). - Funcionamento correto de
ORDER BY allcomenable_order_by_alldesabilitado e réplicas paralelas (inclusive em consultas distribuídas). #67153 (Igor Nikonov). - Corrige o uso incorreto de input_format_max_bytes_to_read_for_schema_inference no cache de schema. #67157 (Kruglov Pavel).
- Corrigido o vazamento de memória em count distinct quando uma exceção era gerada durante o group by com uma única chave Nullable. #67171 (Jet He).
- Corrige um erro na otimização que converte
OUTER JOINemINNER JOIN. Isso encerra #67156. Isso encerra #66447. O bug foi introduzido em https://github.com/ClickHouse/ClickHouse/pull/62907. #67178 (Maksim Kita). - Corrige o erro
Conversion from AggregateFunction(name, Type) to AggregateFunction(name, Nullable(Type)) is not supported. O problema era causado pela otimizaçãooptimize_rewrite_aggregate_function_with_if. Corrige #67112. #67229 (Nikolai Kochetov). - Corrige o travamento de consulta ao usar tupla vazia como lhs da função IN. #67295 (Duc Canh Le).
- Era possível criar um JSON com aninhamento muito profundo que acionava um estouro de pilha ao ignorar campos desconhecidos. Isso encerra #67292. #67324 (Alexey Milovidov).
- Corrigido o problema ao anexar a tabela ReplicatedMergeTree após uma exceção durante a inicialização. #67360 (Antonio Andelic).
- Corrige falha de segmentação causada por desvinculação incorreta do grupo de threads em
Aggregator. #67385 (Antonio Andelic). - Corrigido mais um caso em que uma função não determinística é especificada na PK. #67395 (Nikolai Kochetov).
- Corrigido um problema em que o índice
bloom_filterquebrava consultas com condições um pouco incomuns, como(k=2)=(k=2)ouhas([1,2,3], k). #67423 (Michael Kolupaev). - Interpretar corretamente o nome de arquivo/URI que contém
::se não for um arquivo compactado. #67433 (Antonio Andelic). - Corrigida a espera pelas tarefas em
~WriteBufferFromS3casoWriteBufferfosse cancelado. #67459 (Kseniia Sumarokova). - Proteção dos diretórios temporários das partes contra remoção durante o RESTORE. #67491 (Vitaly Baranov).
- Corrigida a execução de funções aninhadas com curto-circuito. #67520 (Kruglov Pavel).
- Corrigido
Logical error: Expected the argument №N of type T to have X rows, but it has 0. O erro podia ocorrer em uma consulta remota com expressão constante emGROUP BY(com o novo analisador). #67536 (Nikolai Kochetov). - Correção de join em tupla com
NULLs: algumas consultas com o novo analisador eNULLdentro da tupla na cláusulaJOIN ONretornavam resultados incorretos. #67538 (vdimir). - Corrigido o reagendamento redundante de FileCache::freeSpaceRatioKeepingThreadFunc() no caso de cache cheio e sem possibilidade de evicção. #67540 (Kseniia Sumarokova).
- Corrige a inserção em motores do tipo stream (Kafka, RabbitMQ, NATS) por meio da interface HTTP. #67554 (János Benjamin Antal).
- Correção da função
toStartOfWeek, que retornava um resultado incorreto com um valor pequeno deDateTime64. #67558 (Yarik Briukhovetskyi). - Corrigida a criação de view com CTE recursiva. #67587 (Yakov Olkhovskiy).
- Corrige
Logical error: 'file_offset_of_buffer_end <= read_until_position'no cache do filesystem. Fecha #57508. #67623 (Kseniia Sumarokova). - Corrige #62282. A chamada para
convertFieldToString()foi removida, e foi adicionado código de serialização específico para cada tipo de dado. A substituição em view parametrizada não funcionava para vários tipos de dados quando o valor do parâmetro era uma função ou expressão que retornava uma instância de tipo de dado. #67654 (Shankar). - Corrige travamento em
percent_rank. O tipo de frame padrão depercent_rankfoi alterado pararange unbounded preceding and unbounded following. O frame de janela padrão deIWindowFunctionpassa a ser considerado, e agora funções de janela sem definição de frame de janela em SQL podem ser corretamente alocadas em diferentesWindowTransfomers. #67661 (lgbo). - Corrigido o recarregamento de UDFs SQL com UNION. Antes, reiniciar o servidor podia invalidar uma UDF. #67665 (Antonio Andelic).
- Corrige um possível erro lógico “Unexpected return type from if” com o tipo Variant experimental e com a configuração
use_variant_as_common_typehabilitada na função if com Tuples e Maps. #67687 (Kruglov Pavel). - Devido a um bug no kernel do Linux, uma consulta pode travar em
TimerDescriptor::drain. Isso fecha #37686. #67702 (Alexey Milovidov). - Corrigida a finalização do comando
RESTORE ON CLUSTER. #67720 (Vitaly Baranov). - Corrige o travamento do dicionário em caso de CANNOT_SCHEDULE_TASK durante o carregamento. #67751 (Azat Khuzhin).
- Consultas como
SELECT count() FROM t WHERE cast(c = 1 or c = 9999 AS Bool) SETTINGS use_skip_indexes=1, com índices de filtro de Bloom emc, agora funcionam corretamente. #67781 (jsc0218). - Corrige um resultado de agregação incorreto em algumas consultas com agregação sem chaves e com filtro, fecha #67419. #67804 (vdimir).
- Validar tipos de dados experimentais/suspeitos em ALTER ADD/MODIFY COLUMN. #67911 (Kruglov Pavel).
- Corrige o parsing de DateTime64 após constant folding em consultas distribuídas; fecha #66773. #67920 (vdimir).
- Corrige o resultado incorreto de
count()quando há uma função não determinística no predicado. #67922 (János Benjamin Antal). - Corrigido o cálculo do soft limit máximo de threads em ambientes containerizados em que o número de CPUs utilizáveis é limitado. #67963 (Robert Schulze).
- Agora, o ClickHouse não considera a part corrompida se a projeção não existir em disco, mas existir em
checksums.txt. #68003 (alesapin). - Corrigido o ignoramento de partes não afetadas em mutações com o novo analisador. Antes, com o analisador habilitado, os dados em uma parte podiam ser reescritos por uma mutação, mesmo que ela não afetasse essa parte de acordo com o predicado. #68052 (Anton Popov).
- Remove uma otimização incorreta de eliminação da ordenação em subconsultas que usam
OFFSET. Corrige #67906. #68099 (Graham Campbell). - Tentativa de corrigir
Block structure mismatch in AggregatingStep stream: different typesna otimização de projeções agregadas. #68107 (Nikolai Kochetov). - Tentativa de corrigir falha do postgres quando a consulta é cancelada. #68288 (Kseniia Sumarokova).
- Corrige a ausência do modo de sincronização de réplica na consulta
SYSTEM SYNC REPLICA. #68326 (Duc Canh Le).
Lançamento do ClickHouse 24.7, 2024-07-30. Apresentação, Vídeo
Alteração incompatível com versões anteriores
- Proibir
CRATE MATERIALIZED VIEW ... ENGINE Replicated*MergeTree POPULATE AS SELECT ...com bancos de dados Replicated. #63963 (vdimir). clickhouse-keeper-clientaceitará apenas caminhos em literais de string, comols '/hello/world', e não strings sem aspas, comols /hello/world. #65494 (Alexey Milovidov).- A métrica
KeeperOutstandingRequetsfoi renomeada paraKeeperOutstandingRequests. #66206 (Robert Schulze). - Remove o campo
is_deterministicda tabelasystem.functions. #66630 (Alexey Milovidov). - A função
tupleagora tentará construir tuplas nomeadas na consulta (controlado porenable_named_columns_in_function_tuple). Introduz a funçãotupleNamespara extrair nomes de tuplas. #54881 (Amos Bird). - Altera a forma como a desduplicação de visões materializadas funciona. Corrige vários casos, como: - na tabela de destino: os dados são divididos em 2 ou mais blocos, e esses blocos são considerados duplicados quando são inseridos em paralelo. - na tabela de destino da MV: blocos iguais são desduplicados; isso acontece quando a MV frequentemente produz dados iguais como resultado de dados de entrada diferentes devido à agregação. - na tabela de destino da MV: blocos iguais vindos de MVs diferentes são desduplicados. #61601 (Sema Checherinda).
- As funções
bitShiftLeftebitShitfRightretornam um erro para posições de shift fora dos limites. #65838 (Pablo Marcos).
Novo recurso
- Adiciona suporte a
ASOF JOINpara o algoritmofull_sorting_join. #55051 (vdimir). - Adiciona suporte à autenticação JWT no
clickhouse-client(estará disponível apenas no ClickHouse Cloud). #62829 (Konstantin Bogdanov). - Adiciona as funções SQL
changeYear,changeMonth,changeDay,changeHour,changeMinute,changeSecond. Por exemplo,SELECT changeMonth(toDate('2024-06-14'), 7)retorna a data2024-07-14. #63186 (cucumber95). - Introduz scripts de inicialização, que permitem executar consultas pré-configuradas na etapa de inicialização. #64889 (pufit).
- Adiciona suporte a
accept_invalid_certificatena configuração do cliente para permitir que ele se conecte via TCP seguro a um servidor em execução com certificado autoassinado — pode ser usado como forma abreviada das configurações correspondentes do clienteopenSSL:verificationMode=none+invalidCertificateHandler.name=AcceptCertificateHandler. #65238 (peacewalker122). - Adiciona
system.error_log, que contém o histórico de valores de erro da tabelasystem.errors, gravados periodicamente em disco. #65381 (Pablo Marcos). - Adiciona a função de agregação
groupConcat. É praticamente igual aarrayStringConcat( groupArray(column), ','). Pode receber 2 parâmetros: um delimitador de string e o número de elementos a serem processados. #65451 (Yarik Briukhovetskyi). - Adiciona o armazenamento AzureQueue. #65458 (Kseniia Sumarokova).
- Adiciona uma nova configuração para desabilitar/habilitar a gravação do índice de página em arquivos Parquet. #65475 (lgbo).
- Introduz a configuração do servidor
logger.console_log_levelpara controlar o nível de log no console (se habilitado). #65559 (Azat Khuzhin). - Anexa automaticamente um caractere curinga
*ao final de um caminho de diretório com a função de tabelafile. #66019 (Zhidong (David) Guo). - Adiciona a opção
--memory-usageao cliente no modo não interativo. #66393 (vdimir). - Torna o
clickhouse-disksum cliente interativo e adiciona disco local a partir do diretório local. #64446 (Daniil Ivanik). - Quando ocorre uma exclusão leve em uma tabela com projeção(ões), os usuários podem optar por lançar uma exceção (padrão) ou remover a projeção #65594 (jsc0218).
- Adiciona tabelas de sistema com as principais informações sobre todas as tabelas detached. #65400 (Konstantin Morozov).
Recurso Experimental
- Altera a serialização binária do tipo de dado
Variant: adiciona o modocompactpara evitar gravar o mesmo discriminador várias vezes em grânulos com uma única variante ou apenas valores NULL. Adiciona a configuração do MergeTreeuse_compact_variant_discriminators_serialization, habilitada por padrão. Observe que o tipo Variant ainda é experimental, e uma mudança incompatível com versões anteriores na serialização é aceitável. #62774 (Kruglov Pavel). - Adiciona suporte a armazenamento backend em disco para o clickhouse-keeper. #56626 (Han Fei).
- Refatora as funções JSONExtract, com suporte a mais tipos, incluindo o tipo Dynamic experimental. #66046 (Kruglov Pavel).
- Adiciona suporte a subcoluna
mapnula para subcolunasVarianteDynamic. #66178 (Kruglov Pavel). - Corrige a leitura de subcolunas
Dynamicde uma tabelaMemoryalterada. Antes, se o parâmetromax_typesde um tipo Dynamic fosse alterado na tabela Memory via alter, leituras subsequentes das subcolunas poderiam retornar resultados incorretos. #66066 (Kruglov Pavel). - Adiciona suporte a
cluster_for_parallel_replicasao usar réplicas paralelas com chave personalizada. Isso permite usar réplicas paralelas com chave personalizada em tabelas MergeTree. #65453 (Antonio Andelic).
Melhoria de desempenho
- Substituído o algoritmo de conversão de int para string por uma versão mais rápida (de um amdn/itoa modificado para um jeaiii/itoa modificado). #61661 (Raúl Marín).
- Os tamanhos das tabelas hash criadas por join (algoritmo
parallel_hash) agora são coletados e armazenados em cache. Essas informações serão usadas para pré-alocar espaço nas tabelas hash em execuções subsequentes de consultas e economizar tempo com redimensionamentos de tabela hash. #64553 (Nikita Taranov). - Otimizadas consultas com
ORDER BYna chave primária eWHEREcom condição de alta seletividade usando buffering. Isso é controlado pela configuraçãoread_in_order_use_buffering(habilitada por padrão) e pode aumentar o uso de memória da consulta. #64607 (Anton Popov). - Melhorado o desempenho do carregamento de metadados
plain_rewritable. #65634 (Alexey Milovidov). - O Attach de tabelas em discos read-only usará menos recursos por não carregar partes desatualizadas. #65635 (Alexey Milovidov).
- Suporte a hiperetângulo minmax para índices Set. #65676 (AntiTopQuark).
- Descarrega o índice primário de partes desatualizadas para reduzir o uso total de memória. #65852 (Anton Popov).
- As funções
replaceRegexpAllereplaceRegexpOneagora são significativamente mais rápidas quando o pattern é trivial, ou seja, não contém metacaracteres, classes de padrão, flags, caracteres de agrupamento etc. (Agradecimentos a Taiyang Li). #66185 (Robert Schulze). - Requisições ao S3: redução do tempo de retry para consultas e aumento da quantidade de retries para backups. 8,5 minutos e 100 retries para consultas; 1,2 horas e 1000 retries para restore de backup. #65232 (Sema Checherinda).
- Suporte à otimização de LIMIT no plano de consulta. Suporte a pushdown de LIMIT para o mecanismo PostgreSQL e table function. #65454 (Maksim Kita).
- Melhorado o balanceamento de carga do ZooKeeper. A sessão atual não expira até que os nós ideais fiquem disponíveis, apesar de
fallback_session_lifetime. Adicionado suporte a balanceamento com reconhecimento de AZ. #65570 (Alexander Tokmakov). - O DatabaseCatalog remove tabelas mais rapidamente usando até
database_catalog_drop_table_concurrencythreads. #66065 (Sema Checherinda).
Melhoria
- Balanceamento de carga do ZooKeeper aprimorado. A sessão atual não expira até que os nós ideais voltem a ficar disponíveis, apesar de
fallback_session_lifetime. Adicionado suporte a balanceamento com reconhecimento de zonas de disponibilidade (AZ). #65570 (Alexander Tokmakov). - A configuração
optimize_trivial_insert_selecté desabilitada por padrão. Na maioria dos casos, isso deve ser vantajoso. Ainda assim, se você estiver observando umINSERT SELECTmais lento ou aumento no uso de memória, poderá reabilitá-la ou usarSET compatibility = '24.6'. #58970 (Alexey Milovidov). - Imprimir o stack trace e informações de diagnóstico se
clickhouse-clientouclickhouse-localtravar. #61109 (Alexander Tokmakov). - O resultado de
SHOW INDEX | INDEXES | INDICES | KEYSera anteriormente ordenado pelos nomes das colunas da chave primária. Como isso não era intuitivo, agora o resultado é ordenado pela posição das colunas dentro da chave primária. #61131 (Robert Schulze). - Altera a forma como a desduplicação em visões materializadas funciona. Foram corrigidos vários casos, como: - na tabela de destino: os dados são divididos em 2 ou mais blocos, e esses blocos são considerados duplicados quando são inseridos em paralelo. - na tabela de destino da MV: blocos iguais são desduplicados; isso acontece quando a MV frequentemente produz dados iguais como resultado de dados de entrada diferentes devido à agregação. - na tabela de destino da MV: blocos iguais provenientes de MVs diferentes são desduplicados. #61601 (Sema Checherinda).
- Suporte à leitura de dados DeltaLake particionados. Inferência do esquema do DeltaLake pela leitura dos metadados, em vez dos dados. #63201 (Kseniia Sumarokova).
- Na camada TLS dos protocolos composáveis, apenas os parâmetros
certificateFileeprivateKeyFileeram aceitos. https://clickhouse.com/docs/operations/settings/composable-protocols. #63985 (Anton Ivashkin). - Adicionado o evento de perfil
SelectQueriesWithPrimaryKeyUsage, que indica quantas consultas SELECT usam a chave primária para avaliar a cláusula WHERE. #64492 (0x01f). - Correções e melhorias relacionadas ao
StorageS3Queue. Determinar o valor padrão des3queue_processing_threads_numcom base no número de núcleos físicos de CPU no servidor (em vez do valor padrão anterior, que era 1). Definir o valor padrão des3queue_loading_retriescomo 10. Corrigir a possível exceção vaga “Uncaught exception” na coluna de exceção desystem.s3queue. Não incrementar o contador de tentativas na exceçãoMEMORY_LIMIT_EXCEEDED. Mover o commit dos arquivos para uma etapa posterior à conclusão total da inserção na tabela, para evitar que arquivos sejam comitados sem terem sido inseridos. Adicionar as configuraçõess3queue_max_processed_files_before_commit,s3queue_max_processed_rows_before_commit,s3queue_max_processed_bytes_before_commit,s3queue_max_processing_time_sec_before_commitpara controlar melhor o commit e o tempo de flush. #65046 (Kseniia Sumarokova). - Suporte a aliases em funções de views parametrizadas (apenas no novo analisador). #65190 (Kseniia Sumarokova).
- Atualizado para mascarar a chave da conta nos logs do azureBlobStorage. #65273 (SmitaRKulkarni).
- Poda de partições em predicados
INquando a expressão de filtro faz parte da expressãoPARTITION BY. #65335 (Eduard Karacharov). arrayMin/arrayMaxpodem ser aplicados a todos os tipos de dados comparáveis. #65455 (pn).- Melhorada a contabilização de memória para cgroups v2 para excluir a parcela ocupada pelo cache de páginas. #65470 (Nikita Taranov).
- Não crie configurações de formato para cada linha ao serializar fragmentos para inserção na tabela EmbeddedRocksDB. #65474 (Duc Canh Le).
- Reduza o prompt do
clickhouse-localpara apenas:).getFQDNOrHostName()demora muito no macOS e, de qualquer forma, não queremos um hostname no prompt doclickhouse-local. #65510 (Konstantin Bogdanov). - Evita a exibição de uma mensagem do jemalloc sobre arenas por CPU em máquinas virtuais de baixo desempenho. #65532 (Alexey Milovidov).
- Desativa o download em segundo plano do cache do sistema de arquivos por padrão. Ele será reativado quando corrigirmos o problema do possível “Memory limit exceeded”, porque a desalocação de memória é feita fora do contexto da consulta (enquanto o buffer é alocado dentro do contexto da consulta) se usarmos threads de download em segundo plano. Além disso, precisamos adicionar uma configuração separada para definir o tamanho máximo de download para os workers em segundo plano (atualmente, ele é limitado por max_file_segment_size, que pode ser grande demais). #65534 (Kseniia Sumarokova).
- Adicionada uma nova opção à configuração
<config_reload_interval_ms>, que permite especificar com que frequência o ClickHouse recarregará a configuração. #65545 (alesapin). - Implemente a codificação binária para os tipos de dados do ClickHouse e adicione sua especificação à documentação. Use-a na serialização binária de Dynamic e permita seu uso nos formatos RowBinaryWithNamesAndTypes e Native por meio de configurações. #65546 (Kruglov Pavel).
- As configurações de servidor
compiled_expression_cache_sizeecompiled_expression_cache_elements_sizeagora são exibidas emsystem.server_settings. #65584 (Robert Schulze). - Adicionado suporte à identificação de usuários com base na extensão SubjectAltName do x509. #65626 (Anton Kozlov).
clickhouse-localrespeitarámax_server_memory_usageemax_server_memory_usage_to_ram_ratiodo arquivo de configuração. Ele também definirá, por padrão, o uso máximo de memória como 90% da memória do sistema, assim como oclickhouse-server. #65697 (Alexey Milovidov).- Adicione um script para fazer backup dos seus arquivos no ClickHouse. #65699 (Alexey Milovidov).
- Origem PostgreSQL com suporte a cancelamento de consultas. #65722 (Maksim Kita).
- Faz com que
allow_experimental_analyzerseja controlado pelo nó iniciador nas consultas distribuídas. Isso garante compatibilidade e comportamento correto durante operações em clusters com versões mistas. #65777 (Nikita Mikhaylov). - Respeita o limite de CPU do cgroup no Keeper. #65819 (Antonio Andelic).
- Permite o uso da função
concatcom argumentos vazios:) select concat();. #65887 (李扬). - Permite controlar as named collections no
clickhouse-local. #65973 (Alexey Milovidov). - Melhora nos eventos de perfil relacionados ao Azure. #65999 (alesapin).
- Suporte à leitura de arquivos ORC com base no fuso horário do gravador. #66025 (kevinyhzou).
- Adiciona configurações para controlar as conexões com o PostgreSQL. A configuração
postgresql_connection_attempt_timeoutespecifica o valor passado para o parâmetroconnect_timeoutda URL de conexão. A configuraçãopostgresql_connection_pool_retriesespecifica o número de tentativas para estabelecer uma conexão com o endpoint do PostgreSQL. #66232 (Dmitry Novik). - Reduz a imprecisão de
input_wait_elapsed_us/elapsed_usemsystem.processors_profile_log. #66239 (Azat Khuzhin). - Aprimora os ProfileEvents do cache do sistema de arquivos. #66249 (zhukai).
- Adicionadas configurações para ignorar a cláusula
ON CLUSTERnas consultas de gerenciamento de coleção nomeada com armazenamento replicado. #66288 (MikhailBurdukov). - A função
generateSnowflakeIDagora permite especificar um ID de máquina como parâmetro para evitar colisões em clusters de grande porte. #66374 (ZAWA_ll). - Desabilitar a suspensão com
Ctrl+Zno modo interativo. Essa é uma armadilha comum e não é o comportamento esperado para quase nenhum usuário. Imagino que apenas alguns usuários avançados mais extremos possam achar útil suspender aplicativos de terminal em segundo plano, mas não conheço nenhum. #66511 (Alexey Milovidov). - Adicionada uma opção para validar o tipo da chave primária em Dictionaries. Sem essa opção, em layouts simples, qualquer tipo de coluna será convertido implicitamente para UInt64. #66595 (MikhailBurdukov).
Correção de bug (mau funcionamento perceptível ao usuário em uma versão estável oficial)
- Verifica dependências cíclicas em consultas CREATE/REPLACE/RENAME/EXCHANGE e lança uma exceção se houver dependência cíclica. Antes, essas dependências cíclicas podiam causar um deadlock durante a inicialização do servidor. Também corrige alguns bugs na criação de dependências. #65405 (Kruglov Pavel).
- Corrige tamanhos inesperados em colunas
LowCardinalityem chamadas de função. #65298 (Raúl Marín). - Corrige um travamento em maxIntersections. #65689 (Raúl Marín).
- Corrigido o problema em que a cláusula
VALID UNTILna definição do usuário era redefinida após uma reinicialização. #66409 (Nikolay Degterinsky). - Corrigida a coluna de tempo restante em
SHOW MERGES. #66735 (Alexey Milovidov). Query was cancelledpode ter sido impresso duas vezes no clickhouse-client. Esse comportamento foi corrigido. #66005 (Nikita Mikhaylov).- Corrigido um travamento ao usar
MaterializedMySQL(que é um recurso experimental sem suporte) com TABLE OVERRIDE que mapeia um campo MySQL NULL para um campo ClickHouse NOT NULL. #54649 (Filipp Ozinov). - Corrigido erro lógico quando a expressão
PREWHEREnão lê nenhuma coluna e a tabela não tem granularidade adaptativa de índice (tabela muito antiga). #59173 (Alexander Gololobov). - Corrigido bug no buffer de cancelamento ao cancelar uma consulta. #64478 (Sema Checherinda).
- Corrigido o preenchimento das colunas das partes a partir dos metadados (quando
columns.txtnão existe). #64757 (Azat Khuzhin). - Corrige falha em
ALTER TABLE ... ON CLUSTER ... MODIFY SQL SECURITY. #64957 (pufit). - Corrige falha ao destruir o AccessControl: adiciona encerramento explícito. #64993 (Vitaly Baranov).
- Eliminar recursivamente funções injetivas nos argumentos das funções
uniq*. Isso costumava funcionar corretamente, mas foi quebrado no novo analisador. #65140 (Duc Canh Le). - Corrige nome de projeção inesperado em consulta com CTE. #65267 (wudidapaopao).
- Exigir o privilégio
dictGetpara acessar dicionários por consulta direta ou pelo mecanismo de tabelaDictionary. #65359 (Joe Lynch). - Corrige a autenticação do S3 por usuário com backups incrementais. #65481 (Antonio Andelic).
- Desabilite a otimização
non-intersecting-partspara consultas comFINALcaso a otimizaçãoread-in-orderesteja habilitada. Isso pode levar a um resultado incorreto da consulta. Como solução alternativa, desabilitedo_not_merge_across_partitions_select_finalesplit_parts_ranges_into_intersecting_and_non_intersecting_finalantes que essa correção seja incorporada. #65505 (Nikolai Kochetov). - Corrigida a ocorrência da exceção
Index out of bound for blob metadatacaso todos os arquivos do lote da lista fossem filtrados. #65523 (Kseniia Sumarokova). - Corrige NOT_FOUND_COLUMN_IN_BLOCK no merge de desduplicação de projeção. #65573 (Yakov Olkhovskiy).
- Corrigido um bug no MergeJoin. Uma coluna na serialização esparsa poderia ser tratada como uma coluna do seu tipo aninhado, embora a conversão necessária não fosse realizada. #65632 (Nikita Taranov).
- Corrigido um bug que impedia a aplicação correta do nível de compatibilidade ‘23.4’. #65737 (cw5121).
- Corrige a tabela ODBC com campos Nullable. #65738 (Rodolphe Dugé de Bernonville).
- Corrige uma condição de corrida em
TCPHandler, que poderia ocorrer em caso de erro fatal. #65744 (Kseniia Sumarokova). - Corrigidas exceções incorretas na função
parseDateTimecom os placeholders%Fe%D. #65768 (Antonio Andelic). - Para consultas que leem do
PostgreSQL, cancele a consulta interna noPostgreSQLse a consulta doClickHousejá tiver sido concluída. Caso contrário, a consulta doClickHousenão poderá ser cancelada até que a consulta interna noPostgreSQLseja concluída. #65771 (Maksim Kita). - Corrige um bug na lógica de curto-circuito quando são usados o analisador antigo e
dictGetOrDefault. #65802 (jsc0218). - Corrige um bug que fazia com que o EmbeddedRocksDB com escrita TTL corrompesse arquivos SST. #65816 (Duc Canh Le).
- As funções
bitTest,bitTestAllebitTestAnyagora retornam um erro se o índice de bit especificado estiver fora do intervalo válido #65818 (Pablo Marcos). - A configuração
join_any_take_last_rowé compatível com qualquer consulta que use hash join. #65820 (vdimir). - Melhor tratamento de condições de join que envolvem verificações
IS NULL(por exemplo,ON (a = b AND (a IS NOT NULL) AND (b IS NOT NULL) ) OR ( (a IS NULL) AND (b IS NULL) )é reescrita comoON a <=> b), corrigindo a otimização incorreta quando há condições diferentes deIS NULL. #65835 (vdimir). - Corrigido o aumento do uso de memória no S3Queue. #65839 (Kseniia Sumarokova).
- Corrigido o tratamento de empates em
arrayAUCpara corresponder ao sklearn. #65840 (gabrielmcg44). - Corrige possíveis problemas nas conexões TLS do protocolo de servidor MySQL. #65917 (Azat Khuzhin).
- Corrige possíveis problemas nas conexões TLS do protocolo de cliente MySQL. #65938 (Azat Khuzhin).
- Corrigido o tratamento de
SSL_ERROR_WANT_READ/SSL_ERROR_WANT_WRITEcom timeout zero. #65941 (Azat Khuzhin). - Adiciona as configurações ausentes
input_format_csv_skip_first_lines/input_format_tsv_skip_first_lines/input_format_csv_try_infer_numbers_from_strings/input_format_csv_try_infer_strings_from_quoted_tuplesao cache de inferência de esquema, pois elas podem alterar o esquema resultante. Isso evita resultados incorretos da inferência de esquema quando essas configurações são alteradas. #65980 (Kruglov Pavel). - A coluna _size no engine S3 e na função de tabela S3 indica o tamanho de um arquivo dentro do arquivo compactado, não o tamanho do próprio arquivo compactado. #65993 (Daniil Ivanik).
- Corrigida a resolução de subcolunas dinâmicas no analisador, evitando a leitura da coluna inteira ao ler subcolunas dinâmicas. #66004 (Kruglov Pavel).
- Corrige a mesclagem de configurações do from_env com sobrescritas de replace. #66034 (Azat Khuzhin).
- Corrige um possível travamento no
GRPCServerdurante o desligamento. #66061 (Vitaly Baranov). - Foram corrigidos vários casos na função
hascom argumentosLowCardinalitynão constantes. #66088 (Anton Popov). - Correção para
groupArrayIntersect. Havia um comportamento incorreto na funçãomerge(). Além disso, foi corrigido o comportamento emdeserialise()para dados numéricos e dados em geral. #66103 (Yarik Briukhovetskyi). - Corrigido bug de overflow de buffer na implementação de
unbin/unhex. #66106 (Nikita Taranov). - Desabilita a otimização
merge-filters, introduzida em #64760. Ela pode causar uma exceção se a otimização mesclar duas expressões de filtro sem aplicar avaliação de curto-circuito. #66126 (Nikolai Kochetov). - Corrigido o problema em que o servidor não conseguia interpretar arquivos Avro com arrays codificados com bloco de tamanho negativo, o que agora é permitido pela especificação do Avro. #66130 (Serge Klochkov).
- Corrigido um bug no cliente ZooKeeper: uma sessão podia ficar travada em um estado inutilizável após receber um erro de hardware do ZooKeeper. Por exemplo, isso podia acontecer devido ao “soft memory limit” no ClickHouse Keeper. #66140 (Alexander Tokmakov).
- Corrigido problema no SumIfToCountIfVisitor e em inteiros com sinal. #66146 (Raúl Marín).
- Corrige um caso raro de ausência de dados no resultado de uma consulta distribuída. #66174 (vdimir).
- Corrigida a ordem de parsing dos campos de metadados no StorageDeltaLake. #66211 (Kseniia Sumarokova).
- Não gere
TIMEOUT_EXCEEDEDpara o modonone_only_activededistributed_ddl_output_mode. #66218 (Alexander Tokmakov). - Corrigido o tratamento do limite em
system.numbers_mtquando nenhum índice pode ser usado. #66231 (János Benjamin Antal). - Corrigida a forma como o servidor ClickHouse detecta o número máximo de núcleos de CPU utilizáveis, conforme especificado pelo cgroups v2, quando o servidor é executado em um contêiner, como o Docker. Mais especificamente, os contêineres frequentemente executam seus processos no cgroup raiz, que tem um nome vazio. Nesse caso, o ClickHouse ignorava os limites de CPU definidos pelo cgroups v2. #66237 (filimonov).
- Corrige o erro
Not-ready setao usar uma subconsulta comINna restrição. #66261 (Nikolai Kochetov). - Corrige o reporte de erros durante a cópia para S3 ou AzureBlobStorage. #66295 (Vitaly Baranov).
- Impedir que o watchdog mantenha descritores de arquivos de log já desvinculados (rotacionados). #66334 (Aleksei Filatov).
- Corrige o bug em que o logicalexpressionoptimizerpass perdia o tipo lógico de uma constante. #66344 (pn).
- Corrige o erro
Column identifier is already registeredao usargroup_by_use_nulls=truee o novo analisador. #66400 (Nikolai Kochetov). - Corrige possíveis resultados incorretos em consultas que fazem join e filtram tabelas com engine externa (como PostgreSQL), devido a um pushdown de filtro excessivamente agressivo. A partir de agora, as condições da seção WHERE não serão enviadas ao banco de dados externo no caso de outer join com tabela externa. #66402 (vdimir).
- Adicionada a materialização da coluna ausente para CROSS JOIN. #66413 (lgbo).
- Corrige o erro
Cannot find columnem consultas com expressão constante na chaveGROUP BYe com o novo analisador ativado. #66433 (Nikolai Kochetov). - Evita um possível erro lógico na importação do formato Npy em caso de nível incorreto de aninhamento de array e corrige os testes para outros tipos de erro. #66461 (Yarik Briukhovetskyi).
- Corrige o resultado incorreto de count() quando há uma função não determinística no predicado. #66510 (Duc Canh Le).
- Rastrear corretamente o uso de memória em
Allocator::realloc. #66548 (Antonio Andelic). - Corrige a leitura de memória não inicializada ao calcular o hash de tuplas vazias. #66562 (Alexey Milovidov).
- Corrige um resultado inválido em consultas com
WINDOW. Isso podia acontecer quando as colunas dePARTITIONtêm serialização esparsa e funções de janela são executadas em paralelo. #66579 (Nikolai Kochetov). - Correção na remoção de coleções nomeadas do armazenamento local. #66599 (János Benjamin Antal).
- Corrigido:
column_lengthnão é atualizado emColumnTuple::insertManyFrom. #66626 (lgbo). - Corrige os erros
Unknown identifiereColumn is not under aggregate functionem consultas com a expressão(column IS NULL).O bug era acionado apenas por #65088, com o analisador desativado. #66654 (Nikolai Kochetov). - Corrige o erro
Method getResultType is not supported for QUERY query nodequando uma subconsulta escalar era usada como primeiro argumento de IN (com o novo analisador). #66655 (Nikolai Kochetov). - Corrige possível erro PARAMETER_OUT_OF_BOUND ao ler a subcoluna Variant. #66659 (Kruglov Pavel).
- Corrige um caso raro em que o merge fica travado após excluir uma coluna. #66707 (Raúl Marín).
- Corrigida a asserção
isUniqTypesao fazer insert select a partir de fontes remotas. #66722 (Sema Checherinda). - Corrigido um erro lógico em PrometheusRequestHandler. #66621 (Vitaly Baranov).
- Corrige um caso na função
indexHintencontrado pelo fuzzer. #66286 (Anton Popov). - Corrigida a formatação da AST de ‘create table b empty as a’. #64951 (Michael Kolupaev).
lançamento do ClickHouse 24.6, 2024-07-01. Apresentação, Vídeo
Alteração incompatível com versões anteriores
- Habilita o carregamento assíncrono de bancos de dados e tabelas por padrão. Veja
async_load_databasesem config.xml. Embora essa alteração seja totalmente compatível, ela pode introduzir uma diferença de comportamento. Quandoasync_load_databasesé false, como nas versões anteriores, o servidor não aceitará conexões até que todas as tabelas sejam carregadas. Quandoasync_load_databasesé true, como na nova versão, o servidor pode aceitar conexões antes que todas as tabelas sejam carregadas. Se uma consulta for feita a uma tabela que ainda não foi carregada, ela aguardará o carregamento da tabela, o que pode levar um tempo considerável. Isso pode alterar o comportamento do servidor se ele fizer parte de um grande sistema distribuído atrás de um balanceador de carga. No primeiro caso, o balanceador de carga pode receber uma recusa de conexão e fazer failover rapidamente para outro servidor. No segundo caso, o balanceador de carga pode se conectar a um servidor que ainda está carregando as tabelas, e a consulta terá latência maior. Além disso, se muitas consultas se acumularem no estado de espera, isso pode levar a um problema de “thundering herd” quando começarem a ser processadas simultaneamente. Isso só pode fazer diferença para backends distribuídos com alta carga. Você pode definir o valor deasync_load_databasescomo false para evitar esse problema. #57695 (Alexey Milovidov). - A setting
replace_long_file_name_to_hashé habilitada por padrão para tabelasMergeTree. #64457 (Anton Popov). Essa setting é totalmente compatível, e nenhuma ação é necessária durante a atualização. O novo formato de dados é suportado por todas as versões a partir da 23.9. Depois de habilitar essa setting, você não poderá mais fazer downgrade para a versão 23.8 ou anterior. - Algumas consultas inválidas falharão mais cedo durante o parsing. Observação: foi desabilitado o suporte a expressões KQL inline (a linguagem Kusto experimental) quando elas são colocadas em uma table function
kqlsem um literal de string, por exemplokql(garbage | trash)em vez dekql('garbage | trash')oukql($$garbage | trash$$). Esse recurso foi introduzido sem intenção e não deveria existir. #61500 (Alexey Milovidov). - Reformula o processamento paralelo no modo
Ordereddo armazenamentoS3Queue. Este PR é incompatível com versões anteriores para o modoOrderedse você usava as settingss3queue_processing_threads_numous3queue_total_shards_num. A settings3queue_total_shards_numfoi removida; anteriormente, era permitido usá-la apenas coms3queue_allow_experimental_sharded_mode, que agora está deprecated. Uma nova setting foi adicionada -s3queue_buckets. #64349 (Kseniia Sumarokova). - Foram adicionadas novas funções
snowflakeIDToDateTime,snowflakeIDToDateTime64,dateTimeToSnowflakeIDedateTime64ToSnowflakeID. Diferentemente das funções existentessnowflakeToDateTime,snowflakeToDateTime64,dateTimeToSnowflakeedateTime64ToSnowflake, as novas funções são compatíveis com a funçãogenerateSnowflakeID, ou seja, aceitam os Snowflake ID gerados porgenerateSnowflakeIDe produzem Snowflake ID do mesmo tipo quegenerateSnowflakeID(isto é,UInt64). Além disso, as novas funções usam por padrão a epoch UNIX (isto é, 1970-01-01), assim comogenerateSnowflakeID. Se necessário, uma epoch diferente, por exemplo a epoch do Twitter/X de 2010-11-04, também conhecida como 1288834974657 msec desde a epoch UNIX, pode ser informada. As antigas funções de conversão estão deprecated e serão removidas após um período de transição: para usá-las mesmo assim, habilite a settingallow_deprecated_snowflake_conversion_functions. #64948 (Robert Schulze).
Novo recurso
- Permite armazenar coleções nomeadas no ClickHouse Keeper. #64574 (Kseniia Sumarokova).
- Adicionado suporte a tuplas vazias. #55061 (Amos Bird).
- Adicionadas funções de codificação e decodificação da curva de Hilbert. #60156 (Artem Mustafin).
- Adicionar suporte à análise de índice com
hilbertEncode. #64662 (Artem Mustafin). - Adicionado suporte à leitura da geometria
LINESTRINGno formato WKT usando a funçãoreadWKTLineString. #62519 (Nikita Mikhaylov). - Permite anexar partes de um disco diferente. #63087 (Unalian).
- Adicionadas novas funções SQL
generateSnowflakeIDpara gerar IDs Snowflake no estilo do Twitter. #63577 (Danila Puzov). - Adicionadas as configurações
merge_workloademutation_workloadpara regular como os recursos são utilizados e compartilhados entre operações de merge, mutações e outras cargas de trabalho. #64061 (Sergei Trifonov). - Adicionado suporte à comparação entre os tipos
IPv4eIPv6usando o operador=. #64292 (Francisco J. Jurado Moreno). - Suporte a argumentos do tipo Decimal em funções matemáticas binárias (
pow,atan2,max2,min2,hypot). #64582 (Mikhail Gorshkov). - Adicionadas as funções SQL
parseReadableSize(bem como as variantesOrNulleOrZero). #64742 (Francisco J. Jurado Moreno). - Adiciona as configurações de servidor
max_table_num_to_throwemax_database_num_to_throwpara limitar o número de bancos de dados ou de tabelas em consultasCREATE. #64781 (Xu Jia). - Adicionada a coluna virtual
_timea armazenamentos do tipo arquivo (s3/file/hdfs/url/azureBlobStorage). #64947 (Ilya Golshtein). - Adicionadas as novas funções
base64URLEncode,base64URLDecodeetryBase64URLDecode. #64991 (Mikhail Gorshkov). - Adiciona a nova função
editDistanceUTF8, que calcula a distância de edição entre duas strings UTF-8. #65269 (LiuNeng). - Adiciona a configuração
http_response_headerspara dar suporte a cabeçalhos de resposta personalizados em handlers HTTP personalizados. #63562 (Grigorii). - Adicionada uma nova função de tabela
looppara permitir o retorno dos resultados da consulta em loop infinito. #63452 (Sariel). Isso é útil para testes. - Foram adicionadas duas colunas ao
system.query_log:used_privilegesemissing_privileges.used_privilegesé preenchida com os privilégios verificados durante a execução da consulta, emissing_privilegescontém os privilégios obrigatórios que estão faltando. #64597 (Alexey Katsman). - Foi adicionada a configuração
output_format_pretty_display_footer_column_namesque, quando habilitada, exibe os nomes das colunas no rodapé da tabela em tabelas longas (50 linhas por padrão), com o limite mínimo de linhas controlado poroutput_format_pretty_display_footer_column_names_min_rows. #65144 (Shaun Struwig).
Funcionalidade Experimental
- Adiciona estatísticas do tipo “número de valores distintos”. #59357 (Han Fei).
- Adiciona suporte a estatísticas com ReplicatedMergeTree. #64934 (Han Fei).
- Se “grupo de réplicas” estiver configurado para um banco de dados
Replicated, cria automaticamente um cluster que inclui réplicas de todos os grupos. #64312 (Alexander Tokmakov). - Adiciona as configurações
parallel_replicas_custom_key_range_lowereparallel_replicas_custom_key_range_upperpara controlar como as réplicas paralelas com shards dinâmicos paralelizam as consultas ao usar um filtro de intervalo. #64604 (josh-hildred).
Melhorias de desempenho
- Adiciona a possibilidade de reordenar linhas durante a inserção para otimizar o tamanho sem violar a ordem definida pela
PRIMARY KEY. Isso é controlado pela configuraçãooptimize_row_order(desativada por padrão). #63578 (Igor Markelov). - Adiciona um leitor nativo de Parquet, capaz de ler dados binários em Parquet diretamente em colunas do ClickHouse. Ele é controlado pela configuração
input_format_parquet_use_native_reader(desabilitada por padrão). #60361 (ZhiHong Zhang). - Suporte à otimização parcial da contagem trivial quando o filtro da consulta consegue selecionar intervalos exatos em tabelas MergeTree. #60463 (Amos Bird).
- Reduz o pico de uso de memória de
INSERTs multithread ao reunir fragmentos de várias threads em uma única transformação. #61047 (Yarik Briukhovetskyi). - Reduz o uso de memória ao usar o armazenamento de objetos do Azure com alocação fixa de memória, evitando a alocação de um buffer extra. #63160 (SmitaRKulkarni).
- Reduz o número de chamadas de função virtual em
ColumnNullable::size. #60556 (HappenLee). - Otimização do
splitByRegexpquando o argumento de expressão regular é um único caractere. #62696 (Robert Schulze). - Acelera a agregação por chaves de 8 e 16 bits ao manter o controle das chaves mínima e máxima utilizadas. Isso permite reduzir o número de células que precisam ser verificadas. #62746 (Jiebin Sun).
- Otimiza o operador IN quando o lado esquerdo é
LowCardinalitye o lado direito é um conjunto de constantes. #64060 (Zhiguo Zhou). - Use um pool de threads para inicializar e destruir tabelas hash no
ConcurrentHashJoin. #64241 (Nikita Taranov). - Mesclagens verticais otimizadas em tabelas com colunas esparsas. #64311 (Anton Popov).
- Foi habilitado o pré-carregamento de dados do sistema de arquivos remoto durante mesclagens verticais. Isso melhora a latência das mesclagens verticais em tabelas com dados armazenados em sistema de arquivos remoto. #64314 (Anton Popov).
- Redução de chamadas redundantes a
isDefaultemColumnSparse::filterpara melhorar o desempenho. #64426 (Jiebin Sun). - Aumento de velocidade dos comandos
find_super_nodesefind_big_familydo keeper-client ao fazer várias solicitações assíncronas de getChildren. #64628 (Alexander Gololobov). - Melhoria na função
least/greatestpara argumentos numéricos Nullable. #64668 (KevinyhZou). - Permite mesclar duas etapas consecutivas de filtragem de um plano de consulta. Isso melhora a otimização de
filter-push-downse a condição de filtro puder ser propagada da etapa pai para baixo. #64760 (Nikolai Kochetov). - Remova a otimização problemática na implementação vertical do FINAL e reative o algoritmo vertical do FINAL por padrão. #64783 (Duc Canh Le).
- Remova os nós ALIAS da expressão de filtro. Isso melhora ligeiramente o desempenho de consultas que usam
PREWHERE(com o novo analisador). #64793 (Nikolai Kochetov). - Reativado o cache de sessão do OpenSSL. #65111 (Robert Schulze).
- Adicionadas configurações para desabilitar a materialização de skip indexes e estatísticas durante as inserções (
materialize_skip_indexes_on_insertematerialize_statistics_on_insert). #64391 (Anton Popov). - Use o tamanho da memória alocada para calcular o tamanho do grupo de linhas e reduzir o pico de memória do gravador de Parquet no modo de thread única. #64424 (LiuNeng).
- Melhora o iterador da coluna esparsa para reduzir as chamadas a
size. #64497 (Jiebin Sun). - Atualizada a condição para usar cópia do lado do servidor para backups no Azure Blob Storage. #64518 (SmitaRKulkarni).
- Uso de memória das mesclagens verticais otimizado para tabelas com um grande número de skip indexes. #64580 (Anton Popov).
Melhoria
SHOW CREATE TABLEexecutado em tabelas de sistema agora mostrará o comentário, extremamente útil e exclusivo de cada tabela, que explicará por que essa tabela é necessária. #63788 (Nikita Mikhaylov).- O segundo argumento (escala) das funções
round(),roundBankers(),floor(),ceil()etrunc()agora pode ser não constante. #64798 (Mikhail Gorshkov). - Recarregamento a quente da política de armazenamento para tabelas
Distributedao adicionar um novo disco. #58285 (Duc Canh Le). - Evita um possível deadlock durante a análise de índices do MergeTree ao agendar threads em um serviço sobrecarregado. #59427 (Sean Haynes).
- Várias pequenas correções em casos extremos no suporte a proxy S3 & tunelamento. #63427 (Arthur Passos).
- Melhora a visibilidade dos reenvios do io_uring. Renomeia o evento de perfil
IOUringSQEsResubmits->IOUringSQEsResubmitsAsynce adiciona um novo,IOUringSQEsResubmitsSync. #63699 (Tomer Shafir). - Adicionada uma nova configuração,
metadata_keep_free_space_bytes, para manter espaço livre no disco de armazenamento de metadados. #64128 (MikhailBurdukov). - Adiciona métricas para acompanhar o número de diretórios criados e removidos pelo armazenamento de metadados
plain_rewritable, e o número de entradas no mapa em memória de local para remoto. #64175 (Julia Kartseva). - O cache de consultas agora considera consultas idênticas com configurações diferentes como sendo distintas. Isso aumenta a robustez nos casos em que configurações diferentes (por exemplo,
limitouadditional_table_filters) afetam o resultado da consulta. #64205 (Robert Schulze). - Suporte ao código de erro não padrão
QpsLimitExceededno armazenamento de objetos como erro passível de repetição. #64225 (Sema Checherinda). - Impedir a conversão de uma tabela MergeTree em replicada se o caminho do ZooKeeper dessa tabela já existir. #64244 (Kirill).
- Foi adicionada uma nova configuração
input_format_parquet_prefer_block_bytespara controlar a média de bytes dos blocos de saída, e o valor padrão deinput_format_parquet_max_block_sizefoi alterado para 65409. #64427 (LiuNeng). - Permitir ignorar o proxy para hosts especificados na variável de ambiente
no_proxye na configuração de proxy do ClickHouse. #63314 (Arthur Passos). - Sempre inicie o Keeper com uma quantidade suficiente de threads no pool global de threads. #64444 (Duc Canh Le).
- As configurações definidas no arquivo de configuração do usuário não afetam os merges e as mutações do
MergeTreecom armazenamento de objetos. #64456 (alesapin). - Suporte ao código de erro não padrão
TotalQpsLimitExceededno armazenamento de objetos como erro passível de nova tentativa. #64520 (Sema Checherinda). - Dashboard Avançado atualizado nas versões open-source e ClickHouse Cloud para incluir um gráfico de ‘Número máximo de conexões de rede simultâneas’. #64610 (Thom O’Connor).
- Melhorado o relatório de progresso em
zeros_mtegenerateRandom. #64804 (Raúl Marín). - Adiciona uma métrica assíncrona
jemalloc.profile.activepara indicar se a amostragem está ativa no momento. Este é um mecanismo de ativação adicional aoprof.active; ambos devem estar ativos para que a thread chamadora faça a amostragem. #64842 (Unalian). - Removida a marcação de
allow_experimental_join_conditioncomo importante. Essa marcação pode ter impedido a execução bem-sucedida de consultas distribuídas em um cluster com versões mistas. #65008 (Nikita Mikhaylov). - Adicionadas métricas assíncronas do servidor
DiskGetObjectThrottler*eDiskGetObjectThrottler*, que refletem o limite de taxa de solicitações por segundo definido pelas configurações de discos3_max_get_rpses3_max_put_rps, bem como a quantidade de solicitações atualmente disponível que ainda pode ser enviada sem atingir o limite de throttling do disco. As métricas são definidas para cada disco com um limite configurado. #65050 (Sergei Trifonov). - Inicializado o coletor global de traces para
Poco::ThreadPool(necessário para Keeper, etc.). #65239 (Kseniia Sumarokova). - Adicionada uma validação ao criar um usuário com
bcrypt_hash. #65242 (Raúl Marín). - Adiciona eventos de profile para o número de linhas lidas durante/após
PREWHERE. #64198 (Nikita Taranov). - Exibe a consulta no
EXPLAIN PLANcom réplicas paralelas. #64298 (vdimir). - Renomeado
allow_deprecated_functionsparaallow_deprecated_error_prone_window_functions. #64358 (Raúl Marín). - Respeitar a configuração
max_read_buffer_sizetambém para descritores de arquivo na função de tabelafile. #64532 (Azat Khuzhin). - Desabilita transações para mecanismos de armazenamento sem suporte, mesmo para visões materializadas. #64918 (alesapin).
- Proibir a cláusula
QUALIFYno analisador antigo. Como o analisador antigo ignoravaQUALIFY, isso podia levar à remoção inesperada de dados em mutações. #65356 (Dmitry Novik).
Correção de bug (comportamento incorreto perceptível ao usuário em uma versão estável oficial)
- Um bug na biblioteca Apache ORC foi corrigido: corrigido o cálculo das estatísticas do ORC durante a gravação para tipos sem sinal em todas as plataformas e para Int8 em ARM. #64563 (Michael Kolupaev).
- Restaurado o comportamento original de como o ClickHouse funciona e interpreta Tuples no formato CSV. Essa mudança efetivamente reverte https://github.com/ClickHouse/ClickHouse/pull/60994 e o disponibiliza apenas sob algumas configurações:
output_format_csv_serialize_tuple_into_separate_columns,input_format_csv_deserialize_separate_columns_into_tupleeinput_format_csv_try_infer_strings_from_quoted_tuples. #65170 (Nikita Mikhaylov). - Corrige um erro de permissão em que, em uma situação específica, um usuário pode elevar seus privilégios no banco de dados padrão sem as grants necessárias. #64769 (pufit).
- Corrigida falha com UniqInjectiveFunctionsEliminationPass e uniqCombined. #65188 (Raúl Marín).
- Corrige um bug no ClickHouse Keeper que causa divergência de digest durante o encerramento da sessão. #65198 (Aleksei Filatov).
- Use o alinhamento de memória correto para o combinator Distinct. Antes, podia ocorrer uma falha devido a uma alocação de memória inválida quando o combinator era usado. #65379 (Antonio Andelic).
- Corrigida falha ao usar
DISTINCTe funções de janela. #64767 (Igor Nikonov). - Corrigido o problema em que o índice de omissão ‘set’ não funcionava com IN e indexHint(). #62083 (Michael Kolupaev).
- Adicionado suporte à execução de funções ao atribuir valores a views parametrizadas. #63502 (SmitaRKulkarni).
- Corrigido o rastreamento de memória do Parquet. #63584 (Michael Kolupaev).
- Corrigida a leitura de colunas do tipo
Tuple(Map(LowCardinality(String), String), ...). #63956 (Anton Popov). - Corrige o erro
Cyclic aliasesem aliases cíclicos de tipos diferentes (expressão e função). #63993 (Nikolai Kochetov). - Essa correção usará um contexto redefinido corretamente, com o definidor adequado para cada view individual no pipeline da consulta. #64079 (pufit).
- Correção no analyzer: o erro “coluna não encontrada” ao usar INTERPOLATE foi corrigido. #64096 (Yakov Olkhovskiy).
- Corrige a criação de backups em buckets do S3 com credenciais diferentes das usadas no disco que contém o arquivo. #64153 (Antonio Andelic).
- O cache de consultas agora considera duas consultas idênticas em bancos de dados diferentes como distintas. O comportamento anterior podia ser usado para contornar a ausência de privilégios para ler de uma tabela. #64199 (Robert Schulze).
- Corrige uma possível interrupção causada por uma exceção não capturada em ~WriteBufferFromFileDescriptor no StatusFile. #64206 (Kruglov Pavel).
- Corrige o erro
duplicate aliasem consultas distribuídas comARRAY JOIN. #64226 (Nikolai Kochetov). - Corrige o
accurateCastinesperado de string para inteiro. #64255 (wudidapaopao). - Corrigida a simplificação de CNF quando algum grupo OR contém átomos mutuamente exclusivos. #64256 (Eduard Karacharov).
- Corrigida a validação do tamanho da Query Tree. #64377 (Dmitry Novik).
- Corrigido o
Logical error: Bad castna tabelaBuffercomPREWHERE. #64388 (Nikolai Kochetov). - Evitar logging recursivo em
blob_storage_logquando armazenado em armazenamento de objetos. #64393 (vdimir). - Corrigidas as consultas
CREATE TABLE ASpara tabelas com expressões padrão. #64455 (Anton Popov). - Corrigido o comportamento de
optimize_read_in_orderpara ORDER BY … NULLS FIRST / LAST em tabelas com chaves Nullable. #64483 (Eduard Karacharov). - Corrige os erros
Expression nodes list expected 1 projection nameseUnknown expression or identifierem consultas que usam aliases paraGLOBAL IN.. #64517 (Nikolai Kochetov). - Corrige um erro
Cannot find columnem consultas distribuídas com CTE constante na chave deGROUP BY. #64519 (Nikolai Kochetov). - Corrigido o loop de falhas quando a restauração de backup é bloqueada pela criação de uma MV com um definidor que ainda não foi restaurado. #64595 (pufit).
- Corrige a saída da função
formatDateTimeInJodaSyntaxquando um formatter gera uma quantidade ímpar de caracteres e o último caractere é0. Por exemplo,SELECT formatDateTimeInJodaSyntax(toDate('2012-05-29'), 'D')agora retorna corretamente150, em vez de15como antes. #64614 (LiuNeng). - Não reescreva a agregação se o combinador
-Ifjá estiver sendo usado. #64638 (Dmitry Novik). - Corrige a inferência de tipo de float (no caso de buffer pequeno, ou seja,
--max_read_buffer_size 1). #64641 (Azat Khuzhin). - Corrigido um bug que poderia fazer com que TTLs com expressões deixassem de funcionar. #64694 (alesapin).
- Corrigida a remoção das expressões
WHEREePREWHEREque são sempre verdadeiras (no novo analisador). #64695 (Nikolai Kochetov). - Corrigida a eliminação excessiva de partes causada por índices de texto baseados em tokens (
ngrambf,full_text) ao filtrar com base no resultado destartsWith,endsWith,match,multiSearchAny. #64720 (Eduard Karacharov). - Corrige o comportamento incorreto no escapamento ANSI CSI na função
UTF8::computeWidth. #64756 (Shaun Struwig). - Corrige um caso de remoção indevida de
ORDER BY/LIMIT BYem subconsultas. #64766 (Raúl Marín). - Correção (experimental) de JOIN desigual com subconsultas para conjuntos presentes nas condições mistas de JOIN. #64775 (lgbo).
- Corrige um travamento em um cache local no disco
plain_rewritable. #64778 (Julia Kartseva). - Correção no Keeper: retorna o valor correto para
zk_latest_snapshot_sizeno comandomntr. #64784 (Antonio Andelic). - Corrigido
Cannot find columnem consulta distribuída comARRAY JOINao usar a colunaNested. Corrige #64755. #64801 (Nikolai Kochetov). - Corrigido um vazamento de memória na política de cache SLRU. #64803 (Kseniia Sumarokova).
- Corrigida uma possível contabilização incorreta de memória em vários tipos de consultas: consultas que leem dados do S3, consultas via protocolo HTTP, inserts assíncronos. #64844 (Anton Popov).
- Corrige o erro
Block structure mismatchem consultas que leem da visão materializada comPREWHEREquando a visão materializada tem colunas de tipos diferentes da tabela de origem. Corrige #64611. #64855 (Nikolai Kochetov). - Corrige um travamento raro quando a tabela tem TTL com subconsulta + banco de dados replicado + réplicas paralelas + analyzer. É realmente muito raro, mas, por favor, não use TTLs com subconsultas. #64858 (alesapin).
- Corrige a duplicação de eventos
Deleteemblob_storage_logno caso de um lote grande de exclusão. #64924 (vdimir). - Corrigido o erro
Session moved to another serverdo [Zoo]Keeper, que podia ocorrer após a inicialização do servidor quando a configuração continha includes do [Zoo]Keeper. #64986 (Alexander Tokmakov). - Corrige a consulta
ALTER MODIFY COMMENT, que estava com problema em VIEWs parametrizadas, em https://github.com/ClickHouse/ClickHouse/pull/54211. #65031 (Nikolay Degterinsky). - Corrige o
host_idno DatabaseReplicated quando o parâmetrocluster_secure_connectionestá habilitado. Antes, todas as conexões dentro do cluster criadas pelo DatabaseReplicated não eram seguras, mesmo com o parâmetro habilitado. #65054 (Nikolay Degterinsky). - Correção do erro
Not-ready Setapós a otimizaçãoPREWHEREno StorageMerge. #65057 (Nikolai Kochetov). - Evite gravar em um buffer já finalizado em armazenamentos do tipo File. #65063 (Kruglov Pavel).
- Corrige a possível duração infinita de consulta no caso de aliases cíclicos. Corrige #64849. #65081 (Nikolai Kochetov).
- Corrige o erro
Unknown expression identifierem consultas remotas comINTERPOLATE (alias)(novo analisador). Corrige #64636. #65090 (Nikolai Kochetov). - Corrigido o problema ao mover operações aritméticas para fora da agregação. No novo analisador, a otimização era aplicada apenas uma vez. #65104 (Dmitry Novik).
- Corrigida a reescrita do nome da função de agregação no novo analisador. #65110 (Dmitry Novik).
- Responder com 5xx em vez de 200 OK em caso de timeout de recebimento ao ler (partes de) o corpo da solicitação do socket do cliente. #65118 (Julian Maicher).
- Corrige possível travamento em requisições hedged. #65206 (Azat Khuzhin).
- Corrige o bug na avaliação de curto-circuito dos dicionários Hashed e Hashed_Array, que pode ler um número não inicializado e causar vários erros. #65256 (jsc0218).
- Este PR garante que o tipo da constante (o segundo parâmetro do operador IN) permaneça sempre visível durante o processo de conversão de tipos do operador IN. Caso contrário, a perda de informações de tipo pode fazer com que algumas conversões falhem, como a conversão de DateTime para Date. Isso corrige (#64487). #65315 (pn).
melhoria em compilação/testes/empacotamento
- Adicionado suporte ao LLVM XRay. #64592 #64837 (Tomer Shafir).
- Unificadas as implementações de armazenamento s3/hdfs/azure em uma única classe que funciona com IObjectStorage. O mesmo vale para os armazenamentos *Cluster, lago de dados e Queue. #59767 (Kseniia Sumarokova).
- Refatorado o gravador de data part para remover dependências de MergeTreeData e DataPart. #63620 (Alexander Gololobov).
- Refatorados
KeyConditione a análise de key para melhorar o PartitionPruner e a otimização de contagem trivial. Isso foi separado de #60463. #61459 (Amos Bird). - Introduzidas asserções para verificar se todas as funções são chamadas com colunas do tamanho correto. #63723 (Raúl Marín).
- O serviço
networkpassa a ser obrigatório ao usar o script de initrcpara iniciar o daemon do servidor ClickHouse. #60650 (Chun-Sheng, Li). - Reduzido o tamanho de alguns testes lentos. #64387 #64452 (Raúl Marín).
- Reprodução de logs do ZooKeeper usando keeper-bench. #62481 (Antonio Andelic).
lançamento do ClickHouse 24.5, 2024-05-30. Apresentação, Vídeo
Alteração incompatível com versões anteriores
- “inverted indexes” foram renomeados para “full-text indexes”, um nome menos técnico e mais amigável para o usuário. Isso também altera os metadados internos da tabela e torna incompatíveis as tabelas com inverted indexes (experimentais) já existentes. Certifique-se de remover esses índices antes da atualização e recriá-los após a atualização. #62884 (Robert Schulze).
- O uso das funções
neighbor,runningAccumulate,runningDifferenceStartingWithFirstValueerunningDifferencefoi descontinuado (por ser propenso a erros). Em vez disso, devem ser usadas window functions adequadas. Para reativá-las, definaallow_deprecated_error_prone_window_functions = 1oucompatibility = '24.4'ou inferior. #63132 (Nikita Taranov). - As consultas em
system.columnsfuncionarão mais rapidamente quando houver um grande número de colunas, mas muitos bancos de dados ou tabelas não tiverem a permissãoSHOW TABLESconcedida. Observe que, em versões anteriores, se você concedesseSHOW COLUMNSa colunas individuais sem concederSHOW TABLESàs tabelas correspondentes, a tabelasystem.columnsmostraria essas colunas; na nova versão, porém, ela ignorará a tabela por completo. Também foram removidas as mensagens de log de trace “Access granted” e “Access denied”, que deixavam as consultas mais lentas. #63439 (Alexey Milovidov).
Novo recurso
- Adiciona o formato
Formpara ler e gravar um único registro no formatoapplication/x-www-form-urlencoded. #60199 (Shaun Struwig). - Adicionada a possibilidade de usar compressão em CROSS JOIN. #60459 (p1rattttt).
- Adicionada a possibilidade de fazer
CROSS JOINusando arquivos temporários se o tamanho exceder os limites. #63432 (p1rattttt). - Suporte a
joincom condições de desigualdade envolvendo colunas tanto da tabela à esquerda quanto da tabela à direita. Ex.:t1.y < t2.y. Para habilitar,SET allow_experimental_join_condition = 1. #60920 (lgbo). - Maps agora podem usar
Float32,Float64,Array(T),Map(K, V)eTuple(T1, T2, ...)como chaves. Fecha #54537. #59318 (李扬). - Introduz o carregamento em massa no
EmbeddedRocksDBpor meio da criação e ingestão de arquivo SST, em vez de depender da memtable interna do rocksdb. Isso ajuda a aumentar a velocidade de importação, especialmente para consultas insert de longa duração em tabelas StorageEmbeddedRocksDB. Além disso, adiciona configurações de tabela para oEmbeddedRocksDB. #59163 #63324 (Duc Canh Le). - Agora, é possível processar CRLF no formato TSV usando a configuração
input_format_tsv_crlf_end_of_line. Fecha #56257. #59747 (Shaun Struwig). - Uma nova configuração
input_format_force_null_for_omitted_fieldsque força valores NULL para campos ausentes. #60887 (Constantine Peresypkin). - Antes, nosso armazenamento S3 e a função de tabela S3 não ofereciam suporte à seleção a partir de arquivos compactados, como tarballs, zip e 7z. Agora, eles permitem iterar pelos arquivos dentro desses arquivos no S3. #62259 (Daniil Ivanik).
- Suporte à função condicional
clamp. #62377 (skyoct). - Adicionado o formato de saída
NPy. #62430 (豪肥肥). - Formato
Rawcomo sinônimo deTSVRaw. #63394 (Unalian). - Adicionada uma nova função SQL
generateUUIDv7para gerar UUIDs versão 7, também conhecidos como UUIDs baseados em timestamp com componente aleatório. Também foi adicionada a funçãoUUIDToNumpara extrair bytes de um UUID e a funçãoUUIDv7ToDateTimepara extrair o componente de timestamp de um UUID versão 7. #62852 (Alexey Petrunyaka). - No Linux e no MacOS, se o programa tiver o stdout redirecionado para um arquivo com uma extensão de compressão, use o método de compressão correspondente em vez de não usar nenhum (fazendo com que ele se comporte de forma semelhante a
INTO OUTFILE). #63662 (v01dXYZ). - Alterado o aviso para um alto número de tabelas anexadas, a fim de diferenciar tabelas, views e dicionários. #64180 (Francisco J. Jurado Moreno).
- Adiciona suporte à função
azureBlobStorageno servidor ClickHouse para usar o Azure Workload Identity na autenticação com o Azure blob storage. Se o parâmetrouse_workload_identityestiver definido na configuração, a Workload Identity será usada para autenticação. #57881 (Vinay Suryadevara). - Adiciona informações de TTL à tabela
system.parts_columns. #63200 (litlig).
Recursos experimentais
- Implementado o tipo de dados
Dynamic, que permite armazenar valores de qualquer tipo sem conhecê-los todos antecipadamente. O tipoDynamicestá disponível na configuraçãoallow_experimental_dynamic_type. Referência: #54864. #63058 (Kruglov Pavel). - Passou a ser permitido criar um banco de dados
MaterializedMySQLsem conexão com o MySQL. #63397 (Kirill). - Uma réplica de um banco de dados
Replicatedpassa a ser marcada automaticamente como perdida, e a recuperação é iniciada se alguma tarefa DDL falhar mais demax_retries_before_automatic_recovery(100 por padrão) vezes seguidas com o mesmo erro. Além disso, foi corrigido um bug que podia fazer com que entradas DDL fossem ignoradas quando uma exceção é lançada em um estágio inicial da execução da entrada. #63549 (Alexander Tokmakov). - Passam a ser considerados arquivos com falha em
s3queue_tracked_file_ttl_seces3queue_traked_files_limitparaStorageS3Queue. #63638 (Kseniia Sumarokova).
Melhoria de desempenho
- Menos contenção no cache do sistema de arquivos (parte 4). Permite manter o cache do sistema de arquivos sem preenchê-lo até o limite, fazendo descarte adicional em segundo plano (controlado por
keep_free_space_size(elements)_ratio). Isso ajuda a aliviar a pressão da reserva de espaço para consultas (no métodotryReserve). Além disso, isso é feito de forma lock-free sempre que possível, ou seja, sem bloquear o uso normal do cache. #61250 (Kseniia Sumarokova). - Ignora a mesclagem de blocos de projeção recém-criados durante
INSERT-s. #59405 (Nikita Taranov). - Processa funções de string
...UTF8de forma ASCII quando as strings de entrada contêm apenas caracteres ASCII. Inspirado em https://github.com/apache/doris/pull/29799. Ganho geral de desempenho de 1.07x~1.62x. Observe que o pico de uso de memória diminuiu em alguns casos. #61632 (李扬). - Desempenho aprimorado dos globs de seleção (
{}) no StorageS3. #62120 (Andrey Zvonov). - O HostResolver contém cada endereço IP várias vezes. Se o host remoto tiver vários IPs e, por algum motivo (regras de firewall, por exemplo), o acesso a alguns IPs for permitido e a outros proibido, então apenas o primeiro registro dos IPs proibidos será marcado como com falha, e, a cada tentativa, esses IPs poderão ser escolhidos novamente (e falhar de novo). Mesmo com essa correção, a cada 120 segundos o cache de DNS é descartado, e os IPs podem voltar a ser escolhidos. #62652 (Anton Ivashkin).
- Adiciona uma nova configuração
prefer_merge_sort_block_bytespara controlar o uso de memória e dobrar a velocidade da ordenação durante a mesclagem quando há muitas colunas. #62904 (LiuNeng). clickhouse-localiniciará mais rápido. Em versões anteriores, por engano, ele não excluía diretórios temporários. Agora, vai excluí-los. Isso fecha #62941. #63074 (Alexey Milovidov).- Micro-otimizações para o novo analisador. #63429 (Raúl Marín).
- A análise de índices passará a funcionar quando
DateTimefor comparado comDateTime64. Isso fecha #63441. #63443 #63532 (Alexey Milovidov). - Acelera um pouco os índices do tipo
set(cerca de 1,5 vez) removendo lixo. #64098 (Alexey Milovidov). - Remove a cópia de dados ao gravar no cache do sistema de arquivos. #63401 (Kseniia Sumarokova).
- Agora os backups com Azure blob storage usarão multicopy. #64116 (alesapin).
- Permite usar cópia nativa no Azure mesmo com containers diferentes. #64154 (alesapin).
- Finalmente habilita a cópia nativa no Azure. #64182 (alesapin).
Melhoria
- Permite usar
clickhouse-locale seus atalhosclickhouseechcom uma consulta ou um arquivo de consultas como argumento posicional. Exemplos:ch "SELECT 1",ch --param_test Hello "SELECT {test:String}",ch query.sql. Isso resolve #62361. #63081 (Alexey Milovidov). - Habilitar metadados plain_rewritable para armazenamentos de objetos locais e do Azure (azure_blob_storage). #63365 (Julia Kartseva).
- Suporte a aspas Unicode no estilo do inglês, por exemplo, “Hello”, ‘world’. Isso é questionável em geral, mas útil quando você digita sua consulta em um editor de texto, como o Google Docs. Isso encerra #58634. #63381 (Alexey Milovidov).
- Permitir vírgulas finais na lista de colunas da consulta INSERT. Por exemplo,
INSERT INTO test (a, b, c, ) VALUES .... #63803 (Alexey Milovidov). - Mensagens de exceção melhores para o formato
Regexp. #63804 (Alexey Milovidov). - Permite vírgulas à direita no formato
Values. Por exemplo, esta consulta é permitida:INSERT INTO test (a, b, c) VALUES (4, 5, 6,);. #63810 (Alexey Milovidov). - Faz com que o RabbitMQ aplique nack a mensagens corrompidas. Fecha #45350. #60312 (Kseniia Sumarokova).
- Corrige um travamento no desenrolamento assíncrono da pilha (como ao usar o profiler de consulta por amostragem) durante a interpretação de informações de depuração. Isso fecha #60460. #60468 (Alexey Milovidov).
- Mensagens distintas para o erro do S3 ‘no key’ nos casos de disco e de armazenamento. #61108 (Sema Checherinda).
- A barra de progresso passará a funcionar para queries triviais com LIMIT de
system.zeros,system.zeros_mt(ela já funciona parasystem.numbersesystem.numbers_mt) e para a table functiongenerateRandom. Como bônus, se o número total de registros for maior que o limitemax_rows_to_read, ela lançará uma exceção mais cedo. Isso fecha #58183. #61823 (Alexey Milovidov). - Suporte a “Merge Key” em configurações YAML (este é um recurso estranho do YAML, por favor, desconsidere). #62685 (Azat Khuzhin).
- Melhora a mensagem de erro quando uma função não determinística é usada com a origem Replicated. #62896 (Grégoire Pineau).
- Corrige o segredo entre servidores para Distributed sobre Distributed a partir de
remote. #63013 (Azat Khuzhin). - Suporte a
include_frompara arquivos YAML. No entanto, é preferível usarconfig.d#63106 (Eduard Karacharov). - Manter os dados anteriores no terminal após escolher uma das sugestões do skim. #63261 (FlameFactory).
- A largura dos campos (nos formatos Pretty ou na função
visibleWidth) agora passa a ignorar corretamente as sequências de escape ANSI. #63270 (Shaun Struwig). - Atualizado o uso do código de erro
NUMBER_OF_ARGUMENTS_DOESNT_MATCHpara códigos de erro mais precisos, quando apropriado. #63406 (Yohann Jardin). os_usereclient_hostnameagora são configurados corretamente para consultas usadas nas sugestões de linha de comando no clickhouse-client. Isso fecha #63430. #63433 (Alexey Milovidov).- Corrige automaticamente
max_block_sizepara o valor padrão caso seja zero. #63587 (Antonio Andelic). - Adiciona uma coluna build_id ALIAS a trace_log para facilitar a renomeação automática ao detectar alterações no binário. Isso visa corrigir #52086. #63656 (Zimu Li).
- Habilitada a operação TRUNCATE para discos de armazenamento de objetos. #63693 (MikhailBurdukov).
- O carregamento da lista de palavras-chave agora depende da revisão do servidor e será desabilitado para versões mais antigas do servidor ClickHouse. CC @azat. #63786 (Nikita Mikhaylov).
- Os discos do ClickHouse precisam ler a configuração do servidor para obter a versão efetiva do formato dos metadados. #63831 (Sema Checherinda).
- Desabilite as restrições do formato Pretty (
output_format_pretty_max_rows/output_format_pretty_max_value_width) quandostdoutnão for TTY. #63942 (Azat Khuzhin). - O tratamento de exceções agora funciona quando o ClickHouse é usado no AWS Lambda. Autor: Alexey Coolnev. #64014 (Alexey Milovidov).
- Lançar
CANNOT_DECOMPRESSem vez deCORRUPTED_DATAquando dados compactados inválidos forem enviados via HTTP. #64036 (vdimir). - Uma dica para um único número grande nos formatos Pretty agora funciona com Nullable e LowCardinality. Isso encerra #61993. #64084 (Alexey Milovidov).
- Adicionadas métricas, logs e nomes de thread na filtragem de partes com índices. #64130 (Alexey Milovidov).
- Ignorar
allow_suspicious_primary_keynoATTACHe verificar noALTER. #64202 (Azat Khuzhin).
melhoria em compilação/testes/empacotamento
- ClickHouse é compilado com clang-18. Muitas novas verificações do clang-tidy-18 foram habilitadas. #60469 (Alexey Milovidov).
- Suporte experimental ao loongarch64 como nova plataforma para o ClickHouse. #63733 (qiangxuhui).
- O Dockerfile foi revisado pela biblioteca oficial do Docker em https://github.com/docker-library/official-images/pull/15846. #63400 (Mikhail f. Shiryaev).
- Informações sobre cada símbolo em cada unidade de tradução serão coletadas no banco de dados de CI para cada build no CI. Isso fecha #63494. #63495 (Alexey Milovidov).
- Atualiza a biblioteca Apache Datasketches. Isso resolve #63858. #63923 (Alexey Milovidov).
- Habilita suporte a gRPC para Linux aarch64 durante a compilação cruzada do binário. #64072 (alesapin).
- Corrige o unwind em SIGSEGV no aarch64 (devido à pilha pequena para o sinal). #64058 (Azat Khuzhin).
Correção de erro
- A configuração
enable_vertical_finalfoi desativada por padrão. Esse recurso não deve ser usado porque contém um bug: #64543. #64544 (Alexander Tokmakov). - Corrigida a criação de backup ao usar vários shards #57684 (Vitaly Baranov).
- Corrigida a transferência de projeções/índices/chave primária da lista de colunas da consulta CREATE para a tabela interna da MV #59183 (Azat Khuzhin).
- Corrige o merge incorreto de boundRatio #60532 (Tao Wang).
- Corrigido travamento ao chamar algumas funções em colunas const de baixa cardinalidade #61966 (Michael Kolupaev).
- Corrige consultas com FINAL que retornavam resultados incorretos quando a tabela não usava granularidade adaptativa #62432 (Duc Canh Le).
- Melhorada a detecção de suporte a cgroups v2 para controladores de memória #62903 (Robert Schulze).
- Corrigido o uso subsequente de tabelas externas no cliente #62964 (Azat Khuzhin).
- Corrige um travamento com untuple e lambda não resolvida #63131 (Raúl Marín).
- Corrige o servidor começar a aceitar conexões prematuramente #63181 (alesapin).
- Corrige o problema de partes sobrepostas ao reiniciar após um comando DROP PART #63202 (Han Fei).
- Carregar corretamente os valores padrão de SQL security durante a inicialização #63209 (pufit).
- Correção no push down de filtro de JOIN #63234 (Maksim Kita).
- Corrigido loop infinito em AzureObjectStorage::listObjects #63257 (Julia Kartseva).
- CROSS join ignora a configuração join_algorithm #63273 (vdimir).
- Corrige a finalização de WriteBufferToFileSegment e StatusFile #63346 (vdimir).
- Corrige erro lógico durante consulta SELECT após ALTER em casos raros #63353 (alesapin).
- Corrigido o cabeçalho
X-ClickHouse-Timezonecomsession_timezone#63377 (Andrey Zvonov). - Correção de assert de depuração ao usar agrupamento WITH ROLLUP e tipos LowCardinality #63398 (Raúl Marín).
- Pequenas correções em group_by_use_nulls #63405 (vdimir).
- Corrige o backup/restauração da parte de projeção caso a projeção tenha sido removida dos metadados da tabela, mas a parte ainda contenha a projeção #63426 (Kseniia Sumarokova).
- Corrigida a fonte do dicionário MySQL #63481 (vdimir).
- Inserção de QueryFinish em AsyncInsertFlush sem dados #63483 (Raúl Marín).
- Correção:
used_dictionariesvazio nosystem.query_log#63487 (Eduard Karacharov). - Deixar
MergeTreePrefetchedReadPoolmais seguro #63513 (Antonio Andelic). - Corrigido travamento ao encerrar com o sentry habilitado (porque o OpenSSL era destruído antes do sentry) #63548 (Azat Khuzhin).
- Corrige o suporte a Array e map com hashing por chave #63628 (Salvatore Mesoraca).
- Corrigido o pushdown de filtro no Parquet e talvez no StorageMerge #63642 (Michael Kolupaev).
- Evita a conversão para Replicated se o caminho do ZooKeeper já existir #63670 (Kirill).
- Analisador: views leem somente as colunas necessárias #63688 (Maksim Kita).
- Analisador: proibir a redefinição de WINDOW #63694 (Dmitry Novik).
- flatten_nested não funcionava com o banco de dados experimental Replicated. #63695 (Nikolai Kochetov).
- Correção de #63653 #63722 (Nikolai Kochetov).
- Permitir cast de Array(Nothing) para Map(Nothing, Nothing) #63753 (Nikolai Kochetov).
- Corrigido ILLEGAL_COLUMN em join partial_merge #63755 (vdimir).
- Correção: remover DISTINCT redundante em funções de janela #63776 (Igor Nikonov).
- Corrige possível travamento ao usar SYSTEM UNLOAD PRIMARY KEY #63778 (Raúl Marín).
- Corrigida uma consulta com alias cíclico duplicado. #63791 (Nikolai Kochetov).
- Tornar
TokenIteratorlazy, como deveria ser #63801 (Alexey Milovidov). - Adicionar a configuração
endpoint_subpathdo URI do S3 #63806 (Julia Kartseva). - Corrigido deadlock em
ParallelReadBuffer#63814 (Antonio Andelic). - Correção do push down de filtro de JOIN em colunas equivalentes #63819 (Maksim Kita).
- Remoção de dados de todos os discos após DROP com o banco de dados Lazy. #63848 (MikhailBurdukov).
- Corrige resultado incorreto na leitura de MV com réplicas paralelas e o novo analisador #63861 (Nikita Taranov).
- Correções nos comandos
find_super_nodesefind_big_familydo keeper-client #63862 (Alexander Gololobov). - Atualizado o nome de execução da lambda #63864 (Nikolai Kochetov).
- Correção de SIGSEGV causado pelo profiler de CPU/tempo real #63865 (Azat Khuzhin).
- Corrigida a consulta
EXPLAIN CURRENT TRANSACTION#63926 (Anton Popov). - Corrige o analyzer: tartarugas até o fim… #63930 (Yakov Olkhovskiy).
- Permite determinados comandos
ALTER TABLEpara o discoplain_rewritable#63933 (Julia Kartseva). - Correção para CTE recursiva distribuída #63939 (Maksim Kita).
- Analisador: corrige a resolução de COLUMNS #63962 (Dmitry Novik).
- LIMIT BY e skip_unused_shards no analisador #63983 (Nikolai Kochetov).
- Uma correção para alguns resquícios (Kusto experimental) #63992 (Yong Wang).
- Desserialize entradas binárias não confiáveis com mais segurança #64024 (Robert Schulze).
- Corrige a análise de consultas com a configuração
final= 1 para tabelas Distributed sobre tabelas que não são da família MergeTree. #64037 (Nikolai Kochetov). - Adiciona as configurações ausentes ao
recoverLostReplica#64040 (Raúl Marín). - Corrige as verificações de acesso do SQL security com o analisador #64079 (pufit).
- Corrigido o analisador: para DAG, apenas a expressão
interpolatedeve ser usada #64096 (Yakov Olkhovskiy). - Corrige a gravação multipart em backups do Azure usando blocos de 1 MiB (tamanho do buffer de leitura) em vez de
max_upload_part_size(no caso de cópia não nativa) #64117 (Kseniia Sumarokova). - Executa o fallback corretamente durante a cópia do backup #64153 (Antonio Andelic).
- Evitar LOGICAL_ERROR ao usar CREATE TABLE como visão materializada #64174 (Raúl Marín).
- Cache de consultas: considerar consultas idênticas em bancos de dados diferentes como distintas #64199 (Robert Schulze).
- Ignorar
text_logno Keeper #64218 (Antonio Andelic). - Corrigido erro lógico: CAST inválido para tabela Buffer com prewhere. #64388 (Nikolai Kochetov).
Lançamento do ClickHouse 24.4, 2024-04-30. Apresentação, Vídeo
Notas de atualização
clickhouse-odbc-bridgeeclickhouse-library-bridgeagora são pacotes separados. Isso corrige #61677. #62114 (Alexey Milovidov).- Não é mais permitido definir max_parallel_replicas (para a leitura paralela experimental a partir de réplicas) como
0, pois isso não faz sentido. Corrige #60140. #61201 (Kruglov Pavel). - Removido o suporte à consulta
INSERT WATCH(parte do recursoLIVE VIEW, agora descontinuado). #62382 (Alexey Milovidov). - Removida a configuração
optimize_monotonous_functions_in_order_by. #63004 (Raúl Marín). - A tag experimental foi removida do engine de banco de dados
Replicated. Agora ele está em Beta. #62937 (Justin de Guzman).
Novo recurso
- Suporte a CTEs recursivas. #62074 (Maksim Kita).
- Suporte à cláusula
QUALIFY. Fecha #47819. #62619 (Maksim Kita). - Agora é possível conceder grants em motores de tabela, sem afetar o comportamento dos usuários existentes. #60117 (jsc0218).
- Foi adicionado um disco S3 regravável com suporte a operações
INSERTe que não requer metadados armazenados localmente. #61116 (Julia Kartseva). O principal caso de uso é para tabelas de sistema. - O realce de sintaxe durante a digitação no cliente passará a funcionar no nível da sintaxe (antes, funcionava no nível do lexer). #62123 (Alexey Milovidov).
- Passa a ser possível remover várias tabelas ao mesmo tempo, como em
DROP TABLE a, b, c;. #58705 (zhongyuankai). - Agora há suporte para modificar as configurações da tabela Memory por meio de
ALTER MODIFY SETTING. Exemplo:ALTER TABLE memory MODIFY SETTING min_rows_to_keep = 100, max_rows_to_keep = 1000;. #62039 (zhongyuankai). - Foi adicionado o parâmetro de consulta
roleà interface HTTP. Ele funciona de forma semelhante aSET ROLE x, aplicando a role antes de a instrução ser executada. Isso permite contornar uma limitação da interface HTTP, já que múltiplas instruções não são permitidas e não é possível enviarSET ROLE xe a própria instrução ao mesmo tempo. Também é possível definir várias roles dessa forma, por exemplo,?role=x&role=y, o que equivale aSET ROLE x, y. #62669 (Serge Klochkov). - Adiciona
SYSTEM UNLOAD PRIMARY KEYpara liberar memória usada pela chave primária de uma tabela. #62738 (Pablo Marcos). - Foram adicionadas as colunas
value1,value2, …,value10asystem.text_log. Essas colunas contêm os valores usados para formatar a mensagem. #59619 (Alexey Katsman). - Foi adicionada a coluna virtual persistente
_block_offset, que armazena o número original da linha no bloco atribuído no momento do insert. A persistência da coluna_block_offsetpode ser habilitada pela configuração do MergeTreeenable_block_offset_column. Foi adicionada a coluna virtual_part_data_version, que contém o número mínimo do bloco ou a versão de mutação da parte. A coluna virtual persistente_block_numbernão é mais considerada experimental. #60676 (Anton Popov). - Adiciona a configuração
input_format_json_throw_on_bad_escape_sequence; desabilitá-la permite salvar sequências de escape inválidas em formatos de entrada JSON. #61889 (Kruglov Pavel).
Melhorias de desempenho
- Melhorias no pushdown de filtros em JOIN usando conjuntos equivalentes. #61216 (Maksim Kita).
- Otimização que converte OUTER JOIN em INNER JOIN se o filtro após o JOIN sempre filtrar valores padrão. A otimização pode ser controlada pela configuração
query_plan_convert_outer_join_to_inner_join, ativada por padrão. #62907 (Maksim Kita). - Melhoria para AWS S3. O cliente precisa enviar o cabeçalho ‘Keep-Alive: timeout=X’ ao servidor. Se o cliente receber uma resposta do servidor com esse cabeçalho, deverá usar o valor fornecido pelo servidor. Além disso, é melhor que o cliente não use uma conexão prestes a expirar, para evitar uma condição de corrida no fechamento da conexão. #62249 (Sema Checherinda).
- Reduz a sobrecarga das mutações em SELECTs (v2). #60856 (Azat Khuzhin).
- As funções mais frequentemente invocadas em PODArray agora passam por inline forçado. #61144 (李扬).
- Acelera o parsing de JSON ao ignorar o restante do objeto quando todas as colunas necessárias já tiverem sido lidas. #62210 (lgbo).
- Melhora o insert select trivial de arquivos usando as table functions file/s3/hdfs/url/… Adiciona a configuração separada max_parsing_threads para controlar o número de threads usadas no parsing paralelo. #62404 (Kruglov Pavel).
- As funções
to_utc_timestampefrom_utc_timestampagora são cerca de 2x mais rápidas. #62583 (KevinyhZou). - As funções
parseDateTimeOrNull,parseDateTimeOrZero,parseDateTimeInJodaSyntaxOrNulleparseDateTimeInJodaSyntaxOrZeroagora executam significativamente mais rápido (10x - 1000x) quando a entrada contém principalmente valores que não podem ser interpretados. #62634 (LiuNeng). - As consultas
SELECTemsystem.query_cacheagora estão visivelmente mais rápidas quando o cache de consultas contém muitas entradas (por exemplo, mais de 100.000). #62671 (Robert Schulze). - Menos contenção no cache do sistema de arquivos (parte 3): executar a remoção no sistema de arquivos sem bloqueio na tentativa de reserva de espaço. #61163 (Kseniia Sumarokova).
- Acelera o redimensionamento dinâmico do cache do sistema de arquivos. #61723 (Kseniia Sumarokova).
- A fonte do dicionário com
INVALIDATE_QUERYnão é recarregada duas vezes na inicialização. #62050 (vdimir). - Corrige um problema em que, quando um
= 1ou= 0redundante é adicionado após uma expressão booleana envolvendo a chave primária, o índice primário deixa de ser usado. Por exemplo, tantoSELECT * FROM <table> WHERE <primary-key> IN (<value>) = 1quantoSELECT * FROM <table> WHERE <primary-key> NOT IN (<value>) = 0acabam fazendo uma varredura completa da tabela, embora o índice primário pudesse ser usado. #62142 (josh-hildred). - Retorna um fluxo de fragmentos de
system.remote_data_pathsem vez de acumular todo o resultado em um único fragmento grande. Isso permite consumir menos memória, mostrar o progresso intermediário e cancelar a consulta. #62613 (Alexander Gololobov).
Funcionalidade Experimental
- Suporte a buffer de gravação paralelo para o Azure Blob Storage, controlado pela configuração
azure_allow_parallel_part_upload. #62534 (SmitaRKulkarni). - O cache de páginas em espaço de usuário agora funciona com armazenamento web estático (
disk(type = web)). Use a configuração do clienteuse_page_cache_for_disks_without_file_cache=1para habilitar. #61911 (Michael Kolupaev). - Não tratar Bool e variantes numéricas como suspeitos no tipo
Variant. #61999 (Kruglov Pavel). - Implementar uma conversão aprimorada de String para
Variantusando parsing. #62005 (Kruglov Pavel). - Suporte a
Variantnas funções JSONExtract. #62014 (Kruglov Pavel). - Marcar o tipo
Variantcomo comparável para que possa ser usado na chave primária. #62693 (Kruglov Pavel).
Melhoria
- Por conveniência,
SELECT * FROM numbers()funcionará da mesma forma queSELECT * FROM system.numbers— sem limite. #61969 (YenchangChan). - Introduz tags separadas para consumer e producer na configuração do Kafka. Isso evita avisos do librdkafka (uma biblioteca C ruim, com muitos bugs) de que propriedades de consumer foram especificadas para instâncias de producer e vice-versa (por exemplo,
Configuration property session.timeout.ms is a consumer property and will be ignored by this producer instance). Fecha: #58983. #58956 (Aleksandr Musorin). - As funções
date_diffeageagora calculam seus resultados com precisão de nanossegundos em vez de microssegundos. Elas também passam a oferecernanosecond(ounanosecondsouns) como um valor possível para o parâmetrounit. #61409 (Austin Kothig). - Adicionadas as unidades de nano-, micro- e milissegundos para
date_trunc. #62335 (Misz606). - Recarrega a cadeia de certificados ao recarregar o certificado. #61671 (Pervakov Grigorii).
- Tentar evitar o erro #60432 impedindo que uma tabela seja anexada caso exista uma réplica ativa para esse caminho da réplica. #61876 (Arthur Passos).
- Adicionado suporte a
inputparaclickhouse-local. #61923 (Azat Khuzhin). - O mecanismo de tabela
Joincom strictnessANYpassa a ser consistente após a recarga. Quando várias linhas com a mesma chave são inseridas, a primeira terá maior prioridade (antes, ela era escolhida aleatoriamente durante o carregamento da tabela). fecha #51027. #61972 (vdimir). - Inferência automática de tipos de coluna Nullable a partir do esquema do Apache Arrow. #61984 (Maksim Kita).
- Permite cancelar a mesclagem paralela de estados de agregação durante a agregação. Exemplo:
uniqExact. #61992 (Maksim Kita). - Use
system.keywordspara preencher as sugestões e também para usá-las internamente em todos os lugares. #62000 (Nikita Mikhaylov). OPTIMIZE FINALparaReplicatedMergeTreeagora aguardará a conclusão das mesclagens atualmente ativas e, em seguida, tentará novamente agendar uma mesclagem final. Isso o deixará mais alinhado ao comportamento padrão doMergeTree. #62067 (Nikita Taranov).- Ao ler dados de um arquivo de texto do Hive, era usada a primeira linha do arquivo para ajustar a quantidade de campos de entrada, e às vezes a quantidade de campos da primeira linha não correspondia ao que estava definido na tabela Hive. Por exemplo, a tabela Hive é definida com 3 colunas, como
test_tbl(a Int32, b Int32, c Int32), mas a primeira linha do arquivo de texto tem apenas 2 campos. Nessa situação, os campos de entrada são ajustados para 2 e, se a próxima linha do arquivo de texto tiver 3 campos, o terceiro campo não poderá ser lido e receberá o valor padrão 0, o que está incorreto. #62086 (KevinyhZou). CREATE AScopia o comentário da tabela. #62117 (Pablo Marcos).- Adicionar progresso da consulta à tabela zookeeper. #62152 (JackyWoo).
- Adicionada a capacidade de ativar o coletor de traces (Real e CPU) no servidor inteiro. #62189 (alesapin).
- Adicionada a configuração
lightweight_deletes_sync(valor padrão: 2 - aguarda todas as réplicas de forma síncrona). Ela é semelhante à configuraçãomutations_sync, mas afeta apenas o comportamento das exclusões leves. #62195 (Anton Popov). - Diferencia booleanos de inteiros ao analisar valores para configurações personalizadas:
SET custom_a = true; SET custom_b = 1;. #62206 (Vitaly Baranov). - Adiciona suporte ao acesso ao S3 por meio de endpoints de interface do AWS Private Link. Fecha #60021, #31074 e #53761. #62208 (Arthur Passos).
- Não crie um diretório para UDF no clickhouse-client se ele não existir. Isso resolve #59597. #62366 (Alexey Milovidov).
- O cache de consultas agora não armazena mais os resultados de consultas em tabelas de sistema (
system.*,information_schema.*,INFORMATION_SCHEMA.*). #62376 (Robert Schulze). - A consulta
MOVE PARTITION TO TABLEpode ser atrasada ou lançar a exceçãoTOO_MANY_PARTSpara evitar exceder os limites para a contagem de partes. Aplicam-se as mesmas configurações e limites da consultaINSERT(consulte as configuraçõesmax_parts_in_total,parts_to_delay_insert,parts_to_throw_insert,inactive_parts_to_throw_insert,inactive_parts_to_delay_insert,max_avg_part_size_for_too_many_parts,min_delay_to_insert_msemax_delay_to_insert). #62420 (Sergei Trifonov). - O diretório de instalação padrão no macOS foi alterado de
/usr/binpara/usr/local/bin. Isso é necessário porque a Proteção de Integridade do Sistema da Apple, introduzida com o macOS El Capitan (2015), impede a gravação em/usr/bin, mesmo comsudo. #62489 (haohang). - Faz com que
transformsempre retorne a primeira correspondência. #62518 (Raúl Marín). - Adicionada a coluna
hostnameque faltava na tabela de sistemablob_storage_log. #62456 (Jayme Bird). - Para manter a consistência com outras tabelas do sistema,
system.backup_logagora tem uma colunaevent_time. #62541 (Jayme Bird). - A tabela
system.backup_logagora usa a chave de ordenação “padrão”,event_date, event_time, a mesma dos demais motores de tabela_log. #62667 (Nikita Mikhaylov). - Evita a avaliação de expressões DEFAULT de tabelas durante a execução de
RESTORE. #62601 (Vitaly Baranov). - O armazenamento S3 e os backups também precisam das mesmas configurações padrão de keep alive usadas no disco S3. #62648 (Sema Checherinda).
- Adiciona o identificador do cliente do librdkafka (aquela infame biblioteca em C, que tem muitos bugs) às mensagens de log para permitir diferenciar as mensagens de log de diferentes consumidores de uma única tabela. #62813 (János Benjamin Antal).
- Permitir macros especiais
{uuid}e{database}em um caminho do ZooKeeper para um banco de dados Replicated. #62818 (Vitaly Baranov). - Permitir que a chave de quota use um esquema de autenticação diferente em requisições HTTP. #62842 (Kseniia Sumarokova).
- Reduza a verbosidade da saída do argumento de linha de comando
--helpnoclickhouse cliente noclickhouse local. A saída anterior agora é gerada por--help --verbose. #62973 (Yarik Briukhovetskyi). log_bin_use_v1_row_eventsfoi removido no MySQL 8.3, e ajustamos o mecanismo experimentalMaterializedMySQLpara essa mudança #60479. #63101 (Eugene Klimov). Autor: Nikolay Yankin.
Melhorias em compilação/testes/empacotamento
- As dependências do Rust foram incorporadas, para que o código em Rust (que usamos para recursos menores por hype e zoeira) possa ser compilado de maneira organizada, de forma semelhante ao C++. #62297 (Raúl Marín).
- O ClickHouse agora usa OpenSSL 3.2 em vez de BoringSSL. #59870 (Robert Schulze). Observe que, em geral, o OpenSSL tem uma cultura de engenharia inferior (como um número não nulo de relatórios de sanitizer, que tivemos de corrigir, um sistema de build complexo com arquivos gerados etc.), mas oferece melhor compatibilidade.
- Ignorar consultas DROP em testes de estresse com probabilidade de 1/2; usar TRUNCATE em vez de ignorar DROP na verificação de upgrade para tabelas Memory/JOIN. #61476 (Kruglov Pavel).
- Remova, da imagem Docker do Keeper, os volumes em /etc/clickhouse-keeper e /var/log/clickhouse-keeper. #61683 (Tristan).
- Adiciona testes para todos os problemas que deixaram de ser relevantes com o analyzer habilitado por padrão. Closes: #55794 Closes: #49472 Closes: #44414 Closes: #13843 Closes: #55803 Closes: #48308 Closes: #45535 Closes: #44365 Closes: #44153 Closes: #42399 Closes: #27115 Closes: #23162 Closes: #15395 Closes: #15411 Closes: #14978 Closes: #17319 Closes: #11813 Closes: #13210 Closes: #23053 Closes: #37729 Closes: #32639 Closes: #9954 Closes: #41964 Closes: #54317 Closes: #7520 Closes: #36973 Closes: #40955 Closes: #19687 Closes: #23104 Closes: #21584 Closes: #23344 Closes: #22627 Closes: #10276 Closes: #19687 Closes: #4567 Closes: #17710 Closes: #11068 Closes: #24395 Closes: #23416 Closes: #23162 Closes: #25655 Closes: #11757 Closes: #6571 Closes: #4432 Closes: #8259 Closes: #9233 Closes: #14699 Closes: #27068 Closes: #28687 Closes: #28777 Closes: #29734 Closes: #61238 Closes: #33825 Closes: #35608 Closes: #29838 Closes: #35652 Closes: #36189 Closes: #39634 Closes: #47432 Closes: #54910 Closes: #57321 Closes: #59154 Closes: #61014 Closes: #61950 Closes: #55647 Closes: #61947. #62185 (Nikita Mikhaylov).
- Adiciona mais testes de issues que deixaram de ser relevantes ou foram corrigidas pelo analyzer. Fecha: #58985 Fecha: #59549 Fecha: #36963 Fecha: #39453 Fecha: #56521 Fecha: #47552 Fecha: #56503 Fecha: #59101 Fecha: #50271 Fecha: #54954 Fecha: #56466 Fecha: #11000 Fecha: #10894 Fecha: https://github.com/ClickHouse/ClickHouse/issues/448 Fecha: #8030 Fecha: #32139 Fecha: #47288 Fecha: #50705 Fecha: #54511 Fecha: #55466 Fecha: #58500 Fecha: #39923 Fecha: #39855 Fecha: #4596 Fecha: #47422 Fecha: #33000 Fecha: #14739 Fecha: #44039 Fecha: #8547 Fecha: #22923 Fecha: #23865 Fecha: #29748 Fecha: #4222. #62457 (Nikita Mikhaylov).
- Correção de erros de compilação quando o OpenSSL é vinculado dinamicamente (observação: isso geralmente não tem suporte e é necessário apenas para as plataformas s390x da IBM). #62888 (Harry Lee).
correção de bug (comportamento incorreto perceptível ao usuário em uma versão estável oficial)
- Corrigido erro lógico ao reverter a transação de insert com quorum. #61953 (Han Fei).
- Corrigido erro do parser ao usar COUNT(*) com a cláusula FILTER #61357 (Duc Canh Le).
- Corrigido erro lógico em
group_by_use_nulls+ grouping sets + analyzer + materialize/constant #61567 (Kruglov Pavel). - Cancelar merges antes de remover partes movidas #61610 (János Benjamin Antal).
- Corrige erro de abort no Apache Arrow #61720 (Kruglov Pavel).
- Buscar a flag
convert_to_replicatedno caminho correto correspondente ao disco específico #61769 (Kirill). - Corrige uma possível condição de corrida nas conexões para distributed_foreground_insert/distributed_background_insert_batch #61867 (Azat Khuzhin).
- Marcar o erro CANNOT_PARSE_ESCAPE_SEQUENCE como erro de parsing para que seja possível ignorá-lo em formatos de entrada por linha #61883 (Kruglov Pavel).
- Corrigida a escrita da mensagem de exceção no formato de saída via HTTP quando http_wait_end_of_query é usado #61951 (Kruglov Pavel).
- Correção apropriada do LowCardinality em conjunto com as funções JSONExtact #61957 (Nikita Mikhaylov).
- Falha no Engine Merge se a Row Policy não tiver uma expressão #61971 (Ilya Golshtein).
- Corrigida exceção não tratada no destrutor do WriteBufferAzureBlobStorage #61988 (SmitaRKulkarni).
- Corrigido o CREATE TABLE sem definição de colunas para ReplicatedMergeTree #62040 (Azat Khuzhin).
- Correção do optimize_skip_unused_shards_rewrite_in para chave de sharding composta #62047 (Azat Khuzhin).
- ReadWriteBufferFromHTTP define o cabeçalho Host correto ao ser redirecionado #62068 (Sema Checherinda).
- Correção de erro em que a tabela externa não conseguia interpretar o tipo de dado Bool #62115 (Duc Canh Le).
- Analisador: corrige a resolução de parâmetros de consulta #62186 (Dmitry Novik).
- Corrigida a restauração de partes em modo somente leitura #62207 (Vitaly Baranov).
- Corrigido travamento na definição de índice contendo SQL UDF #62225 (vdimir).
- Correção da semente aleatória NULL no generateRandom com o analisador. #62248 (Nikolai Kochetov).
- Lidar corretamente com colunas const em Distinct Transfom #62250 (Antonio Andelic).
- Corrigido o Parts Splitter em consultas com o modificador FINAL #62268 (Nikita Taranov).
- Analisador: corrige a resolução de alias para view parametrizada #62274 (Dmitry Novik).
- Analisador: corrige a resolução de nomes em escopos pai #62281 (Dmitry Novik).
- Corrige o argMax com coluna numérica não nativa Nullable #62285 (Raúl Marín).
- Corrige o BACKUP e o RESTORE de uma visão materializada no banco de dados Ordinary #62295 (Vitaly Baranov).
- Corrige condição de corrida em escalares no Context #62305 (Kruglov Pavel).
- Corrigida a chave primária em visão materializada #62319 (Murat Khairulin).
- Não criar pipeline multithread de
insertpara tabelas sem suporte #62333 (vdimir). - Corrigido o analisador com argumentos posicionais em consulta distribuída #62362 (flynn).
- Corrige o pushdown de filtro de additional_table_filters no engine Merge no analyzer #62398 (Kruglov Pavel).
- Corrigidas consultas de tabela com
GLOBAL INno analisador. #62409 (Nikolai Kochetov). - Respeitar as configurações truncate_on_insert/create_new_file_on_insert nos motores s3/hdfs/azure durante a escrita particionada #62425 (Kruglov Pavel).
- Corrige o caminho de restauração de backup para o AzureBlobStorage #62447 (SmitaRKulkarni).
- Corrigido o SimpleSquashingChunksTransform #62451 (Nikita Taranov).
- Corrigida a captura em lambda aninhada. #62462 (Nikolai Kochetov).
- Evita travamento ao ler protobuf com tipos recursivos #62506 (Raúl Marín).
- Corrige um bug ao mover uma partição para ela mesma #62524 (helifu).
- Correção de subconsulta escalar em LIMIT #62567 (Nikolai Kochetov).
- Corrige um
segfaultno engine Hive experimental e sem suporte, de que nem gostamos mesmo #62578 (Nikolay Degterinsky). - Corrigido vazamento de memória em groupArraySorted #62597 (Antonio Andelic).
- Corrigida falha em largestTriangleThreeBuckets #62646 (Raúl Marín).
- Corrige
tumble[Start,End]ehop[Start,End]em resoluções maiores #62705 (Jordi Villar). - Corrige o estado do combinador argMin/argMax #62708 (Raúl Marín).
- Corrige a falha de dados temporários no cache causada pela otimização da contenção de bloqueio do cache #62715 (Kseniia Sumarokova).
- Corrigida falha na função
mergeTreeIndex#62762 (Anton Popov). - correção: atualização: colunas materializadas aninhadas: correções na verificação de tamanho #62773 (Eliot Hautefeuille).
- Correção do problema em que o modificador FINAL não é respeitado em CTE com o analisador #62811 (Duc Canh Le).
- Corrige travamento na função
formatRowcom o formatoJSONe a interface HTTP #62840 (Anton Popov). - Azure: corrigida a geração da URL final a partir do objeto endpoint #62850 (Daniel Pozo Escalona).
- Corrigido o codec GCD #62853 (Nikita Taranov).
- Corrigida a chave LowCardinality(Nullable) em hiperretângulo #62866 (Amos Bird).
- Corrigido o
fromUnixtimestampna sintaxe Joda quando o valor de entrada ultrapassaUInt32#62901 (KevinyhZou). - Desativa optimize_rewrite_aggregate_function_with_if para sum(nullable) #62912 (Raúl Marín).
- Corrige o PREWHERE no StorageBuffer quando a tabela de origem tem tipos de coluna diferentes. #62916 (Nikolai Kochetov).
- Corrige dados temporários no cache quando a falha na criação do diretório da chave de cache é processada incorretamente #62925 (Kseniia Sumarokova).
- gRPC: corrige falha em conexão IPv6 entre pares #62978 (Konstantin Bogdanov).
- Corrige possíveis CHECKSUM_DOESNT_MATCH (e outros) durante fetches de réplicas #62987 (Azat Khuzhin).
- Corrigido o encerramento causado por exceção não tratada em dados temporários no cache #62998 (Kseniia Sumarokova).
- Correção do cast implícito em optimize_rewrite_aggregate_function_with_if #62999 (Raúl Marín).
- Corrigida exceção não tratada no ~RestorerFromBackup #63040 (Vitaly Baranov).
- Não remova constantes do servidor da chave do GROUP BY na consulta secundária. #63047 (Nikolai Kochetov).
- Correção da avaliação incorreta da monotonicidade da função abs #63097 (Duc Canh Le).
- Definir o nome do servidor para o handshake SSL no mecanismo MongoDB #63122 (Alexander Gololobov).
- Use o banco de dados especificado pelo usuário em vez de “config” para verificar a versão do protocolo wire do MongoDB #63126 (Alexander Gololobov).
Lançamento do ClickHouse 24.3 LTS, 2024-03-27. Apresentação, Vídeo
Notas da atualização
- A configuração
allow_experimental_analyzerestá habilitada por padrão e muda a análise de consultas para uma nova implementação, com melhor compatibilidade e maior cobertura de recursos. O recurso “analyzer” agora é considerado beta, em vez de experimental. Você pode restaurar o comportamento antigo definindocompatibilitycomo24.2ou desabilitando a configuraçãoallow_experimental_analyzer. Assista ao vídeo no YouTube. - O ClickHouse permite dados binários arbitrários no tipo de dado String, que normalmente é UTF-8. Strings em Parquet/ORC/Arrow aceitam apenas UTF-8. Por isso, você pode escolher qual tipo de dado do Arrow usar para o tipo de dado String do ClickHouse: String ou Binary. Isso é controlado pelas configurações
output_format_parquet_string_as_string,output_format_orc_string_as_string,output_format_arrow_string_as_string. Embora Binary seja mais correto e compatível, usar String por padrão atende às expectativas dos usuários na maioria dos casos. Parquet/ORC/Arrow oferece suporte a muitos métodos de compressão, incluindo lz4 e zstd. O ClickHouse oferece suporte a todos os métodos de compressão. Algumas ferramentas menos robustas não oferecem suporte ao método de compressãolz4, que é mais rápido; por isso, definimoszstdcomo padrão. Isso é controlado pelas configuraçõesoutput_format_parquet_compression_method,output_format_orc_compression_methodeoutput_format_arrow_compression_method. Alteramos o padrão parazstdem Parquet e ORC, mas não em Arrow (que é mais voltado a usos de baixo nível). #61817 (Alexey Milovidov). - Na nova versão do ClickHouse, as funções
geoDistance,greatCircleDistanceegreatCircleAngleusarão o tipo de dados de ponto flutuante de dupla precisão de 64 bits para cálculos internos e como tipo de retorno se todos os argumentos forem Float64. Isso corrige #58476. Em versões anteriores, a função sempre usava Float32. Você pode voltar ao comportamento antigo definindogeo_distance_returns_float64_on_float64_argumentscomofalseoucompatibilitycomo24.2ou anterior. #61848 (Alexey Milovidov). Em coautoria com Geet Patel. - As partes de dados em memória obsoletas foram descontinuadas desde a versão 23.5 e não são mais compatíveis desde a versão 23.10. Agora, o código restante foi removido. Continuação de #55186 e #45409. É improvável que você tenha usado partes de dados em memória, porque elas estavam disponíveis apenas antes da versão 23.5 e somente quando eram habilitadas manualmente por meio da especificação dos
SETTINGScorrespondentes para uma tabela MergeTree. Para verificar se você tem partes de dados em memória, execute a seguinte consulta:SELECT part_type, count() FROM system.parts GROUP BY part_type ORDER BY part_type. Para desabilitar o uso de partes de dados em memória, executeALTER TABLE ... MODIFY SETTING min_bytes_for_compact_part = DEFAULT, min_rows_for_compact_part = DEFAULT. Antes de atualizar a partir de versões antigas do ClickHouse, primeiro verifique se você não tem partes de dados em memória. Se houver partes de dados em memória, primeiro desabilite-as, depois aguarde até que não haja mais partes de dados em memória e prossiga com a atualização. #61127 (Alexey Milovidov). - Alterado o nome da coluna de
duration_msparaduration_microsecondsna tabelasystem.zookeeperpara refletir o fato de que a duração está em microssegundos. #60774 (Duc Canh Le). - Rejeitar consultas INSERT recebidas quando as configurações no nível da consulta
async_insertededuplicate_blocks_in_dependent_materialized_viewsestiverem ativadas ao mesmo tempo. Esse comportamento é controlado pela configuraçãothrow_if_deduplication_in_dependent_materialized_views_enabled_with_async_inserte é ativado por padrão. Esta é uma continuação de https://github.com/ClickHouse/ClickHouse/pull/59699 necessária para desbloquear https://github.com/ClickHouse/ClickHouse/pull/59915. #60888 (Nikita Mikhaylov). - O utilitário
clickhouse-copierfoi movido para um repositório separado no GitHub: https://github.com/ClickHouse/copier. Ele não faz mais parte do pacote, mas ainda está disponível para download separadamente. Isso fecha: #60734 Isso fecha: #60540 Isso fecha: #60250 Isso fecha: #52917 Isso fecha: #51140 Isso fecha: #47517 Isso fecha: #47189 Isso fecha: #46598 Isso fecha: #40257 Isso fecha: #36504 Isso fecha: #35485 Isso fecha: #33702 Isso fecha: #26702. - Para aumentar a compatibilidade com o MySQL, o alias de compatibilidade
locateagora aceita, por padrão, os argumentos(needle, haystack[, start_pos]). O comportamento anterior(haystack, needle, [, start_pos])pode ser restaurado ao definirfunction_locate_has_mysql_compatible_argument_order = 0. #61092 (Robert Schulze). - Proibir
SimpleAggregateFunctionnoORDER BYde tabelasMergeTree(assim comoAggregateFunction, elas são proibidas por não serem comparáveis) por padrão (useallow_suspicious_primary_keypara permiti-las). #61399 (Azat Khuzhin). - O engine de banco de dados
Ordinaryestá obsoleto. Você receberá um aviso no clickhouse-client se o seu servidor estiver usando esse engine. Isso encerra #52229. #56942 (shabroo).
Novo recurso
- Suporte à leitura e gravação de backups no formato
tar(além dezip). #59535 (josh-hildred). - Adicionado suporte a buckets S3 Express. #59965 (Nikita Taranov).
- Permite anexar partes de um disco diferente (usando cópia em vez de link físico). #60112 (Unalian).
- Tabelas
Memorycom tamanho limitado: controladas pelas configuraçõesmin_bytes_to_keep, max_bytes_to_keep, min_rows_to_keepemax_rows_to_keep. #60612 (Jake Bamrah). - Limites separados para o número de consultas em espera e em execução. Foi adicionada a nova configuração de servidor
max_waiting_queries, que limita o número de consultas em espera devido aasync_load_databases. Os limites existentes para o número de consultas em execução não contam mais as consultas em espera. #61053 (Sergei Trifonov). - Foi adicionada uma tabela
system.keywordsque contém todas as palavras-chave do parser. Ela é necessária principalmente para melhorar o fuzzing e o realce de sintaxe. #51808 (Nikita Mikhaylov). - Adicionado suporte a
ATTACH PARTITION ALL. #61107 (Kirill Nikiforov). - Adicionada uma nova função,
getClientHTTPHeader. Isso resolve #54665. Em coautoria com @lingtaolf. #61820 (Alexey Milovidov). - Adicionado
generate_seriescomo função de tabela (alias de compatibilidade com PostgreSQL para a funçãonumbersjá existente). Essa função gera uma tabela com uma progressão aritmética de números naturais. #59390 (divanik). - Adicionado um modo de suporte para
topK/topkWeighed, que retorna a contagem dos valores e seu erro. #54508 (UnamedRus). - Adicionada a função
toMillisecond, que retorna o componente de milissegundos para valores do tipoDateTimeouDateTime64. #60281 (Shaun Struwig). - Permite configurar handlers de redirecionamento HTTP para o clickhouse-server. Por exemplo, você pode fazer com que
/redirecione para a UI do Play. #60390 (Alexey Milovidov).
Melhoria de desempenho
- Função
dotProductotimizada para eliminar cópias de memória desnecessárias e custosas. #60928 (Robert Schulze). - Impressão 30x mais rápida de inteiros de 256 bits. #61100 (Raúl Marín).
- Se a chave primária da tabela contiver colunas em sua maioria inúteis, não as mantenha na memória. Isso é controlado por uma nova configuração
primary_key_ratio_of_unique_prefix_values_to_skip_suffix_columns, com o valor0.9por padrão, o que significa: para uma chave primária composta, se uma coluna mudar de valor em pelo menos 90% das vezes, as colunas seguintes não serão carregadas. #60255 (Alexey Milovidov). - Melhora o desempenho de métodos de agregação serializados ao envolver várias colunas
Nullable. #55809 (Amos Bird). - Passa a gerar a saída JSON sob demanda para melhorar o desempenho do ALL JOIN. #58278 (LiuNeng).
- Torna reutilizáveis, para todos os casos de uso, as conexões HTTP/HTTPS com serviços externos, como o S3 da AWS. Mesmo quando a resposta é 3xx ou 4xx. #58845 (Sema Checherinda).
- Melhorias nas funções de agregação
argMin/argMax/any/anyLast/anyHeavy, bem como em consultas comORDER BY {u8/u16/u32/u64/i8/i16/u32/i64) LIMIT 1. #58640 (Raúl Marín). - Otimização trivial para o filtro de coluna. O pico de memória pode ser reduzido para 44% do original em alguns casos. #59698 (李扬).
- Executa a função
multiIfde forma colunar quando o tipo subjacente do resultado é numérico. #60384 (李扬). - Mutexes mais rápidos (quase 2x). #60823 (Azat Khuzhin).
- Esvaziar várias conexões em paralelo ao finalizar uma consulta distribuída. #60845 (lizhuoyu5).
- Otimizada a movimentação de dados entre colunas de um número Nullable ou de uma string Nullable, o que melhora alguns microbenchmarks. #60846 (李扬).
- As operações com o cache do sistema de arquivos sofrerão menos com a disputa por bloqueios. #61066 (Alexey Milovidov).
- Otimize o array join e outras junções, evitando uma otimização incorreta do compilador. Fecha #61074. #61075 (李扬).
- Se uma consulta com erro de sintaxe continha o matcher
COLUMNScom uma expressão regular, a expressão regular era compilada a cada vez durante o backtracking do parser, em vez de ser compilada apenas uma vez. Isso era um erro fundamental. A regexp compilada era colocada na AST. Mas a letra A em AST significa “abstrata”, o que quer dizer que ela não deve conter objetos pesados. Partes da AST podem ser criadas e descartadas durante o parsing, inclusive com um grande número de backtrackings. Isso causa lentidão no parsing e, consequentemente, permite DoS por um usuário com permissão somente leitura. Mas o principal problema é que isso impede o progresso dos fuzzers. #61543 (Alexey Milovidov). - Adicionada uma nova etapa do analisador para otimizar o operador IN para um único valor. #61564 (LiuNeng).
- DNSResolver embaralha o conjunto de IPs resolvidos, o que é necessário para distribuir uniformemente o uso de múltiplos endpoints do S3 da AWS. #60965 (Sema Checherinda).
Funcionalidade Experimental
- Adiciona suporte à leitura paralela no Azure Blob Storage. Isso melhora o desempenho do armazenamento de objetos experimental no Azure. #61503 (SmitaRKulkarni).
- Adiciona um
WriteBufferassíncrono para o Azure Blob Storage, semelhante ao S3. Isso melhora o desempenho do armazenamento de objetos experimental no Azure. #59929 (SmitaRKulkarni). - Usa identidade gerenciada para a E/S de backups ao usar o Azure Blob Storage. Adiciona uma configuração para impedir que o ClickHouse tente criar um contêiner inexistente, o que exige permissões no nível da conta de armazenamento. #61785 (Daniel Pozo Escalona).
- Adiciona a configuração
parallel_replicas_allow_in_with_subquery = 1, que permite usar subconsultas com IN em réplicas paralelas. #60950 (Nikolai Kochetov). - Uma alteração na replicação “zero-copy”: todos os bloqueios zero-copy relacionados a uma tabela precisam ser removidos quando a tabela é removida. O diretório que contém esses bloqueios também precisa ser removido. #57575 (Sema Checherinda).
Melhoria
- Use
MergeTreecomo engine de tabela padrão. #60524 (Alexey Milovidov) - Ativa
output_format_pretty_row_numberspor padrão. Isso melhora a usabilidade. #61791 (Alexey Milovidov). - Na versão anterior, alguns números nos formatos Pretty não estavam bonitos o suficiente. #61794 (Alexey Milovidov).
- Um valor longo nos formatos Pretty não será truncado se for o único valor no conjunto de resultados, como no resultado da consulta
SHOW CREATE TABLE. #61795 (Alexey Milovidov). - Assim como
clickhouse-local,clickhouse-clientpassa a aceitar a opção--output-formatcomo sinônimo da opção--format. Isso fecha #59848. #61797 (Alexey Milovidov). - Se
stdoutfor um terminal e o formato de saída não for especificado,clickhouse-cliente ferramentas semelhantes usarãoPrettyCompactpor padrão, assim como no modo interativo.clickhouse-clienteclickhouse-localtratarão os argumentos de linha de comando para os formatos de entrada e saída de forma unificada. Isso fecha #61272. #61800 (Alexey Milovidov). - Agrupamento de dígitos com sublinhados nos formatos Pretty para melhor legibilidade. Isso é controlado por uma nova configuração,
output_format_pretty_highlight_digit_groups. #61802 (Alexey Milovidov). - Adicionada a possibilidade de sobrescrever as configurações iniciais de INSERT via
SYSTEM FLUSH DISTRIBUTED. #61832 (Azat Khuzhin). - Ativa, por padrão, o profiling dos processors (tempo gasto e bytes de entrada/saída em ordenação, agregação, …). #61096 (Azat Khuzhin).
- Suporte para arquivos sem extensão de formato no banco de dados Filesystem. #60795 (Kruglov Pavel).
- Torne todos os nomes de formato insensíveis a maiúsculas e minúsculas, como Tsv, TSV, tsv ou até rowbinary. #60420 (豪肥肥). Agradeço se você continuar escrevendo-os corretamente, por exemplo,
JSON😇, e nãoJson🤮, mas não nos importamos se você preferir escrevê-los do seu jeito. - Foi adicionado o modo
none_only_activeà configuraçãodistributed_ddl_output_mode. #60340 (Alexander Tokmakov). - O dashboard avançado tem cores um pouco melhores para gráficos com várias linhas. #60391 (Alexey Milovidov).
- O dashboard Advanced agora mantém os controles sempre visíveis durante a rolagem. Isso permite adicionar um novo gráfico sem precisar rolar para cima. #60692 (Alexey Milovidov).
- Ao executar a consulta
MODIFY COLUMNem visões materializadas, verifique a estrutura da tabela interna para garantir que todas as colunas existam. #47427 (sunny). - Tipos String e enums podem ser usados no mesmo contexto, como em: arrays, consultas UNION e expressões condicionais. Isso encerra #60726. #60727 (Alexey Milovidov).
- Permite declarar Enums na estrutura de dados externos para o processamento de consultas (ou seja, uma tabela temporária imediata que você pode fornecer na sua consulta). #57857 (Duc Canh Le).
- Leve em conta as linhas excluídas por exclusão leve ao selecionar as partes para mesclagem, para que o tamanho em disco da parte resultante seja estimado com mais precisão. #58223 (Zhuo Qiu).
- Adicionados comentários para colunas em mais tabelas do sistema. Continuação de https://github.com/ClickHouse/ClickHouse/pull/58356. #59016 (Nikita Mikhaylov).
- Agora podemos usar colunas virtuais em
PREWHERE. Isso é útil para colunas virtuais não constantes, como_part_offset. #59033 (Amos Bird). Melhorou a usabilidade geral das colunas virtuais. Agora é permitido usar colunas virtuais emPREWHERE(isso é útil para colunas virtuais não constantes, como_part_offset). Agora há documentação interna disponível para colunas virtuais como comentário da coluna na consultaDESCRIBE, com a configuraçãodescribe_include_virtual_columnshabilitada. #60205 (Anton Popov). - Em vez de usar uma chave constante, o armazenamento de objetos agora gera uma chave para determinar a permissão de remover objetos. #59495 (Sema Checherinda).
- Permitir “local” como tipo de armazenamento de objetos, em vez de “local_blob_storage”. #60165 (Kseniia Sumarokova).
- Flush paralelo dos blocos de INSERT pendentes do mecanismo Distributed em
DETACH/desligamento do servidor eSYSTEM FLUSH DISTRIBUTED(o paralelismo só funcionará se você tiver uma política de múltiplos discos para uma tabela, como tudo no mecanismo Distributed atualmente). #60225 (Azat Khuzhin). - Adiciona uma configuração para forçar o uso de cache read-through em operações de merge. #60308 (Kseniia Sumarokova).
- Uma melhoria para o protocolo de compatibilidade com MySQL. A issue #57598 menciona um comportamento diferente em relação ao gerenciamento de transações. A execução de COMMIT/ROLLBACK quando nenhuma transação está ativa é reportada como erro, ao contrário do comportamento do MySQL. #60338 (PapaToemmsn).
- A função
substringagora tem o aliasbyteSlice. #60494 (Robert Schulze). - O nome da configuração do servidor
dns_cache_max_sizefoi alterado paradns_cache_max_entriespara reduzir a ambiguidade. #60500 (Kirill Nikiforov). SHOW INDEX | INDEXES | INDICES | KEYSnão é mais ordenado pelas colunas da chave primária (o que era pouco intuitivo). #60514 (Robert Schulze).- Melhoria no Keeper: interromper a inicialização se um snapshot inválido for detectado, para evitar perda de dados. #60537 (Antonio Andelic).
- Atualize o tzdata para 2024a. #60768 (Raúl Marín).
- Melhoria no Keeper: suporte a
leadership_expiry_msnas configurações do Keeper. #60806 (Brokenice0415). - Sempre infira números em notação exponencial em formatos JSON, independentemente da configuração
input_format_try_infer_exponent_floats. Adicionada a configuraçãoinput_format_json_use_string_type_for_ambiguous_paths_in_named_tuples_inference_from_objects, que permite usar o tipo String para caminhos ambíguos, em vez de gerar uma exceção durante a inferência de Tuples nomeadas a partir de objetos JSON. #60808 (Kruglov Pavel). - Adiciona suporte à sintaxe
START TRANSACTION, normalmente usada no MySQL, resolvendo https://github.com/ClickHouse/ClickHouse/discussions/60865. #60886 (Zach Naimon). - Adiciona uma flag para o algoritmo de merge join com ordenação completa tratar NULL como o maior/menor valor. Assim, o comportamento pode ficar compatível com outros sistemas SQL, como o Apache Spark. #60896 (loudongfeng).
- Suporte à detecção do formato de saída pela extensão do arquivo em
clickhouse-clienteclickhouse-local. #61036 (豪肥肥). - Atualizado o limite de memória em runtime quando o valor de CGroups no Linux é alterado. #61049 (Han Fei).
- Adiciona a função
toUInt128OrZero, que havia sido omitida por engano (o erro está relacionado a https://github.com/ClickHouse/ClickHouse/pull/945). Os aliases de compatibilidadeFROM_UNIXTIMEeDATE_FORMAT(não são nativos do ClickHouse e existem apenas para compatibilidade com MySQL) agora não diferenciam maiúsculas de minúsculas, como esperado para aliases de compatibilidade com SQL. #61114 (Alexey Milovidov). - Melhorias nas verificações de acesso, permitindo revogar privilégios não concedidos caso o usuário de destino também não tenha os privilégios para revogá-los. Exemplo:
GRANT SELECT ON *.* TO user1; REVOKE SELECT ON system.* FROM user1;. #61115 (pufit). - Corrige a função
has()ao usar colunaNullable(corrige #60214). #61249 (Mikhail Koviazin). - Agora é possível especificar o atributo
merge="true"em substituições de configuração para subárvores<include from_zk="/path" merge="true">. Se esse atributo for especificado, o ClickHouse mesclará a subárvore com a configuração existente; caso contrário, o comportamento padrão será anexar novo conteúdo à configuração. #61299 (alesapin). - Adiciona métricas assíncronas para mapeamentos de memória virtual:
VMMaxMapCount&VMNumMaps. Fecha #60662. #61354 (Tuan Pham Anh). - Use a configuração
temporary_files_codecem todos os casos em que criamos dados temporários, por exemplo, na ordenação com memória externa e no GROUP BY com memória externa. Antes, isso funcionava apenas no algoritmo de JOINpartial_merge. #61456 (Maksim Kita). - Adicionada a nova configuração
max_parser_backtracks, que permite limitar a complexidade da análise de consultas. #61502 (Alexey Milovidov). - Menor contenção durante o redimensionamento dinâmico do cache do sistema de arquivos. #61524 (Kseniia Sumarokova).
- Modo com shards da fila StorageS3 desabilitado, pois ela será reescrita. #61537 (Kseniia Sumarokova).
- Corrigido um erro de digitação: de
use_leagcy_max_levelparause_legacy_max_level. #61545 (William Schoeffel). - Removidas algumas entradas duplicadas em
system.blob_storage_log. #61622 (YenchangChan). - Adicionada a função
current_usercomo um alias de compatibilidade com o MySQL. #61770 (Yarik Briukhovetskyi). - Corrige estados inconsistentes de funções de agregação de ponto flutuante em clusters mistos x86-64 / ARM #60610 (Harry Lee).
Melhoria de Build/Testes/Empacotamento
- O profiler de consultas em tempo real agora funciona em AArch64. Em versões anteriores, ele só funcionava quando o programa não passava tempo dentro de uma syscall. #60807 (Alexey Milovidov).
- A versão do ClickHouse foi adicionada às labels do Docker. Fecha #54224. #60949 (Nikolay Monkov).
- Atualização do
prqlcpara 0.11.3. #60616 (Maximilian Roos). - Adicionado um fuzzer genérico de texto de consulta ao
clickhouse-local. #61508 (Alexey Milovidov).
Correção de bug
- Corrigido finished_mutations_to_keep=0 no MergeTree (como a documentação diz que 0 mantém tudo) #60031 (Azat Khuzhin).
- Havia um problema com a otimização FINAL; o autor a descreve assim: “PartsSplitter invalid ranges for the same part”. #60041 (Maksim Kita).
- Havia um problema com o Apache Hive, que é experimental e não tem suporte. #60262 (shanfengp).
- Uma melhoria para réplicas paralelas experimentais: forçar a reanálise caso as réplicas paralelas tenham mudado #60362 (Raúl Marín).
- Corrige o uso do tipo de metadados plain com a nova opção de configuração de discos #60396 (Kseniia Sumarokova).
- Tentativa de corrigir o erro lógico ‘Não é possível capturar a coluna porque ela tem um tipo incompatível’ em mapContainsKeyLike #60451 (Kruglov Pavel).
- Evitar o cálculo de subconsultas escalares para CREATE TABLE. #60464 (Nikolai Kochetov).
- Corrige deadlock no parsing paralelo quando muitas linhas são ignoradas devido a erros #60516 (Kruglov Pavel).
- Havia um problema com o suporte experimental ao KQL (Kusto): correção de
max_query_size_for_kql_compound_operator: #60534 (Yong Wang). - Correção no Keeper: adiciona timeouts ao aguardar logs de commit #60544 (Antonio Andelic).
- Não mostrar dicas numéricas para tipos de data #60577 (Raúl Marín).
- Corrigida a leitura do MergeTree quando há funções não determinísticas no filtro #60586 (Kruglov Pavel).
- Corrigido erro lógico em tipo de valor inválido na configuração de compatibilidade #60596 (Kruglov Pavel).
- fix(prql): Manipulador robusto de panic #60615 (Maximilian Roos).
- Corrigido
intDivpara argumentos decimais e de data #60672 (Yarik Briukhovetskyi). - Correção: expandir CTE na consulta ALTER MODIFY #60682 (Yakov Olkhovskiy).
- Corrige
system.partspara bancos de dados com engine não Atomic/Ordinary (ou seja, Memory) #60689 (Azat Khuzhin). - Corrige “Invalid storage definition in metadata file” em views parametrizadas #60708 (Azat Khuzhin).
- Corrigido estouro de buffer em CompressionCodecMultiple #60731 (Alexey Milovidov).
- Remover problemas no SQL/JSON #60738 (Alexey Milovidov).
- Removida a asserção incorreta na função de agregação quantileGK #60740 (李扬).
- Corrige o erro de insert-select + insert_deduplication_token ao definir streams como 1 #60745 (Jordi Villar).
- Impedir a configuração de cabeçalhos de metadados personalizados em operações de upload multipart não suportadas #60748 (Francisco J. Jurado Moreno).
- Correção de toStartOfInterval #60763 (Andrey Zvonov).
- Corrigido travamento no arrayEnumerateRanked #60764 (Raúl Marín).
- Corrige travamento ao usar input() em INSERT SELECT JOIN #60765 (Kruglov Pavel).
- Corrigido travamento com um valor diferente de allow_experimental_analyzer em subconsultas #60770 (Dmitry Novik).
- Removida a recursão na leitura do S3 #60849 (Antonio Andelic).
- Corrigido um possível travamento em caso de erro no HashedDictionaryParallelLoader #60926 (vdimir).
- Corrigido o RESTORE assíncrono com banco de dados Replicated (funcionalidade experimental) #60934 (Antonio Andelic).
- Correção de deadlock em inserts assíncronos em tabelas
Logvia protocolo nativo #61055 (Anton Popov). - Corrige a avaliação preguiçosa do argumento padrão em dictGetOrDefault para RangeHashedDictionary #61196 (Kruglov Pavel).
- Corrige diversos bugs em groupArraySorted #61203 (Raúl Marín).
- Correção da reconfiguração do Keeper para o binário standalone #61233 (Antonio Andelic).
- Corrigido o uso de session_token no engine S3 #61234 (Kruglov Pavel).
- Corrige um possível resultado incorreto da função de agregação
uniqExact#61257 (Anton Popov). - Corrige erros em show database #61269 (Raúl Marín).
- Corrigir erro lógico no armazenamento do RabbitMQ com colunas MATERIALIZED #61320 (vdimir).
- Corrigido CREATE OR REPLACE DICTIONARY #61356 (Vitaly Baranov).
- Corrigida consulta ATTACH com ON CLUSTER externo #61365 (Nikolay Degterinsky).
- Corrige a otimização para chaves consecutivas em chaves Nullable #61393 (Anton Popov).
- corrige problema na divisão do DAG de actions #61458 (Raúl Marín).
- Correção da finalização de um RESTORE que falhou #61466 (Vitaly Baranov).
- Desabilita corretamente async_insert_use_adaptive_busy_timeout com as configurações de compatibilidade #61468 (Raúl Marín).
- Permitir o enfileiramento no pool de restauração #61475 (Nikita Taranov).
- Corrige uma inconsistência na leitura de
system.partsusando UUID. #61479 (Dan Wu). - Corrigido ALTER QUERY MODIFY SQL SECURITY #61480 (pufit).
- Corrigido um travamento em window view (funcionalidade experimental) #61526 (Alexey Milovidov).
- Corrigido
repeatpara inteiros não nativos #61527 (Antonio Andelic). - Corrigido o argumento
-sdo cliente #61530 (Mikhail f. Shiryaev). - Corrigida falha em
arrayPartialReverseSort#61539 (Raúl Marín). - Corrige a busca por strings com posição constante #61547 (Antonio Andelic).
- Corrige um erro causado por
addDaysao usarDateTime64#61561 (Shuai li). - Não permitir o tipo de entrada LowCardinality no JSONExtract #61617 (Julia Kartseva).
- Correção de
system.part_logpara async insert com desduplicação #61620 (Antonio Andelic). - Corrigida a exceção
Non-ready setem system.parts. #61666 (Nikolai Kochetov). - Corrigido actual_part_name para REPLACE_RANGE (
Entry actual part isn't empty yet) #61675 (Alexander Tokmakov). - Corrige um alerta do sanitizer em
multiSearchAllPositionsCaseInsensitiveUTF8para UTF-8 inválido #61749 (pufit). - Corrige o problema de o frame RANGE não ser compatível com colunas Nullable. #61766 (YuanLiu).
Lançamento do ClickHouse 24.2, 2024-02-29. Apresentação, Vídeo
Alteração incompatível com versões anteriores
- Validar tipos suspeitos/experimentais em tipos aninhados. Antes, esses tipos (exceto JSON) não eram validados em tipos aninhados, como Array/Tuple/Map. #59385 (Kruglov Pavel).
- Adicionar uma verificação de consistência para o número de threads e os tamanhos de bloco. #60138 (Raúl Marín).
- Não inferir números de ponto flutuante em notação exponencial por padrão. Adiciona a configuração
input_format_try_infer_exponent_floats, que restaura o comportamento anterior (desabilitada por padrão). Fecha #59476. #59500 (Kruglov Pavel). - Permitir que operações ALTER sejam envolvidas por parênteses. A inclusão de parênteses pode ser controlada pela configuração
format_alter_operations_with_parentheses. Por padrão, em consultas formatadas, os parênteses são incluídos, já que armazenamos operações ALTER formatadas em alguns locais como metadados (por exemplo: mutações). A nova sintaxe deixa mais claras algumas consultas em que as operações ALTER terminam em uma lista. Por exemplo:ALTER TABLE x MODIFY TTL date GROUP BY a, b, DROP COLUMN cnão pode ser analisada corretamente com a sintaxe antiga. Na nova sintaxe, a consultaALTER TABLE x (MODIFY TTL date GROUP BY a, b), (DROP COLUMN c)fica inequívoca. Versões antigas não conseguem ler a nova sintaxe; portanto, usá-la pode causar problemas se versões mais novas e mais antigas do ClickHouse estiverem misturadas em um único cluster. #59532 (János Benjamin Antal). - Correção do problema de segurança da visão materializada, que permitia a um usuário inserir em uma tabela sem os grants necessários para isso. A correção valida que o usuário tem permissão para inserir não apenas em uma visão materializada, mas também em todas as tabelas subjacentes. Isso significa que algumas consultas que funcionavam antes agora podem falhar com
Not enough privileges. Para resolver esse problema, esta versão introduz um novo recurso de SQL security para views https://clickhouse.com/docs/sql-reference/statements/create/view#sql_security. #54901 #60439 (pufit).
recurso
- Adicionada uma nova sintaxe que permite especificar o usuário definidor em view/visão materializada. Isso permite executar consultas/inserções a partir de views sem permissões explícitas para as tabelas subjacentes. Assim, uma view encapsulará as permissões. #54901 #60439 (pufit).
- Detectar automaticamente o formato de arquivo durante a inferência de esquema quando ele for desconhecido nos motores
file/s3/hdfs/url/azureBlobStorage. Fecha #50576. #59092 (Kruglov Pavel). - Implementado o ajuste automático dos timeouts de inserção assíncrona. As seguintes configurações foram introduzidas: async_insert_poll_timeout_ms, async_insert_use_adaptive_busy_timeout, async_insert_busy_timeout_min_ms, async_insert_busy_timeout_max_ms, async_insert_busy_timeout_increase_rate, async_insert_busy_timeout_decrease_rate. #58486 (Julia Kartseva).
- Permite definir uma cota para o número máximo de falhas consecutivas de login. #54737 (Alexey Gerasimchuck).
- Uma nova função agregada
groupArrayIntersect. Em seguimento a: #49862. #59598 (Yarik Briukhovetskyi). - Suporte a backup e restauração para
AzureBlobStorage. Resolve #50747. #56988 (SmitaRKulkarni). - Agora, o usuário pode especificar diretamente na consulta a string do template usando
format_schema_rows_templatecomo alternativa aformat_template_row. Fecha #31363. #59088 (Shaun Struwig). - Implementada a conversão automática de tabelas MergeTree de diferentes tipos para o engine Replicated. Crie um arquivo vazio
convert_to_replicatedno diretório de dados da tabela (/clickhouse/store/xxx/xxxyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy/), e a tabela será convertida automaticamente na próxima inicialização do servidor. #57798 (Kirill). - Foi adicionada a consulta
ALTER TABLE table FORGET PARTITION partition, que remove nós do ZooKeeper relacionados a uma partição vazia. #59507 (Sergei Trifonov). Este é um recurso para especialistas. - Suporte a arquivo de credenciais JWT para o mecanismo de tabela NATS. #59543 (Nickolaj Jepsen).
- Implementada a tabela
system.dns_cache, que pode ser útil para depurar problemas de DNS. #59856 (Kirill Nikiforov). - O codec
LZ4HCaceitará um novo nível 2, que é mais rápido do que o nível mínimo anterior, 3, em troca de menor compressão. Em versões anteriores,LZ4HC(2)e níveis inferiores eram equivalentes aLZ4HC(3). Autor: Cyan4973. #60090 (Alexey Milovidov). - Implementada a tabela
system.dns_cache, que pode ser útil para solucionar problemas de DNS. Nova configuração do servidor dns_cache_max_size. #60257 (Kirill Nikiforov). - Adicionar suporte à versão com um único argumento da função de tabela
merge, comomerge(['db_name', ] 'tables_regexp'). #60372 (豪肥肥). - Adiciona suporte a argumentos posicionais negativos. Fecha #57736. #58292 (flynn).
- Suporte para especificar, na configuração, um conjunto de usuários permitidos para configurações específicas do S3 usando a chave
user. #60144 (Antonio Andelic). - Adicionada a função de tabela
mergeTreeIndex. Ela representa o conteúdo dos arquivos de índice e de marcas das tabelasMergeTree. Pode ser usada para introspecção. Sintaxe:mergeTreeIndex(database, table, [with_marks = true]), em quedatabase.tableé uma tabela existente com engineMergeTree. #58140 (Anton Popov).
Funcionalidade Experimental
- Adicionada a função
seriesOutliersDetectTukeypara detectar outliers em séries de dados usando o algoritmo de cercas de Tukey. #58632 (Bhavna Jindal). Tenha em mente que esse comportamento será alterado na próxima versão de patch. - Adicionada a função
variantType, que retorna um Enum com o nome do tipo variante para cada linha. #59398 (Kruglov Pavel). - Suporte a
LEFT JOIN,ALL INNER JOINe subconsultas simples para réplicas paralelas (apenas com o analisador). A nova configuraçãoparallel_replicas_prefer_local_joinescolhe entre a execução local deJOIN(padrão) eGLOBAL JOIN. Todas as tabelas devem existir em cada réplica decluster_for_parallel_replicas. As novas configuraçõesmin_external_table_block_size_rowsemin_external_table_block_size_bytessão usadas para agrupar blocos pequenos enviados para tabelas temporárias (apenas com o analisador). #58916 (Nikolai Kochetov). - Permite a criação simultânea de tabelas no banco de dados
Replicateddurante a adição ou recuperação de uma nova réplica. #59277 (Konstantin Bogdanov). - Implementado operador de comparação para valores
Variante inserção correta de Field na colunaVariant. Por padrão, não é permitido criar o tipoVariantcom tipos variantes semelhantes (permitido com a configuraçãoallow_suspicious_variant_types). Fecha #59996. Fecha #59850. #60198 (Kruglov Pavel). - Desabilita
JOINde réplicas paralelas com CTE (sem analisador). #59239 (Raúl Marín).
Melhoria de desempenho
- A chave primária usará menos memória. #60049 (Alexey Milovidov).
- Melhorado o uso de memória da chave primária e de algumas outras operações. #60050 (Alexey Milovidov).
- As chaves primárias das tabelas serão carregadas na memória sob demanda, no primeiro acesso. Isso é controlado pela nova configuração do MergeTree
primary_key_lazy_load, que fica ativada por padrão. Isso oferece várias vantagens: - ela não será carregada para tabelas que não forem usadas; - se não houver memória suficiente, uma exceção será lançada no primeiro uso em vez de na inicialização do servidor. Isso também traz várias desvantagens: - o custo de latência do carregamento da chave primária ocorrerá na primeira consulta, em vez de antes de aceitar conexões; isso, em teoria, pode introduzir um problema de thundering herd. Isso fecha #11188. #60093 (Alexey Milovidov). - Funções vetorizadas de distância usadas na busca vetorial. #58866 (Robert Schulze).
- Função vetorizada
dotProduct, útil para busca vetorial. #60202 (Robert Schulze). - Adicionar suporte a curto-circuito para a função
dictGetOrDefault. Fecha #52098. #57767 (jsc0218). - Melhoria no Keeper: armazenar em cache na memória apenas uma certa quantidade de logs, controlada por
latest_logs_cache_size_thresholdecommit_logs_cache_size_threshold. #59460 (Antonio Andelic). - Melhoria no Keeper: reduzir ainda mais o tamanho do nó de dados. #59592 (Antonio Andelic).
- Continue otimizando falhas de predição de desvio da função
ifquando o tipo de resultado éFloat*/Decimal*/*Int*, em continuação a https://github.com/ClickHouse/ClickHouse/pull/57885. #59148 (李扬). - Otimizada a função
ifquando o tipo de entrada éMap, com aceleração de até ~10x. #59413 (李扬). - Melhorado o desempenho do tipo
Int8com a implementação de aliasing estrito (isso já existe paraUInt8e todos os outros tipos inteiros). #59485 (Raúl Marín). - Otimize o desempenho condicional de
sum/avgpara tipos bigint e decimal de alta precisão, reduzindo falhas de predição de desvio. #59504 (李扬). - Melhora de desempenho em
SELECTs com mutações ativas. #59531 (Azat Khuzhin). - Otimizada a função
isNotNullcom AVX2. #59621 (李扬). - Melhora o desempenho do ASOF JOIN para dados ordenados ou quase ordenados. #59731 (Maksim Kita).
- O valor padrão anterior de 1 MB para
async_insert_max_data_sizeparecia ser pequeno demais. O novo valor será de 10 MiB. #59536 (Nikita Mikhaylov). - Use múltiplas threads para ler os metadados das tabelas de um backup durante a execução do comando RESTORE. #60040 (Vitaly Baranov).
- Agora, se
StorageBuffertiver mais de 1 shard (num_layers> 1), o flush em segundo plano ocorrerá simultaneamente para todos os shards em várias threads. #60111 (alesapin).
Melhoria
- Quando o output format é
Prettye um bloco consiste em um único valor numérico superior a um milhão, um número legível será exibido à direita da tabela. #60379 (rogeryk). - Foram adicionadas as configurações
split_parts_ranges_into_intersecting_and_non_intersecting_finalesplit_intersecting_parts_ranges_into_layers_final. Essas configurações são necessárias para desativar otimizações em consultas comFINALe devem ser usadas apenas para depuração. #59705 (Maksim Kita). Na verdade, não só para isso — elas também podem reduzir o uso de memória em troca de desempenho. - Renomeie a configuração
extract_kvp_max_pairs_per_rowparaextract_key_value_pairs_max_pairs_per_row. O problema (abreviação desnecessária no nome da configuração) foi introduzido em https://github.com/ClickHouse/ClickHouse/pull/43606. Corrija a documentação dessa configuração. #59683 (Alexey Milovidov). #59960 (jsc0218). - A execução de
ALTER COLUMN MATERIALIZEem uma coluna com expressãoDEFAULTouMATERIALIZEDagora segue precisamente a semântica. #58023 (Duc Canh Le). - Foi implementada uma lógica de backoff exponencial para erros durante mutações. Isso reduzirá o uso de CPU e de memória, além do tamanho dos arquivos de log. #58036 (MikhailBurdukov).
- Adicionada melhoria para contabilizar o evento de Profile
InitialQuery. #58195 (Unalian). - Permite definir
volume_prioritynastorage_configuration. #58533 (Andrey Zvonov). - Adicionado suporte para o tipo
Date32no codecT64. #58738 (Hongbin Ma). - Permite vírgulas finais em tipos com vários itens. #59119 (Aleksandr Musorin).
- As configurações do mecanismo de tabela Distributed agora podem ser definidas no arquivo de configuração do servidor (de forma semelhante às configurações do MergeTree), por exemplo,
<distributed> <flush_on_detach>false</flush_on_detach> </distributed>. #59291 (Azat Khuzhin). - Tentar novamente em caso de desconexões e sessões expiradas ao ler
system.zookeeper. Isso é útil ao ler muitas linhas da tabelasystem.zookeeper, especialmente na presença de desconexões induzidas por falhas. #59388 (Alexander Gololobov). - Não interprete como octais os números com zeros à esquerda quando
input_format_values_interpret_expressions=0. #59403 (Joanna Hulboj). - Na inicialização e sempre que os arquivos de configuração são alterados, o ClickHouse atualiza os limites rígidos de memória do seu memory tracker total. Esses limites são calculados com base em várias configurações do servidor e nos limites de cgroups (no Linux). Anteriormente, o valor de
/sys/fs/cgroup/memory.max(para cgroups v2) era fixado no código. Como resultado, os limites de memória do cgroup v2 configurados para grupos aninhados (hierarquias), por exemplo/sys/fs/cgroup/my/nested/group/memory.max, eram ignorados. Isso foi corrigido. O comportamento dos limites de memória v1 permanece inalterado. #59435 (Robert Schulze). - Novos eventos de perfil foram adicionados para observar o tempo gasto no cálculo de PK/projeções/índices secundários durante operações de
INSERT. #59436 (Nikita Taranov). - Permite definir um ponto de partida para o S3Queue no modo Ordered durante a criação usando a configuração
s3queue_last_processed_path. #59446 (Kseniia Sumarokova). - Os comentários das tabelas de sistema também passaram a ficar disponíveis em
system.tablesnoclickhouse-local. #59493 (Nikita Mikhaylov). - Tabela
system.zookeeper: anteriormente, todo o resultado era acumulado na memória e retornado como um único fragmento grande. Essa alteração deve ajudar a reduzir o consumo de memória ao ler muitas linhas desystem.zookeeper, permitir a exibição do progresso intermediário (quantas linhas já foram lidas até o momento) e evitar exceder o tempo limite da conexão quando o conjunto de resultados for grande. #59545 (Alexander Gololobov). - Agora o painel reconhece tanto o estado compactado quanto o não compactado do #hash da URL (retrocompatibilidade). Continuação de #59124 . #59548 (Amos Bird).
- Atualizado o Intel QPL (usado pelo codec
DEFLATE_QPL) da v1.3.1 para a v1.4.0. Também foi corrigido um bug no mecanismo de polling de timeout, pois observamos que, em alguns casos, o timeout não funcionava corretamente; se ocorrer um timeout, o IAA e a CPU podem processar o buffer de forma concorrente. Por enquanto, é melhor garantir que o status do codec IAA não seja QPL_STS_BEING_PROCESSED e, então, recorrer ao codec de software como fallback. #59551 (jasperzhu). - Não exiba um aviso sobre a versão do servidor no ClickHouse Cloud, pois o ClickHouse Cloud gerencia automaticamente atualizações contínuas. #59657 (Alexey Milovidov).
- Após a autoextração, o binário temporário é movido em vez de ser copiado. #59661 (Yakov Olkhovskiy).
- Corrige o desenrolamento da pilha no Apple macOS. Isso fecha #53653. #59690 (Nikita Mikhaylov).
- Verificação de estouro de pilha nos parsers, mesmo que o usuário tenha configurado incorretamente a configuração
max_parser_depthcom um valor muito alto. Isso corrige #59622. #59697 (Alexey Milovidov). #60434 - Unificar o comportamento das coleções nomeadas criadas em XML e em SQL no armazenamento Kafka. #59710 (Pervakov Grigorii).
- No caso de
merge_max_block_size_bytesser pequeno o suficiente e as tabelas conterem linhas extensas (strings ou tuplas), as mesclagens em segundo plano podem ficar presas em um loop infinito. Esse comportamento foi corrigido. Complemento de https://github.com/ClickHouse/ClickHouse/pull/59340. #59812 (Nikita Mikhaylov). - Permitir
uuidem replica_path se ele estiver explicitamente em CREATE TABLE. #59908 (Azat Khuzhin). - Adicionada a coluna
metadata_versionda tabela ReplicatedMergeTree à tabela de sistemasystem.tables. #59942 (Maksim Kita). - Melhoria no Keeper: enviar apenas métricas/eventos relacionados ao Keeper para o Prometheus. #59945 (Antonio Andelic).
- O dashboard exibirá métricas em diferentes versões do ClickHouse, mesmo que a estrutura das tabelas de sistema tenha mudado após a atualização. #59967 (Alexey Milovidov).
- Permite carregar informações de AZ de um arquivo. #59976 (Konstantin Bogdanov).
- Melhoria no Keeper: adicionar novas tentativas em caso de falha nas operações relacionadas ao Disk. #59980 (Antonio Andelic).
- Adicionada a nova configuração
backups.remove_backup_files_after_failure:<clickhouse> <backups> <remove_backup_files_after_failure>true</remove_backup_files_after_failure> </backups> </clickhouse>. #60002 (Vitaly Baranov). - Usar cópia em buffer como fallback para cópia de arquivos S3 do GCP caso o GCP retorne
Internal Errorcom o código de erro HTTPGATEWAY_TIMEOUT. #60164 (Maksim Kita). - Execução com curto-circuito para
ULIDStringToDateTime. #60211 (Juan Madurga). - Adicionada a coluna
query_idàs tabelassystem.backupsesystem.backup_log. Adicionada a stack trace do erro à colunaerror. #60220 (Maksim Kita). - As conexões pela porta MySQL agora são executadas automaticamente com a configuração
prefer_column_name_to_alias = 1para oferecer suporte pronto para uso ao QuickSight. Além disso, as configuraçõesmysql_map_string_to_text_in_show_columnsemysql_map_fixed_string_to_text_in_show_columnsagora vêm habilitadas por padrão, afetando apenas as conexões MySQL. Isso aumenta a compatibilidade com mais ferramentas de BI. #60365 (Robert Schulze). - Corrige uma condição de corrida no código JavaScript que fazia gráficos duplicados serem exibidos sobrepostos. #60392 (Alexey Milovidov).
Melhoria de Build/Testes/Empacotamento
- Adicionados builds e testes com coleta de cobertura e introspecção. Continuação de #56102. #58792 (Alexey Milovidov).
- Atualizada a toolchain do Rust em
corrosion-cmakequando a variável da toolchain de compilação cruzada do CMake está definida. #59309 (Aris Tritas). - Adicionado fuzzing para ASTLiterals. #59383 (Raúl Marín).
- Se você quiser executar scripts do initdb sempre que o contêiner do ClickHouse for iniciado, deverá definir a variável de ambiente CLICKHOUSE_ALWAYS_RUN_INITDB_SCRIPTS. #59808 (Alexander Nikolaev).
- Removida a capacidade de desabilitar componentes genéricos do ClickHouse (como servidor/cliente/…), mas mantidos alguns que exigem bibliotecas extras (como ODBC ou Keeper). #59857 (Azat Khuzhin).
- O fuzzer de consultas fará fuzzing de SETTINGS dentro das consultas. #60087 (Alexey Milovidov).
- Adicionado suporte para compilar o ClickHouse com clang-19 (master). #60448 (Alexey Milovidov).
Correção de bug (mau funcionamento perceptível ao usuário em uma versão estável oficial)
- Corrige um erro de “Set não pronto” em TTL WHERE. #57430 (Nikolai Kochetov).
- Corrigido um bug na função
quantilesGK#58216 (李扬). - Corrige um comportamento incorreto do
intDivcom argumentos Decimal #59243 (Yarik Briukhovetskyi). - Corrigido
translatecom entrada FixedString #59356 (Raúl Marín). - Corrige o cálculo do digest no Keeper #59439 (Antonio Andelic).
- Corrige stacktraces de binários sem símbolos de depuração #59444 (Azat Khuzhin).
- Corrige
ASTAlterCommand::formatImplno caso de configurações específicas da coluna… #59445 (János Benjamin Antal). - Correção de
SELECT * FROM [...] ORDER BY ALLcom o analisador #59462 (zhongyuankai). - Corrige uma possível exceção não tratada durante o cancelamento de consulta distribuída #59487 (Azat Khuzhin).
- Faça o MAX usar as mesmas regras da permutação para tipos complexos #59498 (Raúl Marín).
- Corrige um caso específico ao passar
update_insert_deduplication_token_in_dependent_materialized_views#59544 (Jordi Villar). - Corrigido o resultado incorreto de arrayElement / map com valor vazio #59594 (Raúl Marín).
- Corrige falha em topK ao mesclar estados vazios #59603 (Raúl Marín).
- Corrigida tabela distribuída com uma chave de sharding constante #59606 (Vitaly Baranov).
- Corrigir o problema de KQL encontrado pelo WingFuzz #59626 (Yong Wang).
- Corrigido o erro “Read beyond last offset” no AsynchronousBoundedReadBuffer #59630 (Vitaly Baranov).
- Preservar o alias da função em RewriteSumFunctionWithSumAndCountVisitor #59658 (Raúl Marín).
- Corrige o horário de início de consultas não iniciais #59662 (Raúl Marín).
- Validar os tipos de argumentos do índice de skipping
minmax#59733 (Anton Popov). - Corrige a função leftPad / rightPad com entrada do tipo FixedString #59739 (Raúl Marín).
- Corrige problema identificado pelo AST fuzzer na função
countMatches#59752 (Robert Schulze). - RabbitMQ: correção do caso em que não havia mensagens com ack nem com nack #59775 (Kseniia Sumarokova).
- Corrige o StorageURL, que executava parte da consulta em uma única thread #59833 (Michael Kolupaev).
- S3Queue: corrige valor não inicializado #59897 (Kseniia Sumarokova).
- Corrigida a análise sintática de expressões de partição entre parênteses #59901 (János Benjamin Antal).
- Corrige falha no formato JSONColumnsWithMetadata via HTTP #59925 (Kruglov Pavel).
- Não reescreva
sumcomocountse o valor de retorno for diferente no Analyzer #59926 (Azat Khuzhin). - Correção de falha na leitura do UniqExactSet #59928 (Maksim Kita).
- Correção de metadata_version inválida no ReplicatedMergeTree #59946 (Maksim Kita).
- Corrigida uma condição de corrida em
StorageDistributed#59987 (Nikita Taranov). - Docker: executar scripts de inicialização quando a opção estiver ativada, e não desativada #59991 (jktng).
- Corrige INSERT no
SQLitecom aspas simples (escapando aspas simples com aspas, em vez de barra invertida) #60015 (Azat Khuzhin). - Corrigidos vários erros lógicos no
arrayFold#60022 (Raúl Marín). - Corrige o optimize_uniq_to_count ao remover o alias da coluna #60026 (Raúl Marín).
- Corrige possível exceção na tabela S3Queue ao executar DROP #60036 (Kseniia Sumarokova).
- Corrige a formatação de NOT com literais isolados #60042 (Raúl Marín).
- Usar max_query_size do contexto em DDLLogEntry em vez do valor fixo 4096 #60083 (Kruglov Pavel).
- Corrige a formatação inconsistente de consultas que contêm tabelas chamadas
table. Corrige a formatação incorreta de consultas comUNION ALL,INTERSECTeEXCEPTquando a estrutura delas não era linear. Isso fecha #52349. Corrige a formatação incorreta de consultasSYSTEM, incluindoSYSTEM ... DROP FILESYSTEM CACHE,SYSTEM ... REFRESH/START/STOP/CANCEL/TEST VIEWeSYSTEM ENABLE/DISABLE FAILPOINT. Corrige a formatação de consultas DDL parametrizadas. Corrige a formatação da consultaDESCRIBE FILESYSTEM CACHE. Corrige a formatação incorreta deSET param_...(uma consulta que define um parâmetro). Corrige a formatação incorreta de consultasCREATE INDEX. Corrige a formatação inconsistente deCREATE USERe consultas semelhantes. Corrige a formatação inconsistente deCREATE SETTINGS PROFILE. Corrige a formatação incorreta deALTER ... MODIFY REFRESH. Corrige a formatação inconsistente de funções de janela quando os offsets do frame eram expressões. Corrige a formatação inconsistente deRESPECT NULLSeIGNORE NULLSquando usados após uma função que implementa um operador (comoplus). Corrige a formatação absurda deSYSTEM SYNC REPLICA ... LIGHTWEIGHT FROM .... Corrige a formatação inconsistente de consultas inválidas comGROUP BY GROUPING SETS ... WITH ROLLUP/CUBE/TOTALS. Corrige a formatação inconsistente deGRANT CURRENT GRANTS. Corrige a formatação inconsistente deCREATE TABLE (... COLLATE). Além disso, corrigi a formatação incorreta deEXPLAINem subconsultas (#60102). Corrigida a formatação incorreta de funções lambda (#60012). Adicionada uma verificação para evitar que essas aberrações passem despercebidas no futuro. #60095 (Alexey Milovidov). - Corrigida a formatação inconsistente do explain em subconsultas #60102 (Alexey Milovidov).
- Corrige travamento de
cosineDistancecom Nullable #60150 (Raúl Marín). - Permite converter bools em formato de string para bools reais #60160 (Robert Schulze).
- Corrigido
system.s3queue_log#60166 (Kseniia Sumarokova). - Corrige arrayReduce com nome de função de agregação Nullable #60188 (Raúl Marín).
- Oculta informações sensíveis para
S3Queue#60233 (Kseniia Sumarokova). - Corrigidos os códigos de exceção HTTP. #60252 (Austin Kothig).
- S3Queue: corrige um erro (também corrige o teste instável test_storage_s3_queue/test.py::test_shards_distributed) #60282 (Kseniia Sumarokova).
- Corrige o uso de valor não inicializado e resultado inválido em funções de hash com IPv6 #60359 (Kruglov Pavel).
- Corrige o OptimizeDateOrDateTimeConverterWithPreimageVisitor com argumentos nulos #60453 (Raúl Marín).
- Corrigido um pequeno bug que impedia a execução, em réplicas, de consultas de tabelas distribuídas enviadas por clientes dos dialetos KQL ou PRQL. #59674. #60470 (Alexey Milovidov) #59674 (Austin Kothig).
Lançamento do ClickHouse 24.1, 2024-01-30. Apresentação, Vídeo
Alteração incompatível com versões anteriores
- A configuração
print_pretty_type_namesagora vem ativada por padrão. Você pode desativá-la para manter o comportamento antigo ou usarSET compatibility = '23.12'. #57726 (Alexey Milovidov). - A configuração do MergeTree
clean_deleted_rowsfoi descontinuada e não tem mais efeito. A palavra-chaveCLEANUPparaOPTIMIZEnão é permitida por padrão (a menos queallow_experimental_replacing_merge_with_cleanupesteja ativada). #58316 (Alexander Tokmakov). - A função
reverseDNSQuerynão está mais disponível. Isso encerra #58368. #58369 (Alexey Milovidov). - Ative várias mudanças para melhorar o controle de acesso no arquivo de configuração. Essas mudanças afetam o comportamento, e você deve verificar o
config.xmlna seçãoaccess_control_improvements. Caso não tenha certeza, mantenha os valores no arquivo de configuração como estavam na versão anterior. #58584 (Alexey Milovidov). - Melhora o funcionamento de
sumMapFilteredcom valores NaN. Os valores NaN agora são colocados no final (em vez de aleatoriamente) e considerados diferentes de quaisquer outros valores.-0agora também é tratado como igual a0; como valores 0 são descartados, valores-0também são descartados. #58959 (Raúl Marín). - A função
visibleWidthpassará a se comportar de acordo com a documentação. Em versões anteriores, ela simplesmente contava pontos de código após a serialização da string, como a funçãolengthUTF8, mas não considerava caracteres de largura zero e caracteres combinantes, caracteres de largura total, tabulações e caracteres de exclusão. Agora, o comportamento foi alterado em conformidade. Se você quiser manter o comportamento antigo, definafunction_visible_width_behaviorcomo0oucompatibilitycomo23.12ou inferior. #59022 (Alexey Milovidov). - O dialeto
Kustoestá desativado até que estes dois bugs sejam corrigidos: #59037 e #59036. #59305 (Alexey Milovidov). Qualquer tentativa de usarKustoresultará em uma exceção. - Uma implementação mais eficiente do modificador
FINALnão garante mais a preservação da ordem, mesmo semax_threads = 1. Se você dependia do comportamento anterior, definaenable_vertical_finalcomo 0 oucompatibilitycomo23.12.
Novo recurso
- Implementa o tipo de dado Variant, que representa uma união de outros tipos de dados. O tipo
Variant(T1, T2, ..., TN)significa que cada linha desse tipo tem um valor do tipoT1,T2, … ouTN, ou nenhum deles (valorNULL). O tipo Variant está disponível com a configuraçãoallow_experimental_variant_type. Referência: #54864. #58047 (Kruglov Pavel). - Agora, determinadas configurações (atualmente
min_compress_block_sizeemax_compress_block_size) podem ser especificadas no nível da coluna, onde têm prioridade sobre a configuração correspondente no nível da tabela. Exemplo:CREATE TABLE tab (col String SETTINGS (min_compress_block_size = 81920, max_compress_block_size = 163840)) ENGINE = MergeTree ORDER BY tuple();. #55201 (Duc Canh Le). - Adiciona a função de agregação
quantileDD, bem como as correspondentesquantilesDDemedianDD. Ela se baseia no DDSketch https://www.vldb.org/pvldb/vol12/p2195-masson.pdf. ### Item da documentação para alterações voltadas ao usuário. #56342 (Srikanth Chekuri). - Permite configurar qualquer tipo de armazenamento de objetos com qualquer tipo de metadado. #58357 (Kseniia Sumarokova).
- Adicionados os modos
null_status_on_timeout_only_activeethrow_only_activeparadistributed_ddl_output_mode, que permitem não esperar por réplicas inativas. #58350 (Alexander Tokmakov). - Adicionar a função
arrayShinglespara gerar subarrays; por exemplo,arrayShingles([1, 2, 3, 4, 5], 3)retorna[[1,2,3],[2,3,4],[3,4,5]]. #58396 (Zheng Miao). - Foram adicionadas as funções
punycodeEncode,punycodeDecode,idnaEncodeeidnaDecode, úteis para converter nomes de domínio internacionalizados em uma representação ASCII de acordo com o padrão IDNA. #58454 (Robert Schulze). - Adicionadas as funções de similaridade entre strings
dramerauLevenshteinDistance,jaroSimilarityejaroWinklerSimilarity. #58531 (Robert Schulze). - Adiciona duas configurações:
output_format_compression_level, para alterar o nível de compressão de saída, eoutput_format_compression_zstd_window_log, para definir explicitamente o tamanho da janela de compressão e habilitar o modo de longo alcance para a compressão zstd, caso o método de compressão de saída sejazstd. Aplicado aINTO OUTFILEe à gravação em table functionsfile,url,hdfs,s3eazureBlobStorage. #58539 (Duc Canh Le). - Desabilita automaticamente as sequências de escape ANSI nos formatos Pretty quando a saída não é um terminal. Adiciona o novo modo
autoà configuraçãooutput_format_pretty_color. #58614 (Shaun Struwig). - Adicionada a função
sqidDecode, que decodifica Sqids. #58544 (Robert Schulze). - Permite ler valores Bool como String em formatos de entrada JSON. Isso é feito com a configuração
input_format_json_read_bools_as_strings, que vem habilitada por padrão. #58561 (Kruglov Pavel). - Adicionada a função
seriesDecomposeSTL, que decompõe uma série temporal em sazonalidade, tendência e um componente residual. #57078 (Bhavna Jindal). - Adicionado o cliente MySQL Binlog para MaterializedMySQL: uma conexão de binlog para vários bancos de dados. #57323 (Val Doroshchuk).
- A Intel QuickAssist Technology (QAT) fornece compressão e criptografia aceleradas por hardware. O ClickHouse recebeu um novo codec de compressão
ZSTD_QAT, que utiliza QAT para compressão zstd. O codec usa a QATlib da Intel e o plugin QAT ZSTD da Intel. No momento, apenas a compressão pode ser acelerada por hardware (um fallback para software entra em ação caso o QAT não possa ser inicializado); a descompressão sempre é executada por software. #57509 (jasperzhu). - Implementação de uma nova forma de gerar as chaves do armazenamento de objetos para discos S3. Agora, o formato pode ser definido com a sintaxe de regex
re2, usando a opçãokey_templatena descrição do disco. #57663 (Sema Checherinda). - A tabela system.dropped_tables_parts contém partes das tabelas system.dropped_tables (tabelas descartadas, mas ainda não removidas). #58038 (Yakov Olkhovskiy).
- Adicionada a configuração
max_materialized_views_size_for_tablepara limitar o número de visões materializadas vinculadas a uma tabela. #58068 (zhongyuankai). - Melhorias no
clickhouse-format: suporte a consultas INSERT comVALUES; suporte a comentários (use--commentspara exibi-los); suporte à opção--max_line_lengthpara formatar apenas consultas longas em várias linhas. #58246 (vdimir). - Anexa todas as tabelas do sistema no
clickhouse-local, incluindosystem.parts. Fecha #58312. #58359 (Alexey Milovidov). - Suporte a tipos de dados
Enumna funçãotransform. Isso fecha #58241. #58360 (Alexey Milovidov). - Adicionada a tabela
system.database_engines. #58390 (Bharat Nallan). Permite registrar motores de banco de dados independentemente no código-base. #58365 (Bharat Nallan). Permite registrar interpretadores de forma independente. #58443 (Bharat Nallan). - Adicionado o modificador
FROM <Replicas>à consultaSYSTEM SYNC REPLICA LIGHTWEIGHT. Com o modificadorFROM, garantimos que aguardamos fetches e drop-ranges apenas das réplicas de origem especificadas, bem como de qualquer réplica que não esteja no zookeeper ou com source_replica vazio. #58393 (Jayme Bird). - Adicionada a configuração
update_insert_deduplication_token_in_dependent_materialized_views. Essa configuração permite atualizar o token de desduplicação de insert com o identificador da tabela durante o insert em visões materializadas dependentes. Corrige #59165. #59238 (Maksim Kita). - Adicionada a instrução
SYSTEM RELOAD ASYNCHRONOUS METRICS, que atualiza as métricas assíncronas. Útil principalmente para testes e desenvolvimento. #53710 (Robert Schulze).
Melhoria de desempenho
- A coordenação para réplicas paralelas foi reescrita para proporcionar melhor paralelismo e melhor localidade de cache. Ela foi testada quanto à escalabilidade linear em centenas de réplicas. Também passou a oferecer suporte à leitura em ordem. #57968 (Nikita Taranov).
- Substitua o buffer de saída HTTP pelos buffers nativos do ClickHouse. Adicione métricas de contagem de bytes para as interfaces. #56064 (Yakov Olkhovskiy).
- Grandes estados de agregação de
uniqExactpassarão a ser mesclados em paralelo em consultas distribuídas. #59009 (Nikita Taranov). - Menor uso de memória após a leitura de tabelas
MergeTree. #59290 (Anton Popov). - Menor consumo de memória nas mesclagens verticais. #59340 (Anton Popov).
- Evite consumo excessivo de memória durante a inicialização do Keeper em mais situações. #58455 (Antonio Andelic).
- Melhoria no Keeper: redução do uso de memória do Keeper para nós armazenados. #59002 (Antonio Andelic).
- Implementação de
FINALmais amigável ao cache. Observação sobre a mudança de comportamento: anteriormente, consultas com o modificadorFINALque liam com um único stream (por exemplo,max_threads = 1) produziam saída ordenada sem uma cláusulaORDER BYexplicitamente especificada. Isso não é mais garantido quandoenable_vertical_final = true(e esse é o padrão). #54366 (Duc Canh Le). - Evita cópia extra em
ReadBufferFromIStream, que é usado, por exemplo, para leitura do S3. #56961 (Nikita Taranov). - Otimização da função de elemento de array quando a entrada é Array(Map)/Array(Array(Num)/Array(Array(String))/Array(BigInt)/Array(Decimal). As implementações anteriores faziam mais alocações do que o necessário. O ganho de desempenho com a otimização chega a ~6x, especialmente quando o tipo de entrada é Array(Map). #56403 (李扬).
- Ler a coluna uma única vez ao ler mais de uma subcoluna dela em partes compactas. #57631 (Kruglov Pavel).
- Reescrita da AST da função
sum(column + constant). Isso está disponível como uma etapa de otimização do Analisador #57853 (Jiebin Sun). - A função
matchagora é avaliada usando os índices de skippingngrambf_v1etokenbf_v1. #57882 (凌涛). - A avaliação da função
matchagora usa índices invertidos. #58284 (凌涛). - O
FINALdo MergeTree não compara linhas de uma mesma parte não L0. #58142 (Duc Canh Le). - Acelerar chamadas de iota (preenchimento de array com números consecutivos). #58271 (Raúl Marín).
- Melhoria de desempenho de MIN/MAX para tipos não numéricos. #58334 (Raúl Marín).
- Otimize a combinação de filtros (como em PREWHERE em múltiplos estágios) com intrínsecos BMI2/SSE #58800 (Zhiguo Zhou).
- Use uma thread a menos no
clickhouse-local. #58968 (Alexey Milovidov). - Melhora no desempenho da função
multiIfquando o tipo é Nullable. #57745 (KevinyhZou). - Adiciona
SYSTEM JEMALLOC PURGEpara liberar páginas jemalloc não utilizadas,SYSTEM JEMALLOC [ ENABLE | DISABLE | FLUSH ] PROFILEpara controlar o perfil do jemalloc se o profiler estiver habilitado. Adiciona comandos 4LW relacionados ao jemalloc no Keeper:jmstpara gerar um dump das estatísticas do jemalloc,jmfp,jmep,jmdppara controlar o perfil do jemalloc se o profiler estiver habilitado. #58665 (Antonio Andelic). - Menor consumo de memória nos backups para S3. #58962 (Vitaly Baranov).
Melhoria
- Adicionados comentários (breves descrições) a todas as colunas das tabelas de sistema. Há vários motivos para isso: - Usamos bastante as tabelas de sistema, e às vezes pode ser muito difícil para o desenvolvedor entender a finalidade e o significado de uma determinada coluna. - Alteramos com frequência as tabelas de sistema (adicionando novas ou modificando as existentes), e a documentação delas está sempre desatualizada. Por exemplo, dê uma olhada na página de documentação de
system.parts. Faltam muitas colunas - Gostaríamos, no futuro, de gerar a documentação diretamente do ClickHouse. #58356 (Nikita Mikhaylov). - Permite consultas sem alias para subconsultas no
PASTE JOIN. #58654 (Yarik Briukhovetskyi). - Ativa a integração de
MySQL/MariaDBno macOS. Fecha #21191. #46316 (Alexey Milovidov) (Robert Schulze). - Desabilitado
max_rows_in_set_to_optimize_joinpor padrão. #56396 (vdimir). - Adicionado o parâmetro de configuração
<host_name>, que permite evitar resolver nomes de host em consultas DDL com ON CLUSTER e em motores de banco de dados Replicated. Isso reduz a possibilidade de a fila ficar travada em caso de alteração na definição do cluster. Fecha #57573. #57603 (Nikolay Degterinsky). - Aumente
load_metadata_threadspara 16 no cache do sistema de arquivos. Isso fará o servidor iniciar mais rápido. #57732 (Alexey Milovidov). - Adicionada a capacidade de limitar a taxa de merges/mutações (
max_mutations_bandwidth_for_server/max_merges_bandwidth_for_server). #57877 (Azat Khuzhin). - Substituiu a coluna não documentada (booleana)
is_hot_reloadablena tabela de sistemasystem.server_settingspela coluna (Enum8)changeable_without_restart, com os valores possíveisNo,Yes,IncreaseOnlyeDecreaseOnly. A coluna também foi documentada. #58029 (skyoct). - A descoberta de cluster permite definir nome de usuário e senha, fecha #58063. #58123 (vdimir).
- Suporte para parâmetros de consulta em
ALTER TABLE ... PART. #58297 (Azat Khuzhin). - Criar consumidores para tabelas do Kafka sob demanda (mas mantê-los por algum tempo —
kafka_consumers_pool_ttl_ms, desde o último uso); isso deve corrigir o problema com as estatísticas desystem.kafka_consumers(que não eram atualizadas quando ninguém lia da tabela do Kafka, o que levava a um vazamento contínuo de memória e à lentidão ao desanexar a tabela) e também faz com que este PR volte a habilitar, por padrão, as estatísticas desystem.kafka_consumers. #58310 (Azat Khuzhin). sparkBarcomo alias desparkbar. #58335 (凌涛).- Evite enviar solicitações
ComposeObjectdepois do upload para oGCS. #58343 (Azat Khuzhin). - Lida corretamente com chaves com ponto no nome em arquivos XML de configuração. #58354 (Azat Khuzhin).
- Faz a função
formatretornar uma constante quando recebe argumentos constantes. Isso encerra #58355. #58358 (Alexey Milovidov). - Adicionada a configuração
max_estimated_execution_timepara separarmax_execution_timedemax_estimated_execution_time. #58402 (Zhang Yifan). - Exibe uma dica quando um nome inválido de mecanismo de banco de dados é usado. #58444 (Bharat Nallan).
- Adiciona configurações para um melhor controle do tipo de índices no dicionário Arrow. Usa, por padrão, o tipo inteiro com sinal para índices, como recomendado pelo Arrow. Fecha #57401. #58519 (Kruglov Pavel).
- Implementado #58575 suporte à variável de ambiente
CLICKHOUSE_PASSWORD_FILEna execução da imagem Docker. #58583 (Eyal Halpern Shalev). - Ao executar algumas consultas que exigem muitos streams para ler dados, antes era gerado o erro
"Paste JOIN requires sorted tables only". Agora, o número de streams é ajustado para 1 nesse caso. #58608 (Yarik Briukhovetskyi). - Mensagem de erro melhor para INVALID_IDENTIFIER. #58703 (Yakov Olkhovskiy).
- Tratamento aprimorado de literais numéricos com sinal em normalizeQuery. #58710 (Salvatore Mesoraca).
- Suporte ao tipo de dado Point para MySQL. #58721 (Kseniia Sumarokova).
- Ao comparar uma coluna Float32 com uma string constante, leia a string como Float32 (em vez de Float64). #58724 (Raúl Marín).
- Melhorada a compatibilidade com S3, com adição de suporte ao armazenamento ECloud EOS. #58786 (xleoken).
- Permite que
KILL QUERYcancele backups / restaurações. Este PR também torna visíveis emsystem.processesos backups e as restaurações em execução. Além disso, agora há uma nova configuração na configuração do servidor:shutdown_wait_backups_and_restores(default=true), que faz com que o servidor, ao ser desligado, espere a conclusão de todos os backups e restaurações em execução ou simplesmente os cancele. #58804 (Vitaly Baranov). - Formato Avro com suporte ao codec ZSTD. Corrige #58735. #58805 (flynn).
- A interface MySQL ganhou suporte às configurações
net_write_timeoutenet_read_timeout.net_write_timeouté mapeada para a configuração nativasend_timeoutdo ClickHouse e, da mesma forma,net_read_timeoutparareceive_timeout. Foi corrigido um problema em que só era possível definir a configuração MySQLsql_select_limitse toda a instrução estivesse em letras maiúsculas. #58835 (Serge Klochkov). - Uma mensagem de exceção melhor em caso de conflito ao criar Dicionário e tabela com o mesmo nome. #58841 (Yarik Briukhovetskyi).
- Certifique-se de que, para discos personalizados (criados a partir de SQL),
filesystem_caches_path(um prefixo de diretório comum para todos os caches do filesystem) oucustom_cached_disks_base_directory(um prefixo de diretório comum apenas para caches do filesystem criados a partir de discos personalizados) esteja especificado na configuração do servidor.custom_cached_disks_base_directorytem prioridade maior para discos personalizados em relação afilesystem_caches_path, que é usado se o primeiro não estiver presente. A configuraçãopathdo filesystem cache deve estar dentro desse diretório; caso contrário, será lançada uma exceção, impedindo a criação do disco. Isso não afetará discos criados em uma versão mais antiga cujo servidor tenha sido atualizado — nesse caso, a exceção não será lançada para permitir que o servidor seja iniciado com sucesso.custom_cached_disks_base_directoryfoi adicionado à configuração padrão do servidor como/var/lib/clickhouse/caches/. Fecha #57825. #58869 (Kseniia Sumarokova). - A interface do MySQL passou a ser compatível com as consultas
SHOW WARNINGS/SHOW COUNT(*) WARNINGS, embora o resultado retornado seja sempre um conjunto vazio. #58929 (Serge Klochkov). - Ignorar réplicas indisponíveis ao executar
INSERT SELECTdistribuído em paralelo. #58931 (Alexander Tokmakov). - Exibe o nível de log com descrição textual ao habilitar a formatação estruturada de logs em JSON. #58936 (Tim Liou).
- A interface MySQL passou a oferecer suporte às instruções
CAST(x AS SIGNED)eCAST(x AS UNSIGNED)por meio de aliases de tipos de dados:SIGNEDpara Int64 eUNSIGNEDpara UInt64. Isso melhora a compatibilidade com ferramentas de BI, como o Looker Studio. #58954 (Serge Klochkov). - Diretório de trabalho alterado para o caminho de dados no contêiner Docker. #58975 (cangyin).
- Adicionada a configuração para Azure Blob Storage
azure_max_unexpected_write_error_retries, que também pode ser definida no arquivo de configuração, na seção azure. #59001 (SmitaRKulkarni). - Permitir que o servidor inicie com uma tabela de lago de dados corrompida. Fecha #58625. #59080 (Kseniia Sumarokova).
- Permite ignorar a evolução do schema no engine de tabela
Iceberge ler todos os dados usando o schema especificado pelo usuário na criação da tabela ou o schema mais recente analisado a partir dos metadados no momento da criação da tabela. Isso é feito por meio da configuraçãoiceberg_engine_ignore_schema_evolution, que vem desabilitada por padrão. Observe que habilitar essa configuração pode levar a resultados incorretos, pois, em caso de evolução do schema, todos os data files serão lidos usando o mesmo schema. #59133 (Kruglov Pavel). - Proíba operações mutáveis (
INSERT/ALTER/OPTIMIZE/…) em armazenamentos somente leitura/de gravação única com o erroTABLE_IS_READ_ONLYapropriado (para evitar sobras). Evite deixar sobras em discos de gravação única (format_version.txt) emCREATE/ATTACH. IgnoreDROPparaReplicatedMergeTree(assim como paraMergeTree). Corrija a iteração ems3_plain(MetadataStorageFromPlainObjectStorage::iterateDirectory). Observe que somente leitura corresponde ao discoweb, e gravação única, as3_plain. #59170 (Azat Khuzhin). - Corrige um erro na coluna experimental
_block_numberque poderia causar um erro lógico durante uma combinação complexa deALTERs emerges. Corrige #56202. Substitui #58601. #59295 (alesapin). - A UI Play reconhece quando uma exceção é retornada em JSON. Ajuste para #52853. #59303 (Alexey Milovidov).
- O handler HTTP
/binarypermite especificar usuário, host e, opcionalmente, senha na query string. #59311 (Alexey Milovidov). - Adiciona suporte a backups para tabelas compactadas em memória. Isso fecha #57893. #59315 (Alexey Milovidov).
- Suporte à cláusula
FORMATem consultasBACKUPeRESTORE. #59338 (Vitaly Baranov). - A função
concatWithSeparatoragora aceita tipos de argumento arbitrários (em vez de apenas argumentosStringeFixedString). Por exemplo,SELECT concatWithSeparator('.', 'number', 1)agora retornanumber.1. #59341 (Robert Schulze).
Melhoria de build/testes/empacotamento
- Melhora os aliases do binário
clickhouse(agorach/clickhouseéclickhouse-localouclickhouse, dependendo dos argumentos) e adiciona autocompletar no bash para os novos aliases. #58344 (Azat Khuzhin). - Adiciona ao CI uma verificação de alterações em settings para garantir que todas as mudanças em settings sejam refletidas no histórico de alterações de settings. #58555 (Kruglov Pavel).
- Usa tabelas anexadas diretamente do S3 em testes stateful. #58791 (Alexey Milovidov).
- Salva todo o
fuzzer.logcomo um arquivo, em vez de apenas as últimas 100 mil linhas.tail -n 100000frequentemente remove linhas com definições de tabelas. Exemplo:. #58821 (Dmitry Novik). - Habilita Rust no macOS com Aarch64 (isso vai adicionar busca difusa no cliente com skim e a linguagem PRQL, embora eu ache que quase ninguém hospede o ClickHouse no darwin, então eu diria que isso serve principalmente para a busca difusa no cliente). #59272 (Azat Khuzhin).
- Corrige um problema de aggregation em clusters mistos x86_64 e ARM #59132 (Harry Lee).
Correção de bug (mau funcionamento visível para o usuário em uma versão estável oficial)
- Adicionada a conversão das chaves de junção para
LowCardinalityaninhado #51550 (vdimir). - Achatar apenas o tipo Nested de fato quando flatten_nested=1, não todos os Array(Tuple) #56132 (Kruglov Pavel).
- Corrige um bug em projeções e na configuração
aggregate_functions_null_for_emptydurante a inserção. #56944 (Amos Bird). - Corrigida uma possível exceção devido a um UUID de perfil desatualizado #57263 (Vasily Nemkov).
- Correção do funcionamento com buffers de leitura no StreamingFormatExecutor #57438 (Kruglov Pavel).
- Ignorar MVs com tabela de destino removida ao enviar para views #57520 (Kruglov Pavel).
- Elimina uma possível condição de corrida entre ALTER_METADATA e MERGE_PARTS #57755 (Azat Khuzhin).
- Corrige o bug na ordem das expressões no group by com rollup #57786 (Chen768959).
- Uma correção para o recurso obsoleto de replicação “zero-copy”: corrige blobs perdidos após excluir uma réplica com partes desanexadas corrompidas #58333 (Alexander Tokmakov).
- Permitir que os usuários usem links simbólicos em user_files_path #58447 (Duc Canh Le).
- Corrige um travamento quando a tabela graphite não possui uma função agg #58453 (Duc Canh Le).
- Adiar a leitura de StorageKafka para permitir múltiplas leituras em visões materializadas #58477 (János Benjamin Antal).
- Corrige um caso absurdo de partes sobrepostas #58482 (Alexander Tokmakov).
- Desabilitado o MergeTreePrefetchedReadPool para consultas somente com LIMIT #58505 (Maksim Kita).
- Habilita bancos de dados comuns durante a restauração #58520 (Jihyuk Bok).
- Corrige a leitura do threadpool do Apache Hive para ORC/Parquet/… #58537 (sunny).
- Ocultar credenciais na coluna
base_backup_namedesystem.backup_log#58550 (Daniel Pozo Escalona). toStartOfIntervalpara arredondamento de valores em milissegundos e microssegundos #58557 (Yarik Briukhovetskyi).- Desativado
max_joined_block_rowsno ConcurrentHashJoin #58595 (vdimir). - Corrigido o join usando Nullable no analyzer antigo #58596 (vdimir).
makeDateTime64: Permite argumento de fração não constante #58597 (Robert Schulze).- Corrige possível desreferenciamento de NULL ao simbolizar frames inline #58607 (Azat Khuzhin).
- Melhora no isolamento das entradas do cache de consultas em usuários recriados ou em trocas de função #58611 (Robert Schulze).
- Corrige a falha na análise da chave de partição ao fazer a otimização de projeção #58638 (Amos Bird).
- Cache de consultas: correção da cota por usuário #58731 (Robert Schulze).
- Corrigido o particionamento de streams em funções de janela paralelas #58739 (Dmitry Novik).
- Corrige a chamada duplicada de
destroyao lançar uma exceção em addBatchLookupTable8 #58745 (Raúl Marín). - Não processar requisições no Keeper durante o desligamento #58765 (Antonio Andelic).
- Corrigida uma desreferenciação de ponteiro nulo em
SlabsPolygonIndex::find#58771 (Yarik Briukhovetskyi). - Correção da função JSONExtract para colunas LowCardinality(Nullable) #58808 (vdimir).
- Uma correção para o acúmulo inesperado de consumo de memória ao criar um grande número de tabelas com CREATE e DROP. #58831 (Maksim Kita).
- Armazenamento de log de arquivo com múltiplas leituras em mv #58877 (János Benjamin Antal).
- Restrição do ID da chave de acesso do S3. #58900 (MikhailBurdukov).
- Corrige uma possível queda no clickhouse-local durante o carregamento de sugestões #58907 (Kruglov Pavel).
- Corrige travamento ao usar
indexHint#58911 (Dmitry Novik). - Corrige o problema de o StorageURL esquecer os cabeçalhos ao reiniciar o servidor #58933 (Michael Kolupaev).
- Analisador: corrige a substituição do armazenamento pelo bloco de inserção #58958 (Yakov Olkhovskiy).
- Corrigida a operação de seek no ReadBufferFromZipArchive #58966 (Michael Kolupaev).
- Correção para índices invertidos experimentais (não use em produção):
DROP INDEXde índice invertido agora remove todos os arquivos relevantes do armazenamento persistente #59040 (mochi). - Corrige uma condição de corrida em query_factories_info #59049 (Kseniia Sumarokova).
- Desabilitar nova tentativa para o erro “Too many redirects” #59099 (skyoct).
- Corrigido deadlock ao encerrar banco de dados que não foi iniciado #59137 (Sergei Trifonov).
- Correção: LIMIT BY e LIMIT em consulta distribuída #59153 (Igor Nikonov).
- Corrige travamento com fuso horário Nullable em
toString#59190 (Yarik Briukhovetskyi). - Corrige falha nos metadados do Iceberg causada por caminhos de arquivo inválidos #59275 (Kruglov Pavel).
- Corrigido o nome da arquitetura na seleção do alvo Rust #59307 (p1rattttt).
- Corrige um erro lógico relacionado ao “not-ready set” ao consultar
system.tablescom uma subconsulta na cláusula IN. #59351 (Nikolai Kochetov).