Sumário
Lançamento do ClickHouse v23.11, 2023-12-06
Lançamento do ClickHouse v23.10, 2023-11-02
Lançamento do ClickHouse v23.9, 2023-09-28
Lançamento do ClickHouse v23.8 LTS, 2023-08-31
Lançamento do ClickHouse v23.7, 2023-07-27
Lançamento do ClickHouse v23.6, 2023-06-30
Lançamento do ClickHouse v23.5, 2023-06-08
Lançamento do ClickHouse v23.4, 2023-04-26
Lançamento do ClickHouse v23.3 LTS, 2023-03-30
Lançamento do ClickHouse v23.2, 2023-02-23
Lançamento do ClickHouse v23.1, 2023-01-25
Changelog de 2022
Lançamento do ClickHouse 23.12, 2023-12-28. Apresentação, Vídeo
Mudança incompatível com versões anteriores
- Corrigida a verificação de funções não determinísticas em expressões TTL. Antes, em alguns casos, era possível criar uma expressão TTL com funções não determinísticas, o que poderia levar a comportamento indefinido mais adiante. Isso corrige #37250. Expressões TTL que não dependem de nenhuma coluna de uma tabela não são mais permitidas por padrão. Isso pode voltar a ser permitido com
SET allow_suspicious_ttl_expressions = 1ouSET compatibility = '23.11'. Fecha #37286. #51858 (Alexey Milovidov). - A configuração do MergeTree
clean_deleted_rowsestá obsoleta e não tem mais efeito. A palavra-chaveCLEANUPdeOPTIMIZEnão é permitida por padrão (isso pode ser reabilitado com a configuraçãoallow_experimental_replacing_merge_with_cleanup). #58267 (Alexander Tokmakov). Isso corrige #57930. Isso fecha #54988. Isso fecha #54570. Isso fecha #50346. Isso fecha #47579. O recurso precisa ser removido porque não é adequado. Precisamos removê-lo o mais rápido possível, porque não há outra opção. #57932 (Alexey Milovidov).
Nova funcionalidade
- Implementação de views materializadas atualizáveis, solicitada em #33919. #56946 (Michael Kolupaev, Michael Guzov).
- Introduz o
PASTE JOIN, que permite unir tabelas sem a cláusulaON, com base apenas nos números das linhas. Exemplo:SELECT * FROM (SELECT number AS a FROM numbers(2)) AS t1 PASTE JOIN (SELECT number AS a FROM numbers(2) ORDER BY a DESC) AS t2. #57995 (Yarik Briukhovetskyi). - A cláusula
ORDER BYagora permite especificarALL, o que significa que o ClickHouse ordena por todas as colunas da cláusulaSELECT. Exemplo:SELECT col1, col2 FROM tab WHERE [...] ORDER BY ALL. #57875 (zhongyuankai). - Adicionado um novo comando de mutação
ALTER TABLE <table> APPLY DELETED MASK, que permite forçar a aplicação da máscara gravada pela exclusão leve e remover do disco as linhas marcadas como excluídas. #57433 (Anton Popov). - Um handler
/binaryabre um visualizador dos símbolos no binário do ClickHouse. #58211 (Alexey Milovidov). - Foi adicionada uma nova função SQL,
sqid, para gerar Sqids (https://sqids.org/); exemplo:SELECT sqid(125, 126). #57512 (Robert Schulze). - Adiciona uma nova função
seriesPeriodDetectFFTpara detectar o período de uma série usando FFT. #57574 (Bhavna Jindal). - Adiciona um endpoint HTTP para verificar se o Keeper está pronto para receber tráfego. #55876 (Konstantin Bogdanov).
- Adiciona o modo ‘union’ para inferência de esquema. Nesse modo, o esquema da tabela resultante é a união dos esquemas de todos os arquivos (ou seja, o esquema é inferido de cada arquivo). O modo de inferência de esquema é controlado pela configuração
schema_inference_mode, com dois valores possíveis:defaulteunion. Fecha #55428. #55892 (Kruglov Pavel). - Adiciona a nova configuração
input_format_csv_try_infer_numbers_from_strings, que permite inferir números a partir de strings no formato CSV. Fecha #56455. #56859 (Kruglov Pavel). - Quando o número de bancos de dados ou tabelas exceder um limite configurável, exiba um aviso ao usuário. #57375 (凌涛).
- Dicionário com layout
HASHED_ARRAY(eCOMPLEX_KEY_HASHED_ARRAY) suportaSHARDS, assim comoHASHED. #57544 (vdimir). - Adicionadas métricas assíncronas para o total de bytes da chave primária e o total de bytes alocados para a chave primária na memória. #57551 (Bharat Nallan).
- Adicionada a função
SHA512_256. #57645 (Bharat Nallan). - Adiciona
FORMAT_BYTEScomo alias deformatReadableSize. #57592 (Bharat Nallan). - Permite passar um token de sessão opcional para a table function
s3. #57850 (Shani Elharrar). - Introduz uma nova configuração
http_make_head_request. Se ela estiver desativada, o mecanismo de tabela URL não fará uma requisição HEAD para determinar o tamanho do arquivo. Isso é necessário para oferecer suporte a servidores HTTP ineficientes, mal configurados ou que não sejam compatíveis com isso. #54602 (Fionera). - Agora é possível fazer referência a uma coluna ALIAS em definições de índice (que não sejam de chave primária) (issue #55650). Exemplo:
CREATE TABLE tab(col UInt32, col_alias ALIAS col + 1, INDEX idx (col_alias) TYPE minmax) ENGINE = MergeTree ORDER BY col;. #57546 (Robert Schulze). - Foi adicionada uma nova configuração
readonly, que pode ser usada para especificar que um disco S3 é somente leitura. Isso pode ser útil para criar uma tabela em um disco do tipos3_plaine, ao mesmo tempo, ter acesso somente leitura ao bucket do S3 subjacente. #57977 (Pengyuan Bian). - A análise da chave primária em tabelas MergeTree agora também será aplicada a predicados que incluem a coluna virtual
_part_offset(opcionalmente com_part). Esse recurso pode servir como um tipo especial de índice secundário. #58224 (Amos Bird).
Melhoria de desempenho
- Extrai intervalos de partes que não se sobrepõem da tabela MergeTree durante o processamento de FINAL. Dessa forma, podemos evitar a lógica adicional de FINAL para esses intervalos de partes que não se sobrepõem. Caso a quantidade de valores duplicados com a mesma chave primária seja baixa, o desempenho será quase o mesmo que sem FINAL. Melhora o desempenho de leitura do MergeTree FINAL quando a configuração
do_not_merge_across_partitions_select_finalestá definida. #58120 (Maksim Kita). - Passou a ser possível fazer cópia entre discos S3 usando uma cópia no lado do servidor do S3, em vez de copiar por meio do buffer. Isso melhora as operações de
BACKUP/RESTOREe o comandoclickhouse-disks copy. #56744 (MikhailBurdukov). - O Hash JOIN respeita a configuração
max_joined_block_size_rowse não produz blocos grandes noALL JOIN. #56996 (vdimir). - Libere a memória usada na agregação mais cedo. Isso pode evitar uma agregação externa desnecessária. #57691 (Nikolai Kochetov).
- Melhoria no desempenho da serialização de strings. #57717 (Maksim Kita).
- Adiciona suporte à otimização de contagem trivial para tabelas do mecanismo
Merge. #57867 (skyoct). - Agregação otimizada em alguns casos. #57872 (Anton Popov).
- A função
hasAnyagora pode tirar proveito dos índices de skipping de texto completo. #57878 (Jpnock). - A função
if(cond, then, else)(e seu aliascond ? then : else) foi otimizada para usar avaliação sem ramificações. #57885 (zhanglistar). - MergeTree determina automaticamente a configuração
do_not_merge_across_partitions_select_finalse a expressão da chave de partição contiver apenas colunas da expressão da chave primária. #58218 (Maksim Kita). - Melhora o desempenho de
MINeMAXpara tipos nativos. #58231 (Raúl Marín). - Implementada a política de cache
SLRUpara o cache do sistema de arquivos. #57076 (Kseniia Sumarokova). - O limite do número de conexões por endpoint para fetches em segundo plano foi aumentado de
15para o valor da configuraçãobackground_fetches_pool_size. - A configuração de nível MergeTreereplicated_max_parallel_fetches_for_hosttornou-se obsoleta - As configurações de nível MergeTreereplicated_fetches_http_connection_timeout,replicated_fetches_http_send_timeoutereplicated_fetches_http_receive_timeoutforam movidas para o nível do servidor. - A configuraçãokeep_alive_timeoutfoi adicionada à lista de configurações de nível do servidor. #57523 (Nikita Mikhaylov). - Faça com que a consulta a
system.filesystem_cachenão consuma muita memória. #57687 (Kseniia Sumarokova). - Reduz o consumo de memória na desserialização de strings. #57787 (Maksim Kita).
- Construtor mais eficiente para Enum — faz sentido quando o Enum tem muitos valores. #57887 (Duc Canh Le).
- Uma melhoria na leitura a partir do cache do sistema de arquivos: sempre usar o método
pread. #57970 (Nikita Taranov). - Adicionada otimização para a sequência AND notEquals no otimizador de expressões lógicas. Essa otimização está disponível apenas com o Analyzer experimental habilitado. #58214 (Kevin Mingtarja).
Melhoria
- Suporte a limite de memória flexível no Keeper. Ele recusará solicitações se o uso de memória estiver próximo do máximo. #57271 (Han Fei). #57699 (Han Fei).
- Faça com que as inserções em tabelas distribuídas lidem corretamente com a configuração atualizada do cluster. Quando a lista de nós do cluster for atualizada dinamicamente, o Directory Monitor da tabela distribuída a atualizará. #42826 (zhongyuankai).
- Não permitir a criação de uma tabela replicada com parâmetros de merge inconsistentes. #56833 (Duc Canh Le).
- Mostrar o tamanho descompactado em
system.tables. #56618. #57186 (Chen Lixiang). - Adiciona
skip_unavailable_shardscomo uma configuração para tabelasDistributed, semelhante à configuração correspondente no nível da consulta. Fecha #43666. #57218 (Gagan Goel). - A função
substring(aliases:substr,mid) agora também pode ser usada com tiposEnum. Antes, o primeiro argumento da função precisava ser um valor do tipoStringouFixedString. Isso melhora a compatibilidade com ferramentas de terceiros, como o Tableau, por meio da interface MySQL. #57277 (Serge Klochkov). - A função
formatagora oferece suporte a tipos de argumentos arbitrários (em vez de apenas argumentosStringeFixedString). Isso é importante para calcularSELECT format('The {0} to all questions is {1}', 'answer', 42). #57549 (Robert Schulze). - Permite usar a função
date_trunccom o primeiro argumento sem diferenciar maiúsculas de minúsculas. Agora, ambas as formas são aceitas:SELECT date_trunc('day', now())eSELECT date_trunc('DAY', now()). #57624 (Yarik Briukhovetskyi). - Melhores dicas quando uma tabela não existe. #57342 (Bharat Nallan).
- Permite sobrescrever as configurações do servidor
max_partition_size_to_dropemax_table_size_to_dropno momento da consulta. #57452 (Jordi Villar). - Melhoria sutil na inferência de tuplas sem nome em formatos JSON. #57751 (Kruglov Pavel).
- Adicionado suporte à flag read-only ao se conectar ao Keeper (corrige #53749). #57479 (Mikhail Koviazin).
- Corrige possíveis bloqueios em envios Distributed devido a “Arquivo ou diretório inexistente” (durante a recuperação de um lote do disco). Corrige possíveis problemas com
error_countemsystem.distribution_queue(no caso dedistributed_directory_monitor_max_sleep_time_ms> 5 min). Introduz um evento de profile para rastrear falhas de async INSERT —DistributedAsyncInsertionFailures. #57480 (Azat Khuzhin). - Suporte para colunas geradas do PostgreSQL e valores padrão de colunas no
MaterializedPostgreSQL(funcionalidade experimental). Fecha #40449. #57568 (Kseniia Sumarokova). - Permite aplicar algumas alterações nas configurações do cache do sistema de arquivos sem reiniciar o servidor. #57578 (Kseniia Sumarokova).
- Tratamento correto da estrutura de tabela do PostgreSQL com array vazio. #57618 (Mike Kot).
- Passa a expor o número total de erros ocorridos desde a última reinicialização do servidor como a métrica
ClickHouseErrorMetric_ALL. #57627 (Nikita Mikhaylov). - Permitir nós no arquivo de configuração com referência
from_env/from_zke elemento não vazio comreplace=1. #57628 (Azat Khuzhin). - Uma função de tabela
fuzzJSONque permite gerar uma grande quantidade de JSON malformados para fuzzing. #57646 (Julia Kartseva). - Permite a conversão de IPv6 para UInt128 e a aritmética binária. #57707 (Yakov Olkhovskiy).
- Adicionada uma configuração para
async inserts deduplication cache— por quanto tempo aguardamos a atualização do cache. A configuraçãoasync_block_ids_cache_min_update_interval_msfoi descontinuada. Agora o cache é atualizado apenas em caso de conflitos. #57743 (alesapin). - A função
sleep()agora pode ser interrompida comKILL QUERY. #57746 (Vitaly Baranov). - Proíbe consultas
CREATE TABLE ... AS SELECTpara motores de tabelaReplicatedno banco de dados experimentalReplicated, pois elas não são suportadas. Referência #35408. #57796 (Nikolay Degterinsky). - Corrige e aprimora a transformação de consultas para bancos de dados externos, a fim de obter recursivamente todos os predicados compatíveis. #57888 (flynn).
- Adiciona suporte ao recarregamento dinâmico do tamanho do cache do sistema de arquivos. Fecha #57866. #57897 (Kseniia Sumarokova).
- Suporte correto a
system.stack_tracepara threads com SIGRTMIN bloqueado (essas threads podem existir em bibliotecas externas de baixa qualidade, como Apache rdkafka). #57907 (Azat Khuzhin). Além disso, enviar sinal para as threads somente se ele não estiver bloqueado, para evitar aguardarstorage_system_stack_trace_pipe_read_timeout_msquando isso não fizer sentido. #58136 (Azat Khuzhin). - Tolera falhas do Keeper na verificação de inserts com quórum. #57986 (Raúl Marín).
- Adicionado RSS máx./de pico (
MemoryResidentMax) a system.asynchronous_metrics. #58095 (Azat Khuzhin). - Este PR permite usar links no estilo S3 (
https://es3://) sem especificar a região quando ela não for a padrão. Também identifica a região correta se o usuário tiver informado a errada. #58148 (Yarik Briukhovetskyi). clickhouse-format --obfuscatepassará a reconhecer Settings, MergeTreeSettings e fusos horários, mantendo seus nomes inalterados. #58179 (Alexey Milovidov).- Adicionada a função explícita
finalize()emZipArchiveWriter. Simplificado o código excessivamente complexo emZipArchiveWriter. Isso corrige #58074. #58202 (Vitaly Baranov). - Faça com que caches com o mesmo caminho usem os mesmos objetos de cache. Esse comportamento já existia antes, mas foi quebrado na versão 23.4. Se esses caches com o mesmo caminho tiverem conjuntos diferentes de configurações de cache, será gerada uma exceção informando que isso não é permitido. #58264 (Kseniia Sumarokova).
- Réplicas paralelas (recurso experimental): configurações mais amigáveis #57542 (Igor Nikonov).
- Réplicas paralelas (recurso experimental): melhoria no tratamento das respostas de anúncio #57749 (Igor Nikonov).
- Réplicas paralelas (recurso experimental): passam a respeitar mais
min_number_of_marksemParallelReplicasReadingCoordinator#57763 (Nikita Taranov). - Réplicas paralelas (funcionalidade experimental): desabilitar réplicas paralelas com IN (subconsulta) #58133 (Igor Nikonov).
- Réplicas paralelas (recurso experimental): adicionado o evento de perfil ‘ParallelReplicasUsedCount’ #58173 (Igor Nikonov).
- Solicitações que não sejam POST, como HEAD, serão readonly, assim como GET. #58060 (San).
- Adicionar a coluna
bytes_uncompressedemsystem.part_log#58167 (Jordi Villar). - Adicionar o nome do backup base às tabelas
system.backupsesystem.backup_log#58178 (Pradeep Chhetri). - Adiciona suporte à especificação de parâmetros de consulta na linha de comando no clickhouse-local #58210 (Pradeep Chhetri).
Melhorias em Build/Testes/Empacotamento
- Randomizar mais configurações #39663 (Anton Popov).
- Randomizar otimizações desabilitadas na CI #57315 (Raúl Marín).
- Permitir o uso de motores de tabela/funções relacionados ao Azure no macOS. #51866 (Alexey Milovidov).
- O ClickHouse Fast Test agora usa Musl em vez de GLibc. #57711 (Alexey Milovidov). A build totalmente estática com Musl está disponível para download na CI.
- Executar o ClickBench em todos os commits. Isso fecha #57708. #57712 (Alexey Milovidov).
- Remover o uso da função C/POSIX
select, considerada prejudicial, de bibliotecas externas. #57467 (Igor Nikonov). - As configurações disponíveis apenas no ClickHouse Cloud também estarão presentes na build open-source do ClickHouse, por conveniência. #57638 (Nikita Mikhaylov).
Correção de bug (mau funcionamento perceptível ao usuário em um lançamento estável oficial)
- Corrigida a possibilidade de quebra na ordem de classificação em TTL GROUP BY #49103 (Nikita Mikhaylov).
- Correção: na estratégia de bucket
lttbcom split, o primeiro e o último bucket devem conter apenas um único ponto #57003 (FFish). - Corrige um possível deadlock no formato
Templatedurante a sincronização após um erro #57004 (Kruglov Pavel). - Correção da interrupção antecipada durante o parsing de um arquivo ao ignorar muitos erros #57006 (Kruglov Pavel).
- Impede o contorno da ACL do dicionário pela função de tabela
dictionary#57362 (Salvatore Mesoraca). - Corrige outro caso de um erro de “set não pronto” encontrado pelo Fuzzer. #57423 (Nikolai Kochetov).
- Corrige vários problemas no uso de
array_ndimsno PostgreSQL. #57436 (Ryan Jacobs). - Corrige a inconsistência do RWLock após timeout do bloqueio de escrita #57454 (Vitaly Baranov). Corrige a inconsistência do RWLock após timeout do bloqueio de escrita (novamente) #57733 (Vitaly Baranov).
- Correção: não excluir a coluna efêmera ao montar a cadeia de envio para a view #57461 (Yakov Olkhovskiy).
- MaterializedPostgreSQL (experimental): corrige o problema #41922, adiciona um teste para #41923 #57515 (Kseniia Sumarokova).
- Ignora a cláusula ON CLUSTER nas consultas GRANT/REVOKE para gerenciamento de entidades de acesso replicadas. #57538 (MikhailBurdukov).
- Corrige falha no clickhouse-local #57553 (Nikolay Degterinsky).
- Correção para Hash JOIN. #57564 (vdimir).
- Corrigido possível erro na origem do PostgreSQL #57567 (Kseniia Sumarokova).
- Corrige a correção de tipo no Hash JOIN para LowCardinality aninhado. #57614 (vdimir).
- Evita travamentos no
system.stack_traceao proibir corretamente a leitura paralela dele. #57641 (Azat Khuzhin). - Corrige um erro na agregação de colunas esparsas com
any(...) RESPECT NULL#57710 (Azat Khuzhin). - Corrige o parsing de operadores unários #57713 (Nikolay Degterinsky).
- Corrige o carregamento das dependências para o mecanismo de tabela experimental
MaterializedPostgreSQL. #57754 (Kseniia Sumarokova). - Corrige as tentativas de repetição para nós desconectados em BACKUP/RESTORE ON CLUSTER #57764 (Vitaly Baranov).
- Corrige o resultado da agregação externa no caso de projeção parcialmente materializada #57790 (Anton Popov).
- Corrigido o merge em funções de agregação com o combinador
*Map#57795 (Anton Popov). - Desabilitado
system.kafka_consumersdevido a um bug. #57822 (Azat Khuzhin). - Corrige o suporte a chaves LowCardinality no Merge JOIN. #57827 (vdimir).
- Uma correção para
InterpreterCreateQueryrelacionada ao bloco de amostragem. #57855 (Maksim Kita). addresses_exprera ignorado em coleções nomeadas do PostgreSQL. #57874 (joelynch).- Corrigido acesso inválido à memória em BLAKE3 (Rust) #57876 (Raúl Marín). Em seguida, ele foi reescrito de Rust para C++ para aumentar a segurança de memória. #57994 (Raúl Marín).
- Normalização de nomes de funções em
CREATE INDEX#57906 (Alexander Tokmakov). - Corrige o tratamento de réplicas indisponíveis antes da primeira solicitação #57933 (Nikita Taranov).
- Corrige a classificação incorreta de alias literal #57988 (Chen768959).
- Corrigido o pré-processamento inválido no Keeper #58069 (Antonio Andelic).
- Corrige overflow de inteiro na biblioteca
Poco, relacionado aoUTF32Encoding#58073 (Andrey Fedotov). - Corrige réplicas paralelas (recurso experimental) na presença de uma subconsulta escalar com um valor inteiro grande #58118 (Alexey Milovidov).
- Corrigido
accurateCastOrNullparaDateTimecom valor fora do intervalo #58139 (Andrey Zvonov). - Corrige possível erro
PARAMETER_OUT_OF_BOUNDdurante a leitura de subcolunas em uma parte wide do MergeTree #58175 (Kruglov Pavel). - Corrige a lentidão do CREATE VIEW com um número enorme de subconsultas #58220 (Tao Wang).
- Corrige o parsing paralelo de JSONCompactEachRow #58181 (Alexey Milovidov). #58250 (Kruglov Pavel).
Lançamento do ClickHouse 23.11, 2023-12-06. Apresentação, Vídeo
Mudança incompatível com versões anteriores
- O arquivo de configuração padrão do servidor ClickHouse passou a ter
access_management(manipulação de usuários por consultas SQL) enamed_collection_control(manipulação de coleções nomeadas por consultas SQL) habilitados para o usuáriodefaultpor padrão. Isso corrige #56482. #56619 (Alexey Milovidov). - Várias melhorias em
RESPECT NULLS/IGNORE NULLSpara funções de janela. Se você as usar como funções de agregação e armazenar os estados dessas funções com esses modificadores, elas poderão se tornar incompatíveis. #57189 (Raúl Marín). - Removida a otimização
optimize_move_functions_out_of_any. #57190 (Raúl Marín). - Os formatadores
%l/%k/%cna funçãoparseDateTimeagora conseguem interpretar horas/meses sem zeros à esquerda; por exemplo,select parseDateTime('2023-11-26 8:14', '%F %k:%i')agora funciona. Definaparsedatetime_parse_without_leading_zeros = 0para restaurar o comportamento anterior, que exigia dois dígitos. A funçãoformatDateTimeagora também consegue imprimir horas/meses sem zeros à esquerda. Isso é controlado pela configuraçãoformatdatetime_format_without_leading_zeros, mas permanece desativado por padrão para não quebrar casos de uso existentes. #55872 (Azat Khuzhin). - Não é mais possível usar a função de agregação
avgWeightedcom argumentos do tipoDecimal. Solução alternativa: converta os argumentos paraFloat64. Isso corrige #43928. Isso corrige #31768. Isso corrige #56435. Se você tiver usado essa função dentro de visões materializadas ou projeções com argumentosDecimal, entre em contato com support@clickhouse.com. Foi corrigido um erro na função de agregaçãosumMap, e ela ficou cerca de 1,5..2 vezes mais lenta. Isso não importa, porque a função é ruim de qualquer forma. Isso corrige #54955. Isso corrige #53134. Isso corrige #55148. Corrigido um bug na funçãogroupArraySample— ela usava a mesma semente aleatória quando mais de um estado de agregação era gerado em uma consulta. #56350 (Alexey Milovidov).
Nova funcionalidade
- Adicionada a configuração de servidor
async_load_databasespara o carregamento assíncrono de bancos de dados e tabelas. Reduz o tempo de inicialização do servidor. Aplica-se a bancos de dados com os motoresOrdinary,AtomiceReplicated. Suas tabelas carregam os metadados de forma assíncrona. Uma consulta a uma tabela aumenta a prioridade do job de carregamento e aguarda sua conclusão. Adicionada uma nova tabelasystem.asynchronous_loaderpara introspecção. #49351 (Sergei Trifonov). - Adicionada a tabela de sistema
blob_storage_log. Ela permite auditar todos os dados gravados no S3 e em outros armazenamentos de objetos. #52918 (vdimir). - Use estatísticas para ordenar melhor as condições de prewhere. #53240 (Han Fei).
- Adicionado suporte à compressão no protocolo do Keeper. Ela pode ser habilitada no lado do ClickHouse usando a flag
use_compressiondentro da seçãozookeeper. Tenha em mente que apenas o ClickHouse Keeper oferece suporte à compressão, enquanto o Apache ZooKeeper não. Resolve #49507. #54957 (SmitaRKulkarni). - Introduzido o recurso
storage_metadata_write_full_object_key. Se ele for definido comotrue, os arquivos de metadados serão gravados no novo formato. Com esse formato, o ClickHouse armazena a chave completa do objeto remoto no arquivo de metadados, o que permite maior flexibilidade e otimização. #55566 (Sema Checherinda). - Adiciona novas configurações e sintaxe para impedir a sobrescrita dos campos de coleções nomeadas. O objetivo é evitar que um usuário mal-intencionado obtenha acesso não autorizado a segredos. #55782 (Salvatore Mesoraca).
- Adicionada a coluna
hostnamea todas as tabelas de log do sistema — isso é útil se você tornar as tabelas do sistema replicadas, compartilhadas ou distribuídas. #55894 (Bharat Nallan). - Adicionada a consulta
CHECK ALL TABLES. #56022 (vdimir). - Adicionada a função
fromDaysSinceYearZero, semelhante àFROM_DAYSdo MySQL. Por exemplo,SELECT fromDaysSinceYearZero(739136)retorna2023-09-08. #56088 (Joanna Hulboj). - Adicionada uma ferramenta externa em Python para visualizar backups e extrair informações deles sem usar o ClickHouse. #56268 (Vitaly Baranov).
- Implementada uma nova configuração chamada
preferred_optimize_projection_name. Se ela for definida como uma string não vazia, a projeção especificada será usada, se possível, em vez de ser escolhida entre todas as candidatas. #56309 (Yarik Briukhovetskyi). - Adicionar um comando de 4 letras para ceder/renunciar à liderança (https://github.com/ClickHouse/ClickHouse/issues/56352). #56354 (Pradeep Chhetri). #56620 (Pradeep Chhetri).
- Foi adicionada uma nova função SQL,
arrayRandomSample(arr, k), que retorna uma amostra de k elementos do array de entrada. Antes, uma funcionalidade semelhante só podia ser obtida com uma sintaxe menos prática, por exemplo,SELECT arrayReduce('groupArraySample(3)', range(10)). #56416 (Robert Schulze). - Adicionado suporte a dados do tipo
Float16para uso em arquivos.npy. Fecha #56344. #56424 (Yarik Briukhovetskyi). - Adicionada uma view de sistema
information_schema.statisticspara melhor compatibilidade com o Tableau Online. #56425 (Serge Klochkov). - Adicionada a tabela
system.symbols, útil para introspecção do binário. #56548 (Alexey Milovidov). - Painéis configuráveis. As consultas dos gráficos agora são carregadas a partir de uma consulta, que por padrão usa a nova tabela
system.dashboards. #56771 (Sergei Trifonov). - Introduz a função de tabela
fileCluster— ela é útil se um filesystem compartilhado (NFS e similares) for montado no diretóriouser_files. #56868 (Andrey Zvonov). - Adicionar a coluna virtual
_size, com o tamanho do arquivo em bytes, aos motoress3/file/hdfs/url/azureBlobStorage. #57126 (Kruglov Pavel). - Expõe, no endpoint Prometheus, o número de erros para cada código de erro ocorrido em um servidor desde a última reinicialização. #57209 (Nikita Mikhaylov).
- O ClickHouse Keeper informa a zona de disponibilidade em que está em execução no caminho
/keeper/availability-zone. Isso pode ser configurado por meio de<availability_zone><value>us-west-1a</value></availability_zone>. #56715 (Jianfei Hu). - ALTER materialized_view MODIFY QUERY deixa de ser experimental, e a configuração
allow_experimental_alter_materialized_view_structureé descontinuada. Corrige #15206. #57311 (alesapin). - A configuração
join_algorithmrespeita a ordem especificada #51745 (vdimir). - Adicionado suporte aos tipos Protobuf bem conhecidos no formato Protobuf. #56741 (János Benjamin Antal).
Melhoria de desempenho
- Timeouts adaptativos para interagir com o S3. A primeira tentativa é feita com timeouts menores de envio e recebimento. #56314 (Sema Checherinda).
- Aumente o valor padrão de
max_concurrent_queriesde 100 para 1000. Isso faz sentido quando há um grande número de clientes conectados, enviando ou recebendo dados lentamente, de modo que o servidor não fique limitado pela CPU, ou quando o número de núcleos de CPU for maior que 100. Além disso, habilite o controle de concorrência por padrão e defina o número total desejado de threads de processamento de consultas como o dobro do número de núcleos de CPU. Isso melhora o desempenho em cenários com um número muito grande de consultas simultâneas. #46927 (Alexey Milovidov). - Suporte à avaliação paralela de funções de janela. Corrige #34688. #39631 (Dmitry Novik).
- O table engine
Numbers(da tabelasystem.numbers) agora analisa a condição para gerar o subconjunto necessário de dados, como um índice de tabela. #50909 (JackyWoo). - Melhorado o desempenho da filtragem com a condição
IN (...)para o mecanismo de tabelaMerge. #54905 (Nikita Taranov). - Uma melhoria que ocorre quando o cache do sistema de arquivos está cheio e há leituras de grande volume. #55158 (Kseniia Sumarokova).
- Adicionada a capacidade de desabilitar checksums para S3 para evitar uma passagem excessiva pelo arquivo (isso é controlado pela configuração
s3_disable_checksum). #55559 (Azat Khuzhin). - Agora lemos de forma síncrona de tabelas remotas quando os dados estão na page cache (como fazemos com tabelas locais). Isso é mais rápido, não requer sincronização dentro do pool de threads, não hesita em fazer operações de
seekno FS local e reduz a espera da CPU. #55841 (Nikita Taranov). - Otimização para obter valores de
map,arrayElement. Isso trará um ganho de desempenho de cerca de 30%. - reduzir a memória reservada - reduzir a chamada deresize. #55957 (lgbo). - Otimização da filtragem em vários estágios com AVX-512. Os experimentos de desempenho com o conjunto de dados OnTime no dispositivo ICX (CPU Intel Xeon Platinum 8380, 80 cores, 160 threads) mostram que essa mudança pode trazer ganhos de 7,4%, 5,9%, 4,7%, 3,0% e 4,6% no QPS das consultas Q2, Q3, Q4, Q5 e Q6, respectivamente, sem impacto nas demais. #56079 (Zhiguo Zhou).
- Limita o número de threads ocupadas no profiler de consultas. Se houver mais, elas pularão o profiling. #56105 (Alexey Milovidov).
- Reduza a quantidade de chamadas de função virtual em funções de janela. #56120 (Maksim Kita).
- Permite a poda recursiva de campos Tuple no formato de dados ORC para acelerar a varredura. #56122 (李扬).
- Otimização trivial de contagem para o formato de dados
Npy: consultas comoselect count() from 'data.npy'funcionarão muito mais rápido graças ao armazenamento em cache dos resultados. #56304 (Yarik Briukhovetskyi). - Consultas com agregação e um grande número de streams usarão menos memória durante a construção do plano. #57074 (Alexey Milovidov).
- Melhora o desempenho na execução de consultas em casos de uso com muitos usuários e consultas altamente concorrentes (>2000 QPS), otimizando o acesso à ProcessList. #57106 (Andrej Hoos).
- Melhoria trivial no array join, com reutilização de alguns resultados intermediários. #57183 (李扬).
- Havia casos em que o desenrolamento da pilha era lento. Isso não acontece mais. #57221 (Alexey Milovidov).
- Agora usamos o pool de leitura padrão para ler do armazenamento externo quando
max_streams = 1. Isso é vantajoso quando as pré-leituras estão habilitadas. #57334 (Nikita Taranov). - Melhoria no Keeper: melhora no uso de memória durante a inicialização ao adiar o pré-processamento de logs. #55660 (Antonio Andelic).
- Melhorado o desempenho da correspondência de padrões glob nos armazenamentos
FileeHDFS. #56141 (Andrey Zvonov). - As posting lists em índices experimentais de texto completo agora são comprimidas, reduzindo seu tamanho em 10-30%. #56226 (Harry Lee).
- Paralelização do
BackupEntriesCollectorem backups. #56312 (Kseniia Sumarokova).
Melhoria
- Adiciona uma nova configuração de
MergeTree,add_implicit_sign_column_constraint_for_collapsing_engine(desabilitada por padrão). Quando ativada, adiciona uma restrição CHECK implícita para tabelasCollapsingMergeTree, limitando o valor da colunaSigna apenas -1 ou 1. #56701. #56986 (Kevin Mingtarja). - Permite adicionar um novo disco à configuração de armazenamento sem reinicialização. #56367 (Duc Canh Le).
- Suporte à criação e à materialização de índice na mesma consulta ALTER, com suporte também a “modify TTL” e “materialize TTL” na mesma consulta. Fecha #55651. #56331 (flynn).
- Adicionada uma nova função de tabela chamada
fuzzJSON, com linhas contendo versões perturbadas da string JSON de origem com variações aleatórias. #56490 (Julia Kartseva). - O mecanismo
Mergefiltra os registros de acordo com as políticas de linha das tabelas subjacentes, então não é necessário criar outra política de linha em uma tabelaMerge. #50209 (Ilya Golshtein). - Adiciona a configuração
max_execution_time_leafpara limitar o tempo de execução no shard em consultas distribuídas, etimeout_overflow_mode_leafpara controlar o comportamento caso ocorra timeout. #51823 (Duc Canh Le). - Adiciona configuração do ClickHouse para desabilitar o tunelamento de requisições HTTPS por proxy HTTP. #55033 (Arthur Passos).
- Defina
background_fetches_pool_sizecomo 16 ebackground_schedule_pool_sizecomo 512, o que é mais adequado para uso em produção com pequenas inserções frequentes. #54327 (Denny Crane). - Ao ler dados de um arquivo no formato CSV, se houver um
\rno fim da linha e ele não for seguido por\n, encontraremos a seguinte exceção:Cannot parse CSV format: found \r (CR) not followed by \n (LF). Line must end by \n (LF) or \r\n (CR LF) or \n\r.No ClickHouse, o fim de linha em CSV deve ser\n,\r\nou\n\r; portanto,\rdeve ser seguido por\n. No entanto, em algumas situações, os dados de entrada em CSV podem estar em um formato anormal, como no exemplo acima, em que\raparece no fim da linha. #54340 (KevinyhZou). - Atualiza a biblioteca Arrow para a release-13.0.0, com suporte a novas codificações. Fecha #44505. #54800 (Kruglov Pavel).
- Melhora o desempenho de consultas ON CLUSTER ao eliminar chamadas de sistema pesadas para obter todas as interfaces de rede ao buscar o endereço IP local na lista de hosts da entrada de DDL. #54909 (Duc Canh Le).
- Corrigida a contabilização da memória alocada antes de vincular uma thread a uma consulta ou a um usuário. #56089 (Nikita Taranov).
- Adicionado suporte a
LARGE_LISTnos formatos Apache Arrow. #56118 (edef). - Permite a compactação manual do
EmbeddedRocksDBpor meio da consultaOPTIMIZE. #56225 (Azat Khuzhin). - Adicionada a possibilidade de especificar
BlockBasedTableOptionspara tabelasEmbeddedRocksDB. #56264 (Azat Khuzhin). SHOW COLUMNSagora exibe o nome do tipo de dado equivalente no MySQL quando a conexão é feita por meio do protocolo MySQL. Anteriormente, isso ocorria ao definiruse_mysql_types_in_show_columns = 1. A configuração foi mantida, mas tornou-se obsoleta. #56277 (Robert Schulze).- Corrigido um possível erro
The local set of parts of table doesn't look like the set of parts in ZooKeepercaso o servidor fosse reiniciado logo apósTRUNCATEouDROP PARTITION. #56282 (Alexander Tokmakov). - Corrigido o tratamento de strings de consulta não constantes nas funções
formatQuery/formatQuerySingleLine. Também foram adicionadas variantesOrNullde ambas as funções, que retornam NULL quando uma consulta não pode ser interpretada, em vez de lançar uma exceção. #56327 (Robert Schulze). - Permitir o backup de visão materializada com tabela interna excluída, em vez de o backup falhar. #56387 (Kseniia Sumarokova).
- Consultas a
system.replicasiniciam solicitações ao ZooKeeper quando determinadas colunas são consultadas. Quando há milhares de tabelas, essas solicitações podem gerar uma carga considerável no ZooKeeper. Se houver várias consultas simultâneas asystem.replicas, elas repetirão as mesmas solicitações várias vezes. A mudança consiste em “deduplicar” as solicitações de consultas concorrentes. #56420 (Alexander Gololobov). - Corrigida a tradução para uma consulta compatível com MySQL usada para consultar bancos de dados externos. #56456 (flynn).
- Adicionado suporte a backup e restauração de tabelas usando o mecanismo
KeeperMap. #56460 (Antonio Andelic). - A resposta 404 para CompleteMultipartUpload precisa ser verificada novamente. A operação pode ter sido concluída no servidor mesmo que o cliente tenha recebido timeout ou outros erros de rede. A tentativa seguinte de CompleteMultipartUpload recebe uma resposta 404. Se a chave do objeto existir, essa operação é considerada bem-sucedida. #56475 (Sema Checherinda).
- Habilitado o método HTTP OPTIONS por padrão — isso simplifica as solicitações ao ClickHouse a partir de um navegador web. #56483 (Alexey Milovidov).
- O valor de
dns_max_consecutive_failuresfoi alterado por engano em #46550 - isso foi revertido e ajustado para um valor mais adequado. Além disso, o timeout de keep-alive HTTP foi aumentado para um valor razoável usado em produção. #56485 (Alexey Milovidov). - Carrega backups base sob demanda (um backup base não será carregado até que seja necessário). Adiciona também algumas mensagens de log e eventos de perfil para backups. #56516 (Vitaly Baranov).
- A configuração
query_cache_store_results_of_queries_with_nondeterministic_functions(com os valoresfalseoutrue) foi marcada como obsoleta. Ela foi substituída pela configuraçãoquery_cache_nondeterministic_function_handling, um enum com três valores que controla como o cache de consultas lida com consultas com funções não determinísticas: a) lançar uma exceção (comportamento padrão), b) salvar o resultado da consulta não determinística independentemente disso, ou c) ignorar, isto é, não lançar uma exceção nem armazenar o resultado em cache. #56519 (Robert Schulze). - Reescrita de igualdade com verificação
is nullna seção JOIN ON. Experimental. Somente no Analyzer. #56538 (vdimir). - A função
concatagora aceita tipos de argumentos arbitrários (em vez de apenas argumentos String e FixedString). Isso faz com que ela se comporte de maneira mais semelhante à implementação deconcatdo MySQL. Por exemplo,SELECT concat('ab', 42)agora retornaab42. #56540 (Serge Klochkov). - Permite obter a configuração de cache da seção ‘named_collection’ na configuração ou de named collections criadas em SQL. #56541 (Kseniia Sumarokova).
- Mecanismo de banco de dados PostgreSQL: torna a remoção de tabelas desatualizadas menos agressiva quando a conexão com o Postgres falha. #56609 (jsc0218).
- Levava tempo demais para se conectar ao PG quando a URL não estava correta, então a consulta correspondente ficava presa ali e acabava sendo cancelada. #56648 (jsc0218).
- Melhoria no Keeper: desativar logs compactados por padrão no Keeper. #56763 (Antonio Andelic).
- Adicionada a configuração
wait_dictionaries_load_at_startup. #56782 (Vitaly Baranov). - Havia uma vulnerabilidade potencial em versões anteriores do ClickHouse: se um usuário se conectasse e tentasse, sem sucesso, se autenticar com o método “interserver secret”, o servidor não encerrava a conexão imediatamente, mas continuava recebendo e ignorando os pacotes remanescentes do cliente. Embora esses pacotes sejam ignorados, eles ainda são processados e, se usarem um método de compressão com outra vulnerabilidade conhecida, isso permitirá sua exploração sem autenticação. Esse problema foi identificado pelo ClickHouse Bug Bounty Program por https://twitter.com/malacupa. #56794 (Alexey Milovidov).
- A obtenção de uma parte passa a aguardar até que essa parte esteja totalmente confirmada na réplica remota. É melhor não enviar a parte no estado PreActive. No caso de zero copy, essa restrição é obrigatória. #56808 (Sema Checherinda).
- Corrige um possível erro de conversão na replicação lógica do PostgreSQL ao usar o
MaterializedPostgreSQLexperimental. #53721 (takakawa). - Implementa a configuração em nível de usuário
alter_move_to_space_execute_async, que permite executar consultasALTER TABLE ... MOVE PARTITION|PART TO DISK|VOLUMEde forma assíncrona. O tamanho do pool de execuções em segundo plano é controlado porbackground_move_pool_size. O comportamento padrão é a execução síncrona. Corrige #47643. #56809 (alesapin). - Agora é possível filtrar por engine ao varrer
system.tables, evitando conexões desnecessárias (potencialmente demoradas). #56813 (jsc0218). - Exibição de
total_bytesetotal_rowsem tabelas de sistema para armazenamento RocksDB. #56816 (Aleksandr Musorin). - Permite comandos básicos em ALTER para tabelas TEMPORARY. #56892 (Sergey).
- Compressão LZ4. Armazena em buffer o bloco compactado no caso raro em que a capacidade do buffer de saída não é suficiente para gravar o bloco compactado diretamente no buffer de saída. #56938 (Sema Checherinda).
- Adicionadas métricas para o número de jobs na fila, o que é útil para o pool de threads de E/S. #56958 (Alexey Milovidov).
- Adiciona uma configuração do mecanismo de tabela PostgreSQL ao arquivo de configuração. Adicionada uma verificação dessa configuração. Adicionada documentação sobre a configuração adicional. #56959 (Peignon Melvyn).
- A função
concatagora pode ser chamada com um único argumento, por exemplo,SELECT concat('abc'). Isso torna seu comportamento mais consistente com a implementação daconcatno MySQL. #57000 (Serge Klochkov). - Assina todos os headers
x-amz-*, conforme exigido pela documentação do AWS S3. #57001 (Arthur Passos). - A função
fromDaysSinceYearZero(alias:FROM_DAYS) agora pode ser usada com tipos inteiros com e sem sinal (anteriormente, precisava ser um inteiro sem sinal). Isso melhora a compatibilidade com ferramentas de terceiros, como o Tableau Online. #57002 (Serge Klochkov). - Adiciona
system.s3queue_logà configuração padrão. #57036 (Kseniia Sumarokova). - Altere o valor padrão de
wait_dictionaries_load_at_startuppara true e use essa configuração somente sedictionaries_lazy_loadfor false. #57133 (Vitaly Baranov). - Verifica o tipo da origem do dicionário na criação, mesmo se
dictionaries_lazy_loadestiver habilitado. #57134 (Vitaly Baranov). - As otimizações no nível do plano agora podem ser ativadas ou desativadas individualmente. Antes, só era possível desativar todas de uma vez. A configuração que antes fazia isso (
query_plan_enable_optimizations) foi mantida e ainda pode ser usada para desativar todas as otimizações. #57152 (Robert Schulze). - O código de saída do servidor corresponderá ao código da exceção. Por exemplo, se o servidor não conseguir iniciar devido ao limite de memória, ele será encerrado com o código 241 = MEMORY_LIMIT_EXCEEDED. Em versões anteriores, o código de saída para exceções era sempre 70 = Poco::Util::ExitCode::EXIT_SOFTWARE. #57153 (Alexey Milovidov).
- Não faça demangling nem simbolização de frames de pilha do arquivo de cabeçalho C++
functional. #57201 (Mike Kot). - A página do servidor HTTP
/dashboardagora oferece suporte a gráficos com várias linhas. #57236 (Sergei Trifonov). - A opção de linha de comando
max_memory_usage_in_clientaceita um valor textual com um sufixo (K, M, G etc.). Fecha #56879. #57273 (Yarik Briukhovetskyi). - Atualizado o Intel QPL (usado pelo codec
DEFLATE_QPL) da v1.2.0 para a v1.3.1. Também foi corrigido um bug no caso de BOF (Block On Fault) = 0, passando a lidar com falhas de página por meio de fallback para a via de software. #57291 (jasperzhu). - Aumentado o valor padrão de
replicated_deduplication_windownas configurações do MergeTree de 100 para 1k. #57335 (sichenzhao). - Pare de usar
INCONSISTENT_METADATA_FOR_BACKUPcom tanta frequência. Se possível, prefira continuar a varredura em vez de parar e reiniciá-la do backup desde o início. #57385 (Vitaly Baranov).
Melhoria em Build/Testes/Empacotamento
- Adicionado teste SQLLogic. #56078 (Han Fei).
clickhouse-localeclickhouse-clientagora estão disponíveis com nomes curtos (ch,chl,chc), para facilitar o uso. #56634 (Alexey Milovidov).- O tamanho da build foi otimizado ainda mais com a remoção de código não utilizado de bibliotecas externas. #56786 (Alexey Milovidov).
- Adicionada uma verificação automática para garantir que não haja unidades de tradução grandes. #56559 (Alexey Milovidov).
- Reduzido o tamanho da distribuição em binário único. Isso fecha #55181. #56617 (Alexey Milovidov).
- Informações sobre o tamanho de cada unidade de tradução e arquivo binário após cada build serão enviadas para o banco de dados de CI no ClickHouse Cloud. Isso fecha #56107. #56636 (Alexey Milovidov).
- Determinados arquivos da biblioteca “Apache Arrow” (que usamos apenas para itens não essenciais, como parsing do Arrow format) eram recompilados o tempo todo, independentemente do cache de build. Isso foi corrigido. #56657 (Alexey Milovidov).
- Evitada a recompilação de unidades de tradução que dependem do arquivo source gerado automaticamente com informações de versão. #56660 (Alexey Milovidov).
- Dados de tracing das invocações do linker serão enviados para o banco de dados de CI no ClickHouse Cloud. #56725 (Alexey Milovidov).
- Passam a ser usados símbolos de depuração DWARF 5 para o binário
clickhouse(antes era DWARF 4). #56770 (Michael Kolupaev). - Adicionada uma nova opção de build,
SANITIZE_COVERAGE. Se ela estiver habilitada, o código será instrumentado para rastrear a cobertura. As informações coletadas ficam disponíveis no ClickHouse por meio de: (1) uma nova funçãocoverage, que retorna um Array de endereços únicos no código encontrados desde o último reset da cobertura; (2) da consultaSYSTEM RESET COVERAGE, que redefine os dados acumulados. Isso permite comparar a cobertura de diferentes testes, incluindo cobertura diferencial de código. Continuação de #20539. #56102 (Alexey Milovidov). - Alguns frames da pilha podem não ser resolvidos durante a coleta de stacks. Nesses casos, o endereço bruto pode ser útil. #56267 (Alexander Gololobov).
- Adicionada uma opção para desabilitar
libssh. #56333 (Alexey Milovidov). - Habilitado temporary_data_in_cache nos testes de S3 na CI. #48425 (vdimir).
- Definido o uso máximo de memória para o
clickhouse-client(1G) na CI. #56873 (Nikita Mikhaylov).
Correção de bug (mau funcionamento perceptível ao usuário em um lançamento estável oficial)
- Correção do Analyzer experimental — a inserção a partir de SELECT com subconsulta que referencia a tabela de inserção deve processar apenas o bloco de inserção. #50857 (Yakov Olkhovskiy).
- Corrige um erro na função
str_to_map. #56423 (Arthur Passos). - Keeper
reconfig: adiciona um timeout antes de ceder/assumir a liderança #53481 (Mike Kot). - Corrige cabeçalho incorreto no grace hash join e no pushdown de filtro #53922 (vdimir).
- Selecionar a partir de tabelas do sistema quando a tabela for baseada em uma função de tabela. #55540 (MikhailBurdukov).
- RFC: Corrige “Não foi possível encontrar a coluna X no fluxo de origem” para consultas distribuídas com LIMIT BY #55836 (Azat Khuzhin).
- Corrigido o erro ‘Cannot read from file:’ ao executar o cliente em segundo plano #55976 (Kruglov Pavel).
- Corrigido o encerramento do clickhouse-local com uma configuração
send_logs_levelinválida #55994 (Kruglov Pavel). - Correção de bug no explain ast com uma view parametrizada #56004 (SmitaRKulkarni).
- Corrigida uma falha durante o carregamento da tabela na inicialização #56232 (Nikolay Degterinsky).
- Corrige dicionários provenientes do ClickHouse com uma consulta explícita #56236 (Nikolay Degterinsky).
- Corrige falha de segmentação no tratador de sinais do Keeper #56266 (Antonio Andelic).
- Corrige resultado incompleto de consulta com UNION na função view(). #56274 (Nikolai Kochetov).
- Corrigida a inconsistência entre “cast(‘0’ as DateTime64(3))” e “cast(‘0’ as Nullable(DateTime64(3)))” #56286 (李扬).
- Corrige uma rara condição de corrida relacionada a falha na alocação de memória #56303 (alesapin).
- Corrige a restauração a partir de backup com
flatten_nestededata_type_default_nullable#56306 (Kseniia Sumarokova). - Correção de travamento ao adicionar uma coluna do tipo Object(JSON) #56307 (Nikita Mikhaylov).
- Corrige travamento em filterPushDown #56380 (vdimir).
- Corrige a restauração a partir de backup com view materializada e tabela de origem excluída #56383 (Kseniia Sumarokova).
- Corrigida falha de segmentação durante a inicialização do Kerberos #56401 (Nikolay Degterinsky).
- Corrigido estouro de buffer em T64 #56434 (Alexey Milovidov).
- Corrige chave primária Nullable no FINAL (2) #56452 (Amos Bird).
- Correção de consultas ON CLUSTER sem banco de dados no nó inicial #56484 (Nikolay Degterinsky).
- Corrige a falha de inicialização devido à dependência de TTL #56489 (Nikolay Degterinsky).
- Corrige consultas
ALTER COMMENTcomON CLUSTER#56491 (Nikolay Degterinsky). - Corrigido ALTER COLUMN com ALIAS #56493 (Nikolay Degterinsky).
- Corrige NAMED COLLECTIONs vazias #56494 (Nikolay Degterinsky).
- Corrige dois casos na análise de projeções. #56502 (Amos Bird).
- Corrigido o tratamento de aliases no cache de consultas #56545 (Robert Schulze).
- Correção da conversão de
Nullable(Enum)paraNullable(String)#56644 (Nikolay Degterinsky). - Tratamento de logs mais confiável no Keeper #56670 (Antonio Andelic).
- Corrige a mesclagem da configuração em nós com atributos de substituição #56694 (Konstantin Bogdanov).
- Corrigido o uso duplicado da função de tabela input(). #56695 (Nikolai Kochetov).
- Correção: problema com o carregamento dinâmico do OpenSSL no RabbitMQ #56703 (Igor Nikonov).
- Corrige falha no codec GCD quando há zeros nos dados #56704 (Nikita Mikhaylov).
- Corrige ‘mutex lock failed: Invalid argument’ no clickhouse-local durante o insert into function #56710 (Kruglov Pavel).
- Corrige o parsing de texto de Date no caminho otimista #56765 (Kruglov Pavel).
- Corrige travamento no codec FPC #56795 (Alexey Milovidov).
- DatabaseReplicated: corrige timeout de consulta DDL após a recuperação de uma réplica #56796 (Alexander Tokmakov).
- Corrige a sinalização incorreta de colunas Nullable no protocolo binário do MySQL #56799 (Serge Klochkov).
- Suporte a arquivos de metadados do Iceberg para tabelas no metastore #56810 (Kruglov Pavel).
- Corrige relatório do TSAN em
transform#56817 (Raúl Marín). - Correção da consulta SET e da formatação de SETTINGS #56825 (Nikolay Degterinsky).
- Corrige falha na inicialização devido à dependência de tabela em joinGet #56828 (Nikolay Degterinsky).
- Corrige o achatamento de colunas Nested existentes na execução de ADD COLUMN #56830 (Nikolay Degterinsky).
- Corrige a aceitação de CR no fim da linha em CSV #56901 (KevinyhZou).
- Corrige
tryBase64Decodepara entradas inválidas #56913 (Robert Schulze). - Correção da geração de colunas profundamente aninhadas em esquemas CapnProto/Protobuf #56941 (Kruglov Pavel).
- Evitar ALTER incompatível nas colunas da projeção #56948 (Amos Bird).
- Corrigida a validação do caminho do arquivo sqlite #56984 (San).
- S3Queue: corrige o incremento da referência de metadados #56990 (Kseniia Sumarokova).
- Pequena correção no S3Queue #56999 (Kseniia Sumarokova).
- Corrige a validação do caminho de arquivo no DatabaseFileSystem #57029 (San).
- Corrigido
fuzzBitscomARRAY JOIN#57033 (Antonio Andelic). - Corrigido o desreferenciamento de nullptr em partial merge join com joined_subquery_re… #57048 (vdimir).
- Corrigida condição de corrida em RemoteSource #57052 (Raúl Marín).
- Implementada
bitHammingDistancepara números inteiros grandes #57073 (Alexey Milovidov). - Correção de bug em links do tipo S3 #57075 (Yarik Briukhovetskyi).
- Corrigida a função JSON_QUERY com vários caminhos numéricos #57096 (KevinyhZou).
- Corrigido estouro de buffer no codec Gorilla #57107 (Nikolay Degterinsky).
- Fechar a conexão entre servidores em caso de qualquer exceção antes da autenticação #57142 (Antonio Andelic).
- Corrigida a falha de segmentação após ALTER UPDATE com coluna MATERIALIZED Nullable #57147 (Nikolay Degterinsky).
- Corrige a otimização incorreta do plano de JOIN com projeção normal parcialmente materializada #57196 (Amos Bird).
- Desconsiderar comentários ao comparar descrições de colunas #57259 (Antonio Andelic).
- Corrigida a métrica
ReadonlyReplicaem todos os casos #57267 (Antonio Andelic). - As mesclagens em segundo plano passam a usar corretamente o armazenamento temporário de dados no cache #57275 (vdimir).
- Correção no Keeper para changelog e snapshots #57299 (Antonio Andelic).
- Ignorar tarefas ON CLUSTER concluídas se o hostname tiver sido alterado #57339 (Alexander Tokmakov).
- As mutações do MergeTree reutilizam a granularidade do índice da parte de origem #57352 (Maksim Kita).
- cache do FS: adiciona um limite para downloads em segundo plano #57424 (Kseniia Sumarokova).
Lançamento do ClickHouse 23.10, 2023-11-02. Apresentação, Vídeo
Mudança incompatível com versões anteriores
- Não existe mais a opção de remover automaticamente partes de dados corrompidas. Isso encerra #55174. #55184 (Alexey Milovidov). #55557 (Jihyuk Bok).
- As partes de dados obsoletas em memória não podem mais ser lidas a partir do write-ahead log. Se você configurou partes em memória anteriormente, elas precisam ser removidas antes da atualização. #55186 (Alexey Milovidov).
- Removida a integração com o Meilisearch. Motivo: ela era compatível apenas com a versão antiga 0.18. A versão mais recente do Meilisearch alterou o protocolo e não funciona mais. Observação: agradeceríamos se você ajudasse a trazê-la de volta. #55189 (Alexey Milovidov).
- O conceito de monitor de diretório foi renomeado para INSERT em segundo plano. Todas as configurações
*directory_monitor*foram renomeadas paradistributed_background_insert*. A compatibilidade com versões anteriores deve ser preservada (já que as configurações antigas foram adicionadas como alias). #55978 (Azat Khuzhin). - Não interprete o
send_timeoutdefinido no lado do cliente comoreceive_timeoutno lado do servidor, e vice-versa. #56035 (Azat Khuzhin). - A comparação de intervalos de tempo com unidades diferentes lançará uma exceção. Isso encerra #55942. Você pode ter dependido ocasionalmente do comportamento anterior, em que os valores numéricos subjacentes eram comparados independentemente das unidades. #56090 (Alexey Milovidov).
- O table engine experimental
S3Queuefoi completamente reescrito: a forma de manter informações no ZooKeeper foi alterada, o que permite fazer menos requisições ao ZooKeeper; foi adicionado caching do estado do ZooKeeper nos casos em que sabemos que ele não mudará; o processo de polling do S3 foi aprimorado para ser menos agressivo; a forma como o ttl e o max definidos para arquivos rastreados são mantidos foi alterada, e agora isso é feito por um processo em segundo plano. Foram adicionadas as tabelassystem.s3queueesystem.s3queue_log. Encerra #54998. #54422 (Kseniia Sumarokova). - Caminhos arbitrários no endpoint HTTP não são mais interpretados como uma solicitação ao endpoint
/query. #55521 (Konstantin Bogdanov).
Nova funcionalidade
- Adiciona a função
arrayFold(accumulator, x1, ..., xn -> expression, initial, array1, ..., arrayn), que aplica uma função lambda a vários arrays com a mesma cardinalidade e armazena o resultado em um acumulador. #49794 (Lirikl). - Suporte ao formato
Npy.SELECT * FROM file('example_array.npy', Npy). #55982 (Yarik Briukhovetskyi). - Se uma tabela tiver uma curva de preenchimento espacial em sua chave, por exemplo,
ORDER BY mortonEncode(x, y), as condições sobre seus argumentos, por exemplo,x >= 10 AND x <= 20 AND y >= 20 AND y <= 30, podem ser usadas para indexação. Foi adicionada a configuraçãoanalyze_index_with_space_filling_curvespara habilitar ou desabilitar essa análise. Isso fecha #41195. Continuação de #4538. Continuação de #6286. Continuação de #28130. Continuação de #41753. #55642 (Alexey Milovidov). - Uma nova configuração chamada
force_optimize_projection_nameaceita o nome de uma projeção como argumento. Se o valor dela for definido como uma string não vazia, o ClickHouse verifica se essa projeção é usada na consulta pelo menos uma vez. Fecha #55331. #56134 (Yarik Briukhovetskyi). - Suporte a inserções assíncronas com dados externos via protocolo nativo. Antes, isso só funcionava se os dados fossem incluídos diretamente na consulta. #54730 (Anton Popov).
- Adicionada a função de agregação
lttb, que usa o algoritmo Largest-Triangle-Three-Buckets para fazer a redução de amostragem dos dados para visualização. #53145 (Sinan). - A consulta
CHECK TABLEtem melhor desempenho e usabilidade (envia atualizações de progresso e pode ser cancelada). Há suporte para verificar uma parte específica comCHECK TABLE ... PART 'part_name'. #53404 (vdimir). - Adicionada a função
jsonMergePatch. Ao trabalhar com dados JSON como strings, ela permite mesclar essas strings (de objetos JSON) para formar uma única string contendo um único objeto JSON. #54364 (Memo). - A segunda parte do suporte ao dialeto Kusto Query Language. A implementação da fase 1 foi mesclada. #42510 (larryluogit).
- Foi adicionada uma nova função SQL,
arrayRandomSample(arr, k), que retorna uma amostra de k elementos do array de entrada. Antes, uma funcionalidade semelhante só podia ser obtida com uma sintaxe menos prática, por exemplo, “SELECT arrayReduce(‘groupArraySample(3)’, range(10))”. #54391 (itayisraelov). - Introduz os combinadores de agregação
-ArgMin/-ArgMax, que permitem agregar com base apenas nos valores mínimos/máximos. Um caso de uso pode ser encontrado em #54818. Este PR também reorganiza os combinadores em uma pasta dedicada. #54947 (Amos Bird). - Permite limpar o cache de schema do formato Protobuf com
SYSTEM DROP SCHEMA FORMAT CACHE [FOR Protobuf]. #55064 (Aleksandr Musorin). - Adicionado autenticador externo com HTTP Basic. #55199 (Aleksei Filatov).
- Adicionada a função
byteSwap, que reverte os bytes de inteiros sem sinal. Isso é particularmente útil para reverter valores de tipos representados internamente como inteiros sem sinal, como IPv4. #55211 (Priyansh Agrawal). - Adicionada a função
formatQuery, que retorna uma versão formatada (possivelmente em várias linhas) de uma string de consulta SQL. Também foi adicionada a funçãoformatQuerySingleLine, que faz o mesmo, mas a string retornada não conterá quebras de linha. #55239 (Salvatore Mesoraca). - Adicionado o formato de entrada
DWARF, que lê símbolos de depuração de um arquivo objeto, executável ou biblioteca ELF. #55450 (Michael Kolupaev). - Permite salvar registros não processados e erros nos motores RabbitMQ, NATS e FileLog. Adiciona as colunas virtuais
_errore_raw_message(para NATS e RabbitMQ) e_raw_record(para FileLog), que são preenchidas quando o ClickHouse não consegue processar um novo registro. O comportamento é controlado nas configurações de armazenamentonats_handle_error_modepara NATS,rabbitmq_handle_error_modepara RabbitMQ ehandle_error_modepara FileLog, de forma semelhante akafka_handle_error_mode. Se estiver definido comodefault, uma exceção será lançada quando o ClickHouse não conseguir processar um registro; se estiver definido comostream, o erro e o registro bruto serão salvos nas colunas virtuais. Fecha #36035. #55477 (Kruglov Pavel). - Melhoria no cliente Keeper: adiciona o comando
get_all_children_number command, que retorna o número total de nós filhos em um caminho específico. #55485 (guoxiaolong). - Melhoria no cliente do Keeper: adiciona o comando
get_direct_children_number, que retorna o número de nós filhos diretos em um caminho. #55898 (xuzifu666). - Adicionada a instrução
SHOW SETTING setting_name, que é uma versão mais simples da instrução existenteSHOW SETTINGS. #55979 (Maksim Kita). - Foram adicionados os campos
substreamsefilenamesà tabelasystem.parts_columns. #55108 (Anton Popov). - Adicionado suporte à consulta
SHOW MERGES. #55815 (megao). - Adiciona a configuração
create_table_empty_primary_key_by_defaultpara usarORDER BY ()como padrão. #55899 (Srikanth Chekuri).
Melhoria de desempenho
- Adicionar a opção
query_plan_preserve_num_streams_after_window_functionspara preservar o número de streams após a avaliação de funções de janela, permitindo o processamento paralelo de streams. #50771 (frinkr). - Liberar mais streams quando o volume de dados for pequeno. #53867 (Jiebin Sun).
- Otimização de RoaringBitmaps antes da serialização. #55044 (UnamedRus).
- As listas de postings em índices invertidos agora são otimizadas para usar a menor representação possível para bitmaps internos. Dependendo da repetição dos dados, isso pode reduzir significativamente o consumo de espaço dos índices invertidos. #55069 (Harry Lee).
- Corrige a contenção no bloqueio de Context, melhorando significativamente o desempenho de muitas consultas simultâneas de curta duração. #55121 (Maksim Kita).
- O desempenho da criação de índice invertido melhorou em 30%. Isso foi alcançado com a substituição de
std::unordered_mapporabsl::flat_hash_map. #55210 (Harry Lee). - Suporte a pushdown de filtro ORC (nível de grupo de linhas). #55330 (李扬).
- Melhora no desempenho da agregação externa com muitos arquivos temporários. #55489 (Maksim Kita).
- Definido por padrão um tamanho razoável para o cache de marcas dos índices secundários, para evitar o carregamento repetido das marcas. #55654 (Alexey Milovidov).
- Evita a reconstrução desnecessária de grânulos de índice durante a leitura de skip indexes. Isso corrige #55653. #55683 (Amos Bird).
- Armazena em cache a função CAST no set durante a execução para melhorar o desempenho da função
INquando o tipo de elemento do set não corresponde exatamente ao tipo da coluna. #55712 (Duc Canh Le). - Melhoria no desempenho de
ColumnVector::insertManyeColumnVector::insertManyFrom. #55714 (frinkr). - Operações de subscrito de map otimizadas com a previsão da posição da chave da próxima linha e a redução do número de comparações. #55929 (lgbo).
- Adicionado suporte à poda de campos de struct no Parquet (em versões anteriores, isso não funcionava em alguns casos). #56117 (lgbo).
- Adicionada a capacidade de ajustar o número de réplicas paralelas usadas na execução de uma consulta com base na estimativa de linhas a serem lidas. #51692 (Raúl Marín).
- Otimizado o consumo de memória da agregação externa quando muitos arquivos temporários eram gerados. #54798 (Nikita Taranov).
- Consultas distribuídas executadas no modo
async_socket_for_remote(padrão) agora respeitam o limite demax_threads. Antes, algumas consultas podiam criar threads em excesso (atémax_distributed_connections), causando problemas de desempenho no servidor. #53504 (filimonov). - Cache de entradas que podem ser ignoradas ao executar DDL da fila de DDL distribuído do ZooKeeper. #54828 (Duc Canh Le).
- Índices invertidos experimentais não armazenam tokens com correspondências demais (ou seja, IDs de linha na lista de postings). Isso economiza espaço e evita lookups de índice ineficazes quando varreduras sequenciais seriam tão rápidas quanto ou até mais rápidas. A heurística anterior (o parâmetro
densitypassado à definição do índice), que controlava quando os tokens não seriam armazenados, era confusa demais para os usuários. Foi introduzida uma heurística muito mais simples, baseada no parâmetromax_rows_per_postings_list(padrão: 64k), que controla diretamente o número máximo permitido de IDs de linha em uma lista de postings. #55616 (Harry Lee). - Melhora no desempenho de gravação em tabelas
EmbeddedRocksDB. #55732 (Duc Canh Le). - Maior resiliência geral do ClickHouse em casos com muitas partes em uma partição (mais de 1000). Isso pode reduzir o número de erros
TOO_MANY_PARTS. #55526 (Nikita Mikhaylov). - Redução no consumo de memória durante o carregamento de dicionários hierárquicos. #55838 (Nikita Taranov).
- Todos os dicionários são compatíveis com a configuração
dictionary_use_async_executor. #55839 (vdimir). - Evita o uso excessivo de memória ao desserializar AggregateFunctionTopKGenericData. #55947 (Raúl Marín).
- Em um Keeper com muitos watches, as threads de AsyncMetrics podem consumir 100% da CPU por um tempo considerável em
DB::KeeperStorage::getSessionsWithWatchesCount. A correção evita percorrer os conjuntoswatcheselist_watches, que são pesados. #56054 (Alexander Gololobov). - Adiciona a configuração
optimize_trivial_approximate_count_querypara usar a aproximação decountno mecanismo de armazenamento EmbeddedRocksDB. Habilita a contagem trivial para StorageJoin. #55806 (Duc Canh Le).
Melhoria
- As funções
toDayOfWeek(alias do MySQL:DAYOFWEEK),toYearWeek(YEARWEEK) etoWeek(WEEK) agora aceitam argumentosString. Isso torna seu comportamento consistente com o do MySQL. #55589 (Robert Schulze). - Foi introduzida a configuração
date_time_overflow_behavior, com os valores possíveisignore,throw,saturate, que controla o comportamento em caso de overflow ao converter de Date, Date32, DateTime64, Integer ou Float para Date, Date32, DateTime ou DateTime64. #55696 (Andrey Zvonov). - Implementa suporte a parâmetros de consulta em
ALTER TABLE ... ACTION PARTITION [ID] {parameter_name:ParameterType}. Integra #49516. Fecha #49449. #55604 (alesapin). - Exibe IDs de processadores de forma mais elegante no EXPLAIN. #48852 (Vlad Seliverstov).
- A criação de um dicionário direto com um campo lifetime será rejeitada no momento da criação (pois lifetime não faz sentido para dicionários diretos). Corrige: #27861. #49043 (Rory Crispin).
- Permite parâmetros em consultas com partições, como
ALTER TABLE t DROP PARTITION. Fecha #49449. #49516 (Nikolay Degterinsky). - Adiciona uma nova coluna
xidasystem.zookeeper_connection. #50702 (helifu). - Exibir as configurações corretas do servidor em
system.server_settingsapós recarregar a configuração. #53774 (helifu). - Adicionado suporte ao caractere de sinal de menos matemático
−em consultas, assim como-. #54100 (Alexey Milovidov). - Adiciona grupos de réplicas ao mecanismo de banco de dados experimental
Replicated. Fecha #53620. #54421 (Nikolay Degterinsky). - É melhor tentar novamente em caso de erros recuperáveis do S3 do que fazer a consulta falhar completamente. Defina um valor maior para s3_retry_attempts por padrão. #54770 (Sema Checherinda).
- Adicionado o modo de balanceamento de carga
hostname_levenshtein_distance. #54826 (JackyWoo). - Melhora na ocultação de informações sensíveis nos logs. #55089 (Vitaly Baranov).
- Por enquanto, a análise de projeções será realizada apenas sobre o plano de consulta. A configuração
query_plan_optimize_projectiontornou-se obsoleta (ela já estava habilitada por padrão há muito tempo). #55112 (Nikita Mikhaylov). - Quando a função
untupleé chamada em uma tupla com elementos nomeados e ela própria tem um alias (por exemplo,select untuple(tuple(1)::Tuple(element_alias Int)) AS untuple_alias), o nome da coluna resultante passa a ser gerado com base no alias deuntuplee no alias do elemento da tupla (no exemplo: “untuple_alias.element_alias”). #55123 (garcher22). - Adicionada a configuração
describe_include_virtual_columns, que permite incluir as colunas virtuais da tabela no resultado da consultaDESCRIBE. Adicionada a configuraçãodescribe_compact_output. Se estiver definida comotrue, a consultaDESCRIBEretorna apenas os nomes e tipos das colunas, sem informações adicionais. #55129 (Anton Popov). - Às vezes,
OPTIMIZEcomoptimize_throw_if_noop=1pode falhar com o errounknown reason, quando a causa real é haver projeções diferentes em partes distintas. Esse comportamento foi corrigido. #55130 (Nikita Mikhaylov). - Permite que várias tabelas
MaterializedPostgreSQLacompanhem a mesma tabela do Postgres. Por padrão, esse comportamento não está habilitado (por compatibilidade, já que é uma alteração incompatível com versões anteriores), mas pode ser ativado com a configuraçãomaterialized_postgresql_use_unique_replication_consumer_identifier. Fecha #54918. #55145 (Kseniia Sumarokova). - Permite fazer o parse de
DateTime64eDateTimenegativos com parte fracionária a partir de strings curtas. #55146 (Andrey Zvonov). - Para melhorar a compatibilidade com o MySQL, 1.
information_schema.tablesagora inclui o novo campotable_rowse 2.information_schema.columnsagora inclui o novo campoextra. #55215 (Robert Schulze). - Clickhouse-client não exibirá “0 rows in set” quando o valor for zero e uma exceção for lançada. #55240 (Salvatore Mesoraca).
- Suporte à renomeação de tabela sem a palavra-chave
TABLE, comoRENAME db.t1 to db.t2. #55373 (凌涛). - Adicionado
internal_replicationasystem.clusters. #55377 (Konstantin Morozov). - Selecionar o resolvedor de proxy remoto com base no protocolo da solicitação, adicionar a documentação do recurso de proxy e remover
DB::ProxyConfiguration::Protocol::ANY. #55430 (Arthur Passos). - Evite novas tentativas de operações do Keeper no INSERT após a desativação da tabela. #55519 (Azat Khuzhin).
SHOW COLUMNSagora informa corretamente o tipoFixedStringcomoBLOBse a configuraçãouse_mysql_types_in_show_columnsestiver ativada. Também foram adicionadas duas novas configurações,mysql_map_string_to_text_in_show_columnsemysql_map_fixed_string_to_text_in_show_columns, para alternar a saída dos tiposStringeFixedStringentreTEXTeBLOB. #55617 (Serge Klochkov).- Durante a inicialização das tabelas ReplicatedMergeTree, o servidor ClickHouse verifica o conjunto de partes em busca de partes inesperadas (que existem localmente, mas não no ZooKeeper). Todas as partes inesperadas são movidas para o diretório detached e, em vez delas, o servidor tenta restaurar algumas partes ancestrais (cobertas). Agora, o servidor tenta restaurar os ancestrais mais próximos em vez de partes cobertas aleatórias. #55645 (alesapin).
- O dashboard avançado agora oferece suporte a gráficos que podem ser arrastados em dispositivos com tela sensível ao toque. Isso fecha #54206. #55649 (Alexey Milovidov).
- Use o formato padrão da consulta, se estiver declarado, ao gerar uma exceção com
http_write_exception_in_output_format. #55739 (Raúl Marín). - Fornece uma mensagem melhor para problemas comuns de VISÃO MATERIALIZADA. #55826 (Raúl Marín).
- Se você excluiu o banco de dados atual, ainda poderá executar algumas consultas no
clickhouse-locale alternar para outro banco de dados. Isso torna o comportamento consistente com oclickhouse-client. Isso resolve #55834. #55853 (Alexey Milovidov). - As funções
(add|subtract)(Year|Quarter|Month|Week|Day|Hour|Minute|Second|Millisecond|Microsecond|Nanosecond)agora oferecem suporte a argumentos de data em formato de string, por exemplo,SELECT addDays('2023-10-22', 1). Isso aumenta a compatibilidade com o MySQL e é necessário para o Tableau Online. #55869 (Robert Schulze). - A configuração
apply_deleted_mask, quando desabilitada, permite ler linhas marcadas como excluídas por consultas de exclusão leve (lightweight DELETE). Isso é útil para depuração. #55952 (Alexander Gololobov). - Permite ignorar valores
nullao serializar Tuple como objetos JSON, o que possibilita manter a compatibilidade com a funçãoto_jsondo Spark, algo que também é útil para o gluten. #55956 (李扬). - As funções
(add|sub)Dateagora oferecem suporte a argumentos de data codificados em string, por exemplo,SELECT addDate('2023-10-22 11:12:13', INTERVAL 5 MINUTE). O mesmo suporte a argumentos de data codificados em string foi adicionado aos operadores de soma e subtração, por exemplo,SELECT '2023-10-23' + INTERVAL 1 DAY. Isso aumenta a compatibilidade com o MySQL e é necessário para o Tableau Online. #55960 (Robert Schulze). - Permitir strings sem aspas contendo CR (
\r) no formato CSV. Fecha #39930. #56046 (Kruglov Pavel). - Permite executar
clickhouse-keepercom configuração embutida. #56086 (Maksim Kita). - Foi definido um limite para o valor máximo de configuração de
queued.min.messagespara evitar problemas ao iniciar a busca de dados com o Kafka. #56121 (Stas Morozov). - Corrigido um erro de digitação na função SQL
minSampleSizeContinous(renomeada paraminSampleSizeContinuous). O nome antigo foi preservado para manter a compatibilidade com versões anteriores. Isso fecha: #56139. #56143 (Dorota Szeremeta). - Exibe o caminho das partes corrompidas no disco antes de desligar o servidor. Antes dessa mudança, se uma parte estivesse corrompida no disco e o servidor não conseguisse iniciar, era quase impossível identificar qual parte estava corrompida. Isso foi corrigido. #56181 (Duc Canh Le).
Melhoria de Build/Testes/Empacotamento
- Se o banco de dados no Docker já estiver inicializado, não será necessário inicializá-lo novamente em execuções posteriores. Isso pode corrigir o problema de reinicializações infinitas do contêiner quando o banco de dados não consegue ser carregado em até 1000 tentativas (relevante para bancos de dados muito grandes e configurações com múltiplos nós). #50724 (Alexander Nikolaev).
- O artefato com código-fonte, incluindo os submódulos, é gerado na tarefa especial de build do Darwin. Ele pode ser usado para compilar o ClickHouse sem precisar fazer checkout dos submódulos. #51435 (Ilya Yatsishin).
- Ocorreu um erro ao compilar o ClickHouse com a série de instruções AVX habilitada globalmente (o que não é recomendado). O motivo é que o snappy não habilita
SNAPPY_HAVE_X86_CRC32. #55049 (monchickey). - Resolvido um problema ao iniciar o
clickhouse-keeperautônomo a partir do pacoteclickhouse-server. #55226 (Mikhail f. Shiryaev). - Nos testes, a versão do RabbitMQ foi atualizada para 3.12.6. A coleta de logs nos testes do RabbitMQ foi aprimorada. #55424 (Ilya Yatsishin).
- A diferença entre as mensagens de erro do openssl e do boringssl foi ajustada para corrigir o teste funcional. #55975 (MeenaRenganathan22).
- Passa a usar o repositório upstream para o apache datasketches. #55787 (Nikita Taranov).
Correção de bug (mau funcionamento perceptível ao usuário em um lançamento estável oficial)
- Ignorar a criação de hard links de arquivos de índice invertido durante mutações #47663 (cangyin).
- Corrigido bug na função
match(regex), em que um pattern contendo alternância produz uma condição de chave incorreta. Fecha #53222. #54696 (Yakov Olkhovskiy). - Correção do erro ‘Cannot find column’ na otimização de leitura em ordem com ARRAY JOIN #51746 (Nikolai Kochetov).
- Adicionado suporte a subcolunas experimentais
Object(Nullable(json))ausentes em consultas. #54052 (zps). - Readiciona a correção para
accurateCastOrNull#54629 (Salvatore Mesoraca). - Corrigida a detecção de
DEFAULTem colunas de uma tabela Distributed criada sem AS #55060 (Vitaly Baranov). - Limpeza adequada em caso de exceção no construtor de ShellCommandSource #55103 (Alexander Gololobov).
- Corrigido um deadlock na atualização da role atribuída via LDAP #55119 (Julian Maicher).
- Suprimir a atualização das estatísticas de erro para exceções internas #55128 (Robert Schulze).
- Corrigido deadlock em backups #55132 (alesapin).
- Corrigida a recuperação dos arquivos de armazenamento do Iceberg #55144 (Kseniia Sumarokova).
- Corrige a poda de partições de colunas adicionais em Set. #55172 (Amos Bird).
- Corrigido o recálculo de skip indexes nas consultas ALTER UPDATE quando a tabela tem granularidade adaptativa #55202 (Duc Canh Le).
- Correção do download em segundo plano no cache de fs #55252 (Kseniia Sumarokova).
- Evita possíveis vazamentos de memória em compressores quando a finalização do buffer está ausente #55262 (Azat Khuzhin).
- Corrigida a execução de funções em colunas esparsas #55275 (Azat Khuzhin).
- Corrige a mesclagem incorreta de Nested em SELECT FINAL FROM SummingMergeTree #55276 (Azat Khuzhin).
- Corrigido bug que impedia remover uma partição detached em MergeTree replicado sobre S3 sem zero copy #55309 (alesapin).
- Corrige uma falha em MergeSortingPartialResultTransform (devido à ausência de fragmentos após
remerge) #55335 (Azat Khuzhin). - Corrigida a condição de corrida em CreatingSetsTransform (em caso de erro) causada pelo lançamento de uma exceção compartilhada #55338 (Azat Khuzhin).
- Corrige a otimização de lixo (até certo ponto) #55353 (Alexey Milovidov).
- Corrigido vazamento em StorageHDFS #55370 (Azat Khuzhin).
- Corrige o parsing de arrays no operador CAST #55417 (Anton Popov).
- Corrigida a filtragem por colunas virtuais com filtro OR na consulta #55418 (Azat Khuzhin).
- Corrigidos problemas de conexão com o MongoDB #55419 (Nikolay Degterinsky).
- Corrigida a representação booleana na interface MySQL #55427 (Serge Klochkov).
- Corrige a formatação de DateTime no protocolo de texto do MySQL e a exibição de tipos LowCardinality(Nullable(T)) #55479 (Serge Klochkov).
- Fazer com que
use_mysql_types_in_show_columnsafete apenasSHOW COLUMNS#55481 (Robert Schulze). - Corrige a análise incorreta de
DW_FORM_ref_addrpelo simbolizador de pilha e falhas ocasionais #55483 (Michael Kolupaev). - Destruir a fibra em caso de exceção no cancelBefore do AsyncTaskExecutor #55516 (Kruglov Pavel).
- Corrige parâmetros de consulta que não funcionavam com handlers HTTP personalizados #55521 (Konstantin Bogdanov).
- Corrige a verificação de dados não processados no formato Values #55527 (Azat Khuzhin).
- Correção de ‘Invalid cursor state’ no ODBC ao interagir com o MS SQL Server #55558 (vdimir).
- Correção do tempo máximo de execução e do modo de overflow ‘break’ #55577 (Alexander Gololobov).
- Corrige falha no QueryNormalizer com aliases cíclicos #55602 (vdimir).
- Desativar a otimização incorreta e adicionar um teste #55609 (Alexey Milovidov).
- Mesclagem #52352 #55621 (Alexey Milovidov).
- Adicionar um teste para evitar a ordenação incorreta de decimais #55662 (Amos Bird).
- Corrige a barra de progresso das funções de cluster s3 e azure com URL sem globs #55666 (Kruglov Pavel).
- Corrige a filtragem por colunas virtuais com o filtro OR na consulta (reenvio) #55678 (Azat Khuzhin).
- Correções e melhorias para o armazenamento do Iceberg #55695 (Kruglov Pavel).
- Corrige uma condição de corrida em CreatingSetsTransform (v2) #55786 (Azat Khuzhin).
- Lançar exceção ao analisar uma string inválida como float se precise_float_parsing for true #55861 (李扬).
- Desative o pushdown de predicados se a CTE contiver funções com estado #55871 (Raúl Marín).
- Correção no normalize ASTSelectWithUnionQuery, pois ele removia
FORMATda consulta #55887 (flynn). - Tentativa de corrigir um possível segfault no formato de entrada ORC nativo #55891 (Kruglov Pavel).
- Corrige funções de janela em casos de colunas esparsas. #55895 (János Benjamin Antal).
- correção: StorageNull agora oferece suporte a subcolunas #55912 (FFish).
- Não registrar erros recuperáveis de mutate/merge do Replicated no log de erros #55944 (Azat Khuzhin).
- Correção de
SHOW DATABASES LIMIT <N>#55962 (Raúl Marín). - Corrige schema Protobuf gerado automaticamente com campos com underscore #55974 (Kruglov Pavel).
- Corrigido
dateTime64ToSnowflake64()com escala não padrão #55983 (Robert Schulze). - Corrige a entrada/saída de coluna de dicionário do Arrow #55989 (Kruglov Pavel).
- Corrige a obtenção do schema no schema registry do AvroConfluent #55991 (Kruglov Pavel).
- Corrige ‘Block structure mismatch’ em ALTERs e INSERTs concorrentes na tabela Buffer #55995 (Michael Kolupaev).
- Corrige o cálculo incorreto do espaço livre para a política JBOD least_used #56030 (Azat Khuzhin).
- Corrige o problema de ausência de valor escalar ao avaliar subconsultas dentro de funções de tabela #56057 (Amos Bird).
- Corrige resultado incorreto de consulta quando http_write_exception_in_output_format=1 #56135 (Kruglov Pavel).
- Corrigido o cache de schema para o fallback JSON->JSONEachRow com configurações alteradas #56172 (Kruglov Pavel).
- Adicionar um manipulador de erros ao odbc-bridge #56185 (Yakov Olkhovskiy).
Lançamento do ClickHouse 23.9, 2023-09-28. Apresentação, Vídeo
Mudança incompatível com versões anteriores
- Removida a opção de configuração
status_infoe o status de Dictionaries do handler Prometheus padrão. #54090 (Alexey Milovidov). - O metadata cache experimental de partes foi removido da base de código. #54215 (Alexey Milovidov).
- A configuração
input_format_json_try_infer_numbers_from_stringspassa a ficar desativada por padrão, para evitar inferir números a partir de strings nos formatos JSON e, assim, possíveis erros de parsing quando os dados de amostra contêm strings que parecem números. #55099 (Kruglov Pavel).
Nova funcionalidade
- Melhora na inferência de esquema em formatos JSON: 1) Agora é possível inferir named Tuples a partir de JSON objects sem o JSON type Experimental, usando a configuração
input_format_json_try_infer_named_tuples_from_objectsnos formatos JSON. Antes, sem o JSON type Experimental, só era possível inferir JSON objects como Strings ou maps; agora também é possível inferi-los como named Tuple. O tipo Tuple resultante conterá todas as chaves dos objetos lidos na amostra de dados durante a inferência de esquema. Isso pode ser útil para ler dados JSON estruturados sem objetos esparsos. A configuração vem enabled por padrão. 2) Permite fazer o parsing de JSON array em uma coluna do tipo String com a configuraçãoinput_format_json_read_arrays_as_strings. Isso pode ajudar na leitura de arrays com valores de tipos diferentes. 3) Permite usar o tipo String para chaves JSON com tipos desconhecidos (null/[]/{}) nos dados de amostra com a configuraçãoinput_format_json_infer_incomplete_types_as_strings. Agora, nos formatos JSON, podemos ler qualquer valor em uma coluna String e evitar o errorCannot determine type for column 'column_name' by first 25000 rows of data, most likely this column contains only Nulls or empty Arrays/Mapsdurante a inferência de esquema ao usar o tipo String para tipos desconhecidos, de modo que os dados sejam lidos com sucesso. #54427 (Kruglov Pavel). - Adicionado suporte ao agendamento de IO para discos remotos. A configuração de armazenamento para os tipos de disco
s3,s3_plain,hdfseazure_blob_storageagora pode conter elementosread_resourceewrite_resourcecom nomes de recursos. As políticas de agendamento desses recursos podem ser configuradas em uma seção separadaresourcesda configuração do servidor. As consultas podem ser marcadas usando a configuraçãoworkloade classificadas usando a seçãoworkload_classifiersda configuração do servidor para atingir diferentes objetivos de agendamento de recursos. Mais detalhes na documentação. #47009 (Sergei Trifonov). Adicionado o tipo de nó de agendamento de IO “bandwidth_limit”. Ele permite especificar restriçõesmax_speedemax_burstpara o tráfego que passa por esse nó. #54618 (Sergei Trifonov). - Adicionado um novo tipo de autenticação baseado em chaves SSH. Funciona apenas com o protocolo TCP nativo. #41109 (George Gamezardashvili).
- Adicionada uma nova coluna
_block_numberàs tabelas MergeTree. #44532. #47532 (SmitaRKulkarni). - Adicionar a cláusula
IF EMPTYàs consultasDROP TABLE. #48915 (Pavel Novitskiy). - As funções SQL
toString(datetime, timezone)eformatDateTime(datetime, format, timezone)agora admitem argumentos de fuso horário não constantes. #53680 (Yarik Briukhovetskyi). - Adiciona suporte a
ALTER TABLE MODIFY COMMENT. Observação: algo semelhante foi adicionado por um colaborador externo há muito tempo, mas a funcionalidade simplesmente não funcionava e só confundia os usuários. Isso fecha #36377. #51304 (Alexey Milovidov). Observação: este comando não é propagado entre réplicas, portanto as réplicas de uma tabela podem ter comentários diferentes. - Foi adicionado
GCD, também conhecido como “máximo divisor comum”, como um novo codec de compressão de dados. O codec calcula o GCD de todos os valores da coluna e, em seguida, divide cada valor pelo GCD. O codec GCD é um codec de preparação de dados (semelhante a Delta e DoubleDelta) e não pode ser usado sozinho. Ele funciona com dados dos tipos inteiro, decimal e data/hora. Um caso de uso viável para o codec GCD são valores de coluna que variam (aumentam/diminuem) em múltiplos do GCD, por exemplo, 24 - 28 - 16 - 24 - 8 - 24 (assumindo GCD = 4). #53149 (Alexander Nam). - Foram adicionados dois novos aliases de tipo:
DECIMAL(P)(como atalho paraDECIMAL(P, 0)) eDECIMAL(como atalho paraDECIMAL(10, 0)). Isso torna o ClickHouse mais compatível com o dialeto SQL do MySQL. #53328 (Val Doroshchuk). - Adicionada uma nova tabela de log do sistema
backup_logpara registrar todas as operaçõesBACKUPeRESTORE. #53638 (Victor Krasnov). - Adicionada uma configuração de formato
output_format_markdown_escape_special_characters(padrão: false). A configuração controla se caracteres especiais como!,#,$etc. são escapados (ou seja, precedidos por uma barra invertida) no formato de saídaMarkdown. #53860 (irenjj). - Adicionada a função
decodeHTMLComponent. #54097 (Bharat Nallan). - Adicionada
peak_threads_usageà tabela query_log. #54335 (Alexey Gerasimchuck). - Adicionado suporte a
SHOW FUNCTIONSao clickhouse-client. #54337 (Julia Kartseva). - Adicionada a função
toDaysSinceYearZerocom aliasTO_DAYS(para compatibilidade com MySQL), que retorna o número de dias transcorridos desde0001-01-01(no calendário gregoriano proléptico). #54479 (Robert Schulze). A funçãotoDaysSinceYearZeroagora oferece suporte a argumentos dos tiposDateTimeeDateTime64. #54856 (Serge Klochkov). - Adicionadas as funções
YYYYMMDDtoDate,YYYYMMDDtoDate32,YYYYMMDDhhmmssToDateTimeeYYYYMMDDhhmmssToDateTime64. Elas convertem uma data ou uma data com hora codificada como inteiro (por exemplo, 20230911) em uma data nativa ou uma data com hora nativa. Assim, fornecem a funcionalidade inversa das funções existentesYYYYMMDDToDate,YYYYMMDDToDateTime,YYYYMMDDhhmmddToDateTime,YYYYMMDDhhmmddToDateTime64. #54509 (Quanfa Fu) (Robert Schulze). - Adicionadas várias funções de distância de strings, incluindo
byteHammingDistanceeeditDistance. #54935 (flynn). - Permite especificar a data de expiração e, opcionalmente, o horário das credenciais do usuário com a cláusula
VALID UNTIL datetime. #51261 (Nikolay Degterinsky). - Permite URLs no estilo S3 para as table functions
s3,gcs,oss. A URL é convertida automaticamente para HTTP. Exemplo:'s3://clickhouse-public-datasets/hits.csv'é convertida para'https://clickhouse-public-datasets.s3.amazonaws.com/hits.csv'. #54931 (Yarik Briukhovetskyi). - Adiciona a nova configuração
print_pretty_type_namespara imprimir, de forma legível, tipos profundamente aninhados, como Tuple/Maps/Arrays. #55095 (Kruglov Pavel).
Melhoria de desempenho
- A leitura do S3 fica mais rápida com a habilitação de prefetches por padrão. #53709 (Alexey Milovidov).
- Não leia implicitamente as colunas PK e de versão em partes individuais se isso não for necessário para consultas com FINAL. #53919 (Duc Canh Le).
- Otimiza o
group bycom chaves constantes. Otimizará consultas comgroup byem_file/_pathapós https://github.com/ClickHouse/ClickHouse/pull/53529. #53549 (Kruglov Pavel). - Melhorado o desempenho da ordenação de colunas
Decimal. Melhorado o desempenho da inserção emMergeTreese ORDER BY contiver uma colunaDecimal. Melhorado o desempenho da ordenação quando os dados já estão ordenados ou quase ordenados. #35961 (Maksim Kita). - Melhora o desempenho na análise de consultas muito grandes. Corrige #51224. #51469 (frinkr).
- Uma otimização para reescrever
COUNT(DISTINCT ...)e várias variantes deuniqcomocountquando selecionados de uma subconsulta com GROUP BY. #52082 #52645 (JackyWoo). - Remova as chamadas manuais para
mmap/mremap/munmape delegue todo esse trabalho aojemalloc— isso melhora um pouco o desempenho. #52792 (Nikita Taranov). - Corrigido o alto consumo de CPU ao trabalhar com NATS. #54399 (Vasilev Pyotr).
- Como usamos instruções separadas para executar
toStringcom argumento datetime, é possível melhorar um pouco o desempenho para argumentos que não são datetime e deixar algumas partes do código mais limpas. Dá continuidade a #53680. #54443 (Yarik Briukhovetskyi). - Em vez de serializar elementos JSON em um
std::stringstream, este PR tenta gravar o resultado da serialização diretamente emColumnString. #54613 (lgbo). - Habilitada a otimização de ORDER BY para ler dados na ordem correspondente de uma tabela MergeTree quando a tabela é acessada por meio de uma view. #54628 (Vitaly Baranov).
- Melhora das funções SQL para JSON com a reutilização de
GeneratorJSONPathe a remoção de vários ponteiros compartilhados. #54735 (lgbo). - Keeper tenta processar solicitações de flush em lote para melhor desempenho. #53049 (Antonio Andelic).
- Agora, o
clickhouse-clientprocessa arquivos em paralelo ao usarINFILE 'glob_expression'. Resolve #54218. #54533 (Max K.). - Permite usar a chave primária na função
INquando os tipos das colunas da chave primária são diferentes dos tipos das colunas no lado direito da funçãoIN. Exemplo:SELECT id FROM test_table WHERE id IN (SELECT '5'). Fecha #48936. #54544 (Maksim Kita). - O Hash JOIN tenta reduzir os buffers internos, que consomem metade da memória máxima disponível (definida por
max_bytes_in_join). #54584 (vdimir). - Respeita
max_block_sizepara array join a fim de evitar possível OOM. Fecha #54290. #54664 (李扬). - Reutilização de conexões HTTP na função de tabela
s3. #54812 (Michael Kolupaev). - Substitua a busca linear em
MergeTreeRangeReader::Stream::ceilRowsToCompleteGranulespor uma busca binária. #54869 (usurai).
Funcionalidade Experimental
- A criação de índices
Annoyagora pode ser paralelizada usando a configuraçãomax_threads_for_annoy_index_creation. #54047 (Robert Schulze). - Réplicas paralelas em Distributed não leem de todas as réplicas #54199 (Igor Nikonov).
Melhoria
- Permite substituir nomes longos de arquivos de colunas em partes de dados
MergeTreepor hashes dos nomes. Isso ajuda a evitar o erroFile name too longem alguns casos. #50612 (Anton Popov). - Interpretar dados no formato
JSONcomoJSONEachRowse não for possível analisar os metadados. Isso permitirá ler arquivos com a extensão.jsonmesmo que o formato real seja JSONEachRow. Fecha #45740. #54405 (Kruglov Pavel). - Gera JSON/XML válido em caso de exceção durante a execução de consulta HTTP. Adicionada a configuração
http_write_exception_in_output_formatpara habilitar/desabilitar esse comportamento (habilitado por padrão). #52853 (Kruglov Pavel). - A view
information_schema.tablesagora conta com um novo campodata_length, que mostra o tamanho aproximado dos dados em disco. Isso é necessário para executar consultas geradas pelo Amazon QuickSight. #55037 (Robert Schulze). - A interface MySQL recebeu uma implementação mínima de prepared statements, apenas o suficiente para permitir uma conexão do Tableau Online ao ClickHouse por meio do conector MySQL. #54115 (Serge Klochkov). Observe que a implementação de prepared statements é bem mínima; ainda não oferecemos suporte ao binding de argumentos, pois isso não é necessário neste caso de uso específico do Tableau Online. Isso será implementado posteriormente, se necessário, após testes extensivos do Tableau Online, caso descubramos problemas.
- Adiciona suporte aos modos de correspondência sem distinção entre maiúsculas e minúsculas e dot-all em dicionários
regexp_tree. #50906 (Johann Gan). - Melhoria no Keeper: adicionado um comando
createIfNotExistsdo Keeper. #48855 (Konstantin Bogdanov). - Inferência mais precisa de tipos inteiros, correção de #51236. #53003 (Chen768959).
- Introduzida a resolução de conjuntos de caracteres em literais de string no MaterializedMySQL. #53220 (Val Doroshchuk).
- Corrige um problema sutil com o mecanismo de tabela
EmbeddedRocksDB, pouco usado, em um cenário extremamente raro: às vezes, o mecanismo de tabelaEmbeddedRocksDBnão fecha corretamente os arquivos no NFS após executarDROP TABLE. #53502 (Mingliang Pan). RESTORE TABLE ON CLUSTERdeve criar tabelas replicadas com UUIDs correspondentes nos hosts. Caso contrário, a macro{uuid}no path do ZooKeeper não funcionará corretamente após o RESTORE. Este PR implementa isso. #53765 (Vitaly Baranov).- Adicionada a configuração de restore
restore_broken_parts_as_detached: se estiver ativada, o processo de RESTORE não será interrompido por partes corrompidas durante a restauração; em vez disso, todas as partes corrompidas serão copiadas para a pastadetachedcom o prefixobroken-from-backup. Se estiver desativada, o processo de RESTORE será interrompido na primeira parte corrompida (se houver). O valor padrão é false. #53877 (Vitaly Baranov). - Adicionado o campo
elapsed_nsaos cabeçalhos HTTP X-ClickHouse-Progress e X-ClickHouse-Summary. #54179 (joelynch). - Implementação dos comandos
reconfig(https://github.com/ClickHouse/ClickHouse/pull/49450),synceexistsno keeper-client. #54201 (pufit). clickhouse-localeclickhouse-clientagora permitem especificar o parâmetro--queryvárias vezes, por exemplo,./clickhouse-client --query "SELECT 1" --query "SELECT 2". Essa sintaxe é um pouco mais intuitiva do que./clickhouse-client --multiquery "SELECT 1;S ELECT 2", um pouco mais fácil de automatizar em scripts (por exemplo,queries.push_back('--query "$q"')) e mais consistente com o comportamento do parâmetro existente--queries-file(por exemplo,./clickhouse client --queries-file queries1.sql --queries-file queries2.sql). #54249 (Robert Schulze).- Adiciona precisão de subsegundos a
formatReadableTimeDelta. #54250 (Andrey Zvonov). - Ativar
allow_remove_stale_moving_partspor padrão. #54260 (vdimir). - Corrigir o uso da contagem do cache e aprimorar a barra de progresso para leitura de arquivos compactados. #54271 (Kruglov Pavel).
- Adicionado suporte a credenciais do S3 usando SSO. Para definir um profile a ser usado com SSO, defina a variável de ambiente
AWS_PROFILE. #54347 (Antonio Andelic). - Suporte a NULL como valor padrão para tipos aninhados Array/Tuple/Map em formatos de entrada. Fecha #51100. #54351 (Kruglov Pavel).
- Permitir a leitura de algumas configurações incomuns de fragmentos nos formatos Arrow/Parquet. #54370 (Arthur Passos).
- Adiciona o alias
STDpara a funçãostddevPop, para compatibilidade com MySQL. Fecha #54274. #54382 (Nikolay Degterinsky). - Adicionada a função
addDatepara compatibilidade com MySQL esubDatepara manter a consistência. Consulte #54275. #54400 (Nikolay Degterinsky). - Adicionado
modification_timeasystem.detached_parts. #54506 (Azat Khuzhin). - Foi adicionada uma configuração
splitby_max_substrings_includes_remaining_stringque controla se as funções “splitBy*()” com o argumento “max_substring” > 0 incluem o restante da string (se houver) no array de resultado (semântica do Python/Spark) ou não. O comportamento padrão não foi alterado. #54518 (Robert Schulze). - Inferência aprimorada de tipos inteiros para campos
Int64/UInt64. Continuação de #53003. Agora também funciona para tipos aninhados, como Arrays de Arrays, e para funções comomap/tuple. Problema: #51236. #54553 (Kruglov Pavel). - Adicionadas operações com arrays para multiplicação, divisão e módulo por escalar. Funciona em ambos os sentidos, por exemplo
5 * [5, 5]e[5, 5] * 5- ambos os casos são possíveis. #54608 (Yarik Briukhovetskyi). - Adiciona o argumento opcional
versionao comandormnokeeper-clientpara permitir exclusões mais seguras. #54708 (János Benjamin Antal). - Desativado o encerramento do servidor pelo systemd (isso pode levar à perda de dados ao usar tabelas Buffer). #54744 (Azat Khuzhin).
- Adicionado o campo
is_deterministicà tabela de sistemasystem.functions, que indica se o resultado de uma função é estável entre duas invocações (com exatamente as mesmas entradas) ou não. #54766 #55035 (Robert Schulze). - As views no esquema
information_schemaforam tornadas mais compatíveis com as views equivalentes no MySQL (ou seja, foram modificadas e estendidas) a ponto de o Tableau Online conseguir se conectar ao ClickHouse. Mais especificamente: 1. O tipo do campoinformation_schema.tables.table_typemudou de Enum8 para String. 2. Foram adicionados os campostable_commentetable_collationà viewinformation_schema.table. 3. Foram adicionadas as viewsinformation_schema.key_column_usageereferential_constraints. 4. Os aliases em maiúsculas nas views deinformation_schemaforam substituídos por colunas concretas em maiúsculas. #54773 (Serge Klochkov). - O cache de consultas agora retorna um erro se você tentar armazenar em cache o resultado de uma consulta com uma função não determinística, como
now,randomStringedictGet. Em comparação com o comportamento anterior (simplesmente não armazenar o resultado em cache), isso reduz a confusão e a surpresa. #54801 (Robert Schulze). - Proíbe colunas especiais, como materializadas/efêmeras/com alias, para armazenamentos
file/s3/url/…, corrige a inserção em colunas efêmeras a partir de arquivos. Fecha #53477. #54803 (Kruglov Pavel). - Coleta de metadados para backup mais configurável. #54804 (Vitaly Baranov).
- O arquivo de log do
clickhouse-local(se habilitado com a flag —server_logs_file) agora passará a prefixar cada linha com timestamp, ID da thread etc., assim como oclickhouse-server. #54807 (Michael Kolupaev). - Campo
is_obsoletena tabelasystem.merge_tree_settings— agora ele é 1 para configurações obsoletas de merge tree. Antes, apenas a descrição indicava que a configuração era obsoleta. #54837 (Robert Schulze). - Permite usar o plural em literais de intervalo.
INTERVAL 2 HOURSdeve ser equivalente aINTERVAL 2 HOUR. #54860 (Jordi Villar). - Permitir sempre a criação de uma projeção com PK
Nullable. Isso corrige #54814. #54895 (Amos Bird). - Executar novamente as operações S3 do backup após falha por redefinição da conexão. #54900 (Vitaly Baranov).
- Tornar a mensagem de exceção precisa quando o valor máximo de uma configuração for menor que o valor mínimo. #54925 (János Benjamin Antal).
LIKE,matche outras funções de correspondência por expressão regular agora permitem corresponder padrões que contêm substrings não UTF-8, com fallback para correspondência binária. Exemplo: você pode usarstring LIKE '\xFE\xFF%'para detectar BOM. Isso corrige #54486. #54942 (Alexey Milovidov).- Adicionado o evento de perfil
ContextLockWaitMicroseconds. #55029 (Maksim Kita). - O Keeper ajusta dinamicamente os níveis de log. #50372 (helifu).
- Adicionada a função
timestamppara compatibilidade com o MySQL. Fecha #54275. #54639 (Nikolay Degterinsky).
Melhoria em Build/Testes/Empacotamento
- Atualizado o compilador das builds oficiais e de integração contínua do ClickHouse de Clang 16 para 17. #53831 (Robert Schulze).
- Dados de TLD regenerados para lookups (
tldLookup.generated.cpp). #54269 (Bharat Nallan). - Removido o link simbólico redundante
clickhouse-keeper-client. #54587 (Tomas Barton). - Passa a usar
/usr/bin/envpara localizar o bash — agora com suporte ao Nix OS. #54603 (Fionera). - O CMake adicionou a opção
PROFILE_CPU, necessária para executarperf recordsem usar um call graph DWARF. #54917 (Maksim Kita). - Se o linker for diferente de LLD, a execução é interrompida com um erro fatal. #55036 (Alexey Milovidov).
- A biblioteca usada para manipular (codificar/decodificar) valores em base64 foi trocada de Turbo-Base64 para aklomp-base64. Ambas têm aceleração SIMD em x86 e ARM, mas 1. a licença da segunda (BSD-2) é mais favorável para o ClickHouse, já que a Turbo64 mudou nesse meio-tempo para GPL-3; 2. com mais estrelas no GitHub, a aklomp-base64 parece ser uma opção mais preparada para o futuro; 3. a aklomp-base64 tem uma API ligeiramente melhor (embora isso seja discutivelmente subjetivo); e 4. a aklomp-base64 não exige soluções improvisadas para contornar bugs (como inicialização sem thread safety). Observação: a aklomp-base64 rejeita valores base64 sem padding, enquanto a Turbo-Base64 os decodifica em regime de melhor esforço. A RFC-4648 deixa em aberto se o padding é obrigatório ou não, mas, dependendo do contexto, isso pode representar uma mudança de comportamento que merece atenção. #54119 (Mikhail Koviazin).
Correção de bug (mau funcionamento perceptível ao usuário em um lançamento estável oficial)
- Corrigido REPLACE/MOVE PARTITION com replicação zero-copy (observação: “replicação zero-copy” é um recurso experimental) #54193 (Alexander Tokmakov).
- Corrigidos bloqueios de zero-copy com hardlinks (observação: “replicação zero-copy” é um recurso experimental) #54859 (Alexander Tokmakov).
- Corrige o lixo do zero copy (observação: “replicação zero-copy” é um recurso experimental) #54550 (Alexander Tokmakov).
- Enviar o timeout de retry HTTP em milissegundos (antes estava incorreto). #54438 (Duc Canh Le).
- Corrigida mensagem de erro enganosa em OUTFILE com
CapnProto/Protobuf#52870 (Kruglov Pavel). - Corrige relatórios resumidos com réplicas paralelas ao usar LIMIT #53050 (Raúl Marín).
- Correção do throttling de BACKUPs de/para o S3 (caso a cópia nativa não tenha sido usada) e também em alguns outros pontos #53336 (Azat Khuzhin).
- Corrige o throttling de IO ao copiar diretórios inteiros #53338 (Azat Khuzhin).
- Correção: ao mover ações para a condição
prewhere, é possível perder uma coluna #53492 (Yakov Olkhovskiy). - Corrigido erro interno ao substituir por partes idênticas em bytes #53735 (Pedro Riera).
- Correção: exigir que as colunas participem da expressão
interpolate#53754 (Yakov Olkhovskiy). - Corrige a inicialização da descoberta de cluster + a definição de fail points na configuração #54113 (vdimir).
- Corrige falhas em
accurateCastOrNull#54136 (Salvatore Mesoraca). - Corrigida a chave primária Nullable com o modificador FINAL #54164 (Amos Bird).
- Corrigido um erro que impedia a inserção de novos dados em uma visão materializada replicada na presença de dados duplicados. #54184 (Pedro Riera).
- Correção: permitir
IPv6em filtro de Bloom #54200 (Yakov Olkhovskiy). - corrige uma possível incompatibilidade de tipo com
IPv4#54212 (Bharat Nallan). - Corrigido o
system.data_skipping_indicespara índices recriados #54225 (Artur Malchanau). - corrige conflito de nomes no reescritor v2 para múltiplos join #54240 (Tao Wang).
- Corrige erros inesperados em
system.errorsapós JOIN #54306 (vdimir). - Corrigido
isZeroOrNull(NULL)#54316 (flynn). - Correção: réplicas paralelas em Distributed com
prefer_localhost_replica= 1 #54334 (Igor Nikonov). - Corrige erro lógico na mesclagem vertical + ReplacingMergeTree + limpeza do OPTIMIZE #54368 (alesapin).
- Corrige o possível erro
URI contains invalid charactersna função de tabelas3#54373 (Kruglov Pavel). - Corrigida falha de segmentação na otimização de AST da função
arrayExists#54379 (Nikolay Degterinsky). - Verificação de overflow antes da soma na função
analysisOfVariance#54385 (Antonio Andelic). - Reproduzir e corrigir o bug no removeSharedRecursive #54430 (Sema Checherinda).
- Correção de possível resultado incorreto com SimpleAggregateFunction em PREWHERE e FINAL #54436 (Azat Khuzhin).
- Corrige a filtragem de partes com indexHint quando o analisador não é usado #54449 (Azat Khuzhin).
- Corrige as projeções agregadas com estados normalizados #54480 (Amos Bird).
clickhouse-local: algo para o parâmetro de multiconsulta #54498 (CuiShuoGuo).clickhouse-localagora oferece suporte ao argumento de linha de comando--database#54503 (vdimir).- Corrige um possível erro de parsing nos formatos
-WithNamescominput_format_with_names_use_headerdesabilitado #54513 (Kruglov Pavel). - Corrige um caso raro do erro CHECKSUM_DOESNT_MATCH #54549 (alesapin).
- Corrigida a ordenação no UNION ALL de resultados já ordenados #54564 (Vitaly Baranov).
- Corrigida a instalação de snapshot no Keeper #54572 (Antonio Andelic).
- Corrige uma condição de corrida em
ColumnUnique#54575 (Nikita Taranov). - Índice Annoy/Usearch: corrige LOGICAL_ERROR durante a criação com valores padrão #54600 (Robert Schulze).
- Corrigida a serialização de
ColumnDecimal#54601 (Nikita Taranov). - Corrige a inferência de esquema em funções *Cluster para nomes de colunas com espaços #54635 (Kruglov Pavel).
- Corrige o uso da estrutura das tabelas de inserção em casos de valores padrão e de colunas explicitamente especificadas no insert #54655 (Kruglov Pavel).
- Correção: evitar usar correspondência por regex, possivelmente contendo alternância, como condição de chave. #54696 (Yakov Olkhovskiy).
- Corrige o ReplacingMergeTree com mesclagem vertical e limpeza de código #54706 (SmitaRKulkarni).
- Corrige colunas virtuais que ficam com valores incorretos após ORDER BY #54811 (Michael Kolupaev).
- Corrige a filtragem de partes com indexHint sem o analyzer #54825 #54449 (Azat Khuzhin).
- Corrigida falha de segmentação no Keeper durante o desligamento #54841 (Antonio Andelic).
- Correção de
Invalid number of rows in Chunkno MaterializedPostgreSQL #54844 (Kseniia Sumarokova). - Mover configurações de formato obsoletas para uma seção separada #54855 (Kruglov Pavel).
- Reconstruir
minmax_count_projectionquando a chave de partição é modificada #54943 (Amos Bird). - Corrige conversão inválida para
ColumnVector<Int128>na funçãoif#55019 (Kruglov Pavel). - Impedir a anexação de partes de tabelas com projeções ou índices diferentes #55062 (János Benjamin Antal).
- Armazenar NULL no map do resultado escalar para subconsultas sem resultado #52240 (vdimir).
- Corrige o problema em que
FINALproduz intervalos de leitura inválidos em um caso raro #54934 (Nikita Taranov). - Correção: quórum de insert sem retentativas do Keeper #55026 (Igor Nikonov).
- Corrige estado simples com Nullable #55030 (Pedro Riera).
Lançamento do ClickHouse 23.8 LTS, 2023-08-31. Apresentação, Vídeo
Mudança incompatível com versões anteriores
- Se um disco dinâmico tiver um nome, ele deverá ser especificado como
disk = disk(name = 'disk_name', …) nos argumentos da funçãodisk. Na versão anterior, ele podia ser especificado comodisk = disk_<disk_name>(...), o que não é mais suportado. #52820 (Kseniia Sumarokova). - O
clickhouse-benchmarkestabelecerá conexões em paralelo quando for executado com--concurrencymaior que um. Antes, ele era inutilizável ao ser executado com 1000 conexões simultâneas da Europa para os EUA. Corrigido o cálculo de QPS para conexões com alta latência. Mudança incompatível com versões anteriores: a opção de saída JSON doclickhouse-benchmarkfoi removida. Se você usava essa opção, também pode extrair dados desystem.query_logem formato JSON como alternativa. #53293 (Alexey Milovidov). - A coluna
microsecondsfoi removida desystem.text_log, e a colunamillisecondsfoi removida desystem.metric_log, porque são redundantes na presença da colunaevent_time_microseconds. #53601 (Alexey Milovidov). - O recurso de metadata cache foi descontinuado. Ele é experimental e nunca foi usado por nós. O recurso é perigoso: #51182. A system table
system.merge_tree_metadata_cachefoi removida. O metadata cache ainda está disponível nesta versão, mas será removido em breve. Isto encerra #39197. #51303 (Alexey Milovidov). - Desabilitado o suporte a 3DES em conexões TLS. #52893 (Kenji Noguchi).
Nova funcionalidade
- Importação direta de arquivos compactados zip/7z/tar. Exemplo:
file('*.zip :: *.csv'). #50321 (nikitakeba). - Adicionada a coluna
ptrasystem.trace_logparatrace_type = 'MemorySample'. Essa coluna contém um endereço de alocação. Adicionada a funçãoflameGraph, que pode gerar um flamegraph com memória alocada e não liberada. Reformulação de #38391. #45322 (Nikolai Kochetov). - Adicionada a função de tabela
azureBlobStorageCluster. O conjunto de recursos compatíveis é muito semelhante ao da função de tabelas3Cluster. #50795 (SmitaRKulkarni). - Permitir o uso de
cluster,clusterAllReplicas,remoteeremoteSecuresem o nome da tabela na issue #50808. #50848 (Yangkuan Liu). - Uma tabela de sistema para monitorar consumidores Kafka. #50999 (Ilya Golshtein).
- Adicionada a opção
max_sessions_for_user. #51724 (Alexey Gerasimchuck). - Novas funções
toUTCTimestamp/fromUTCTimestamppara funcionar da mesma forma queto_utc_timestamp/from_utc_timestampdo Spark. #52117 (KevinyhZou). - Adiciona novas funções
structureToCapnProtoSchema/structureToProtobufSchemaque convertem a estrutura de tabelas do ClickHouse em esquemas no formato CapnProto/Protobuf. Permite importar/exportar dados no formato CapnProto/Protobuf sem um esquema de formato externo, usando um esquema gerado automaticamente a partir da estrutura da tabela (controlado pelas configuraçõesformat_capn_proto_use_autogenerated_schema/format_protobuf_use_autogenerated_schema). Permite exportar o esquema gerado automaticamente durante a importação/exportação usando a configuraçãooutput_format_schema. #52278 (Kruglov Pavel). - Um novo campo
query_cache_usageemsystem.query_logagora indica se e como o cache de consultas foi usado. #52384 (Robert Schulze). - Adicionadas as novas funções
startsWithUTF8eendsWithUTF8. #52555 (李扬). - Permite um número variável de colunas em TSV/CustomSeparated/JSONCompactEachRow e faz a inferência de esquema funcionar com um número variável de colunas. Adicionadas as configurações
input_format_tsv_allow_variable_number_of_columns,input_format_custom_allow_variable_number_of_columns,input_format_json_compact_allow_variable_number_of_columns. #52692 (Kruglov Pavel). - Adicionadas as consultas
SYSTEM STOP/START PULLING REPLICATION LOG(para testar oReplicatedMergeTree). #52881 (Alexander Tokmakov). - Permitir a execução de funções constantes não determinísticas em mutações no nó iniciador. #53129 (Anton Popov).
- Adiciona o formato de entrada
One, que não lê nenhum dado e sempre retorna uma única linha com a colunadummy, do tipoUInt8e valor0, comosystem.one. Ele pode ser usado em conjunto com as colunas virtuais_file/_pathpara listar arquivos em table functions file/s3/url/hdfs/etc sem ler nenhum dado. #53209 (Kruglov Pavel). - Adicionada a função
tupleConcat. Fecha #52759. #53239 (Nikolay Degterinsky). - Suporte à operação
TRUNCATE DATABASE. #53261 (Bharat Nallan). - Adicionada a configuração
max_threads_for_indexespara limitar o número de threads usadas no processamento da chave primária. #53313 (jorisgio). - Readicionadas as funções SipHash com chave. #53525 (Salvatore Mesoraca).
- (#52755 , #52895) Foram adicionadas as funções
arrayRotateLeft,arrayRotateRight,arrayShiftLeft,arrayShiftRight. #53557 (Mikhail Koviazin). - Adicionar a coluna
nameasystem.clusterscomo alias de cluster. #53605 (irenjj). - O dashboard avançado agora permite edição em massa (salvar/carregar). #53608 (Alexey Milovidov).
- O Dashboard avançado agora tem uma opção para maximizar os gráficos e reorganizá-los. #53622 (Alexey Milovidov).
- Adicionado suporte para somar e subtrair arrays:
[5,2] + [1,7]. A divisão e a multiplicação não foram implementadas devido à confusão entre a multiplicação elemento a elemento e o produto escalar dos operandos. Fecha #49939. #52625 (Yarik Briukhovetskyi). - Adiciona suporte ao uso de literais de texto como nomes de tabelas. Fecha #52178. #52635 (hendrik-m).
Funcionalidade Experimental
- Adiciona o novo mecanismo de tabela
S3Queuepara importação de dados em streaming do S3. Fecha #37012. #49086 (s-kat). Ainda não está pronto para uso. Não o utilize. - Habilita leitura paralela a partir de réplicas por meio de tabela distribuída. Relacionado a #49708. #53005 (Igor Nikonov).
- Adiciona suporte experimental ao HNSW como método de busca aproximada de vizinhos. #53447 (Davit Vardanyan). No momento, isso se destina àqueles que continuam trabalhando na implementação. Não o utilize.
Melhoria de desempenho
- Pushdown de filtro em Parquet. Ou seja, ao ler arquivos Parquet, os grupos de linhas (fragmentos do arquivo) são ignorados com base na condição
WHEREe nos valores mínimo/máximo de cada coluna. Em particular, se o arquivo estiver aproximadamente ordenado por alguma coluna, as consultas que filtram um intervalo curto dessa coluna serão muito mais rápidas. #52951 (Michael Kolupaev). - Otimiza a leitura de pequenos grupos de linhas, processando-os em lote no Parquet. Fecha #53069. #53281 (Kruglov Pavel).
- Otimiza a contagem em arquivos na maioria dos formatos de entrada. Fecha #44334. #53637 (Kruglov Pavel).
- Aplica filtro por arquivo/caminho antes da leitura nas funções de tabela
url/file/hdfs. #53529 (Kruglov Pavel). - Ativada a compilação JIT para AArch64, PowerPC, SystemZ e RISC-V. #38217 (Maksim Kita).
- Adiciona a configuração
rewrite_count_distinct_if_with_count_distinct_implementationpara reescrevercountDistinctIfusandocount_distinct_implementation. Fecha #30642. #46051 (flynn). - Acelera a mesclagem dos estados das funções de agregação
uniqeuniqExactao paralelizar a conversão antes da mesclagem. #50748 (Jiebin Sun). - Otimiza o desempenho da agregação com chave String Nullable ao usar um grande número de chaves de tamanho variável. #51399 (LiuNeng).
- Adiciona uma etapa no Analyzer para otimização do filtro de tempo com pré-imagem. Os experimentos de desempenho do SSB no dispositivo ICX (CPU Intel Xeon Platinum 8380, 80 núcleos, 160 threads) mostram que essa mudança pode trazer uma melhora de 8,5% na média geométrica de QPS quando o Analyzer experimental está habilitado. #52091 (Zhiguo Zhou).
- Otimize o merge se todos os conjuntos de hash forem de um único nível na função
uniqExact(COUNT DISTINCT). #52973 (Jiebin Sun). - Mecanismo de tabela
Join: não clona a estrutura de dados do hash join com todas as colunas. #53046 (Duc Canh Le). - Implementar o formato de entrada
ORCnativo sem a biblioteca “apache arrow” para melhorar o desempenho. #53324 (李扬). - O dashboard instruirá o servidor a comprimir os dados, o que é útil para intervalos de tempo longos em conexões lentas com a internet. Por exemplo, um gráfico com 86400 pontos pode ter 1,5 MB sem compressão e 60 KB comprimidos com
br. #53569 (Alexey Milovidov). - Melhor aproveitamento do pool de threads para BACKUPs e RESTOREs. #53649 (Nikita Mikhaylov).
- Carrega os metadados do cache do filesystem em paralelo na inicialização. Configurado pela definição de configuração de cache
load_metadata_threads(padrão: 1). Relacionado a #52037. #52943 (Kseniia Sumarokova). - Melhorado
move_primary_key_columns_to_end_of_prewhere. #53337 (Han Fei). - Isso otimiza a interação com o ClickHouse Keeper. Antes, o chamador podia registrar o mesmo callback de watch várias vezes. Nesse caso, cada entrada consumia memória e o mesmo callback era invocado várias vezes, o que não fazia muito sentido. Para evitar isso, o chamador podia implementar alguma lógica para não adicionar o mesmo watch várias vezes. Com esta mudança, essa desduplicação passa a ser feita internamente se o callback de watch for passado via shared_ptr. #53452 (Alexander Gololobov).
- Armazena em cache o número de linhas em arquivos para contagem nas funções file/s3/url/hdfs/azure. O cache pode ser ativado/desativado com a configuração
use_cache_for_count_from_files(ativado por padrão). Continuação de https://github.com/ClickHouse/ClickHouse/pull/53637. #53692 (Kruglov Pavel). - Um gerenciamento mais cuidadoso das threads aumentará em mais de ~25% a velocidade da função de tabela S3 ao lidar com um grande número de arquivos. #53668 (pufit).
Melhoria
- Adiciona a configuração/setting
stderr_reactionpara controlar a reação (none,logouthrow) quando há dados no stderr de um comando externo. Isso facilita a depuração de comandos externos. #43210 (Amos Bird). - Adicionar a coluna
partitionà tabelasystem part_loge à tabelamerge. #48990 (Jianfei Hu). - Os tamanhos dos caches de índice (dados não compactados/marks), mmap e consultas agora podem ser configurados dinamicamente em tempo de execução (sem reiniciar o servidor). #51446 (Robert Schulze).
- Se um dicionário for criado com uma chave complexa, escolha automaticamente a variante de layout “complex key”. #49587 (xiebin).
- Adicionada a configuração
use_concurrency_controlpara melhorar os testes do novo recurso de controle de concorrência. #49618 (Alexey Milovidov). - Adicionadas sugestões para nomes de bancos de dados e tabelas digitados incorretamente. #49801 (Yarik Briukhovetskyi).
- Ao ler arquivos pequenos do HDFS com o Gluten, descobrimos que isso levava mais tempo do que executar a consulta diretamente no Spark. E fizemos algo a respeito. #50063 (KevinyhZou).
- Havia logs de erro inúteis em excesso após o término da sessão, o que não nos agradava. #50171 (helifu).
- Introduz sessões de fallback do ZooKeeper com tempo de vida limitado. Corrige a coluna
indexem system.zookeeper_connection para endereços DNS. #50424 (Anton Kozlov). - Adicionar a capacidade de registrar em log quando max_partitions_per_insert_block for atingido. #50948 (Sean Haynes).
- Adicionados vários comandos personalizados ao clickhouse-keeper-client (principalmente para facilitar a depuração no ClickHouse). #51117 (pufit).
- Atualizada a verificação da connection string na table function
azureBlobStorage, pois a connection string com “sas” nem sempre começa com o endpoint padrão, e a URL de conexão também foi atualizada para incluir o token “sas” após adicionar o container do Azure à URL. #51141 (SmitaRKulkarni). - Corrigida a descrição da filtragem de conjuntos no algoritmo JOIN
full_sorting_merge. #51329 (Tanay Tummalapalli). - Corrigido o consumo de memória no
Aggregatorquandomax_block_sizeé muito grande. #51566 (Nikita Taranov). - Adicionado o comando
SYSTEM SYNC FILESYSTEM CACHE. Ele comparará o estado em memória do cache do sistema de arquivos com o que está em disco e corrigirá o estado em memória, se necessário. Isso só é necessário se você estiver fazendo intervenções manuais nos dados em disco, o que é fortemente desaconselhado. #51622 (Kseniia Sumarokova). - Tentativa de criar um resolvedor de proxy genérico para CH, mantendo a compatibilidade retroativa com o resolvedor de proxy
confexistente para armazenamento S3. #51749 (Arthur Passos). - Suporte para leitura de subcolunas de tupla em funções de tabela file/s3/hdfs/url/azureBlobStorage. #51806 (Kruglov Pavel).
- A função
arrayIntersectagora retorna os valores na ordem correspondente ao primeiro argumento. Corrige #27622. #51850 (Yarik Briukhovetskyi). - Adicionadas novas consultas, que permitem criar/remover entidades de acesso no armazenamento de acesso especificado ou movê-las de um armazenamento de acesso para outro. #51912 (pufit).
- Consultas
ALTER TABLE FREEZEdeixam de ser replicadas no engine de banco de dados Replicated. #52064 (Mike Kot). - Adicionada a possibilidade de fazer flush das tabelas de sistema em caso de desligamento inesperado. #52174 (Alexey Gerasimchuck).
- Corrige o problema em que a função de tabela
s3se recusava a funcionar com URLs pré-assinadas. fecha #50846. #52310 (chen). - Adicionar a coluna
namecomo alias deeventemetricnas tabelassystem.eventsesystem.metrics. Fecha #51257. #52315 (chen). - Adicionado suporte à sintaxe
CREATE UNIQUE INDEXno analisador como um no-op, para melhor compatibilidade com SQL. O índiceUNIQUEnão é suportado. Definacreate_index_ignore_unique = 1para ignorar a palavra-chave UNIQUE nas consultas. #52320 (Ilya Yatsishin). - Adicionado suporte a macros predefinidas (
{database}e{table}) em algumas configurações do engine Kafka: topic, consumer, client_id etc. #52386 (Yury Bogomolov). - Desabilita a atualização do cache do sistema de arquivos durante backup/restauração. O cache do sistema de arquivos não deve ser atualizado durante backup/restauração, pois isso aparentemente só torna o processo mais lento, sem trazer benefício algum (porque o comando BACKUP pode ler muitos dados, e não faz sentido colocar todos esses dados no cache do sistema de arquivos para logo em seguida expulsá-los dele). #52402 (Vitaly Baranov).
- A configuração do endpoint do S3 permite usá-lo a partir da raiz e adicionar ’/’ automaticamente, se necessário. #47809. #52600 (xiaolei565).
- No clickhouse-local, permitir opções posicionais e preencher as configurações globais de UDF (user_scripts_path e user_defined_executable_functions_config). #52643 (Yakov Olkhovskiy).
system.asynchronous_metricsagora inclui as métricas “QueryCacheEntries” e “QueryCacheBytes” para inspecionar o cache de consultas. #52650 (Robert Schulze).- Adicionada a possibilidade de usar o parâmetro
s3_storage_classna cláusulaSETTINGSda instruçãoBACKUPpara backups no S3. #52658 (Roman Vasin). - Adicionar o utilitário
print-backup-info.py, que interpreta um arquivo de metadados de backup e exibe informações sobre o backup. #52690 (Vitaly Baranov). - Fecha #49510. Atualmente, os nomes de bancos de dados e tabelas diferenciam maiúsculas de minúsculas, mas as ferramentas de BI às vezes fazem consultas a
information_schemaem minúsculas e, outras vezes, em maiúsculas. Por esse motivo, temos o banco de dadosinformation_schema, que contém tabelas em minúsculas, comoinformation_schema.tables, e o banco de dadosINFORMATION_SCHEMA, que contém tabelas em maiúsculas, comoINFORMATION_SCHEMA.TABLES. Mas algumas ferramentas estão consultandoINFORMATION_SCHEMA.tableseinformation_schema.TABLES. A solução proposta é duplicar as tabelas em minúsculas e em maiúsculas nos bancos de dadosinformation_schemaeINFORMATION_SCHEMA. #52695 (Yarik Briukhovetskyi). - A consulta
CHECK TABLEtem melhor desempenho e usabilidade (envia atualizações de progresso, pode ser cancelada). #52745 (vdimir). - Adicionado suporte a
modulo,intDiveintDivOrZeropara tuplas, distribuindo-os pelos elementos da tupla. #52758 (Yakov Olkhovskiy). - Procurar configurações padrão
yamleymlno clickhouse-client depois dexml. #52767 (Alexey Milovidov). - Ao mesclar em uma configuração cuja raiz não é ‘clickhouse’, configs com nomes de nó raiz diferentes eram simplesmente ignoradas, sem gerar exceção. #52770 (Yakov Olkhovskiy).
- Agora é possível especificar o tamanho mínimo (
memory_profiler_sample_min_allocation_size) e máximo (memory_profiler_sample_max_allocation_size) das alocações a serem rastreadas pelo profiler de memória com amostragem. #52779 (alesapin). - Adicionada a configuração
precise_float_parsingpara alternar entre métodos de parsing de números de ponto flutuante (rápido/preciso). #52791 (Andrey Zvonov). - Use os mesmos caminhos padrão para
clickhouse-keeper(link simbólico) e paraclickhouse-keeper(executável). #52861 (Vitaly Baranov). - Melhoria na mensagem de erro da função de tabela
remote. Fecha #40220. #52959 (jiyoungyoooo). - Adicionada a possibilidade de especificar uma política de armazenamento personalizada na cláusula
SETTINGSde consultasRESTORE. #52970 (Victor Krasnov). - Adicionada a capacidade de limitar a taxa das solicitações ao S3 em operações de backup (os comandos
BACKUPeRESTOREagora respeitams3_max_[get/put]_[rps/burst]). #52974 (Daniel Pozo Escalona). - Adiciona configurações para ignorar a cláusula ON CLUSTER em consultas de gerenciamento de Funções Definidas pelo Usuário replicadas ou de entidades de controle de acesso com armazenamento replicado. #52975 (Aleksei Filatov).
- Ações de EXPLAIN para a etapa JOIN. #53006 (Maksim Kita).
- Faz com que
hasTokenOrNullehasTokenCaseInsensitiveOrNullretornem null para substrings de busca vazias. #53059 (ltrk2). - Permite restringir os caminhos permitidos para caches do sistema de arquivos. É especialmente útil para discos dinâmicos. Se
filesystem_caches_pathfor especificado na configuração do servidor, os caminhos de todos os caches do sistema de arquivos ficarão restritos a esse diretório. Por exemplo, se opathna configuração do cache for relativo, ele será colocado emfilesystem_caches_path; se opathna configuração do cache for absoluto, será necessário que ele esteja dentro defilesystem_caches_path. Sefilesystem_caches_pathnão for especificado na configuração, o comportamento será o mesmo das versões anteriores. #53124 (Kseniia Sumarokova). - Adicionados vários comandos personalizados (principalmente para facilitar a depuração no ClickHouse). #53127 (pufit).
- Adicionar informações de diagnóstico sobre o nome do arquivo durante a inferência de esquema — o que ajuda ao processar vários arquivos com globs. #53135 (Alexey Milovidov).
- O cliente carregará sugestões usando a conexão principal se a segunda conexão não puder criar uma sessão. #53177 (Alexey Gerasimchuck).
- Adicionada a cláusula EXCEPT à consulta
SYSTEM STOP/START LISTEN QUERIES [ALL/DEFAULT/CUSTOM], por exemplo,SYSTEM STOP LISTEN QUERIES ALL EXCEPT TCP, HTTP. #53280 (Nikolay Degterinsky). - Altere o padrão de
max_concurrent_queriesde 100 para 1000. Não há problema em ter muitas consultas concorrentes se elas não forem pesadas e ficarem, em sua maior parte, aguardando a rede. Observação: não confunda consultas concorrentes com QPS: por exemplo, o servidor ClickHouse pode processar dezenas de milhares de QPS com menos de 100 consultas concorrentes. #53285 (Alexey Milovidov). - Limita o número de mesclagens de otimização de partições em segundo plano executadas simultaneamente. #53405 (Duc Canh Le).
- Adicionada a configuração
allow_moving_table_directory_to_trash, que permite ignorar o erroDirectory for table data already existsao replicar/recuperar um banco de dadosReplicated. #53425 (Alexander Tokmakov). - Se as configurações do servidor
asynchronous_metrics_update_period_seasynchronous_heavy_metrics_update_period_sforem definidas incorretamente como 0, agora a falha será tratada normalmente, em vez de encerrar a aplicação. #53428 (Robert Schulze). - O servidor ClickHouse agora respeita os limites de memória alterados via cgroups ao recarregar a configuração. #53455 (Robert Schulze).
- Adiciona a possibilidade de desativar o flush de tabelas Distributed em
DETACH,DROPou no desligamento do servidor. #53501 (Azat Khuzhin). - A função
domainRFCagora é compatível com IPv6 entre colchetes. #53506 (Chen768959). - Use um timeout mais longo para requisições CopyObject do S3, usadas em backups. #53533 (Michael Kolupaev).
- Adicionada a configuração do servidor
aggregate_function_group_array_max_element_size. Essa configuração é usada para limitar o tamanho do array da funçãogroupArrayno momento da serialização. O valor padrão é16777215. #53550 (Nikolai Kochetov). SCHEMAfoi adicionado como alias deDATABASEpara melhorar a compatibilidade com o MySQL. #53587 (Daniël van Eeden).- Adiciona métricas assíncronas para tabelas no banco de dados system. Por exemplo,
TotalBytesOfMergeTreeTablesSystem. Isso corrige #53603. #53604 (Alexey Milovidov). - O editor SQL na UI Play e no Dashboard não usará o Grammarly. #53614 (Alexey Milovidov).
- Como configurações avançadas para especialistas, agora é possível (1) configurar o size_ratio (ou seja, o tamanho relativo da fila protegida) dos caches de marcas/não compactados de [índice], (2) configurar a política de cache dos caches de marcas de índice e de dados não compactados de índice. #53657 (Robert Schulze).
- Adicionada a validação das informações do cliente no pacote de consulta do TCPHandler. #53673 (Alexey Gerasimchuck).
- Tentar novamente o carregamento de partes em caso de erros de rede ao interagir com o Microsoft Azure. #53750 (SmitaRKulkarni).
- Stack trace para exceções; exceções de views materializadas são propagadas. #53766 (Ilya Golshtein).
- Se nenhum hostname ou porta for especificado, o cliente do Keeper tentará localizar uma string de conexão no config.xml do ClickHouse. #53769 (pufit).
- Adicionar o evento de perfil
PartsLockMicroseconds, que mostra o tempo, em microssegundos, durante o qual mantemos o bloqueio das partes de dados na família de mecanismos de tabela MergeTree. #53797 (alesapin). - Torna configurável no Keeper o limite de reconexão do RAFT. Essa configuração pode ajudar o Keeper a restabelecer mais rapidamente a conexão com outros nós se a conexão atual for interrompida. #53817 (Pengyuan Bian).
- Ignorar chaves estrangeiras na definição de tabelas para melhorar a compatibilidade com o MySQL, para que o usuário não precise reescrever a parte de chave estrangeira do seu SQL, ref. #53380. #53864 (jsc0218).
Melhoria em Build/Testes/Empacotamento
- Não exponha símbolos do executável do ClickHouse ao vinculador dinâmico. Isso pode corrigir #43933. #47475 (Alexey Milovidov).
- Adicionar o link simbólico
clickhouse-keeper-clientao pacote clickhouse-server. #51882 (Mikhail f. Shiryaev). - Adicionado https://github.com/elliotchance/sqltest à CI para reportar a conformidade com o SQL 2016. #52293 (Alexey Milovidov).
- Atualizado o PRQL para 0.9.3. #53060 (Maximilian Roos).
- As tabelas de sistema das verificações de CI são exportadas para ClickHouse Cloud. #53086 (Alexey Milovidov).
- Os dados de perfil do compilador (
-ftime-trace) são enviados ao ClickHouse Cloud. #53100 (Alexey Milovidov). - Compilações Debug e Tidy mais rápidas. #53178 (Alexey Milovidov).
- Acelere a compilação removendo toneladas e mais toneladas de lixo. Um dos arquivos de cabeçalho incluídos com frequência foi envenenado pelo Boost. #53180 (Alexey Milovidov).
- Remover ainda mais lixo. #53182 (Alexey Milovidov).
- A função
arrayAUCusava templates pesados em C++ — eles foram removidos. #53183 (Alexey Milovidov). - Algumas unidades de tradução eram sempre recompiladas, independentemente do ccache. A causa foi encontrada e corrigida. #53184 (Alexey Milovidov).
- Os dados de perfil do compilador (
-ftime-trace) são enviados ao ClickHouse Cloud, na segunda tentativa após #53100. #53213 (Alexey Milovidov). - Exportar logs da CI em testes stateful para o ClickHouse Cloud. #53351 (Alexey Milovidov).
- Exportar logs do CI durante testes de estresse. #53353 (Alexey Milovidov).
- Exportar logs da CI no fuzzer. #53354 (Alexey Milovidov).
- Mantém os parâmetros de ambiente no comando
clickhouse start. Corrige #51962. #53418 (Mikhail f. Shiryaev). - Continuação de #53418. Pequenas melhorias no install_check.py, com a adição de testes para o repasse correto dos parâmetros de ambiente ao processo principal em
init.d start. #53457 (Mikhail f. Shiryaev). - Reorganize o gerenciamento de arquivos no CMake para evitar possíveis duplicidades. Por exemplo,
indexHint.cppestá duplicado tanto emdbms_sourcesquanto emclickhouse_functions_sources. #53621 (Amos Bird). - Atualização do snappy para 1.1.10. #53672 (李扬).
- Melhora ligeiramente o build do cmake ao ajustar algumas dependências e remover duplicatas. Cada commit inclui uma breve descrição das alterações realizadas. #53759 (Amos Bird).
Correção de bug (mau funcionamento perceptível ao usuário em um lançamento estável oficial)
- Não reinicialize o índice Annoy (experimental) durante a construção com mais de uma marca #51325 (Tian Xinhui).
- Corrigido o uso de diretórios temporários durante o RESTORE #51493 (Azat Khuzhin).
- Corrige a aritmética binária de Nullable(IPv4) #51642 (Yakov Olkhovskiy).
- Adicionado suporte a tipos de dados IPv4 e IPv6 como atributos de dicionário #51756 (Yakov Olkhovskiy).
- Uma correção para o checksum das marcas de compressão #51777 (SmitaRKulkarni).
- Corrige a interpretação incorreta da vírgula como parte de
datetimena análise CSV de melhor esforço #51950 (Kruglov Pavel). - Não lançar exceção quando uma UDF executável tiver parâmetros #51961 (Nikita Taranov).
- Corrigido o recálculo de skip indexes e projeções em consultas
ALTER DELETE#52530 (Anton Popov). - MaterializedMySQL: Corrigido o loop infinito em ReadBuffer::read #52621 (Val Doroshchuk).
- Carregamento de sugestões apenas com o dialeto
clickhouse#52628 (János Benjamin Antal). - Inicializa e destrói o canal ares quando necessário. #52634 (Arthur Passos).
- Corrigida a filtragem por colunas virtuais ao usar expressão OR #52653 (Azat Khuzhin).
- Corrigida a falha na função
tuplecom um argumento de coluna esparsa #52659 (Anton Popov). - Correção de named collections no cluster #52687 (Al Korgun).
- Correção da leitura de coluna desnecessária no caso de
PREWHEREem múltiplos estágios #52689 (Anton Popov). - Corrige resultado inesperado ao ordenar várias colunas com a direção
nulls first#52761 (copperybean). - Corrigida a condição de corrida na reconfiguração do Keeper #52804 (Antonio Andelic).
- Corrigida a ordenação de colunas esparsas com limite alto #52827 (Anton Popov).
- clickhouse-keeper: corrige a implementação do servidor com poll. #52833 (Andy Fiddaman).
- Fazer com que o analisador de regexp reconheça grupos de captura nomeados #52840 (Han Fei).
- Corrige possível assert em
~PushingAsyncPipelineExecutorno clickhouse-local #52862 (Kruglov Pavel). - Corrige a leitura de
Nested(Array(LowCardinality(...)))vazia #52949 (Anton Popov). - Adicionados novos testes para session_log e corrigida a inconsistência entre login e logout. #52958 (Alexey Gerasimchuck).
- Corrige vazamento de senha no show create mysql table #52962 (Duc Canh Le).
- Converter o formato de coluna esparsa para o formato completo em CreateSetAndFilterOnTheFlyStep #53000 (vdimir).
- Corrige uma rara condição de corrida na exclusão do diretório de prefixo de chave vazio no cache fs #53055 (Kseniia Sumarokova).
- Corrigido um problema em que o ZstdDeflatingWriteBuffer às vezes truncava a saída #53064 (Michael Kolupaev).
- Corrige o query_id no part_log em consultas assíncronas de flush #53103 (Raúl Marín).
- Corrige um possível erro de cache “Read unexpected size” #53121 (Kseniia Sumarokova).
- Desativado o novo codificador Parquet #53130 (Alexey Milovidov).
- Corrigida a exceção “Not-ready Set” #53162 (Nikolai Kochetov).
- Corrige o escape de caracteres no engine PostgreSQL #53250 (Nikolay Degterinsky).
- Tabela experimental session_log: adicionados novos testes para session_log e corrigida a inconsistência entre login e logout. #53255 (Alexey Gerasimchuck). Corrigida a inconsistência entre login bem-sucedido e logout #53302 (Alexey Gerasimchuck).
- Correção na adição de intervalos inferiores a um segundo ao tipo DateTime #53309 (Michael Kolupaev).
- Corrige o erro “Context has expired” em dicionários #53342 (Alexey Milovidov).
- Corrige o formato incorreto da AST da projeção normal #53347 (Amos Bird).
- Proibir o uso de use_structure_from_insertion_table_in_table_functions ao executar Scalar #53348 (flynn).
- Corrige o carregamento de banco de dados lazy durante a consulta select em system.table #53372 (SmitaRKulkarni).
- Corrigido o system.data_skipping_indices no MaterializedMySQL #53381 (Filipp Ozinov).
- Corrige o processamento de um único caractere de retorno de carro no engine de segmentação de arquivos TSV #53407 (Kruglov Pavel).
- Corrige adequadamente o erro
Context has expired#53433 (Michael Kolupaev). - Corrigido
timeout_overflow_modequando há uma subconsulta no lado direito de IN #53439 (Duc Canh Le). - Corrigido um comportamento inesperado em #53152 #53440 (Zhiguo Zhou).
- Corrigido erro de parse da função JSON_QUERY quando o path é totalmente numérico #53470 (KevinyhZou).
- Corrige a ordem incorreta das colunas em consultas com FINAL paralelo. #53489 (Nikolai Kochetov).
- Corrigido o SELECT em ReplacingMergeTree com do_not_merge_across_partitions_select_final #53511 (Vasily Nemkov).
- Esvaziar primeiro a fila de
async insertao desligar #53547 (joelynch). - Corrige travamento em
joincom coluna esparsa #53548 (vdimir). - Corrige possível UB no índice Set do tipo skipping para funções com argumentos incorretos #53559 (Azat Khuzhin).
- Corrigido possível UB em índices invertidos (recurso experimental) #53560 (Azat Khuzhin).
- Correção: a expressão de interpolação usa a coluna de origem em vez do alias com o mesmo nome da expressão SELECT. #53572 (Yakov Olkhovskiy).
- Corrigido o número de grânulos descartados em EXPLAIN PLAN index=1 #53616 (wangxiaobo).
- Lida corretamente com totais e extremos com
DelayedSource#53644 (Antonio Andelic). - Cache de Set preparado no pipeline de mutação ficava travado #53645 (Nikolai Kochetov).
- Corrigido um bug em mutações com subcolunas do tipo JSON em predicados de consultas UPDATE e DELETE. #53677 (VanDarkholme7).
- Corrigido o pushdown de filtro no join full_sorting_merge #53699 (vdimir).
- Tentativa de corrigir o bug em
NULL::LowCardinality(Nullable(...)) NOT IN#53706 (Andrey Zvonov). - Correção:
distinctordenado em colunas esparsas #53711 (Igor Nikonov). transform: lida corretamente com a coluna padrão em múltiplas linhas #53742 (Salvatore Mesoraca).- Corrige travamento do fuzzer em parseDateTime #53764 (Robert Schulze).
- MaterializedPostgreSQL: corrige exceção não tratada em getCreateTableQueryImpl #53832 (Kseniia Sumarokova).
- Corrige um possível segfault ao usar a engine PostgreSQL #53847 (Kseniia Sumarokova).
- Corrigido o alias named_collection_admin #54066 (Kseniia Sumarokova).
Lançamento do ClickHouse 23.7, 2023-07-27. Apresentação, Vídeo
Mudança incompatível com versões anteriores
- Adiciona o tipo de acesso
NAMED COLLECTION(aliasesUSE NAMED COLLECTION,NAMED COLLECTION USAGE). Este PR é incompatível com versões anteriores porque esse tipo de acesso vem desabilitado por padrão (já que o tipo de acesso paiNAMED COLLECTION ADMINtambém vem desabilitado por padrão). Proposto em #50277. Para concedê-lo, useGRANT NAMED COLLECTION ON collection_name TO userouGRANT NAMED COLLECTION ON * TO user; para poder conceder esses grants,named_collection_adminé necessário na configuração (anteriormente ele se chamavanamed_collection_control, portanto continuará disponível como alias). #50625 (Kseniia Sumarokova). - Corrige um erro de digitação no nome da coluna
last_removal_attemp_timedesystem.parts. Agora ela se chamalast_removal_attempt_time. #52104 (filimonov). - Eleva a versão de
distributed_ddl_entry_format_versionpara 5 por padrão (habilitando OpenTelemetry e o repasse deinitial_query_idd). Isso impedirá o processamento de entradas existentes de DDL distribuído após um downgrade (mas observe que, normalmente, não deveria haver esse tipo de entrada não processada). #52128 (Azat Khuzhin). - Verifica os metadados das projeções da mesma forma que os metadados comuns. Essa mudança pode impedir o servidor de iniciar caso exista uma tabela com uma projeção inválida. Um exemplo é uma projeção que criou colunas posicionais na PK (por exemplo,
projection p (select * order by 1, 4), o que não é permitido na PK da tabela e pode causar uma falha durante insert/merge). Remova essas projeções antes da atualização. Corrige #52353. #52361 (Nikolai Kochetov). - A funcionalidade experimental
hashidfoi removida devido a um bug. A qualidade da implementação já era questionável desde o início, e ela nem chegou a passar do status experimental. Isso encerra #52406. #52449 (Alexey Milovidov).
Nova funcionalidade
- Adicionado o engine de banco de dados
Overlaypara combinar vários bancos de dados em um só. Adicionado o engine de banco de dadosFilesystempara representar um diretório no sistema de arquivos como um conjunto de tabelas implicitamente disponíveis, com formatos e estruturas detectados automaticamente. Um novo engine de banco de dadosS3permite interagir com o armazenamento S3 em modo read-only, representando um prefixo como um conjunto de tabelas. Um novo engine de banco de dadosHDFSpermite interagir com o armazenamento HDFS da mesma forma. #48821 (alekseygolub). - Adiciona suporte a discos externos no Keeper para armazenar snapshots e logs. #50098 (Antonio Andelic).
- Adicionado suporte a globs com seleção de múltiplos diretórios (
{}). #50559 (Andrey Zvonov). - O conector Kafka pode obter o schema Avro do schema registry com autenticação básica usando credenciais codificadas em URL. #49664 (Ilya Golshtein).
- Adicionada a função
arrayJaccardIndex, que calcula a similaridade de Jaccard entre dois arrays. #50076 (FFFFFFFHHHHHHH). - Adiciona a coluna
is_obsoleteasystem.settingse a tabelas semelhantes. Fecha #50819. #50826 (flynn). - Implementado suporte a elementos criptografados no arquivo de configuração. Adicionada a possibilidade de usar texto criptografado nos elementos folha do arquivo de configuração. O texto é criptografado com os codecs de criptografia da seção
<encryption_codecs>. #50986 (Roman Vasin). - O algoritmo Grace Hash Join agora também se aplica a FULL e RIGHT JOINs. #49483. #51013 (lgbo).
- Adiciona a consulta
SYSTEM STOP LISTENpara um encerramento mais controlado. Fecha #47972. #51016 (Nikolay Degterinsky). - Adicionadas as opções
input_format_csv_allow_variable_number_of_columns. #51273 (Dmitry Kardymon). - Mais um recurso sem graça: adicionar a função
substring_index, como no Spark ou no MySQL. #51472 (李扬). - Uma tabela de sistema
jemalloc_binspara exibir estatísticas dos bins do jemalloc. Exemplo:SELECT *, size * (nmalloc - ndalloc) AS allocated_bytes FROM system.jemalloc_bins WHERE allocated_bytes > 0 ORDER BY allocated_bytes DESC LIMIT 10. Aproveite. #51674 (Alexander Gololobov). - Adicionado o formato
RowBinaryWithDefaultscom um byte extra antes de cada coluna, como sinalizador para usar o valor padrão da coluna. Fecha #50854. #51695 (Kruglov Pavel). - Adicionada a configuração
default_temporary_table_engine. É igual adefault_table_engine, mas para tabelas temporárias. #51292. #51708 (velavokr). - Adicionadas novas funções
initcap/initcapUTF8que convertem a primeira letra de cada palavra em maiúscula e as demais em minúscula. #51735 (Dmitry Kardymon). - CREATE TABLE agora oferece suporte à sintaxe
PRIMARY KEYna definição de coluna. As colunas são adicionadas ao índice primário na mesma ordem em que são definidas. #51881 (Ilya Yatsishin). - Adicionada a possibilidade de usar especificadores de formato de data e hora em nomes de arquivos de log e de log de erro, tanto em arquivos de configuração (tags
logeerrorlog) quanto em argumentos de linha de comando (--log-filee--errorlog-file). #51945 (Victor Krasnov). - Adicionada a estatística de pico de uso de memória aos cabeçalhos HTTP. #51946 (Dmitry Kardymon).
- Adicionadas novas funções
hasSubsequence(+ versõesCaseInsensitiveeUTF8) para identificar subsequências em strings. #52050 (Dmitry Kardymon). - Adicionar
array_aggcomo alias degroupArraypara compatibilidade com PostgreSQL. Fecha #52100. ### Item de documentação para alterações voltadas ao usuário. #52135 (flynn). - Adiciona
any_valuecomo alias de compatibilidade para a função de agregaçãoany. Fecha #52140. #52147 (flynn). - Adiciona a função de agregação
array_concat_aggpara compatibilidade com o BigQuery; é um alias degroupArrayArray. Fecha #52139. #52149 (flynn). - Adiciona
OCTET_LENGTHcomo alias delength. Fecha #52153. #52176 (FFFFFFFHHHHHHH). - Adicionada a função
firstLinepara extrair a primeira linha de uma string de várias linhas. Isso fecha #51172. #52209 (Mikhail Koviazin). - Implementada a formatação no estilo KQL para o tipo de dados
Interval. Isso só é necessário para compatibilidade com a linguagem de consultaKusto. #45671 (ltrk2). - Foi adicionada a consulta
SYSTEM FLUSH ASYNC INSERT QUEUE, que descarrega todas as inserções assíncronas pendentes para as tabelas de destino. Foi adicionada uma configuração do lado do servidor,async_insert_queue_flush_on_shutdown(truepor padrão), que determina se a fila de inserções assíncronas deve ser descarregada durante um encerramento controlado. A configuraçãoasync_insert_threadsagora é uma configuração do lado do servidor. #49160 (Anton Popov). - Aliases
current_databasee nova funçãocurrent_schemaspara compatibilidade com PostgreSQL. #51076 (Pedro Riera). - Adicionar aliases às funções
today(agora também disponível pelos nomescurdate/current_date) enow(current_timestamp). #52106 (Lloyd-Pottiger). - Suporte a
async_deduplication_tokenem insert assíncrono. #52136 (Han Fei). - Adicionar a nova configuração
disable_url_encoding, que permite desativar a decodificação/codificação do caminho do URI no URL engine. #52337 (Kruglov Pavel).
Melhoria de desempenho
- Ative a seleção automática do formato de serialização esparso por padrão. Isso melhora o desempenho. O formato é compatível a partir da versão 22.1. Após essa alteração, talvez não seja possível fazer downgrade para versões anteriores à 22.1. Um downgrade pode exigir a definição de
ratio_of_defaults_for_sparse_serialization=0.937555153. Você pode desativar o uso do formato de serialização esparso definindo a configuraçãoratio_of_defaults_for_sparse_serialization = 1para suas tabelas MergeTree. #49631 (Alexey Milovidov). - As configurações
move_all_conditions_to_prewhereeenable_multiple_prewhere_read_stepsforam habilitadas por padrão. #46365 (Alexander Gololobov). - Melhora o desempenho de algumas consultas com ajustes no alocador de memória. #46416 (Azat Khuzhin).
- Agora usamos tarefas de tamanho fixo em
MergeTreePrefetchedReadPool, como emMergeTreeReadPool. Além disso, agora usamos um pool de conexões para requisições ao S3. #49732 (Nikita Taranov). - Mais pushdown no lado direito do join. #50532 (Nikita Taranov).
- Melhora no
grace_hash joincom a reserva do tamanho da tabela hash (reenvio). #50875 (lgbo). - A espera pelo bloqueio em
OpenedFileCacheàs vezes podia ser perceptível. Nós o dividimos em vários sub-mapas (cada um com seu próprio bloqueio) para evitar contenção. #51341 (Nikita Taranov). - Mova as condições com colunas de chave primária para o final da cadeia do PREWHERE. A ideia é que as condições com colunas de PK provavelmente sejam usadas na análise de PK e não contribuam muito mais para a filtragem no PREWHERE. #51958 (Alexander Gololobov).
- Acelerar
COUNT(DISTINCT)para tiposStringcom SipHash inline. Os experimentos de desempenho do OnTime no dispositivo ICX (CPU Intel Xeon Platinum 8380, 80 núcleos, 160 threads) mostram que essa mudança pode trazer uma melhoria de 11,6% no QPS da consulta Q8, sem impacto nas demais. #52036 (Zhiguo Zhou). - Ativa
allow_vertical_merges_from_compact_to_wide_partspor padrão. Isso reduzirá o uso de memória durante as mesclagens. #52295 (Alexey Milovidov). - Corrige a análise incorreta de projeções, que invalida as chaves primárias. Esse problema só ocorre quando
query_plan_optimize_primary_key = 1, query_plan_optimize_projection = 1. Isso corrige #48823. Isso corrige #51173. #52308 (Amos Bird). - Reduza o número de syscalls em
FileCache::loadMetadata— isso acelera a inicialização do servidor se o cache do sistema de arquivos estiver configurado. #52435 (Raúl Marín). - Permite definir um limite inferior estrito para o tamanho do segmento de arquivo, baixando os dados restantes em segundo plano. O tamanho mínimo do segmento de arquivo (se o tamanho real do arquivo for maior) é configurado pela definição de configuração de cache
boundary_alignment, com valor padrão de4Mi. O número de threads em segundo plano é configurado pela definição de configuração de cachebackground_download_threads, com valor padrão de2. Além disso,max_file_segment_sizefoi aumentado de8Mipara32Mineste PR. #51000 (Kseniia Sumarokova). - Reduzidos os timeouts padrão do S3 de 30 segundos para 3 segundos e os de outras conexões HTTP de 180 segundos para 30 segundos. #51171 (Michael Kolupaev).
- Nova configuração
merge_tree_determine_task_size_by_prewhere_columnsadicionada. Se definida comotrue, apenas os tamanhos das colunas da seçãoPREWHEREserão considerados para determinar o tamanho da tarefa de leitura. Caso contrário, serão consideradas todas as colunas da consulta. #52606 (Nikita Taranov).
Melhoria
- Use read_bytes/total_bytes_to_read na barra de progresso em table functions s3/file/url/… para indicar melhor o progresso. #51286 (Kruglov Pavel).
- Introduz uma configuração de tabela
wait_for_unique_parts_send_before_shutdown_msque especifica por quanto tempo a réplica aguardará antes de fechar o handler interserver para envios replicados. Também corrige uma inconsistência no desligamento de tabelas e handlers interserver: agora o servidor desliga primeiro as tabelas e só depois os handlers interserver. #51851 (alesapin). - Permite o padrão SQL
FETCHsemOFFSET. Veja https://antonz.org/sql-fetch/. #51293 (Alexey Milovidov). - Permite filtrar cabeçalhos HTTP nas funções de tabela URL/S3 com a nova seção
http_forbid_headersna configuração. Há suporte tanto para correspondência exata quanto para filtros por regexp. #51038 (Nikolay Degterinsky). - Não exiba mensagens sobre
16 EiBde espaço livre nos logs, pois elas não fazem sentido. Isso fecha #49320. #49342 (Alexey Milovidov). - Verifique adequadamente o limite da função
sleepEachRow. Adicione uma configuraçãofunction_sleep_max_microseconds_per_block. Isso é necessário para o fuzzer genérico de consultas. #49343 (Alexey Milovidov). - Corrigidos dois problemas nas funções
geoHash. #50066 (李扬). - Registrar no
system.query_logas consultas de flush de async insert. #51160 (Raúl Marín). - As funções
date_diffeageagora oferecem suporte às unidades de milissegundo e microssegundo e funcionam com precisão de microssegundos. #51291 (Dmitry Kardymon). - Melhoria no parsing do caminho no clickhouse-keeper-client. #51359 (Azat Khuzhin).
- Um produto de terceiros que depende do ClickHouse (Gluten: um plugin para dobrar o desempenho do Spark SQL) tinha um bug. Esta correção evita um estouro de heap nesse produto de terceiros durante a leitura do HDFS. #51386 (李扬).
- Adiciona a opção de desabilitar a cópia nativa para S3 (configuração para BACKUP/RESTORE
allow_s3_native_copyes3_allow_native_copypara discoss3/s3_plain). #51448 (Azat Khuzhin). - Adicionar a coluna
primary_key_sizeà tabelasystem.partspara exibir o tamanho compactado da chave primária em disco. Fecha #51400. #51496 (Yarik Briukhovetskyi). - Permite executar
clickhouse-localsem procfs, sem que o diretório home exista e sem os plugins de resolução de nomes da glibc. #51518 (Alexey Milovidov). - Adicionar o placeholder
%apara o nome completo do arquivo na configuração rename_files_after_processing. #51603 (Kruglov Pavel). - Adiciona a coluna
modification_timeasystem.parts_columns. #51685 (Azat Khuzhin). - Adiciona a nova configuração
input_format_csv_use_default_on_bad_valuesao formato CSV, permitindo inserir o valor padrão quando a análise de um único campo falhar. #51716 (KevinyhZou). - Adicionada a gravação do log de falha em disco após uma falha inesperada. #51720 (Alexey Gerasimchuck).
- Corrige o comportamento da página do dashboard em que erros não relacionados à autenticação não são exibidos. Também corrige o comportamento de ‘sobreposição’ dos gráficos. #51744 (Zach Naimon).
- Permite a conversão de UUID para UInt128. #51765 (Dmitry Kardymon).
- Adicionado suporte à função
rangecom argumentos Nullable. #51767 (Dmitry Kardymon). - Converte uma condição como
toyear(x) = cemc1 <= x < c2. #51795 (Han Fei). - Melhora na compatibilidade da instrução
SHOW INDEXcom o MySQL. #51796 (Robert Schulze). - Corrigido o problema em que
use_structure_from_insertion_table_in_table_functionsnão funciona com colunasMATERIALIZEDeALIAS. Fecha #51817. Fecha #51019. #51825 (flynn). - O dicionário de cache agora solicita da origem apenas chaves distintas. Fecha #51762. #51853 (Maksim Kita).
- Corrigido o caso em que as configurações não eram aplicadas à consulta EXPLAIN quando FORMAT era especificado. #51859 (Nikita Taranov).
- Permitir SETTINGS antes de FORMAT na consulta DESCRIBE TABLE, para compatibilidade com a consulta SELECT. Fecha #51544. #51899 (Nikolay Degterinsky).
- Inteiros codificados em Var-Int (por exemplo, usados pelo protocolo nativo) agora podem utilizar toda a faixa de 64 bits. Recomenda-se que clientes de terceiros atualizem seu código de var-int de acordo. #51905 (Robert Schulze).
- Atualize os certificados quando eles forem alterados, sem precisar executar manualmente SYSTEM RELOAD CONFIG. #52030 (Mike Kot).
- Adicionada a configuração
allow_create_index_without_type, que permite ignorar consultasADD INDEXsemTYPEespecificado. As consultas SQL padrão simplesmente serão executadas com sucesso sem alterar o esquema da tabela. #52056 (Ilya Yatsishin). - As mensagens de log são gravadas em
system.text_logdesde a inicialização do servidor. #52113 (Dmitry Kardymon). - Nos casos em que o endpoint HTTP tem vários endereços IP e o primeiro deles está inacessível, uma exceção de timeout era lançada. A criação da sessão passou a tratar todos os endpoints resolvidos. #52116 (Aleksei Filatov).
- O formato de entrada Avro agora oferece suporte a Union, mesmo quando contém apenas um tipo. Corrige #52131. #52137 (flynn).
- Adiciona a configuração
optimize_use_implicit_projectionspara desativar projeções implícitas (no momento, apenas a projeçãomin_max_count). #52152 (Amos Bird). - Era possível usar a função
hasTokenpara criar um loop infinito. Agora, essa possibilidade foi eliminada. Isso fecha #52156. #52160 (Alexey Milovidov). - Criar os nós ancestrais no ZK de forma otimista. #52195 (Raúl Marín).
- Corrige #50582. Evita o erro
Not found column ... in blockem alguns casos de leitura ordenada e constantes. #52259 (Chen768959). - Verifique o quanto antes se os primitivos Geo S2 são inválidos do lado do ClickHouse. Fecha: #27090. #52260 (Nikita Mikhaylov).
- Readiciona a projeção QueryAccessInfo ausente quando
query_plan_optimize_projection = 1. Isso corrige #50183. Isso corrige #50093. #52327 (Amos Bird). - Quando
ZooKeeperRetriesControlrelança um erro, é mais útil ver astack traceoriginal, não a do próprioZooKeeperRetriesControl. #52347 (Vitaly Baranov). - Aguarde o bloqueio da replicação zero copy, mesmo que alguns discos não tenham suporte a ela. #52376 (Raúl Marín).
- Agora, a porta entre servidores só será fechada depois que as tabelas forem desativadas. #52498 (alesapin).
Funcionalidade Experimental
- A gravação de arquivos Parquet está 10x mais rápida; agora usa múltiplas threads. Quase na mesma velocidade da leitura. #49367 (Michael Kolupaev). Isso é controlado pela configuração
output_format_parquet_use_custom_encoder, que vem desabilitada por padrão, porque o recurso ainda não está ideal. - Adicionado suporte a PRQL como linguagem de consulta. #50686 (János Benjamin Antal).
- Agora é possível adicionar um nome de disco para discos personalizados. Antes, discos personalizados usavam um nome de disco interno gerado automaticamente. Agora isso pode ser feito com
disk = disk_<name>(...)(por exemplo, o disco terá o nomename). #51552 (Kseniia Sumarokova). Essa sintaxe pode ser alterada neste lançamento. - (experimental MaterializedMySQL) Corrigido travamento quando
mysqlxx::Pool::Entryé usado após ter sido desconectado. #52063 (Val Doroshchuk). - (experimental MaterializedMySQL)
CREATE TABLE ... AS SELECT.. agora é compatível com MaterializedMySQL. #52067 (Val Doroshchuk). - (experimental MaterializedMySQL) Introduzida conversão automática de tipos de texto para UTF-8 no MaterializedMySQL. #52084 (Val Doroshchuk).
- (experimental MaterializedMySQL) Agora há suporte a strings UTF-8 sem aspas em DDL para MaterializedMySQL. #52318 (Val Doroshchuk).
- (experimental MaterializedMySQL) Agora há suporte a comentários entre aspas duplas no MaterializedMySQL. #52355 (Val Doroshchuk).
- Atualizado o Intel QPL da v1.1.0 para a v1.2.0 2. Atualizado o Intel accel-config da v3.5 para a v4.0 3. Corrigido um problema em que falhas de Device IOTLB tinham grande impacto no desempenho dos aceleradores IAA. #52180 (jasperzhu).
- A configuração
session_timezone(nova na versão 23.6) foi rebaixada para experimental. #52445 (Alexey Milovidov). - Adicionado suporte ao comando
reconfigdo ZooKeeper para ClickHouse Keeper com reconfiguração incremental, que pode ser habilitada por meio da configuraçãokeeper_server.enable_reconfiguration. Há suporte para adicionar servidores, remover servidores e alterar prioridades de servidores. #49450 (Mike Kot). Suspeita-se que essa funcionalidade esteja incompleta.
Melhoria de Build/Testes/Empacotamento
- Adiciona builds experimentais do ClickHouse para Linux RISC-V 64 à CI. #31398 (Alexey Milovidov).
- Adiciona uma verificação de teste de integração com o analisador habilitado. #50926 #52210 (Dmitry Novik).
- Builds reprodutíveis para Rust. #52395 (Azat Khuzhin).
- Atualiza as dependências do Cargo. #51721 (Raúl Marín).
- Faz com que a função
CHColumnToArrowColumn::fillArrowArrayWithArrayColumnDatafuncione com arrays Nullable, que não são possíveis no ClickHouse, mas são necessários para o Gluten. #52112 (李扬). - Atualizamos a biblioteca CCTZ para a branch master, mas não há mudanças visíveis para o usuário. #52124 (Alexey Milovidov).
- A tabela
system.licensesagora inclui a biblioteca Poco, que passou por um hard fork. Isso fecha #52066. #52127 (Alexey Milovidov). - Verifica se não há casos de pontuação incorreta: espaço em branco antes de uma vírgula, como em
Hello ,worldem vez deHello, world. #52549 (Alexey Milovidov).
Correção de bug (mau funcionamento perceptível ao usuário em um lançamento estável oficial)
- Corrigida a
syncTablesdo MaterializedPostgreSQL #49698 (Kseniia Sumarokova). - Corrigida a projeção com optimize_aggregators_of_group_by_keys #49709 (Amos Bird).
- Correção do optimize_skip_unused_shards com junções #51037 (Azat Khuzhin).
- Corrige formatDateTime() com DateTime64 negativo fracionário #51290 (Dmitry Kardymon).
- As funções
hasToken*estavam totalmente erradas. Foi adicionado um teste para #43358 #51378 (Alexey Milovidov). - Corrige a otimização que move funções antes da ordenação. #51481 (Nikolai Kochetov).
- Corrige incompatibilidade na estrutura de bloco em Pipe::unitePipes para FINAL #51492 (Nikita Taranov).
- Corrige falha SIGSEGV em clusters com peso zero em todos os shards (corrige INSERT INTO FUNCTION clusterAllReplicas()) #51545 (Azat Khuzhin).
- Corrigido o timeout em requisições hedged #51582 (Azat Khuzhin).
- Correção de erro lógico em ANTI join com NULL #51601 (vdimir).
- Correção para mover as condições ‘IN’ para PREWHERE #51610 (Alexander Gololobov).
- Não aplicar o PredicateExpressionsOptimizer para ASOF/ANTI JOIN #51633 (vdimir).
- Corrigido o async insert com desduplicação para ReplicatedMergeTree usando algoritmos de merge #51676 (Antonio Andelic).
- Corrigida a leitura a partir de uma coluna vazia em
parseSipHashKey#51804 (Nikita Taranov). - Corrige falha de segmentação ao criar uma tabela EmbeddedRocksdb inválida #51847 (Duc Canh Le).
- Corrigidas inserções em tabelas do MongoDB #51876 (Nikolay Degterinsky).
- Corrige deadlock durante o encerramento do DatabaseCatalog #51908 (Alexander Tokmakov).
- Corrige erro nos operadores de subconsulta #51922 (Alexey Milovidov).
- Corrigida a conexão assíncrona com hosts com múltiplos IPs #51934 (Kruglov Pavel).
- Não remova as entradas após ActionsDAG::merge #51947 (Nikolai Kochetov).
- Verifique o
refcountemRemoveManyObjectStorageOperation::finalize, em vez deexecute#51954 (vdimir). - Permite UDFs paramétricas #51964 (Alexey Milovidov).
- Pequena correção em
toDateTime64()para datas após 2283-12-31 #52130 (Andrey Zvonov). - Corrigida a tupla em ORDER BY de funções de janela #52145 (Alexey Milovidov).
- Corrige a análise incorreta de projeção quando a expressão de agregação contém funções monotônicas #52151 (Amos Bird).
- Corrigido erro nas funções
groupArrayMoving#52161 (Alexey Milovidov). - Desabilitado o Direct JOIN para dicionário de intervalo #52187 (Duc Canh Le).
- Corrige o teste de mutações travadas (e uma condição de corrida extremamente rara) #52197 (alesapin).
- Corrige uma condição de corrida no disco Web #52211 (Kseniia Sumarokova).
- Corrige condição de corrida em Connection::setAsyncCallback ao receber pacote desconhecido do servidor #52219 (Kruglov Pavel).
- Corrige a exclusão de dados temporários na inicialização e adiciona teste #52275 (vdimir).
- Não use projeções minmax_count para contar colunas Nullable #52297 (Amos Bird).
- MergeTree/ReplicatedMergeTree devem usar o fuso horário do servidor para registros de log #52325 (Azat Khuzhin).
- Corrige view parametrizada com CTE e múltiplos usos #52328 (SmitaRKulkarni).
- Desabilitar modelos de expressão para intervalos de tempo #52335 (Alexander Tokmakov).
- Corrigido
apply_snapshotno Keeper #52358 (Antonio Andelic). - Atualização de build-osx.md #52377 (AlexBykovski).
- Corrige o travamento de
countSubstringscom needle vazio e haystack em coluna #52409 (Sergei Trifonov). - Corrige projeção normal com tabela Merge #52432 (Amos Bird).
- Correção de possível double-free no Aggregator #52439 (Nikita Taranov).
- Corrigida a inserção na engine Buffer #52440 (Vasily Nemkov).
- A implementação de AnyHash não estava em conformidade. #52448 (Alexey Milovidov).
- Verificação da profundidade de recursão em OptimizedRegularExpression #52451 (Alexey Milovidov).
- Corrigida a condição de corrida em DatabaseReplicated::startupTables()/canExecuteReplicatedMetadataAlter() #52490 (Azat Khuzhin).
- Correção de abort na função
transform#52513 (Alexey Milovidov). - Corrige a exclusão leve após a remoção de uma projeção #52517 (Anton Popov).
- Corrige um possível erro “Cannot drain connections: cancel first” #52585 (Kruglov Pavel).
Lançamento do ClickHouse 23.6, 2023-06-29. Apresentação, Vídeo
Alteração incompatível com versões anteriores
- Removida a funcionalidade
do_not_evict_index_and_mark_filesdo cache do sistema de arquivos. Essa funcionalidade só piorava as coisas. #51253 (Kseniia Sumarokova). - Removido o suporte a ALTER para a visualização em tempo real experimental. #51287 (Alexey Milovidov).
- Reduzidos os valores padrão de
http_max_field_value_sizeehttp_max_field_name_sizepara 128 KiB. #51163 (Mikhail f. Shiryaev). - As métricas de CGroups relacionadas à CPU foram substituídas por uma única métrica,
CGroupMaxCPU, para facilitar o uso. As métricas de uso de CPUNormalizedpassarão a ser normalizadas com base nos limites de CGroups, em vez do número total de CPUs, quando esses limites estiverem definidos. Isso fecha #50836. #50835 (Alexey Milovidov).
Nova funcionalidade
- A função
transform, assim comoCASEcom correspondência de valores, passou a oferecer suporte a todos os tipos de dados. Isso fecha #29730. Isso fecha #32387. Isso fecha #50827. Isso fecha #31336. Isso fecha #40493. #51351 (Alexey Milovidov). - Adicionada a opção
--rename_files_after_processing <pattern>. Isso fecha #34207. #49626 (alekseygolub). - Adicionado suporte ao modificador
TRUNCATEna cláusulaINTO OUTFILE. Recomenda-se usarAPPENDouTRUNCATEcomINTO OUTFILEquando o arquivo já existir. #50950 (alekar). - Adicionados o mecanismo de tabela
Redise a função de tabelaredis. Isso permite consultar servidores Redis externos. #50150 (JackyWoo). - Permite ignorar arquivos vazios nas funções de tabela file/s3/url/hdfs usando as configurações
s3_skip_empty_files,hdfs_skip_empty_files,engine_file_skip_empty_files,engine_url_skip_empty_files. #50364 (Kruglov Pavel). - Adiciona uma nova configuração chamada
use_mysql_types_in_show_columnspara alterar a instrução SQLSHOW COLUMNS, de modo que exiba tipos equivalentes do MySQL quando um cliente estiver conectado pela porta de compatibilidade com MySQL. #49577 (Thomas Panetti). - O clickhouse-client agora pode ser chamado com uma string de conexão em vez de “—host”, “—port”, “—user” etc. #50689 (Alexey Gerasimchuck).
- Adiciona a configuração
session_timezone; ela é usada como fuso horário padrão de uma sessão quando não for especificado explicitamente. #44149 (Andrey Zvonov). - O codec DEFLATE_QPL agora é controlado pela configuração do servidor “enable_deflate_qpl_codec” (padrão: false) em vez da configuração “allow_experimental_codecs”. Isso faz com que o DEFLATE_QPL deixe de ser experimental. #50775 (Robert Schulze).
Melhoria de desempenho
- Melhorado o agendamento das tarefas de seleção de merge e limpeza em
ReplicatedMergeTree. As tarefas não serão executadas com muita frequência quando não houver nada para mesclar ou limpar. Adicionadas as configuraçõesmax_merge_selecting_sleep_ms,merge_selecting_sleep_slowdown_factor,max_cleanup_delay_periodecleanup_thread_preferred_points_per_iteration. Isso deve fechar #31919. #50107 (Alexander Tokmakov). - Permite push down de filtro em cross join. #50605 (Han Fei).
- Melhora o desempenho com o QueryProfiler habilitado usando
timer_idlocal da thread em vez de um objeto global. #48778 (Jiebin Sun). - Reescreve o formato de entrada/saída CapnProto para melhorar o desempenho. Mapeia nomes de colunas e campos do CapnProto sem diferenciar maiúsculas de minúsculas e corrige a leitura/gravação de campos de estruturas aninhadas. #49752 (Kruglov Pavel).
- Otimiza o desempenho de gravação em Parquet para threads paralelas. #50102 (Hongbin Ma).
- Desabilita
parallelize_output_from_storagespara o processamento de MATERIALIZED VIEWs e storages com apenas um bloco. #50214 (Azat Khuzhin). - Incorpora o PR #46558. Evita a permutação de blocos durante a ordenação se o bloco já estiver ordenado. #50697 (Alexey Milovidov, Maksim Kita).
- Faz várias solicitações de listagem ao ZooKeeper em paralelo para acelerar a leitura da tabela system.zookeeper. #51042 (Alexander Gololobov).
- Acelera a inicialização das tabelas de lookup de DateTime para fusos horários. Isso deve reduzir o tempo de inicialização/conexão do clickhouse-client, especialmente em builds de depuração, já que essa etapa é relativamente pesada. #51347 (Alexander Gololobov).
- Corrige a lentidão em lagos de dados causada por solicitações HEAD síncronas. (Relacionado à lentidão de Iceberg/DeltaLake/Hudi quando há muitos arquivos). #50976 (Kseniia Sumarokova).
- Não lê todas as colunas da tabela à direita em GLOBAL JOIN. #50721 (Nikolai Kochetov).
Funcionalidade Experimental
- Suporte a réplicas paralelas com o analisador. #50441 (Raúl Marín).
- Adiciona uma espera aleatória antes da execução de grandes merges/mutações para distribuir a carga de forma mais uniforme entre as réplicas em caso de replicação zero-copy. #51282 (alesapin).
- Não replica consultas
ALTER PARTITIONnem mutações por meio do banco de dadosReplicatedse ele tiver apenas um shard e a tabela subjacente forReplicatedMergeTree. #51049 (Alexander Tokmakov).
Melhoria
- Torne os limites para “too many parts” mais atuais. Reintroduza a contrapressão durante consultas de insert de longa duração. #50856 (Alexey Milovidov).
- Permite converter endereços IPv6 em endereços IPv4 no CIDR ::ffff:0:0/96 (endereços IPv4 mapeados). #49759 (Yakov Olkhovskiy).
- Atualizado o protocolo do MongoDB para oferecer suporte ao MongoDB 5.1 e versões mais recentes. O suporte a versões com o protocolo antigo (<3.6) foi preservado. Fecha #45621, #49879. #50061 (Nikolay Degterinsky).
- Adiciona a configuração
input_format_max_bytes_to_read_for_schema_inferencepara limitar o número de bytes lidos na inferência de esquema. Fecha #50577. #50592 (Kruglov Pavel). - Respeita a configuração
input_format_null_as_defaultna inferência de esquema. #50602 (Kruglov Pavel). - Permite ignorar linhas vazias no final nos formatos CSV/TSV/CustomSeparated por meio das configurações
input_format_csv_skip_trailing_empty_lines,input_format_tsv_skip_trailing_empty_lineseinput_format_custom_skip_trailing_empty_lines(desabilitadas por padrão). Fecha #49315. #50635 (Kruglov Pavel). - As funções “toDateOrDefault|OrNull” e “accuateCast[OrDefault|OrNull]” agora fazem o parse correto de argumentos numéricos. #50709 (Dmitry Kardymon).
- Suporte a CSV com delimitadores de campo de espaço em branco ou
\t, e esses delimitadores têm suporte no Spark. #50712 (KevinyhZou). - As configurações
number_of_mutations_to_delayenumber_of_mutations_to_throwagora estão habilitadas por padrão, com os valores 500 e 1000, respectivamente. #50726 (Anton Popov). - O dashboard mostra corretamente os valores ausentes. Isso encerra #50831. #50832 (Alexey Milovidov).
- Foi adicionada a possibilidade de usar argumentos de data e hora no formato de timestamp do syslog nas funções
parseDateTimeBestEffort*eparseDateTime64BestEffort*. #50925 (Victor Krasnov). - O parâmetro de linha de comando “—password” no clickhouse-client agora só pode ser especificado uma vez. #50966 (Alexey Gerasimchuck).
- Use
hash_of_all_filesdesystem.partspara verificar a identidade das partes durante backups no cluster. #50997 (Vitaly Baranov). - A tabela de sistema zookeeper_connection connected_time identifica o momento em que a conexão é estabelecida (formato padrão), e session_uptime_elapsed_seconds é adicionada para indicar a duração da sessão de conexão estabelecida (em segundos). #51026 (郭小龙).
- Melhora a barra de progresso para as funções de tabela file/s3/hdfs/url, usando o tamanho dos fragmentos dos dados de origem e a contagem incremental do tamanho total em cada thread. Corrige a barra de progresso para as funções *Cluster. Isso encerra #47250. #51088 (Kruglov Pavel).
- Adicionado total_bytes_to_read ao pacote Progress no protocolo TCP para melhorar a barra de progresso. #51158 (Kruglov Pavel).
- Verificação aprimorada de partes de dados em discos com cache do sistema de arquivos. #51164 (Anton Popov).
- Corrige o valor de current_elements_num, que às vezes fica incorreto, no cache de FS. #51242 (Kseniia Sumarokova).
Melhoria de compilação/testes/empacotamento
- Adiciona um
keeper-clientembutido ao binário standalone do Keeper. #50964 (pufit). - A versão real do LZ4 agora é usada. #50621 (Nikita Taranov).
- O servidor ClickHouse passará a imprimir a lista de configurações alteradas em erros fatais. Isso corrige #51137. #51138 (Alexey Milovidov).
- Permite compilar o ClickHouse com clang-17. #51300 (Alexey Milovidov).
- A verificação do SQLancer agora é considerada estável, pois os bugs que ela acionava foram corrigidos. Agora, falhas na verificação do SQLancer serão reportadas como status de verificação com falha. #51340 (Ilya Yatsishin).
- Divide o
RUNenorme no Dockerfile em condicionais menores. Instala as ferramentas necessárias sob demanda na mesma camadaRUNe as remove em seguida. Atualiza o sistema operacional apenas uma vez no início. Usa uma forma moderna de verificar o repositório assinado. Rebaixa o repositório base para ubuntu:20.04 para corrigir problemas em versões mais antigas do Docker. Atualiza a versão do golang para corrigir vulnerabilidades no golang. #51504 (Mikhail f. Shiryaev).
Correção de bug (comportamento incorreto perceptível ao usuário em um lançamento estável oficial)
- Informar corretamente o status de carregamento de dicionários executáveis #48775 (Anton Kozlov).
- Mutação correta de índices de omissão e projeções #50104 (Amos Bird).
- Limpeza de partes sendo movidas #50489 (vdimir).
- Correção da retrocompatibilidade do hash de tipos IP em funções de agregação #50551 (Yakov Olkhovskiy).
- Corrigida a contagem incorreta de linhas retornada por tabelas da família Log após TRUNCATE #50585 (flynn).
- Corrige um erro na mesclagem paralela do
uniqExact#50590 (Nikita Taranov). - Revertidas alterações recentes no grace hash join #50699 (vdimir).
- Cache de consultas: tentativa de corrigir cast incorreto de
ColumnConstparaColumnVector<char8_t>#50704 (Robert Schulze). - Evite armazenar no Keeper logs que contenham uma operação desconhecida #50751 (Antonio Andelic).
- Suporte do SummingMergeTree a DateTime64 #50797 (Jordi Villar).
- Adicionada configuração de compatibilidade para timezones não constantes #50834 (Robert Schulze).
- Corrige o cálculo do hash dos parâmetros LDAP nas entradas de cache #50865 (Julian Maicher).
- Fallback para parsing de inteiro grande a partir de String, em vez de exceção, no formato Parquet #50873 (Kruglov Pavel).
- Corrige a verificação excessivamente frequente do arquivo de bloqueio ao gravar um backup #50889 (Vitaly Baranov).
- Não aplique projeção se a leitura em ordem estiver ativada. #50923 (Nikolai Kochetov).
- Corrigida a condição de corrida no iterador do Azure Blob Storage #50936 (SmitaRKulkarni).
- Corrige a propagação errônea de
sort_descriptionemCreatingSets#50955 (Nikita Taranov). - Corrigida a análise de metadados opcionais do Iceberg v2 #50974 (Kseniia Sumarokova).
- MaterializedMySQL: Manter parênteses para sobrescritas de tabela vazias #50977 (Val Doroshchuk).
- Corrige travamento em BackupCoordinationStageSync::setError() #51012 (Vitaly Baranov).
- Corrige uma falha sutil no copy-on-write do dicionário ColumnLowCardinality #51064 (Michael Kolupaev).
- Gerar IVs seguros #51086 (Salvatore Mesoraca).
- Corrige o cache de consultas ineficaz em SELECTs com subconsultas #51132 (Robert Schulze).
- Corrigido o índice Set em comparações constantes com Nullable. #51205 (Nikolai Kochetov).
- Corrige um travamento nas funções s3 e s3Cluster #51209 (Nikolay Degterinsky).
- Corrige uma falha relacionada a expressões compiladas #51231 (LiuNeng).
- Correção de uso após liberação de memória em StorageURL ao alternar URLs #51260 (Michael Kolupaev).
- Atualização da verificação de view parametrizada #51272 (SmitaRKulkarni).
- Corrige a gravação múltipla do mesmo arquivo no backup #51299 (Vitaly Baranov).
- Corrigida falha do fuzzer no ActionsDAG #51301 (Alexey Milovidov).
- Removido código desnecessário da função
transform#51350 (Alexey Milovidov).
Lançamento do ClickHouse 23.5, 2023-06-08. Apresentação, Vídeo
Notas de atualização
- Compactar marcas e a chave primária por padrão. Isso reduz significativamente o tempo de consulta em cache frio. Notas de atualização: o suporte a marcas compactadas e chave primária compactada foi adicionado na versão 22.9. Se você ativou marcas compactadas ou a chave primária compactada, ou instalou a versão 23.5 ou mais recente, que ativa marcas compactadas ou a chave primária compactada por padrão, não será possível fazer downgrade para a versão 22.8 ou anterior. Você também pode desativar explicitamente as marcas compactadas ou as chaves primárias compactadas especificando as configurações
compress_marksecompress_primary_keyna seção<merge_tree>do arquivo de configuração do servidor. Notas de atualização: Se você estiver atualizando de versões anteriores à 22.9, deverá atualizar todas as réplicas de uma vez, ou desativar a compactação antes da atualização, ou atualizar por meio de uma versão intermediária em que as marcas compactadas são compatíveis, mas não ativadas por padrão, como a 23.3. #42587 (Alexey Milovidov). - Fazer com que o armazenamento de objetos local funcione de forma consistente com o armazenamento de objetos S3, corrigir o problema com append (fecha #48465) e torná-lo configurável como armazenamento independente. A alteração não é compatível com versões anteriores porque o cache sobre o armazenamento de objetos local não é compatível com versões anteriores. #48791 (Kseniia Sumarokova).
- O recurso experimental “in-memory data parts” foi removido. O formato de dados ainda é compatível, mas as configurações são no-op, e partes compact ou wide serão usadas no lugar. Isso fecha #45409. #49429 (Alexey Milovidov).
- Os valores padrão das configurações
parallelize_output_from_storageseinput_format_parquet_preserve_orderforam alterados. Isso permite que o ClickHouse reordene linhas ao ler arquivos (por exemplo, CSV ou Parquet), melhorando bastante o desempenho em muitos casos. Para restaurar o comportamento antigo de preservação da ordem, useparallelize_output_from_storages = 0,input_format_parquet_preserve_order = 1. #49479 (Michael Kolupaev). - Tornar as projeções prontas para produção. Adiciona a configuração
optimize_use_projectionspara controlar se as projeções serão selecionadas para consultas SELECT. A configuraçãoallow_experimental_projection_optimizationestá obsoleta e não faz nada. #49719 (Alexey Milovidov). - Marcar
joinGetcomo não determinístico (assim comodictGet). Isso permite usá-los em mutações sem necessidade de uma configuração extra. #49843 (Azat Khuzhin). - Reverter a alteração “
groupArrayreturns cannot be nullable” (devido à quebra de compatibilidade binária degroupArray/groupArrayLast/groupArraySamplesobre tiposNullable, o que provavelmente levará aTOO_LARGE_ARRAY_SIZEouCANNOT_READ_ALL_DATA). #49971 (Azat Khuzhin). - A configuração
enable_memory_bound_merging_of_aggregation_resultsestá ativada por padrão. Se você estiver atualizando de uma versão anterior à 22.12, recomendamos definir esse sinalizador comofalseaté a atualização ser concluída. #50319 (Nikita Taranov).
Nova funcionalidade
- Adicionados o mecanismo de armazenamento AzureBlobStorage e a função de tabela azureBlobStorage. O conjunto de funcionalidades suportadas é muito semelhante ao da função de tabela/do mecanismo de armazenamento S3 [#50604] (https://github.com/ClickHouse/ClickHouse/pull/50604) (alesapin) (SmitaRKulkarni.
- Adicionado o cliente CLI nativo do ClickHouse Keeper, disponível como
clickhouse keeper-client#47414 (pufit). - Adicionada a função de tabela
urlCluster. Refatoradas todas as funções de tabela *Cluster para reduzir a duplicação de código. A inferência de esquema agora funciona para todas as assinaturas possíveis das funções *Cluster e para coleções nomeadas. Fecha #38499. #45427 (attack204), Pavel Kruglov. - O cache de consultas agora pode ser usado em cargas de trabalho de produção. #47977 (Robert Schulze). O cache de consultas agora pode oferecer suporte a consultas com
totalse o modificadorextremes. #48853 (Robert Schulze). Tornar a configuraçãoallow_experimental_query_cacheobsoleta para manter a compatibilidade com versões anteriores. Ela foi removida em https://github.com/ClickHouse/ClickHouse/pull/47977. #49934 (Timur Solodovnikov). - Os tipos de dados geográficos (
Point,Ring,PolygoneMultiPolygon) estão prontos para produção. #50022 (Alexey Milovidov). - Adiciona inferência de esquema aos motores de tabela do PostgreSQL, MySQL, MeiliSearch e SQLite. Fecha #49972. #50000 (Nikolay Degterinsky).
- O tipo de senha em consultas como
CREATE USER u IDENTIFIED BY 'p'será definido automaticamente de acordo com a configuraçãodefault_password_typeno arquivoconfig.xmldo servidor. Fecha #42915. #44674 (Nikolay Degterinsky). - Adiciona o tipo de autenticação de senha bcrypt. Fecha #34599. #44905 (Nikolay Degterinsky).
- Adiciona a nova palavra-chave
INTO OUTFILE 'file.txt' APPEND. #48880 (alekar). - Adicionada a tabela
system.zookeeper_connection, que exibe informações sobre as conexões do Keeper. #45245 (mateng915). - Adicionada a nova função
generateRandomStructure, que gera uma estrutura de tabela aleatória. Ela pode ser usada em combinação com a table functiongenerateRandom. #47409 (Kruglov Pavel). - Permite o uso de
CASEsem uma cláusulaELSEe estendetransformpara lidar com mais tipos. Também corrige alguns problemas que faziamtransform()retornar resultados incorretos quando tipos decimais eram misturados com outros tipos numéricos. #48300 (Salvatore Mesoraca). Fecha #2655. Fecha #9596. Fecha #38666. - Adicionada criptografia no lado do servidor com chaves KMS para tabelas S3 e a configuração
headerpara discos S3. Fecha #48723. #48724 (Johann Gan). - Adiciona o MemoryTracker para as tarefas em segundo plano (merges e mutações). Introduz as configurações
merges_mutations_memory_usage_soft_limitemerges_mutations_memory_usage_to_ram_ratio, que representam o limite suave de memória para merges e mutações. Se esse limite for atingido, o ClickHouse não agendará novas tarefas de merge ou mutação. Também introduz a métricaMergesMutationsMemoryTrackingpara permitir observar o uso atual de memória das tarefas em segundo plano. Reenvio de #46089. Fecha #48774. #48787 (Dmitry Novik). - A função
dotProductagora funciona com Array. #49050 (FFFFFFFHHHHHHH). - Adiciona suporte à instrução
SHOW INDEXpara melhorar a compatibilidade com o MySQL. #49158 (Robert Schulze). - Adicionado suporte às colunas virtuais
_filee_pathna função de tabelaurl. - Melhorada a mensagem de erro da função de tabelaurl. - resolve #49231 - resolve #49232. #49356 (Ziyi Tan). - Adicionado o campo
grantsao arquivo users.xml, permitindo especificar permissões para usuários. #49381 (pufit). - Suporte a FULL/RIGHT JOIN com o algoritmo grace hash join. #49483 (lgbo).
- O modificador
WITH FILLagrupa o preenchimento com base no prefixo de ordenação. É controlado pela configuraçãouse_with_fill_by_sorting_prefix(habilitada por padrão). Relacionado a #33203#issuecomment-1418736794. #49503 (Igor Nikonov). - Clickhouse-client agora aceita consultas após “—multiquery” quando “—query” (ou “-q”) não é informado. exemplo: clickhouse-client —multiquery “select 1; select 2;”. #49870 (Alexey Gerasimchuk).
- Adiciona um
handshake_timeoutseparado para receber o pacote Hello da réplica. Fecha #48854. #49948 (Kruglov Pavel). - Adicionada a função “space”, que repete um espaço o número de vezes especificado. #50103 (Robert Schulze).
- Foi adicionada a opção —input_format_csv_trim_whitespaces. #50215 (Alexey Gerasimchuk).
- Permite que a função
dictGetAllpara dicionários do tipo regexp tree retorne valores de múltiplas correspondências como arrays. Fecha #50254. #50255 (Johann Gan). - Adicionada a função
toLastDayOfWeekpara arredondar para cima uma data ou uma data com hora até o sábado ou domingo mais próximo. #50315 (Victor Krasnov). - Capacidade de ignorar um skip index ao especificar
ignore_data_skipping_indices. #50329 (Boris Kuschel). - Adiciona a tabela
system.user_processese a consultaSHOW USER PROCESSESpara exibir informações de memória e ProfileEvents no nível do usuário. #50492 (János Benjamin Antal). - Adicionadas as configurações de servidor e de format
display_secrets_in_show_and_selectpara exibir segredos de tabelas, bancos de dados, table functions e dicionários. Adicionado o privilégiodisplaySecretsInShowAndSelect, que controla quais usuários podem visualizar segredos. #46528 (Mike Kot). - Permite configurar uma ROW POLICY para todas as tabelas de um banco de dados. #47640 (Ilya Golshtein).
Melhoria de desempenho
- Comprime as marcas e a chave primária por padrão. Isso reduz significativamente o tempo de consultas a frio. Notas de atualização: o suporte a marcas e chave primária comprimidas foi adicionado na versão 22.9. Se você ativou a compressão de marcas ou da chave primária, ou instalou a versão 23.5 ou posterior, na qual a compressão de marcas e da chave primária vem ativada por padrão, não será possível fazer downgrade para a versão 22.8 ou anterior. Você também pode desativar explicitamente a compressão de marcas ou de chaves primárias especificando as configurações
compress_marksecompress_primary_keyna seção<merge_tree>do arquivo de configuração do servidor. #42587 (Alexey Milovidov). - Nova configuração s3_max_inflight_parts_for_one_file define o limite de partes carregadas simultaneamente em uma solicitação de upload multipart para um único arquivo. #49961 (Sema Checherinda).
- Ao ler vários arquivos, reduza o número de threads de parsing em paralelo para cada arquivo. Resolve #42192. #46661 (SmitaRKulkarni).
- Use a projeção agregada apenas se ela ler menos grânulos do que na leitura normal. Isso deve ajudar caso a consulta atinja a PK da tabela, mas não a projeção. Corrige #49150. #49417 (Nikolai Kochetov).
- Não armazene blocos no
ANYhash join se nada for inserido. #48633 (vdimir). - Corrige o combinador de agregação
-Ifquando compilado com JIT e habilita a compilação JIT de funções de agregação. Fecha #48120. #49083 (Igor Nikonov). - Para ler tabelas remotas, usamos tarefas menores (em vez de ler a parte inteira) para que o roubo de tarefas funcione * o tamanho da tarefa é determinado pelo tamanho das colunas a serem lidas * sempre use buffers de 1 MB para leitura do S3 * os limites dos segmentos de cache são alinhados a 1 MB para que tenham um tamanho adequado mesmo com tarefas pequenas. isso também deve evitar a fragmentação. #49287 (Nikita Taranov).
- Configurações introduzidas: -
merge_max_block_size_bytespara limitar a quantidade de memória usada em operações em segundo plano. -vertical_merge_algorithm_min_bytes_to_activatepara acrescentar outra condição para ativar mesclagens verticais. #49313 (Nikita Mikhaylov). - O tamanho padrão do buffer de leitura para ler do filesystem local foi alterado para um valor um pouco melhor. Além disso, duas novas configurações foram introduzidas:
max_read_buffer_size_local_fsemax_read_buffer_size_remote_fs. #49321 (Nikita Taranov). - Melhorado o uso de memória e a velocidade dos dicionários
SPARSE_HASHED/HASHED(por exemplo,SPARSE_HASHEDagora consome 2.6x menos memória e é ~2x mais rápido). #49380 (Azat Khuzhin). - Otimize as tabelas
system.query_logesystem.query_thread_logaplicandoLowCardinalityquando for apropriado. As consultas nessas tabelas serão mais rápidas. #49530 (Alexey Milovidov). - Melhor desempenho na leitura de arquivos
Parquetlocais (por meio de leitura paralela). #49539 (Michael Kolupaev). - Melhora o desempenho de
RIGHT/FULL JOINem até 2 vezes em determinados cenários, especialmente ao combinar uma tabela pequena à esquerda com uma tabela grande à direita. #49585 (lgbo). - Melhoria de 11% no desempenho do BLAKE3 ao habilitar LTO para Rust. #49600 (Azat Khuzhin). Agora ele está no mesmo nível do C++.
- Otimize a estrutura de
system.opentelemetry_span_log. UseLowCardinalityonde for apropriado. Embora essa tabela em geral seja bastante mal projetada (ela usa o tipo de dados Map até mesmo para atributos comuns), ela ficará um pouco melhor. #49647 (Alexey Milovidov). - Tentar reservar previamente o tamanho da tabela hash no join
grace_hash. #49816 (lgbo). - Mesclagem paralela dos estados de
uniqExactIf. Fecha #49885. #50285 (flynn). - Melhoria no Keeper: adição da solicitação
CheckNotExistsao Keeper, o que melhora o desempenho de tabelas Replicated. #48897 (Antonio Andelic). - Melhorias de desempenho do Keeper: evita a serialização da mesma requisição duas vezes durante o processamento. Armazena em cache os resultados da desserialização de requisições grandes. Controlado pela nova configuração de coordenação
min_request_size_for_cache. #49004 (Antonio Andelic). - Redução no número de solicitações
Listao ZooKeeper ao selecionar partes para merge quando muitas partições não têm nada para mesclar. #49637 (Alexander Tokmakov). - Reformulação do bloqueio no cache do FS #44985 (Kseniia Sumarokova).
- Desabilita réplicas paralelas puras quando a otimização trivial de contagem é possível. #50594 (Raúl Marín).
- Não envie requisição HEAD para todas as chaves na inferência de esquema do Iceberg, apenas para as chaves usadas para ler dados. #50203 (Kruglov Pavel).
- A configuração
enable_memory_bound_merging_of_aggregation_resultsvem habilitada por padrão. #50319 (Nikita Taranov).
Funcionalidade Experimental
- O codec
DEFLATE_QPLreduz a versão mínima de SIMD para SSE 4.2. alteração na documentação do qpl - o Intel® QPL usa um despachante de kernels em tempo de execução e uma verificação de CPUID para escolher a melhor implementação disponível (sse/avx2/avx512) - o arquivo CMake do build do qpl no ClickHouse foi reestruturado para se alinhar à versão upstream mais recente do qpl. #49811 (jasperzhu). - Adicionado suporte inicial para fazer JOINs com réplicas paralelas puras. #49544 (Raúl Marín).
- Mais paralelismo na remoção de partes
Outdatedcom “replicação zero-copy”. #49630 (Alexander Tokmakov). - Réplicas paralelas: 1) Corrigido um erro
NOT_FOUND_COLUMN_IN_BLOCKao usar réplicas paralelas com armazenamento não replicado, com a configuraçãoparallel_replicas_for_non_replicated_merge_treedesabilitada 2) Agoraallow_experimental_parallel_reading_from_replicastem 3 valores possíveis - 0, 1 e 2. 0 - desabilitado, 1 - habilitado, com desativação silenciosa em caso de falha (no caso de FINAL ou JOIN), 2 - habilitado, lança uma exceção em caso de falha. 3) Se o modificador FINAL for usado em uma consulta SELECT e as réplicas paralelas estiverem habilitadas, o ClickHouse tentará desabilitá-las seallow_experimental_parallel_reading_from_replicasestiver definido como 1; caso contrário, lançará uma exceção. #50195 (Nikita Mikhaylov). - Quando as réplicas paralelas estiverem habilitadas, elas sempre ignorarão servidores indisponíveis (o comportamento é controlado pela configuração
skip_unavailable_shards, habilitada por padrão e que só pode ser desabilitada). Isso fecha: #48565. #50293 (Nikita Mikhaylov).
Melhoria
- O comando
BACKUPnão descriptografa dados de discos criptografados ao fazer um backup. Em vez disso, os dados serão armazenados no backup em formato criptografado. Esses backups só podem ser restaurados em um disco criptografado com a mesma lista de chaves de criptografia (ou uma lista ampliada). #48896 (Vitaly Baranov). - Adicionada a possibilidade de usar tabelas temporárias na cláusula
FROMde ATTACH PARTITION FROM e REPLACE PARTITION FROM. #49436 (Roman Vasin). - Adicionada a configuração
async_insertpara tabelasMergeTree. Ela tem o mesmo significado da configuraçãoasync_insertno nível da consulta e habilita inserções assíncronas para uma tabela específica. Observação: ela não tem efeito em consultas de insert doclickhouse-client; nesse caso, use a configuração no nível da consulta. #49122 (Anton Popov). - Adicionado suporte a sufixos de tamanho nos parâmetros da instrução de criação de QUOTA. #49087 (Eridanus).
- Estende
first_valueelast_valuepara aceitarem NULL. #46467 (lgbo). - Adiciona os aliases
str_to_mapemapFromStringparaextractKeyValuePairs. Fecha https://github.com/clickhouse/clickhouse/issues/47185. #49466 (flynn). - Adicionado suporte à versão 2 do CGroup para métricas assíncronas sobre uso e disponibilidade de memória. Isso fecha #37983. #45999 (sichenzhao).
- As funções de tabela de cluster devem sempre ignorar shards indisponíveis. Fecha #46314. #46765 (zk_kiger).
- Permitir que arquivos CSV contenham colunas vazias no cabeçalho. #47496 (你不要过来啊).
- Adicionada a função de tabela
gcs, compatível com S3, do Google Cloud Storage. Assim como as funçõesossecosn, ela é apenas um alias da função de tabelas3e não adiciona nenhum recurso novo. #47815 (Kuba Kaflik). - Adicionada a possibilidade de usar tamanho estrito de partes para S3 (compatibilidade com o armazenamento S3 CloudFlare R2). #48492 (Azat Khuzhin).
- Adicionadas novas colunas com informações sobre as réplicas do banco de dados
Replicatedemsystem.clusters:database_shard_name,database_replica_name,is_active. Adicionada uma cláusula opcionalFROM SHARDà consultaSYSTEM DROP DATABASE REPLICA. #48548 (Alexander Tokmakov). - Adicionada uma nova coluna
zookeeper_nameem system.replicas para indicar em qual cluster (auxiliar) do ZooKeeper os metadados da tabela replicada estão armazenados. #48549 (cangyin). - O operador
INoferece suporte à comparação entreDateeDate32. Fecha #48736. #48806 (flynn). - Suporte a códigos de apagamento no
HDFS, autor: @M1eyu2018, @tomscut. #48833 (M1eyu). - Implementa SYSTEM DROP REPLICA a partir de clusters auxiliares do ZooKeeper, podendo encerrar #48931. #48932 (wangxiaobo).
- Adiciona o tipo de dado Array ao MongoDB. Fecha #48598. #48983 (Nikolay Degterinsky).
- Suporte para armazenar tipos de dados
Intervalem tabelas. #49085 (larryluogit). - Permite usar a função de janela
ntilesem definir explicitamente o frame da janela:ntile(3) OVER (ORDER BY a), fecha #46763. #49093 (vdimir). - Adicionadas configurações (
number_of_mutations_to_delay,number_of_mutations_to_throw) para adiar ou gerar exceção em consultasALTERque criam mutações (ALTER UPDATE,ALTER DELETE,ALTER MODIFY COLUMN, …) caso a tabela já tenha muitas mutações não concluídas. #49117 (Anton Popov). - Captura exceção de
create_directoriesno cache do sistema de arquivos. #49203 (Kseniia Sumarokova). - Copia exemplos embutidos para um novo campo
exampleemsystem.functions, para complementar o campodescription. #49222 (Dan Roscigno). - Habilita opções de conexão para o Dicionário do MongoDB. Exemplo:
xml <source> <mongodb> <host>localhost</host> <port>27017</port> <user></user> <password></password> <db>test</db> <collection>dictionary_source</collection> <options>ssl=true</options> </mongodb> </source>### Entrada de documentação para alterações voltadas ao usuário. #49225 (MikhailBurdukov). - Adicionado o alias
asymptoticpara o método computacionalasympdekolmogorovSmirnovTest. Documentação aprimorada. #49286 (Nikita Mikhaylov). - As funções de agregação groupBitAnd/Or/Xor agora funcionam com inteiros com sinal. Isso as torna consistentes com o comportamento das funções escalares bitAnd/Or/Xor. #49292 (exmy).
- Documentação de funções dividida em campos mais granulares. #49300 (Robert Schulze).
- Passa a usar várias threads compartilhadas entre todas as tabelas em um servidor para carregar partes de dados desatualizadas. O tamanho do pool e da sua fila é controlado pelas configurações
max_outdated_parts_loading_thread_pool_sizeeoutdated_part_loading_thread_pool_queue_size. #49317 (Nikita Mikhaylov). - Não superestime o tamanho dos dados processados para colunas
LowCardinalityquando elas compartilham dicionários entre blocos. Isso fecha #49322. Veja também #48745. #49323 (Alexey Milovidov). - O gravador do Parquet agora usa um tamanho razoável de grupo de linhas quando chamado via
OUTFILE. #49325 (Michael Kolupaev). - Permite palavras-chave restritas como
ARRAYcomo alias, desde que o alias esteja entre aspas. Fecha #49324. #49360 (Nikolay Degterinsky). - Os jobs de carregamento e exclusão de partes de dados foram movidos para pools compartilhados em todo o servidor, em vez de pools por tabela. Os tamanhos dos pools são controlados pelas configurações
max_active_parts_loading_thread_pool_size,max_outdated_parts_loading_thread_pool_sizeemax_parts_cleaning_thread_pool_sizena configuração de nível superior. As configurações em nível de tabelamax_part_loading_threadsemax_part_removal_threadstornaram-se obsoletas. #49474 (Nikita Mikhaylov). - Permite
?password=passna URL da UI do Play. A senha é substituída no histórico do navegador. #49505 (Mike Kot). - Permitir a leitura de objetos de tamanho zero em sistemas de arquivos remotos. (porque arquivos vazios não entram no backup, então podemos acabar com zero blobs no arquivo de metadados). Fecha #49480. #49519 (Kseniia Sumarokova).
- Anexe a thread MemoryTracker ao
total_memory_trackerapós oThreadGroupser desanexado. #49527 (Dmitry Novik). - Corrigidas views parametrizadas quando um parâmetro de consulta é usado várias vezes na mesma consulta. #49556 (Azat Khuzhin).
- Libera a memória alocada para o último snapshot de ProfileEvents enviado no contexto de uma consulta. Em continuidade a #47564. #49561 (Dmitry Novik).
- A função “makeDate” agora passa a oferecer uma sobrecarga compatível com MySQL (com argumentos de ano & dia do ano). #49603 (Robert Schulze).
- Adicionado suporte à função de tabela
dictionaryparaRegExpTreeDictionary. #49666 (Han Fei). - Adicionada política de escalonamento justo ponderado de E/S. Adicionado gerenciador dinâmico de recursos, que permite atualizar a hierarquia de escalonamento de E/S em tempo de execução sem reinicializar o servidor. #49671 (Sergei Trifonov).
- Adiciona uma solicitação de compose após o
multipart uploadpara o GCS. Isso permite usar a operação de cópia em objetos enviados commultipart upload. Recomenda-se definirs3_strict_upload_part_sizecom algum valor, porque a solicitação de compose pode falhar em objetos criados com partes de tamanhos diferentes. #49693 (Antonio Andelic). - Para a função
extractKeyValuePairs: melhorar a lógica de parsing de “best-effort” para aceitarkey_value_delimitercomo parte válida do valor. Isso também simplifica a lógica condicional e pode até acelerar um pouco as coisas. #49760 (Arthur Passos). - Adicionado o campo
initial_query_ida system.processors_profile_log #49777 (helifu). - As tabelas de log do sistema agora podem ter chaves de classificação personalizadas. #49778 (helifu).
- Um novo campo
partitionsemsystem.query_logé usado para indicar quais partições participam do cálculo. #49779 (helifu). - Adicionada a configuração
enable_the_endpoint_id_with_zookeeper_name_prefixparaReplicatedMergeTree(desativada por padrão). Quando ativada, ela adiciona o nome do cluster do ZooKeeper ao endpoint de comunicação entre servidores da tabela. Isso evita erros deDuplicate interserver IO endpointquando há tabelas replicadas com o mesmo caminho, mas com ZooKeepers auxiliares diferentes. #49780 (helifu). - Adiciona parâmetros de consulta ao
clickhouse-local. Fecha #46561. #49785 (Nikolay Degterinsky). - Permitir o carregamento de dicionários e funções a partir de YAML por padrão. Em versões anteriores, era necessário editar
dictionaries_configouuser_defined_executable_functions_configno arquivo de configuração, pois esses parâmetros esperavam arquivos*.xml. #49812 (Alexey Milovidov). - O mecanismo de tabela Kafka agora permite usar colunas com alias. #49824 (Aleksandr Musorin).
- Adicionar uma configuração para limitar o número máximo de pares gerados por
extractKeyValuePairs, como proteção para evitar o uso excessivo de memória. #49836 (Arthur Passos). - Adicionado suporte a um caso (incomum) em que os argumentos do operador
INsão tuplas de um único elemento. #49844 (MikhailBurdukov). - A função
bitHammingDistanceé compatível com os tipos de dadosStringeFixedString. Fecha #48827. #49858 (flynn). - Corrige erros ao redefinir o timeout no cliente no OS X. #49863 (alekar).
- Adicionado suporte a inteiros grandes, como UInt128, Int128, UInt256 e Int256, na função
bitCount. Isso permite calcular a distância de Hamming em grandes máscaras de bits para aplicações de IA. #49867 (Alexey Milovidov). - Impressões digitais para uso no lugar de identificadores de chave em discos criptografados. Isso simplifica a configuração dos discos criptografados. #49882 (Vitaly Baranov).
- Adicionar o tipo de dado UUID ao PostgreSQL. Fecha #49739. #49894 (Nikolay Degterinsky).
- A função
toUnixTimestampagora aceita os argumentosDateeDate32. #49989 (Victor Krasnov). - Contabilize apenas a memória do servidor para dicionários. #49995 (Azat Khuzhin).
- O servidor passará a permitir o uso das configurações
SQL_*, comoSQL_AUTO_IS_NULL, sem efeito, para compatibilidade com o MySQL. Isso fecha #49927. #50013 (Alexey Milovidov). - Preserva o initial_query_id em consultas ON CLUSTER, o que é útil para introspecção (em
distributed_ddl_entry_format_version=5). #50015 (Azat Khuzhin). - Preserve a incompatibilidade com versões anteriores para configurações renomeadas usando aliases (
allow_experimental_projection_optimizationparaoptimize_use_projections,allow_experimental_lightweight_deleteparaenable_lightweight_delete). #50044 (Azat Khuzhin). - Suporte à passagem de FQDN por meio da configuração my_hostname para registrar o nó do cluster no Keeper. Adicionada a configuração invisible para oferecer suporte a vários grupos de computação. Um grupo de computação, dentro de um cluster, é invisível para outros grupos de computação. #50186 (Yangkuan Liu).
- Correção da leitura de todos os dados do PostgreSQL, mesmo quando
LIMIT npodia ser especificado. #50187 (Kseniia Sumarokova). - Adicionar novos eventos de perfil para consultas com subconsultas (
QueriesWithSubqueries/SelectQueriesWithSubqueries/InsertQueriesWithSubqueries). #50204 (Azat Khuzhin). - Adição do campo roles no arquivo users.xml, permitindo especificar roles com grants por meio de um arquivo de configuração. #50278 (pufit).
- Passa a relatar
CGroupCpuCfsPeriodeCGroupCpuCfsQuotaem AsynchronousMetrics. - Respeita os limites de memória do cgroup v2 durante a inicialização do servidor. #50379 (alekar). - Adiciona um manipulador de sinal para SIGQUIT, para que funcione da mesma forma que SIGINT. Fecha #50298. #50435 (Nikolay Degterinsky).
- Caso o parse de JSON falhe devido ao grande tamanho da saída do objeto, exiba a última posição para facilitar a depuração. #50474 (Valentin Alexeev).
- Suporte para decimais sem tamanho fixo. Fecha #49130. #50586 (Kruglov Pavel).
Melhoria de compilação/testes/empacotamento
- Novo e aprimorado
keeper-bench. Tudo pode ser personalizado a partir de um arquivo YAML/XML: - gerador de requisições - cada tipo de gerador de requisições pode ter um conjunto específico de campos - múltiplas requisições podem ser geradas simplesmente fazendo o mesmo na chavemulti- para cada requisição ou sub-requisição em múltiplas requisições, é possível definir um campoweightpara controlar a distribuição - definir árvores que precisam ser configuradas para uma execução de teste - os hosts podem ser definidos com todos os timeouts personalizáveis, e é possível controlar quantas sessões gerar para cada host - inteiros definidos com os camposmin_valueemax_valuesão geradores de números aleatórios. #48547 (Antonio Andelic). - Io_uring não tem suporte no macOS; não o escolha ao executar testes localmente, para evitar falhas ocasionais. #49250 (Frank Chen).
- Suporte para injeção de falhas nomeadas em testes. #49361 (Han Fei).
- Permite executar o ClickHouse em sistemas operacionais nos quais a chamada de sistema
prctl(controle de processos) não está disponível, como o AWS Lambda. #49538 (Alexey Milovidov). - Corrigido o problema de conflito de compilação entre contrib/isa-l e isa-l no qpl 49296. #49584 (jasperzhu).
- Os utilitários agora só são compilados quando solicitados explicitamente (“-DENABLE_UTILS=1”), em vez de serem compilados por padrão; isso reduz o tempo de linkedição em compilações típicas de desenvolvimento. #49620 (Robert Schulze).
- Separar a descrição de build do idxd-config em um arquivo CMake separado para evitar sua remoção acidental no futuro. #49651 (jasperzhu).
- Adiciona uma verificação de CI com o analyzer habilitado na branch master. Continuação em #49562. #49668 (Dmitry Novik).
- Migração para LLVM/clang 16. #49678 (Azat Khuzhin).
- Permitir a compilação do ClickHouse com clang-17. #49851 (Alexey Milovidov). #50410 (Alexey Milovidov).
- Agora, é mais fácil integrar o ClickHouse a outros projetos cmake. #49991 (Amos Bird). (O que é fortemente desaconselhado — Alexey Milovidov).
- Corrige logs adicionais estranhos do QEMU após #47151, consulte https://s3.amazonaws.com/clickhouse-test-reports/50078/a4743996ee4f3583884d07bcd6501df0cfdaa346/stateless_tests__release__databasereplicated__[3_4].html. #50442 (Mikhail f. Shiryaev).
- ClickHouse pode ser executado no Linux RISC-V 6.1.22. Isso fecha #50456. #50457 (Alexey Milovidov).
- Atualiza o protobuf interno para a v3.18 (corrige o falso positivo CVE-2022-1941). #50400 (Robert Schulze).
- Atualiza a libxml2 interna para v2.10.4 (corrige os falsos CVE-2023-28484 e CVE-2023-29469). #50402 (Robert Schulze).
- Atualizado o c-ares para v1.19.1 (CVE-2023-32067 falso, CVE-2023-31130 falso, CVE-2023-31147 falso). #50403 (Robert Schulze).
- Corrigido o falso CVE-2022-2469 na libgsasl. #50404 (Robert Schulze).
Correção de bug (comportamento incorreto visível para o usuário em um lançamento estável oficial)
- ActionsDAG: corrige otimização incorreta #47584 (Salvatore Mesoraca).
- Corrigir o tratamento de snapshots concorrentes no Keeper #48466 (Antonio Andelic).
- MergeTreeMarksLoader passa a manter DataPart em vez de DataPartStorage #48515 (SmitaRKulkarni).
- Correção no estado da sequência #48603 (Ilya Golshtein).
- Verificação de concorrência de backup/restauração em caso de falhas anteriores #48726 (SmitaRKulkarni).
- Correção: anexar uma tabela com um caminho ZK inexistente não aumenta a métrica ReadonlyReplica #48954 (wangxiaobo).
- Corrige possíveis chamadas a terminate por exceções não capturadas em alguns pontos #49112 (Kruglov Pavel).
- Corrigido o erro “key not found” em consultas com vários StorageJoin #49137 (vdimir).
- Corrige resultado incorreto de consulta ao usar chave primária anulável #49172 (Duc Canh Le).
- Corrigido
reinterpretAs*()em máquinas big-endian #49198 (Suzy Wang). - (Replicação zero-copy experimental) Tornar o bloqueio de partes zero-copy mais atômico #49211 (alesapin).
- Corrige uma condição de corrida durante o carregamento de partes desatualizadas #49223 (Alexander Tokmakov).
- Corrigido o caso em que todos os valores de chave são nulos e o GROUP com rollup retornava um resultado incorreto #49282 (Shuai li).
- Corrigido o cálculo de load_factor para dicionários HASHED com SHARDS #49319 (Azat Khuzhin).
- Não permitir a configuração de CODECs de compressão para colunas alias #49363 (Timur Solodovnikov).
- Corrige bug na remoção do diretório de uma part existente #49365 (alesapin).
- Corrigir adequadamente o GCS ao usar HMAC #49390 (Antonio Andelic).
- Corrige um bug de fuzzing quando o conjunto da subconsulta não é criado ao ler a partir de remote() #49425 (Alexander Gololobov).
- Inverte
shutdown_wait_unfinished_queries#49427 (Konstantin Bogdanov). - (Replicação zero-copy experimental) Corrige outro bug relacionado a zero-copy #49473 (alesapin).
- Corrige a configuração do banco de dados Postgres #49481 (Mal Curtis).
- Corrigir o tratamento dos argumentos de
s3Cluster#49490 (Antonio Andelic). - Corrigido erro no destrutor do TraceCollector. #49508 (Yakov Olkhovskiy).
- Corrige a falha do AsynchronousReadIndirectBufferFromRemoteFS que ocorria em reposicionamentos curtos #49525 (Michael Kolupaev).
- Corrigida a ordem de carregamento de dicionários #49560 (Alexander Tokmakov).
- Impede a alteração do tipo de dados da coluna Object(‘json’) #49563 (Nikolay Degterinsky).
- Corrigido o teste de estresse (Erro lógico: esperado 7134 >= 11030) #49623 (Kseniia Sumarokova).
- Corrige bug no DISTINCT #49628 (Alexey Milovidov).
- Correção: DISTINCT em ordem com valores iguais a zero em colunas não ordenadas #49636 (Igor Nikonov).
- Corrige um erro pontual em inteiros grandes identificado pelo UBSan com um fuzzer #49645 (Alexey Milovidov).
- Corrige a leitura de colunas esparsas após reiniciar #49660 (Anton Popov).
- Corrige falha de
assertem SpanHolder::finish() com fibers #49673 (Kruglov Pavel). - Correção de funções com curto-circuito e de mutações com argumentos esparsos #49716 (Anton Popov).
- Corrige a gravação de arquivos adicionados em backups incrementais #49725 (Vitaly Baranov).
- Corrige o erro “There is no physical column _row_exists in table” que ocorre durante a mutação de exclusão leve em uma tabela com coluna Object. #49737 (Alexander Gololobov).
- Corrigido o problema de msan em randomStringUTF8(número ímpar) #49750 (Robert Schulze).
- Corrigida a função de agregação kolmogorovSmirnovTest #49768 (FFFFFFFHHHHHHH).
- Corrigidos aliases de configurações no protocolo nativo #49776 (Azat Khuzhin).
- Correção do
arrayMapcom array de tuplas com um único argumento #49789 (Anton Popov). - Corrige as configurações de limitação de E/S/BACKUPs por consulta #49797 (Azat Khuzhin).
- Corrige a atribuição de NULL na definição de perfil #49831 (Vitaly Baranov).
- Corrigido um bug nas projeções e na configuração aggregate_functions_null_for_empty (para query_plan_optimize_projection) #49873 (Amos Bird).
- Corrige o processamento do lote pendente do INSERT assíncrono em Distributed após reinicialização #49884 (Azat Khuzhin).
- Corrigida a asserção em CacheMetadata::doCleanup #49914 (Kseniia Sumarokova).
- corrige
is_prefixno OptimizeRegularExpression #49919 (Han Fei). - Corrigidas as métricas
WriteBufferFromS3Bytes,WriteBufferFromS3MicrosecondseWriteBufferFromS3RequestsErrors#49930 (Aleksandr Musorin). - Corrigida a codificação de IPv6 no protobuf #49933 (Yakov Olkhovskiy).
- Corrige possível erro lógico no parsing incorreto de Nullable em formatos de texto #49960 (Kruglov Pavel).
- Adicionada a configuração output_format_parquet_compliant_nested_types para gerar arquivos Parquet mais compatíveis #50001 (Michael Kolupaev).
- Corrige um erro lógico no teste de estresse “Not enough space to add …” #50021 (Kseniia Sumarokova).
- Evita um deadlock ao iniciar a tabela na thread de attach do
ReplicatedMergeTree#50026 (Antonio Andelic). - Corrigido assert em SpanHolder::finish() com fibers, tentativa 2 #50034 (Kruglov Pavel).
- Adiciona o escape adequado para a serialização do contexto do OpenTelemetry em DDL #50045 (Azat Khuzhin).
- Corrige a geração de relatórios de partes de projeção corrompidas #50052 (Amos Bird).
- Correção na compilação JIT para NaN com operador diferente de #50056 (Maksim Kita).
- Corrige travamento no caso de banco de dados Replicated sem argumentos #50058 (Azat Khuzhin).
- Corrige uma falha com
multiIf, condição constante e argumentos Nullable #50123 (Anton Popov). - Corrige a análise de índice inválida para chaves relacionadas a datas #50153 (Amos Bird).
- não permitir a modificação de ORDER BY quando não houver colunas em ORDER BY #50154 (Han Fei).
- Corrige a falha na análise de índice quando o operador binário contém um argumento constante NULL #50177 (Amos Bird).
- clickhouse-client: impedir o uso simultâneo de
--querye--queries-file#50210 (Alexey Gerasimchuk). - Corrigido o UB nas extensões do INTO OUTFILE (APPEND / AND STDOUT) e no WATCH EVENTS #50216 (Azat Khuzhin).
- Corrige o fato de espaços no fim da linha serem ignorados no formato CustomSeparatedIgnoreSpaces #50224 (Kruglov Pavel).
- Corrigir o parsing de metadados do Iceberg #50232 (Kseniia Sumarokova).
- Corrige
SELECTdistribuído aninhado na cláusulaWITH#50234 (Azat Khuzhin). - Corrige problema de msan no SipHash com chave #50245 (Robert Schulze).
- Corrigidos bugs nos sockets do Poco no modo não bloqueante, com uso de sockets realmente não bloqueantes #50252 (Kruglov Pavel).
- Correção do cálculo de checksum para entradas de backup #50264 (Vitaly Baranov).
- Correção de NaN nas funções de comparação #50287 (Maksim Kita).
- Correção da chave Nullable na agregação JIT #50291 (Maksim Kita).
- Corrige travamento do clickhouse-local ao gravar saída Arrow ou Parquet vazia #50328 (Michael Kolupaev).
- Corrige travamento quando Pool::Entry::disconnect() é chamado #50334 (Val Doroshchuk).
- Melhorado o fetch da part mantendo o bloqueio do diretório por mais tempo #50339 (SmitaRKulkarni).
- Corrige as funções bitShift* quando ambos os argumentos são constantes #50343 (Kruglov Pavel).
- Corrige deadlock no Keeper em caso de exceção durante o pré-processamento de solicitações. #50387 (frinkr).
- Corrige o cálculo de hash de valores inteiros
const#50421 (Robert Schulze). - Corrige merge_tree_min_rows_for_seek/merge_tree_min_bytes_for_seek em data skipping indexes #50432 (Azat Khuzhin).
- Limita o número de tarefas em andamento no carregamento de partes desatualizadas #50450 (Nikita Mikhaylov).
- Correção no Keeper: aplicar o estado não confirmado após instalar o snapshot #50483 (Antonio Andelic).
- Corrige o folding incorreto de constantes #50536 (Alexey Milovidov).
- Corrige erro lógico em teste de estresse (Not enough space to add …) #50583 (Kseniia Sumarokova).
- Correção da conversão de Null para LowCardinality(Nullable) na função de tabela values #50637 (Kruglov Pavel).
- Reverte a otimização inválida do RegExpTreeDictionary #50642 (Johann Gan).
Lançamento do ClickHouse 23.4, 2023-04-26. Apresentação, Vídeo
Alteração incompatível com versões anteriores
- O Formatter ‘%M’ na função formatDateTime() agora exibe o nome do mês em vez dos minutos. Isso torna o comportamento consistente com o MySQL. O comportamento anterior pode ser restaurado usando a configuração “formatdatetime_parsedatetime_m_is_month_name = 0”. #47246 (Robert Schulze).
- Essa alteração só faz sentido se você estiver usando o cache do sistema de arquivos virtual. Se
pathna configuração do cache do sistema de arquivos virtual não estiver vazio e não for um caminho absoluto, ele será colocado em<diretório de dados do servidor ClickHouse>/caches/<path_from_cache_config>. #48784 (Kseniia Sumarokova). - Índices primários/secundários e chaves de ordenação com expressões idênticas agora são rejeitados. Esse comportamento pode ser desativado usando a configuração
allow_suspicious_indices. #48536 (凌涛).
Nova funcionalidade
- Adiciona suporte à nova função de agregação
quantileGK/quantilesGK, como approx_percentile no Spark. Consulte o algoritmo de Greenwald-Khanna em http://infolab.stanford.edu/~datar/courses/cs361a/papers/quantiles.pdf. #46428 (李扬). - Adiciona uma instrução
SHOW COLUMNSque mostra informações resumidas de system.columns. #48017 (Robert Schulze). - Foram adicionados os modificadores
LIGHTWEIGHTePULLà consultaSYSTEM SYNC REPLICA. A versãoLIGHTWEIGHTaguarda apenas fetches e drop-ranges (merges e mutações são ignoradas). A versãoPULLextrai novas entradas do ZooKeeper sem esperar por elas. Corrige #47794. #48085 (Alexander Tokmakov). - Adicionada a função
kafkaMurmurHashpara compatibilidade com o DefaultPartitioner do Kafka. Fecha #47834. #48185 (Nikolay Degterinsky). - Permite criar facilmente um usuário com os mesmos privilégios do usuário atual por meio de
GRANT CURRENT GRANTS. #48262 (pufit). - Adicionada a função de agregação estatística
kolmogorovSmirnovTest. Fecha #48228. #48325 (FFFFFFFHHHHHHH). - Adicionada uma coluna
lost_part_countà tabelasystem.replicas. O valor da coluna mostra o número total de partes perdidas na tabela correspondente. O valor é armazenado no zookeeper e pode ser usado, para fins de monitoramento, em vez do evento de perfilReplicatedDataLoss, que não é persistente. #48526 (Sergei Trifonov). - Adicionada a função
soundexpara compatibilidade. Fecha #39880. #48567 (FriendLey). - Suporte ao tipo
Mapno JSONExtract. #48629 (李扬). - Adiciona o formato
PrettyJSONEachRowpara produzir JSON formatado com delimitadores de quebra de linha e recuo de 4 espaços. #48898 (Kruglov Pavel). - Adiciona o formato de entrada
ParquetMetadatapara ler metadados de arquivos Parquet. #48911 (Kruglov Pavel). - Adicionar a função
extractKeyValuePairspara extrair pares de chave-valor de strings. As strings de entrada podem conter ruído (isto é, arquivos de log / não precisam estar 100% no formato de pares de chave-valor); o algoritmo procurará pares de chave-valor que correspondam aos argumentos passados para a função. No momento, a função aceita os seguintes argumentos:data_column(obrigatório),key_value_pair_delimiter(o padrão é:),pair_delimiters(o padrão é\space \, \;) equoting_character(o padrão são aspas duplas). #43606 (Arthur Passos). - As funções replaceOne(), replaceAll(), replaceRegexpOne() e replaceRegexpAll() agora podem ser chamadas com os argumentos de padrão e substituição não constantes. #46589 (Robert Schulze).
- Foram adicionadas funções para trabalhar com colunas do tipo
Map:mapConcat,mapSort,mapExists. #48071 (Anton Popov).
Melhoria de Desempenho
- A leitura de arquivos no formato
Parquetagora está muito mais rápida. IO e decodificação são paralelizados (controlados pela configuraçãomax_threads), e apenas os intervalos de dados necessários são lidos. #47964 (Michael Kolupaev). - Se executarmos uma mutação com
IN(subconsulta) assim:ALTER TABLE t UPDATE col='new value' WHERE id IN (SELECT id FROM huge_table)e a tabelattiver múltiplas partes, então, para cada parte, um Set da subconsultaSELECT id FROM huge_tableserá construído na memória. Se houver muitas partes, isso pode consumir muita memória (e levar a OOM) e CPU. A solução é introduzir um cache de curta duração dos Sets que estão sendo construídos no momento por tarefas de mutação. Se outra tarefa da mesma mutação for executada de forma concorrente, ela poderá procurar o Set no cache, esperar que ele seja construído e reutilizá-lo. #46835 (Alexander Gololobov). - Verifica dependências apenas quando necessário ao aplicar consultas
ALTER TABLE. #48062 (Raúl Marín). - Otimiza a função
mapUpdate. #48118 (Anton Popov). - Agora, uma consulta interna para a réplica local é enviada explicitamente, e os dados dela são recebidos por meio da interface de loopback. A configuração
prefer_localhost_replicanão é respeitada para réplicas paralelas. Isso é necessário para um melhor agendamento e torna o código mais limpo: o iniciador é responsável apenas por coordenar o processo de leitura e mesclar resultados, respondendo continuamente às solicitações, enquanto todas as consultas secundárias leem os dados. Observação: usar a interface de loopback não é tão eficiente em termos de desempenho; caso contrário, algumas réplicas poderiam ficar sem tarefas, o que poderia levar a uma execução de consulta ainda mais lenta e ao não aproveitamento de todos os recursos possíveis. A inicialização do coordenador agora é ainda mais tardia. Todas as solicitações recebidas contêm informações sobre o algoritmo de leitura, e o coordenador é inicializado com elas quando a primeira solicitação chega. Se alguma réplica decidir ler com um algoritmo diferente, será lançada uma exceção e a consulta será abortada. #48246 (Nikita Mikhaylov). - Não constrói o Set do lado direito da cláusula
INcom subconsulta quando ele é usado apenas para análise de skip indexes, e eles estão desabilitados pela configuração (use_skip_indexes=0). Antes, isso podia afetar o desempenho das consultas. #48299 (Anton Popov). - O processamento de consultas é paralelizado logo após a leitura de
FROM file(...). Relacionado a #38755. #48525 (Igor Nikonov). O processamento de consultas é paralelizado logo após a leitura de qualquer fonte de dados. As fontes de dados afetadas são principalmente armazenamentos simples ou externos, como as funções de tabelaurlefile. #48727 (Igor Nikonov). Isso é controlado pela configuraçãoparallelize_output_from_storages, que não é habilitada por padrão. - Reduz a contenção do mutex do ThreadPool (pode aumentar o desempenho com uma grande quantidade de jobs pequenos). #48750 (Sergei Trifonov).
- Reduz o uso de memória para múltiplas mutações
ALTER DELETE. #48522 (Nikolai Kochetov). - Remove as tentativas excessivas de conexão se a configuração
skip_unavailable_shardsestiver habilitada. #48771 (Azat Khuzhin).
Funcionalidade experimental
- As entradas no cache de consultas agora são combinadas em blocos de até
max_block_sizee compactadas. #45912 (Robert Schulze). - Agora é possível definir quotas por usuário no cache de consultas. #48284 (Robert Schulze).
- Algumas correções para réplicas paralelas #48433 (Nikita Mikhaylov).
- Implementa zero-copy-replication (uma funcionalidade experimental) em discos criptografados. #48741 (Vitaly Baranov).
Melhoria
- Aumenta o valor padrão de
connect_timeout_with_failover_mspara 1000 ms (devido à adição de conexões assíncronas em https://github.com/ClickHouse/ClickHouse/pull/47229). Fecha #5188. #49009 (Kruglov Pavel). - Várias melhorias em lagos de dados: - Fazer o
Icebergfuncionar com dados não particionados. - Suporte ao formatoIcebergv2 (antes, apenas a v1 era compatível) - Suporte à leitura de dados particionados noDeltaLake/Hudi- Leitura mais rápida dos metadados doDeltaLakeusando os arquivos de checkpoint do Delta - Correção de leituras incorretas noHudi: antes, ele escolhia incorretamente quais dados ler e, por isso, só conseguia ler corretamente tabelas pequenas - Fazer com que esses motores detectem atualizações em dados alterados (antes, o estado era definido na criação da tabela) - Fazer testes adequados paraIceberg/DeltaLake/Hudiusando spark. #47307 (Kseniia Sumarokova). - Adicionar conexão assíncrona ao socket e escrita assíncrona no socket. Tornar assíncronos a criação de conexões e o envio de consultas/tabelas externas entre shards. Refatorar o código usando fibras. Fecha #46931. Depois deste PR, poderemos aumentar
connect_timeout_with_failover_mspor padrão (https://github.com/ClickHouse/ClickHouse/issues/5188). #47229 (Kruglov Pavel). - Suporte às seções de configuração
keeper/keeper_servercomo alternativa azookeeper. Fecha #34766, #34767. #35113 (李扬). - É possível definir a flag secure em named_collections para um dicionário com uma tabela do ClickHouse como fonte. Corrige #38450. #46323 (Ilya Golshtein).
- A função
bitCounté compatível com os tipos de dadosFixedStringeString. #49044 (flynn). - Foram adicionadas tentativas de repetição configuráveis para todas as operações com [Zoo]Keeper em consultas Backup. #47224 (Nikita Mikhaylov).
- Ativa
use_environment_credentialspara S3 por padrão, fazendo com que toda a cadeia de provedores seja construída por padrão. #47397 (Antonio Andelic). - Atualmente, a função JSON_VALUE é semelhante à função get_json_object do Spark, que permite obter um valor de uma string JSON por um path como ‘$.key’. Mas ainda há algumas diferenças - 1. o get_json_object do Spark retorna null quando o path não existe, mas o JSON_VALUE retorna uma string vazia; - 2. o get_json_object do Spark retorna um valor de tipo complexo, como um JSON object/array, mas o JSON_VALUE retorna uma string vazia. #47494 (KevinyhZou).
- Para
use_structure_from_insertion_table_in_table_functions, propagação mais flexível da estrutura da tabela de inserção para a função de tabela. Corrigido um problema com o mapeamento de nomes e o uso de colunas virtuais. A configuração ‘auto’ não é mais necessária. #47962 (Yakov Olkhovskiy). - Não continue tentando se conectar ao Keeper se a consulta for cancelada ou exceder os limites. #47985 (Raúl Marín).
- Suporte a entrada/saída de Enum em
BSONEachRow, permissão para todos os tipos de chave de map e eliminação de cálculos extras na saída. #48122 (Kruglov Pavel). - Suporte a mais tipos do ClickHouse nos formatos
ORC/Arrow/Parquet: Enum(8|16), (U)Int(128|256), Decimal256 (para ORC), permitir a leitura de IPv4 a partir de valores Int32 (o ORC gera IPv4 como Int32, e não conseguíamos lê-lo de volta), corrigir a leitura de Nullable(IPv6) a partir de dados binários noORC. #48126 (Kruglov Pavel). - Adiciona as colunas
perform_ttl_move_on_inserteload_balancingà tabelasystem.storage_policiese altera o tipo da colunavolume_typeparaEnum8. #48167 (lizhuoyu5). - Adicionado suporte ao comando
BACKUP ALL, que faz backup de todas as tabelas e de todos os bancos de dados, incluindo os temporários e os do sistema. #48189 (Vitaly Baranov). - A função mapFromArrays agora aceita o tipo
Mapcomo entrada. #48207 (李扬). - A saída de alguns SHOW PROCESSLIST agora vem ordenada. #48241 (Robert Schulze).
- Limitação por consulta/por servidor para IO remoto/IO local/backups (configurações do servidor:
max_remote_read_network_bandwidth_for_server,max_remote_write_network_bandwidth_for_server,max_local_read_bandwidth_for_server,max_local_write_bandwidth_for_server,max_backup_bandwidth_for_server, configurações:max_remote_read_network_bandwidth,max_remote_write_network_bandwidth,max_local_read_bandwidth,max_local_write_bandwidth,max_backup_bandwidth). #48242 (Azat Khuzhin). - Suporte a mais tipos no formato
CapnProto: Map, (U)Int(128|256), Decimal(128|256). Permitir conversões de inteiros durante a entrada/saída. #48257 (Kruglov Pavel). - Não lançar CURRENT_WRITE_BUFFER_IS_EXHAUSTED em condições normais. #48288 (Raúl Marín).
- Adiciona a nova configuração
keeper_map_strict_mode, que impõe garantias adicionais às operações realizadas em tabelasKeeperMap. #48293 (Antonio Andelic). - Verifique se o tipo da chave primária de um dicionário simples é um tipo inteiro sem sinal nativo. Adicione a configuração
check_dictionary_primary_keypara compatibilidade (definacheck_dictionary_primary_key =falsepara desativar a verificação). #48335 (lizhuoyu5). - Não replicar mutações para
KeeperMap, pois isso é desnecessário. #48354 (Antonio Andelic). - Permite gravar/ler tupla sem nome como Message aninhada no formato Protobuf. Os elementos da Tuple e os campos da Message são associados por posição. #48390 (Kruglov Pavel).
- Suporte às configurações
additional_table_filterseadditional_result_filterno novo planner. Além disso, foi adicionada uma entrada na documentação paraadditional_result_filter. #48405 (Dmitry Novik). parseDateTimeagora entende a string de formato ‘%f’ (segundos fracionários). #48420 (Robert Schulze).- A format string “%f” em formatDateTime() agora imprime “000000” se o valor formatado não tiver segundos fracionários; o comportamento anterior (um único zero) pode ser restaurado usando a configuração “formatdatetime_f_prints_single_zero = 1”. #48422 (Robert Schulze).
- Não replicar DELETE e TRUNCATE no KeeperMap. #48434 (Antonio Andelic).
- Gerar valores Decimals e Bools válidos na função generateRandom. #48436 (Kruglov Pavel).
- Permitir vírgulas finais na lista de expressões da consulta SELECT, por exemplo
SELECT a, b, c, FROM table. Fecha #37802. #48438 (Nikolay Degterinsky). - Faz com que os parâmetros de cliente
--usere--passwordsobrescrevam as variáveis de ambienteCLICKHOUSE_USEReCLICKHOUSE_PASSWORD. Fecha #38909. #48440 (Nikolay Degterinsky). - Adicionadas novas tentativas ao carregar partes de dados em tabelas
MergeTreeem caso de erros recuperáveis. #48442 (Anton Popov). - Adicionado suporte aos tipos de dados
Date,Date32,DateTimeeDateTime64nas funçõesarrayMin,arrayMaxearrayDifference. Fecha #21645. #48445 (Nikolay Degterinsky). - Adicionar suporte à macro
{server_uuid}. Ela é útil para identificar réplicas em clusters com escalonamento automático quando novas réplicas são constantemente adicionadas e removidas durante a execução. Isso fecha #48554. #48563 (Alexey Milovidov). - O script de instalação criará um hard link em vez de fazer uma cópia, se possível. #48578 (Alexey Milovidov).
- Adiciona suporte à sintaxe
SHOW TABLEcom o mesmo significado deSHOW CREATE TABLE. Fecha #48580. #48591 (flynn). - Os buffers temporários de HTTP agora podem funcionar removendo dados do cache virtual do sistema de arquivos. #48664 (Vladimir C).
- Faz com que a inferência de esquema funcione para
CREATE AS SELECT. Fecha #47599. #48679 (flynn). - Adicionada a configuração
replicated_max_mutations_in_one_entryparaReplicatedMergeTree, que permite limitar o número de comandos de mutação em cada entradaMUTATE_PART(o padrão é 10000). #48731 (Alexander Tokmakov). - Nos tipos AggregateFunction, os bytes de arena não utilizados não são contabilizados como
read_bytes. #48745 (Raúl Marín). - Corrige algumas configurações relacionadas ao MySQL que não eram tratadas corretamente com a fonte de dicionário MySQL + coleção nomeada. Fecha #48402. #48759 (Kseniia Sumarokova).
- Se um usuário definir
max_single_part_upload_sizecom um valor muito alto, isso pode causar uma falha devido a um bug no AWS S3 SDK. Isso corrige #47679. #48816 (Alexey Milovidov). - Corrige uma condição de corrida em
RabbitMQ(relatório), refatora o código. #48845 (Kseniia Sumarokova). - Adiciona os aliases
nameepart_namedesystem.partsesystem.part_log. Fecha #48718. #48850 (sichenzhao). - As funções “arrayDifferenceSupport()”, “arrayCumSum()” e “arrayCumSumNonNegative()” agora oferecem suporte a arrays de entrada com tipos inteiros estendidos (U)Int128/256. #48866 (cluster).
- O histórico multilinha no clickhouse-client não é mais preenchido. Isso torna mais natural colar conteúdo. #48870 (Joanna Hulboj).
- Implementa uma pequena melhoria para o caso raro em que o ClickHouse é executado dentro do LXC e o LXCFS é usado. O LXCFS tem um problema: às vezes retorna o erro “Transport endpoint is not connected” ao ler um arquivo dentro de
/proc. Esse erro foi corretamente registrado no log do servidor do ClickHouse. Além disso, contornamos esse problema reabrindo o arquivo. Trata-se de uma alteração mínima. #48922 (Real). - Melhorada a contabilização de memória para prefetches. Configurações de prefetch randomizadas na CI. #48973 (Kseniia Sumarokova).
- Definidos corretamente os cabeçalhos para operações nativas de cópia no GCS. #48981 (Antonio Andelic).
- Adicionado suporte para especificar nomes de configurações na linha de comando com hífens em vez de underscores, por exemplo,
--max-threadsem vez de--max_threads. Além disso, há suporte para caracteres Unicode de hífen, como—em vez de--— isso é útil quando você se comunica com uma equipe de outra empresa e um gerente dessa equipe copiou e colou código do MS Word. #48985 (alekseygolub). - Adicionar fallback para autenticação por senha caso a autenticação com certificado SSL do usuário falhe. Fecha #48974. #48989 (Nikolay Degterinsky).
- Melhora o dashboard incorporado. Fecha #46671. #49036 (Kevin Zhang).
- Adicionados eventos de perfil para mensagens de log, para que você possa ver facilmente a quantidade de mensagens de log por severidade. #49042 (Alexey Milovidov).
- Nas versões anteriores, o formato
LineAsStringfuncionava de maneira inconsistente, independentemente de o parsing paralelo estar habilitado ou não, na presença de quebras de linha do DOS ou do macOS Classic. Isso encerra #49039. #49052 (Alexey Milovidov). - A mensagem de exceção sobre o parâmetro de consulta não analisado também informará o nome desse parâmetro. Reimplementação de #48878. Fecha #48772. #49061 (Alexey Milovidov).
Melhoria de compilação/testes/empacotamento
- Atualização dos fusos horários. Foram atualizados: Africa/Cairo, Africa/Casablanca, Africa/El_Aaiun, America/Bogota, America/Cambridge_Bay, America/Ciudad_Juarez, America/Godthab, America/Inuvik, America/Iqaluit, America/Nuuk, America/Ojinaga, America/Pangnirtung, America/Rankin_Inlet, America/Resolute, America/Whitehorse, America/Yellowknife, Asia/Gaza, Asia/Hebron, Asia/Kuala_Lumpur, Asia/Singapore, Canada/Yukon, Egypt, Europe/Kirov, Europe/Volgograd, Singapore. #48572 (Alexey Milovidov).
- Redução do número de dependências nos arquivos de cabeçalho para acelerar o build. #47984 (Dmitry Novik).
- Randomização da compressão de marcas e índices nos testes. #48286 (Alexey Milovidov).
- Atualização do ZSTD interno de 1.5.4 para 1.5.5. #46797 (Robert Schulze).
- Randomização das mesclagens verticais de partes compact para wide nos testes. #48287 (Raúl Marín).
- Suporte a checksum CRC32 no HDFS. Correção de problemas de desempenho. #48614 (Alexey Milovidov).
- Remoção dos resquícios de suporte ao GCC. #48671 (Robert Schulze).
- Adicionada uma execução de CI com a infraestrutura do analyzer habilitada. #48719 (Dmitry Novik).
Correção de bug (mau funcionamento perceptível ao usuário em um lançamento estável oficial)
- Corrige o system.query_views_log para MVs enviadas por threads em segundo plano #46668 (Azat Khuzhin).
- Corrige vários erros em
RENAME COLUMN#46946 (alesapin). - Corrige pequenos problemas de realce no clickhouse-format #47610 (Natasha Murashkina).
- Corrige um bug no libc++ do LLVM que causava um travamento ao enviar partes para o S3 com tamanho maior que INT_MAX #47693 (Azat Khuzhin).
- Corrige o overflow na função
sparkbar#48121 (Vladimir C). - Corrige condição de corrida no S3 #48190 (Anton Popov).
- Desativado o JIT para funções de agregação devido a comportamento inconsistente #48195 (Alexey Milovidov).
- Corrige a formatação de ALTER (ajuste menor) #48289 (Natasha Murashkina).
- Corrige o uso de CPU no RabbitMQ (que havia piorado na versão 23.2 após #44404) #48311 (Kseniia Sumarokova).
- Corrige travamento no EXPLAIN PIPELINE para Merge over Distributed #48320 (Azat Khuzhin).
- Corrigida a serialização de LowCardinality como dicionário do Arrow #48361 (Kruglov Pavel).
- Reinicialização do downloader para o segmento de arquivo do cache no TemporaryFileStream #48386 (Vladimir C).
- Corrige possível travamento do SYSTEM SYNC REPLICA em caso de DROP/REPLACE PARTITION #48391 (Azat Khuzhin).
- Corrige um erro de inicialização ao carregar uma tabela distribuída que depende de um dicionário #48419 (MikhailBurdukov).
- Não verificar dependências ao renomear tabelas de sistema automaticamente #48431 (Raúl Marín).
- Atualiza somente as linhas afetadas no armazenamento KeeperMap #48435 (Antonio Andelic).
- Corrige uma possível falha de segmentação no cache da VFS #48469 (Kseniia Sumarokova).
toTimeZonegera um erro quando não é fornecida uma string constante #48471 (Jordi Villar).- Corrige erro lógico relacionado a IPv4 no Protobuf e adiciona suporte a Date32 #48486 (Kruglov Pavel).
- o sinalizador “changed” em system.settings foi calculado incorretamente para configurações com múltiplos valores #48516 (MikhailBurdukov).
- Corrige o mecanismo de armazenamento
Memorycom compressão ativada #48517 (Anton Popov). - Corrige o modo de colagem com colchetes que atrapalhava a inserção de senha em caso de reconexão do cliente #48528 (Michael Kolupaev).
- Corrigido map aninhado para chaves dos tipos IP e UUID #48556 (Yakov Olkhovskiy).
- Corrige uma exceção não capturada no carregador paralelo de dicionários com hash #48571 (Azat Khuzhin).
- A função de agregação
groupArrayfunciona corretamente com resultados vazios em tipos Nullable #48593 (lgbo). - Corrigido um bug no Keeper em que, às vezes, um nó não era criado com o esquema
authna ACL. #48595 (Aleksei Filatov). - Permitir operadores de comparação entre IPv4 e UInt #48611 (Yakov Olkhovskiy).
- Corrige possível erro no cache #48636 (Kseniia Sumarokova).
- Inserções assíncronas com dados vazios não gerarão mais uma exceção. #48663 (Anton Popov).
- Corrige as dependências de tabelas em caso de falha no RENAME TABLE #48683 (Azat Khuzhin).
- Se a chave primária tiver colunas duplicadas (o que só é possível em projeções), isso poderia levar, em versões anteriores, ao bug #48838 (Amos Bird).
- Correção de uma condição de corrida no ZooKeeper durante o join de send_thread/receive_thread #48849 (Alexander Gololobov).
- Corrige erro inesperado no nome da parte ao tentar remover uma parte detached ignorada com zero copy replication #48862 (Michael Lex).
- Corrige a leitura de uma coluna Parquet/Arrow
Date32em uma coluna que não éDate32#48864 (Kruglov Pavel). - Corrige o erro
UNKNOWN_IDENTIFIERao selecionar de uma tabela com row policy e coluna com pontos #48976 (Kruglov Pavel). - Corrige a agregação com strings Nullable vazias #48999 (LiuNeng).
lançamento do ClickHouse 23.3 LTS, 2023-03-30. Apresentação, Vídeo
Notas de atualização
- As exclusões leves (
DELETE) estão prontas para produção e habilitadas por padrão. A consultaDELETEpara tabelas MergeTree agora está disponível por padrão. - O comportamento das funções
*domain*RFCenetlocmudou ligeiramente: o conjunto de símbolos permitidos na autoridade da URL foi flexibilizado para melhorar a conformidade. #46841 (Azat Khuzhin). - Foi proibida a criação de tabelas baseadas em KafkaEngine com instruções DEFAULT/EPHEMERAL/ALIAS/MATERIALIZED para colunas. #47138 (Aleksandr Musorin).
- Um recurso de “drenagem assíncrona de conexão” foi removido. As configurações e métricas relacionadas também foram removidas. Era um recurso interno, portanto a remoção não deve afetar usuários que nunca tinham ouvido falar dele. #47486 (Alexander Tokmakov).
- Suporte ao tipo de dado Decimal de 256 bits (mais de 38 dígitos) em
arraySum/Min/Max/Avg/Product,arrayCumSum/CumSumNonNegative,arrayDifference, construção de arrays, operador IN, parâmetros de consulta,groupArrayMovingSum, funções estatísticas,min/max/any/argMin/argMax, protocolo wire do PostgreSQL, table engine e função MySQL,sumMap,mapAdd,mapSubtract,arrayIntersect. Adicionado suporte a inteiros grandes emarrayIntersect. Funções de agregação estatísticas que envolvem momentos (comocorrou váriosTTests) usarãoFloat64como representação interna (antes desta mudança elas usavamDecimal128, mas isso não fazia sentido), e essas funções podem retornarnanem vez deinfem caso de variância infinita. Algumas funções eram permitidas em tipos de dadoDecimal256, mas retornavamDecimal128em versões anteriores — agora isso foi corrigido. Isso fecha #47569. Isso fecha #44864. Isso fecha #28335. #47594 (Alexey Milovidov). backup_threads/restore_threadspassam a ser configurações do servidor (em vez de configurações do usuário). #47881 (Azat Khuzhin).- Não permitir índices secundários constantes e não determinísticos #46839 (Anton Popov).
Nova funcionalidade
- Adiciona um novo modo de dividir o trabalho entre as réplicas usando as configurações
parallel_replicas_custom_keyeparallel_replicas_custom_key_filter_type. Se o cluster consistir em um único shard com várias réplicas, atémax_parallel_replicasserão escolhidas aleatoriamente e tratadas como shards. Para cada shard, um filtro correspondente é adicionado à consulta no nó iniciador antes de ela ser enviada ao shard. Se o cluster consistir em múltiplos shards, ele se comportará da mesma forma quesample_key, mas com a possibilidade de definir uma chave arbitrária. #45108 (Antonio Andelic). - Uma opção para exibir resultado parcial ao cancelar: adicionada a configuração de consulta
partial_result_on_first_cancel, permitindo que a consulta cancelada (por exemplo, por Ctrl-C) retorne um resultado parcial. #45689 (Alexey Perevyshin). - Adicionado suporte a motores de tabela arbitrários em tabelas temporárias (exceto os motores Replicated e KeeperMap). Fecha #31497. #46071 (Roman Vasin).
- Adicionado suporte à replicação de funções SQL definidas pelo usuário com armazenamento centralizado no Keeper. #46085 (Aleksei Filatov).
- Implementado
system.server_settings(semelhante asystem.settings), que conterá configurações do servidor. #46550 (pufit). - Suporte à consulta
UNDROP TABLE. Fecha #46811. #47241 (chen). - Permite grants separados para named collections (por exemplo, para que seja possível conceder acesso a
SHOW/CREATE/ALTER/DROP named collectionapenas a determinadas coleções, em vez de a todas de uma só vez). Fecha #40894. Adiciona o novo tipo de acessoNAMED_COLLECTION_CONTROL, que não é concedido ao usuáriodefaulta menos que seja explicitamente adicionado à configuração do usuário (ele é necessário para poder executarGRANT ALL); além disso,show_named_collectionsnão precisa mais ser especificado manualmente para que o usuáriodefaulttenha direitos de acesso completos, como acontecia na versão 23.2. #46241 (Kseniia Sumarokova). - Permitir discos personalizados aninhados. Antes, os discos personalizados suportavam apenas uma estrutura de discos plana. #47106 (Kseniia Sumarokova).
- Adiciona a função
widthBucket(com o aliasWIDTH_BUCKETpara compatibilidade). #42974. #46790 (avoiderboi). - Adiciona a nova função
parseDateTime/parseDateTimeInJodaSyntaxde acordo com a string de formato especificada.parseDateTimeconverteStringemDateTimena sintaxe MySQL, eparseDateTimeInJodaSyntaxconverte na sintaxe Joda. #46815 (李扬). - Use
dummy UInt8como estrutura padrão da função de tabelanull. Fecha #46930. #47006 (flynn). - Suporte a formato de data com vírgula, como
Dec 15, 2021, na funçãoparseDateTimeBestEffort. Fecha #46816. #47071 (chen). - Adicionadas as configurações
http_wait_end_of_queryehttp_response_buffer_size, que correspondem aos parâmetros de URLwait_end_of_queryebuffer_sizeda interface HTTP. Isso permite alterar essas configurações nos perfis. #47108 (Vladimir C). - Adiciona a tabela
system.dropped_tables, que mostra as tabelas removidas de bancos de dadosAtomic, mas que ainda não foram totalmente excluídas. #47364 (chen). - Adiciona
INSTRcomo alias depositionCaseInsensitivepara compatibilidade com o MySQL. Fecha #47529. #47535 (flynn). - Adicionada a função
toDecimalString, que permite converter números em string com precisão fixa. #47838 (Andrey Zvonov). - Adiciona uma configuração do MergeTree
max_number_of_mutations_for_replica. Ela limita o número de mutações de partes por réplica ao valor especificado. Zero significa que não há limite para o número de mutações por réplica (a execução ainda pode ser restringida por outras configurações). #48047 (Vladimir C). - Adiciona a função relacionada a map
mapFromArrays, que permite criar um map a partir de um par de arrays. #31125 (李扬). - Permite controlar a compressão nos formatos de saída Parquet/ORC/Arrow e adiciona suporte a mais formatos de entrada com compressão. Isso fecha #13541. #47114 (Kruglov Pavel).
- Adiciona autenticação por certificado SSL de usuário ao protocolo nativo. Fecha #47077. #47596 (Nikolay Degterinsky).
- Adicionadas as variantes *OrNull() e *OrZero() para
parseDateTime, e adicionado o aliasstr_to_datepara compatibilidade com o MySQL. #48000 (Robert Schulze). - Adicionado o operador
REGEXP(semelhante aos operadores “LIKE”, “IN”, “MOD” etc.) para maior compatibilidade com o MySQL #47869 (Robert Schulze).
Melhoria de desempenho
- As marcas em memória agora são compactadas e usam de 3 a 6x menos memória. #47290 (Michael Kolupaev).
- Backups com grandes quantidades de arquivos eram inacreditavelmente lentos nas versões anteriores. Não mais. Agora estão inacreditavelmente rápidos. #47251 (Alexey Milovidov). Foi introduzido um pool de threads separado para as operações de E/S dos backups. Isso permitirá escalá-lo independentemente dos outros pools e aumentar o desempenho. #47174 (Nikita Mikhaylov). Use a solicitação MultiRead e novas tentativas para coletar metadados na etapa final do processamento do backup. #47243 (Nikita Mikhaylov). Se um backup e os dados que estão sendo restaurados estiverem ambos no S3, a partir de agora deverá ser usada a cópia no lado do servidor. #47546 (Vitaly Baranov).
- Corrigido o excesso de leitura nas consultas com
FINAL. #47801 (Nikita Taranov). - A configuração
max_final_threadsserá definida com base no número de núcleos na inicialização do servidor (usando o mesmo algoritmo demax_threads). Isso melhora a concorrência da execução definalem servidores com um grande número de CPUs. #47915 (Nikita Taranov). - Permite executar o pipeline de leitura do Dicionário DIRECT com origem CLICKHOUSE em várias threads. Para habilitar, defina
dictionary_use_async_executor=1na seçãoSETTINGSda origem na instruçãoCREATE DICTIONARY. #47986 (Vladimir C). - Otimiza o desempenho da agregação com uma chave Nullable. #45772 (LiuNeng).
- Implementado o uso do índice
tokenbf_v1em minúsculas parahasTokenOrNull,hasTokenCaseInsensitiveehasTokenCaseInsensitiveOrNull. #46252 (ltrk2). - Otimize as funções
positioneLIKEcom a busca pelos dois primeiros caracteres usando SIMD. #46289 (Jiebin Sun). - Otimizadas as queries em
system.detached_parts, que podiam ser significativamente grandes. Adicionadas várias fontes em relação à limitação de tamanho do bloco; em cada bloco, um pool de threads de E/S é usado para calcular o tamanho da parte, ou seja, para fazer chamadas de sistema em paralelo. #46624 (Sema Checherinda). - Aumenta o valor padrão de
max_replicated_merges_in_queuepara tabelas ReplicatedMergeTree de 16 para 1000. Isso permite operações de merge em segundo plano mais rápidas em clusters com um número muito grande de réplicas, como clusters com armazenamento compartilhado no ClickHouse Cloud. #47050 (Alexey Milovidov). - Atualizado o
clickhouse-copierpara usarGROUP BYem vez deDISTINCTpara obter a lista de partições. Em tabelas grandes, isso reduziu o tempo de consulta de mais de 500s para menos de 1s. #47386 (Clayton McClure). - Corrigida a degradação de desempenho em
ASOF JOIN. #47544 (Ongkong). - Ainda mais processamento em lotes no Keeper. Melhora o desempenho ao evitar dividir lotes em solicitações de leitura. #47978 (Antonio Andelic).
- Permitir PREWHERE para Merge com diferentes expressões DEFAULT nas colunas. #46831 (Azat Khuzhin).
Funcionalidade experimental
- Réplicas paralelas: melhorou o desempenho geral ao aproveitar melhor a réplica local e passou a proibir, por padrão, a leitura com réplicas paralelas em MergeTree não replicado. #47858 (Nikita Mikhaylov).
- Suporte ao push down de filtro para a tabela da esquerda em JOIN com tabelas
Join,DictionaryeEmbeddedRocksDBse o analisador experimental estiver habilitado. #47280 (Maksim Kita). - Agora, o ReplicatedMergeTree com replicação zero copy gera menos carga no Keeper. #47676 (alesapin).
- Corrigida a criação de visão materializada com MaterializedPostgreSQL #40807 (Maksim Buren).
Melhoria
- Habilite
input_format_json_ignore_unknown_keys_in_named_tuplepor padrão. #46742 (Kruglov Pavel). - Permitir ignorar erros ao enviar para MATERIALIZED VIEW (adiciona a nova configuração
materialized_views_ignore_errors, com padrãofalse, mas ela é definida comotruepara fazer flush dos logs nas tabelassystem.*_logincondicionalmente). #46658 (Azat Khuzhin). - Rastreie em memória a fila de arquivos de envios distribuídos. #45491 (Azat Khuzhin).
- Agora, os headers
X-ClickHouse-Query-IdeX-ClickHouse-Timezonesão adicionados às respostas de todas as consultas via protocolo HTTP. Antes, isso era feito apenas para consultasSELECT. #46364 (Anton Popov). - Tabelas externas de
MongoDB: suporte à conexão com um conjunto de réplicas por meio de uma URI com uma enumeração de host:port e suporte à opção readPreference em dicionários do MongoDB. Exemplo de URI: mongodb://db0.example.com:27017,db1.example.com:27017,db2.example.com:27017/?replicaSet=myRepl&readPreference=primary. #46524 (artem-yadr). - Esta melhoria deve ser imperceptível para você. Reimplementada a análise de projection com base no plano de consulta. Adicionada a configuração
query_plan_optimize_projection=1para alternar entre a versão antiga e a nova. Corrige #44963. #46537 (Nikolai Kochetov). - Use o formato Parquet v2 em vez do v1 como padrão no formato de saída. Adicione a configuração
output_format_parquet_versionpara controlar a versão do Parquet, com os possíveis valores1.0,2.4,2.6,2.latest(padrão). #46617 (Kruglov Pavel). - Agora é possível usar a nova sintaxe de configuração para configurar tópicos do Kafka com ponto (
.) no nome. #46752 (Robert Schulze). - Corrige heurísticas que verificam padrões do hyperscan em busca de repetições problemáticas. #46819 (Robert Schulze).
- Não reporte em system.errors que o nó ZK já existe quando um bloco tiver sido criado simultaneamente por uma réplica diferente. #46820 (Raúl Marín).
- Aumente o limite de arquivos abertos no
clickhouse-local. Ele poderá ler tabelaswebem servidores com um grande número de núcleos de CPU. Não interrompa a leitura do mecanismo de tabela URL em caso de arquivos abertos demais. Isso encerra #46852. #46853 (Alexey Milovidov). - As exceções geradas quando não é possível analisar números agora têm uma mensagem de exceção mais fácil de entender. #46917 (Robert Schulze).
- Adicionada atualização em
system.backupsapós cada tarefa processada para acompanhar o progresso dos backups. #46989 (Aleksandr Musorin). - Permite a conversão de tipos no formato de entrada Native. Adicionada a configuração
input_format_native_allow_types_conversionpara controlar isso (ativada por padrão). #46990 (Kruglov Pavel). - Permite usar IPv4 na função
rangepara gerar intervalos de IP. #46995 (Yakov Olkhovskiy). - Aprimora a mensagem de exceção quando não é possível mover uma parte de um volume/disco para outro. #47032 (alesapin).
- Adicionado suporte ao tipo
Boolna funçãoJSONType. Anteriormente, o tipoNullera retornado por engano para valores booleanos. #47046 (Anton Popov). - Use o parâmetro
_request_bodypara configurar consultas HTTP predefinidas. #47086 (Constantine Peresypkin). - Indentação automática no SQL Editor da UI integrada ao pressionar Enter. #47113 (Alexey Korepanov).
- A autoextração com ‘sudo’ tentará definir o UID e o GID dos arquivos extraídos para o usuário em execução. #47116 (Yakov Olkhovskiy).
- Anteriormente, o segundo argumento da função
repeataceitava apenas um tipo inteiro sem sinal, o que significava que não podia receber valores como -1. Esse comportamento diferia do da função do Spark. Nesta atualização, a funçãorepeatfoi modificada para corresponder ao comportamento da função do Spark. Agora, ela aceita os mesmos tipos de entrada, incluindo inteiros negativos. Foram realizados testes extensivos para verificar a correção da implementação atualizada. #47134 (KevinyhZou). Observação: a entrada de changelog foi reescrita pelo ChatGPT. - Remover a parte
::__1dos stacktraces. Exibirstd::basic_string<char, ...comoStringnos stacktraces. #47171 (Mike Kot). - Reimplementação do modo interservidor para evitar ataques de repetição (observe que essa alteração é retrocompatível com servidores mais antigos). #47213 (Azat Khuzhin).
- Melhora no reconhecimento de grupos de expressões regulares e aprimoramento do dicionário regexp_tree. #47218 (Han Fei).
- Melhoria no Keeper: adiciona um novo 4LW
clrspara limpar os recursos usados pelo Keeper (por exemplo, liberar memória não utilizada). #47256 (Antonio Andelic). - Adiciona argumentos opcionais aos codecs
DoubleDelta(bytes_size),Gorilla(bytes_size),FPC(level, float_size), o que permite usar esses codecs noclickhouse-compressorsem o tipo da coluna. Corrige possíveis interrupções e erros aritméticos noclickhouse-compressorcom esses codecs. Correção: https://github.com/ClickHouse/ClickHouse/discussions/47262. #47271 (Kruglov Pavel). - Adicionado suporte a tipos bigint na função
runningDifference. Fecha #47194. #47322 (Nikolay Degterinsky). - Adiciona uma janela de expiração para credenciais do S3 com prazo de expiração, a fim de evitar erros
ExpiredTokenem alguns casos extremos. Isso pode ser controlado pela configuraçãoexpiration_window_seconds; o padrão é 120 segundos. #47423 (Antonio Andelic). - Adicionado suporte a Decimals e Date32 no formato
Avro. #47434 (Kruglov Pavel). - Não inicie o servidor se for detectada uma conversão interrompida de
OrdinaryparaAtomic; exiba uma mensagem de erro mais clara com instruções de solução de problemas. #47487 (Alexander Tokmakov). - Adiciona uma nova coluna
kindàsystem.opentelemetry_span_log. Essa coluna armazena o valor de SpanKind definido no OpenTelemetry. #47499 (Frank Chen). - Permite ler/gravar arrays aninhados no formato
Protobufusando apenas o nome do campo raiz como nome da coluna. Antes, o nome da coluna precisava conter todos os nomes dos campos aninhados (comoa.b.c Array(Array(Array(UInt32))), mas agora você pode usar apenasa Array(Array(Array(UInt32))). #47650 (Kruglov Pavel). - Adicionado um modificador
STRICTopcional paraSYSTEM SYNC REPLICA, que faz a consulta aguardar até que a fila de replicação fique vazia (como funcionava antes em https://github.com/ClickHouse/ClickHouse/pull/45648). #47659 (Alexander Tokmakov). - Melhora os nomes de alguns logs de spans do OpenTelemetry. #47667 (Frank Chen).
- Impede o uso de cadeias excessivamente longas de combinadores de funções de agregação (isso pode levar a consultas lentas na etapa de análise). Isso fecha #47715. #47716 (Alexey Milovidov).
- Suporte a subconsulta em views parametrizadas; corrige #46741 #47725 (SmitaRKulkarni).
- Corrigido vazamento de memória na integração com MySQL (reproduzido com
connection_auto_close=1). #47732 (Kseniia Sumarokova). - Melhoria no tratamento de erros no código relacionado a parâmetros Decimal, resultando em mensagens de erro mais informativas. Antes, quando parâmetros Decimal incorretos eram fornecidos, a mensagem de erro gerada era pouco clara ou pouco útil. Com esta atualização, a mensagem de erro exibida foi corrigida para fornecer informações mais detalhadas e úteis, facilitando a identificação e a correção de problemas relacionados a parâmetros Decimal. #47812 (Yu Feng). Observação: esta entrada de changelog foi reescrita pelo ChatGPT.
- O parâmetro
exact_rows_before_limité usado para fazer com querows_before_limit_at_leastreflita com precisão o número de linhas retornadas antes de o limite ser atingido. Este pull request corrige problemas encontrados quando a consulta envolve processamento distribuído em vários shards ou operações de ordenação. Antes desta atualização, esses cenários não funcionavam como esperado. #47874 (Amos Bird). - Introspecção das métricas de ThreadPools. #47880 (Azat Khuzhin).
- Adiciona os eventos de perfil
WriteBufferFromS3MicrosecondseWriteBufferFromS3RequestsErrors. #47885 (Antonio Andelic). - Adicionadas as opções
--linke--noninteractive(-y) à instalação do ClickHouse. Corrige #47750. #47887 (Nikolay Degterinsky). - Corrigida a exceção
UNKNOWN_TABLEao fazer attach de uma visão materializada com tabelas dependentes indisponíveis. Isso pode ser útil ao tentar restaurar o estado a partir de um backup. #47975 (MikhailBurdukov). - Corrigido o caso em que o
path(opcional) não é adicionado à configuração de um disco criptografado. #47981 (Kseniia Sumarokova). - Suporte a CTE em views parametrizadas Implementação: implementação atualizada para permitir parâmetros de consulta durante a avaliação de subconsultas escalares. #48065 (SmitaRKulkarni).
- Suporte a inteiros grandes
(U)Int128/(U)Int256,Mapcom qualquer tipo de chave eDateTime64com qualquer nível de precisão (não apenas 3 e 6). #48119 (Kruglov Pavel). - Permitir ignorar erros relacionados a valores enum desconhecidos em formatos de entrada por linha. #48133 (Alexey Milovidov).
Melhorias de compilação/testes/empacotamento
- O ClickHouse agora é compilado com
C++23. #47424 (Robert Schulze). - Faz fuzzing de queries
EXPLAINno AST Fuzzer. #47803 #47852 (flynn). - Separou o teste de estresse da verificação automatizada de compatibilidade retroativa (agora Upgrade check). #44879 (Kruglov Pavel).
- Atualizou a imagem Ubuntu do Docker para amenizar alguns alertas de segurança incorretos. #46784 (Julio Jimenez). Observe que o ClickHouse não tem dependências e não requer Docker.
- Adiciona um prompt para permitir a remoção de um download existente de
clickhouseao usar o download do ClickHouse com “curl | sh”. O prompt é “ClickHouse binary clickhouse already exists. Overwrite? [y/N]”. #46859 (Dan Roscigno). - Corrige um error durante a inicialização do servidor em distribuições antigas (por exemplo, Amazon Linux 2) e em ARM, quando os símbolos da glibc 2.28 não são encontrados. #47008 (Robert Schulze).
- Prepara para o clang 16. #47027 (Amos Bird).
- Adicionou uma check de CI que garante que o ClickHouse possa ser executado com uma glibc antiga em ARM. #47063 (Robert Schulze).
- Adiciona uma Style check para evitar o uso incorreto da macro
NDEBUG. #47699 (Alexey Milovidov). - Acelera um pouco a compilação. #47714 (Alexey Milovidov).
- Atualiza
vectorscanpara 5.4.9. #47955 (Robert Schulze). - Adiciona um teste unitário para garantir que o logging fatal do Apache Arrow não provoque abortamento. Ele cobre as alterações em ClickHouse/arrow#16. #47958 (Arthur Passos).
- Restaura a capacidade de inicialização da build nativa de depuração do servidor no macOS. #48050 (Robert Schulze). Observação: esta mudança é relevante apenas para desenvolvimento, pois as builds oficiais do ClickHouse são feitas com compilação cruzada.
Bug (mau funcionamento visível para o usuário em um lançamento estável oficial)
- Corrige a reinicialização do parser de formatos, testa o processamento de mensagens inválidas no
Kafka#45693 (Kruglov Pavel). - Corrige o cálculo do tamanho dos dados no Keeper #46086 (Antonio Andelic).
- Corrigido um bug nas tentativas automáticas de repetir a consulta
DROP TABLEcom tabelasReplicatedMergeTreee bancos de dadosAtomic. Em casos raros, isso poderia causar os errosCan't get data for node /zk_path/log_pointereThe specified key does not existse a sessão do ZooKeeper expirasse durante o DROP e uma nova tabela replicada com o mesmo caminho no ZooKeeper fosse criada em paralelo. #46384 (Alexander Tokmakov). - Corrige a recursão incorreta de alias durante a normalização de consultas, o que impedia a execução de algumas delas. #46609 (Raúl Marín).
- Correção da serialização/desserialização de IPv4/IPv6 em formatos binários #46616 (Kruglov Pavel).
- ActionsDAG: não alterar o resultado de
anddurante a otimização #46653 (Salvatore Mesoraca). - Melhoria no cancelamento de consultas quando um cliente falha #46681 (Alexander Tokmakov).
- Correção de operações aritméticas na otimização de agregação #46705 (Duc Canh Le).
- Corrige possível falha do
clickhouse-localdurante a inferência de esquema do JSONEachRow #46731 (Kruglov Pavel). - Corrigida a alteração de uma Role expirada #46772 (Vitaly Baranov).
- Corrigido o acúmulo combinado de colunas PREWHERE de várias etapas #46785 (Alexander Gololobov).
- Use o intervalo inicial para determinar o tamanho do arquivo no buffer de leitura HTTP. Sem essa alteração, alguns arquivos remotos não podiam ser processados. #46824 (Antonio Andelic).
- Corrige a barra de progresso incorreta ao usar tabelas URL #46830 (Antonio Andelic).
- Corrige relatório do MSan na função
maxIntersections#46847 (Alexey Milovidov). - Corrige um erro no tipo de dado
Map#46856 (Alexey Milovidov). - Corrige resultados incorretos de algumas buscas com
LIKEquando o padrãoLIKEcontém caracteres não escapáveis entre aspas #46875 (Robert Schulze). - Correção - WITH FILL causava um encerramento abrupto quando o Filling Transform processava um bloco vazio #46897 (Yakov Olkhovskiy).
- Corrige a inferência de data e inteiro a partir de string em JSON #46972 (Kruglov Pavel).
- Corrige bug na escolha do disco da replicação zero-copy durante o fetch #47010 (alesapin).
- Corrigido um erro de digitação na definição do serviço systemd #47051 (Palash Goel).
- Corrigido o erro NOT_IMPLEMENTED com CROSS JOIN e algorithm = auto #47068 (Vladimir C).
- Corrigido o problema em que a tabela ‘ReplicatedMergeTree’ falhava ao inserir dois registros semelhantes quando o ‘part_type’ estava configurado no modo ‘InMemory’ (recurso experimental). #47121 (liding1992).
- Dicionários externos / library-bridge: corrigido o erro “método desconhecido da biblioteca ‘extDict_libClone’” #47136 (alex filatov).
- Corrige uma condição de corrida em um grace hash join com limite #47153 (Vladimir C).
- Corrigido o suporte do PREWHERE para colunas concretas #47154 (Azat Khuzhin).
- Corrigido um possível deadlock no status da consulta #47161 (Kruglov Pavel).
- Proibir
insert selectna mesma tabelaJoin, pois isso leva a um deadlock #47260 (Vladimir C). - Ignorar partições já mescladas nas mesclagens de
min_age_to_force_merge_seconds#47303 (Antonio Andelic). - Modificar find_first_symbols para que funcione como esperado com find_first_not_symbols #47304 (Arthur Passos).
- Corrigida a inferência de números grandes em CSV #47410 (Kruglov Pavel).
- Desabilitado o otimizador de expressões lógicas para expressões com aliases. #47451 (Nikolai Kochetov).
- Corrigido erro em
decodeURLComponent#47457 (Alexey Milovidov). - Correção do gráfico do EXPLAIN com projection #47473 (flynn).
- Corrigidos os parâmetros de consulta #47488 (Alexey Milovidov).
- View parametrizada: uma correção de bug. #47495 (SmitaRKulkarni).
- Fuzzer para formatos de dados e as correções correspondentes. #47519 (Alexey Milovidov).
- Corrige a verificação de monotonicidade de
DateTime64#47526 (Antonio Andelic). - Corrige a “incompatibilidade na estrutura do bloco” para uma coluna Nullable LowCardinality #47537 (Nikolai Kochetov).
- Correção correta de um bug no Apache Parquet #45878 #47538 (Kruglov Pavel).
- Corrige a análise paralela de
BSONEachRowquando o tamanho do documento é inválido #47540 (Kruglov Pavel). - Preserva o erro em
system.distribution_queuenoSYSTEM FLUSH DISTRIBUTED#47541 (Azat Khuzhin). - Verificação de colunas duplicadas no formato
BSONEachRow#47609 (Kruglov Pavel). - Corrigida a espera pelo bloqueio de zero copy durante a movimentação #47631 (alesapin).
- Corrigida a agregação por partições #47634 (Nikita Taranov).
- Corrigido erro na serialização de tuple como array no formato
BSONEachRow#47690 (Kruglov Pavel). - Corrige travamento em
polygonsSymDifferenceCartesian#47702 (pufit). - Corrigida a leitura, no armazenamento
File, de arquivos compactados com compressãozlibegzip#47796 (Anton Popov). - Melhora na detecção de consultas vazias no PostgreSQL (para o driver pgx em Golang) #47854 (Azat Khuzhin).
- Corrigida a verificação da monotonicidade de DateTime em tipos LowCardinality #47860 (Antonio Andelic).
- Use restore_threads (não backup_threads) para RESTORE ASYNC #47861 (Azat Khuzhin).
- Corrigido o DROP COLUMN com ReplicatedMergeTree contendo projeções #47883 (Antonio Andelic).
- Correção para a recuperação do banco de dados Replicated #47901 (Alexander Tokmakov).
- Correção emergencial para avisos muito verbosos em HTTP #47903 (Alexander Tokmakov).
- Corrige o erro “Valor do campo muito longo” em
catboostEvaluate#47970 (Robert Schulze). - Corrigido #36971: Watchdog: encerrar com código diferente de zero se o processo filho for encerrado #47973 (Коренберг Марк).
- Correção para “o arquivo de índice
cidxestá mais longo do que o esperado” #48010 (SmitaRKulkarni). - Corrige a consulta do MaterializedPostgreSQL para obter atributos (identidade da réplica) #48015 (Solomatov Sergei).
- parseDateTime(): Corrige UB (overflow de inteiro com sinal) #48019 (Robert Schulze).
- Use nomes exclusivos para Records no Avro para evitar reutilizar o esquema deles #48057 (Kruglov Pavel).
- Definir corretamente os tempos limite do socket TCP/HTTP no Keeper #48108 (Antonio Andelic).
- Corrigida possível chamada de membro em ponteiro nulo no formato
Avro#48184 (Kruglov Pavel).
Lançamento do ClickHouse 23.2, 2023-02-23. Apresentação, Vídeo
Mudança incompatível com versões anteriores
- Estende a função “toDayOfWeek()” (alias: “DAYOFWEEK”) com um argumento de modo que define se a semana começa na segunda-feira ou no domingo e se a contagem começa em 0 ou 1. Para manter a consistência com outras funções de date time, o argumento de modo foi inserido entre os argumentos de tempo e fuso horário. Isso quebra o uso existente da sintaxe de 2 argumentos (antes não documentada) “toDayOfWeek(time, time_zone)”. A correção é reescrever a função como “toDayOfWeek(time, 0, time_zone)”. #45233 (Robert Schulze).
- Renomeia a configuração
max_query_cache_sizeparafilesystem_cache_max_download_size. #45614 (Kseniia Sumarokova). - O usuário
defaultnão terá, por padrão, permissões para o tipo de acessoSHOW NAMED COLLECTION(por exemplo, o usuáriodefaultnão poderá mais conceder ALL a outros usuários como antes; portanto, este PR é incompatível com versões anteriores). #46010 (Kseniia Sumarokova). - Se a cláusula SETTINGS for especificada antes da cláusula FORMAT, as configurações também serão aplicadas à formatação. #46003 (Azat Khuzhin).
- Remove o suporte à configuração
materialized_postgresql_allow_automatic_update(que, por padrão, ficava desativada). #46106 (Kseniia Sumarokova). - Melhora ligeiramente o desempenho de
countDigitsem datasets realistas. Isso fechou #44518. Em versões anteriores,countDigits(0)retornava0; agora retorna1, o que é mais correto e está de acordo com a documentação existente. #46187 (Alexey Milovidov). - Proíbe a criação de novas colunas compactadas com uma combinação dos codecs “Delta” ou “DoubleDelta” seguida pelos codecs “Gorilla” ou “FPC”. Isso pode ser contornado usando a configuração “allow_suspicious_codecs = true”. #45652 (Robert Schulze).
Nova funcionalidade
- Adicionar
StorageIceberge a função de tabelaicebergpara acessar tabelas Iceberg armazenadas no S3. #45384 (flynn). - Permite configurar o armazenamento com
SETTINGS disk = '<disk_name>'(em vez destorage_policy) e com a criação explícita de discoSETTINGS disk = disk(type=s3, ...). #41976 (Kseniia Sumarokova). - Expor contadores
ProfileEventsemsystem.part_log. #38614 (Bharat Nallan). - Aprimoramento do engine
ReplacingMergeTreeexistente para permitir inserções duplicadas. Ele combina os recursos deReplacingMergeTreeeCollapsingMergeTreeem um único engine MergeTree. Os dados excluídos não são retornados nas consultas, mas também não são removidos do disco. #41005 (youennL-cs). - Adiciona a função
generateULID. Fecha #36536. #44662 (Nikolay Degterinsky). - Adiciona a função de agregação
corrMatrix, calculando cada par de colunas. Além disso, como as funções de agregaçãocovarSampecovarPopsão semelhantes acorr, adiciono tambémcovarSampMatrixecovarPopMatrix. @alexey-milovidov fecha #44587. #44680 (FFFFFFFHHHHHHH). - Adiciona a função arrayShuffle para permutações aleatórias de arrays. #45271 (Joanna Hulboj).
- Suporte aos tipos
FIXED_SIZE_BINARYno Arrow eFIXED_LENGTH_BYTE_ARRAYnoParquet, com mapeamento paraFixedString. Adicionadas as configuraçõesoutput_format_parquet_fixed_string_as_fixed_byte_array/output_format_arrow_fixed_string_as_fixed_byte_arraypara controlar o tipo de saída padrão deFixedString. Fecha #45326. #45340 (Kruglov Pavel). - Adiciona uma nova coluna
last_exception_timea system.replication_queue. #45457 (Frank Chen). - Adiciona duas novas funções que permitem usar chaves/sementes definidas pelo usuário com SipHash. #45513 (Salvatore Mesoraca).
- Permite uma versão de três argumentos para a função de tabela
format. fecha #45808. #45873 (FFFFFFFHHHHHHH). - Adicionado suporte ao formato
JodaTimepara ‘x’,‘w’,‘S’. Consulte https://joda-time.sourceforge.net/apidocs/org/joda/time/format/DateTimeFormat.html. #46073 (zk_kiger). - Suporte para a função de janela
ntile. (lgbo). - Adiciona a configuração
finalpara aplicar implicitamente o modificadorFINALa cada tabela. #40945 (Arthur Passos). - Adicionadas as funções
arrayPartialSortearrayPartialReverseSort. #46296 (Joanna Hulboj). - O novo parâmetro HTTP
client_protocol_versionpermite definir uma versão do protocolo do cliente para respostas HTTP no formato Native. #40397. #46360 (Geoff Genz). - Adiciona a nova função
regexpExtract, como a funçãoREGEXP_EXTRACTdo Spark, para compatibilidade. Ela é semelhante à função existenteextract. #46469 (李扬). - Adiciona a nova função
JSONArrayLength, que retorna o número de elementos no array JSON de nível mais externo. A função retorna NULL se a string JSON de entrada for inválida. #46631 (李扬).
Melhoria de desempenho
- A lógica introduzida funciona se a condição PREWHERE for uma conjunção de múltiplas condições (cond1 AND cond2 AND … ). Ela agrupa em passos as condições que exigem a leitura das mesmas colunas. Após cada passo, a parte correspondente da condição completa é avaliada, e as linhas resultantes podem ser filtradas. Isso permite ler menos linhas nos passos seguintes, economizando largura de banda de E/S e exigindo menos processamento. Por enquanto, essa lógica está desabilitada por padrão. Ela será habilitada por padrão em um dos próximos lançamentos, quando se souber que não causa regressões; portanto, seu uso em testes é fortemente recomendado. Ela pode ser controlada por 2 configurações: “enable_multiple_prewhere_read_steps” e “move_all_conditions_to_prewhere”. #46140 (Alexander Gololobov).
- Uma opção foi adicionada para agregar partições de forma independente, se a chave de partição da tabela e a chave de agrupamento forem compatíveis. Ela é controlada pela configuração
allow_aggregate_partitions_independently. Fica desabilitada por padrão devido à aplicabilidade limitada (consulte a documentação). #45364 (Nikita Taranov). - Permite usar o algoritmo de mesclagem vertical com partes no formato Compact. Isso permitirá que o servidor ClickHouse use muito menos memória nas operações em segundo plano. Isso fecha #46084. #45681 #46282 (Anton Popov).
- Otimização do leitor de
Parquetcom o uso de um leitor em lote. #45878 (LiuNeng). - Adicionado o novo método
local_filesystem_read_methodio_uring, baseado no subsistema assíncrono do Linux io_uring, o que melhora o desempenho de leitura em quase todos os casos em comparação com o método padrãopread. #38456 (Saulius Valatka). - Reescrita de funções de agregação com a expressão
ifcomo argumento, quando forem logicamente equivalentes. Por exemplo,avg(if(cond, col, null))pode ser reescrito como avgIf(cond, col). Isso melhora o desempenho. #44730 (李扬). - Melhoria no desempenho das funções lower/upper com instruções avx512. #37894 (yaqi-zhao).
- Removida a limitação pela qual, em sistemas com >=32 núcleos e SMT desabilitado, o ClickHouse usava apenas metade dos núcleos (caso em que o Hyper Threading é desabilitado na BIOS). #44973 (Robert Schulze).
- Melhora o desempenho da função
multiIfcom execução colunar, com ganho de velocidade de 2,3x. #45296 (李扬). - Adiciona uma otimização para a função
positionquando a subcadeia buscada está vazia. #45382 (李扬). - Habilitar a otimização
query_plan_remove_redundant_sortingpor padrão. Otimização implementada em #45420. #45567 (Igor Nikonov). - Aumentado o tamanho dos fragmentos da codificação de transferência HTTP para melhorar o desempenho de consultas grandes usando a interface HTTP. #45593 (Geoff Genz).
- Melhorado o desempenho de consultas
SELECTcurtas que leem de tabelas com um grande número de colunasArray/Map/Nested. #45630 (Anton Popov). - Melhora o desempenho da filtragem para inteiros grandes e tipos decimais. #45949 (李扬).
- Essa alteração pode reduzir significativamente a sobrecarga para obter o filtro de
ColumnNullable(UInt8)e melhorar o desempenho geral das consultas. Para avaliar o impacto dessa alteração, adotamos o benchmark TPC-H, mas alteramos os tipos das colunas de non-nullable para nullable e medimos o QPS das consultas como indicador de desempenho. #45962 (Zhiguo Zhou). - Define as colunas virtuais
_parte_partition_idcomo do tipoLowCardinality(String). Fecha #45964. #45975 (flynn). - Melhorado o desempenho da conversão de Decimal quando a escala não muda. #46095 (Alexey Milovidov).
- Permite aumentar o pré-carregamento na leitura de dados. #46168 (Kseniia Sumarokova).
- Reescrita de
arrayExists(x -> x = 1, arr)->has(arr, 1), melhorando o desempenho em 1,34x. #46188 (李扬). - Corrigido o uso excessivo de memória nas mesclagens verticais em discos não remotos. Respeitado
max_insert_delayed_streams_for_parallel_writeno disco remoto. #46275 (Nikolai Kochetov). - Atualize o zstd para a v1.5.4. Ela traz pequenas melhorias de desempenho e na taxa de compressão. Se você executar réplicas com versões diferentes do ClickHouse, poderá ver mensagens de erro adequadas
Data after merge/mutation is not byte-identical to data on another replicas., com explicação. Essas mensagens são normais, e você não deve se preocupar. #46280 (Raúl Marín). - Corrige a queda de desempenho causada por #39737. #46309 (Alexey Milovidov).
- O handle
replicas_statusresponderá rapidamente mesmo no caso de uma fila de replicação grande. #46310 (Alexey Milovidov). - Adicionado suporte a avx512 para a função de agregação
sum, aritmética unária e comparação. #37870 (zhao zhou). - Reescreveu o código relacionado à distribuição de marcas e à coordenação geral da leitura para obter o máximo ganho de desempenho. Isso fecha #34527. #43772 (Nikita Mikhaylov).
- Remoção de cláusulas DISTINCT redundantes em consultas (subconsultas). Implementado sobre o plano de consulta. Faz uma otimização semelhante à de
optimize_duplicate_order_by_and_distinctem relação às cláusulas DISTINCT. Pode ser habilitado por meio da configuraçãoquery_plan_remove_redundant_distinct. Relacionado a #42648. #44176 (Igor Nikonov). - Algumas otimizações de reescrita de consultas:
sumIf(123, cond) -> 123 * countIf(1, cond),sum(if(cond, 123, 0)) -> 123 * countIf(cond),sum(if(cond, 0, 123)) -> 123 * countIf(not(cond))#44728 (李扬). - Foi aprimorada a forma como a mesclagem limitada por memória e a agregação em ordem no topo do plano de consulta interagem. Antes, em alguns casos, recorríamos à ordenação explícita para AIO mesmo quando isso não era necessário. #45892 (Nikita Taranov).
- As mesclagens concorrentes são agendadas com round-robin por padrão para garantir uma operação justa e sem starvation. Anteriormente, em shards fortemente sobrecarregados, mesclagens grandes podiam acabar preteridas por mesclagens menores devido ao uso de agendamento com prioridade estrita. Foi adicionada a opção de configuração do servidor
background_merges_mutations_scheduling_policypara selecionar o algoritmo de agendamento (round_robinoushortest_task_first). #46247 (Sergei Trifonov).
Melhoria
- Ativar novas tentativas de INSERT por padrão em caso de perda da sessão do ZooKeeper. Já usamos isso em produção. #46308 (Alexey Milovidov).
- Adicionada a opção de ignorar chaves desconhecidas em objetos JSON para tuplas nomeadas (
input_format_json_ignore_unknown_keys_in_named_tuple). #45678 (Azat Khuzhin). - Suporte à otimização da cláusula
where, movendo a expressão da chave de ordenação paraprewhere, em consultas comfinal. #38893. #38950 (hexiaoting). - Adicionadas novas métricas para backups: num_processed_files e processed_files_size, que descrevem o número real de arquivos processados. #42244 (Aleksandr).
- Adicionadas tentativas novamente em erros de DNS entre servidores. #43179 (Anton Kozlov).
- Melhoria do Keeper: tentativa de pré-alocar espaço em disco para evitar problemas indefinidos por falta de espaço. Introdução da configuração
max_log_file_sizepara definir o tamanho máximo dos arquivos de log do Raft do Keeper. #44370 (Antonio Andelic). - Otimizar o comportamento da lógica da API de atraso da réplica quando a réplica estiver em modo somente leitura. #45148 (mateng915).
- Solicita a senha interativamente no clickhouse-client quando uma senha vazia estiver incorreta. Fecha #46702. #46730 (Nikolay Degterinsky).
- Sinalizar a compressão
Gorillaem colunas de tipo não-Float* como suspeita. #45376 (Robert Schulze). - Exibir o nome da réplica que está executando um merge na coluna
postpone_reason. #45458 (Frank Chen). - Salvar o stack trace da exceção em part_log. #45459 (Frank Chen).
- O Dicionário
regexp_treefoi refinado e agora é compatível com https://github.com/ua-parser/uap-core. #45631 (Han Fei). - Verificação de
SYSTEM SYNC REPLICAatualizada, resolve #45508 #45648 (SmitaRKulkarni). - Renomeada a configuração
replication_alter_partitions_syncparaalter_sync. #45659 (Antonio Andelic). - A função de tabela
generateRandome o mecanismo agora suportam tipos de dadosLowCardinality. Isso é útil para testes; por exemplo, você pode escreverINSERT INTO table SELECT * FROM generateRandom() LIMIT 1000. Isso é necessário para depurar #45590. #45661 (Alexey Milovidov). - O cache experimental de resultados de consulta agora oferece configurações mais modulares. #45679 (Robert Schulze).
- Renomeado “cache de resultados de consultas” para “cache de consultas”. #45682 (Robert Schulze).
- adiciona o comando
SYSTEM SYNC FILE CACHE. Ele executará a chamada de sistemasync. #8921. #45685 (DR). - Adiciona uma nova configuração do S3
allow_head_object_request. Este PR torna opcional o uso da requisiçãoGetObjectAttributesem vez deHeadObject, introduzido em https://github.com/ClickHouse/ClickHouse/pull/45288, e a desabilita por padrão. #45701 (Vitaly Baranov). - Adicionada a possibilidade de substituir as configurações de conexão com base nos nomes das conexões (ou seja, agora você não precisa mais armazenar a senha de cada conexão; basta colocar tudo em
~/.clickhouse-client/config.xmle até mesmo usar arquivos de histórico diferentes para cada uma delas, o que também pode ser útil). #45715 (Azat Khuzhin). - Formato Arrow: suporte para o tipo duration. Fecha #45669. #45750 (flynn).
- Amplie o logging no cache de consultas para melhorar a investigação do comportamento do cache. #45751 (Robert Schulze).
- As configurações do cache de consultas no nível do servidor agora podem ser reconfiguradas em tempo de execução. #45758 (Robert Schulze).
- Ocultar a senha nos logs quando os argumentos de uma função de tabela são especificados usando uma coleção nomeada. #45774 (Vitaly Baranov).
- Melhora no cliente interno do S3 para deduzir corretamente regiões e redirecionamentos para diferentes tipos de URL. #45783 (Antonio Andelic).
- Adicionado suporte aos tipos Map, IPv4 e IPv6 no generateRandom. Útil principalmente para testes. #45785 (Raúl Marín).
- Adicionado suporte a empty/notEmpty para tipos IP. #45799 (Yakov Olkhovskiy).
- A coluna
num_processed_filesfoi desmembrada em duas colunas:num_files(para BACKUP) efiles_read(para RESTORE). A colunaprocessed_files_sizefoi desmembrada em duas colunas:total_size(para BACKUP) ebytes_read(para RESTORE). #45800 (Vitaly Baranov). - Adicionar suporte à consulta
SHOW ENGINESpara compatibilidade com MySQL. #45859 (Filatenkov Artur). - Melhorada a forma como o ofuscador lida com consultas. #45867 (Raúl Marín).
- Melhoria no comportamento da conversão para Date para o valor limite 65535 (2149-06-06). #46042 #45914 (Joanna Hulboj).
- Adiciona a configuração
check_referential_table_dependenciespara verificar dependências referenciais noDROP TABLE. Este PR resolve #38326. #45936 (Vitaly Baranov). - Corrige
tupleElementpara retornarNullao receber argumentoNull. Fecha #45894. #45952 (flynn). - Gerar um erro quando nenhum arquivo corresponder ao curinga do S3. Fecha #45587. #45957 (chen).
- Use os dados de estado do cluster para verificar backups/restaurações simultâneos. #45982 (SmitaRKulkarni).
- ClickHouse Client: Use correspondência “exata” para pesquisa difusa, que tem a distinção correta entre maiúsculas e minúsculas e um algoritmo mais adequado para corresponder a consultas SQL. #46000 (Azat Khuzhin).
- Proíbe a sintaxe incorreta de criação de View
CREATE View X TO Y AS SELECT. Fecha #4331. #46043 (flynn). - A família de armazenamento
Logpassou a oferecer suporte à configuração destorage_policy. Fecha #43421. #46044 (flynn). - Aprimora o formato
JSONColumnsquando o resultado está vazio. Fecha #46024. #46053 (flynn). - Adicionada a implementação de referência para SipHash128. #46065 (Salvatore Mesoraca).
- Adicionada uma nova métrica para registrar tempos e bytes de alocação usando
mmap. #46068 (李扬). - Atualmente, para funções como
leftPad,rightPad,leftPadUTF8erightPadUTF8, o segundo argumento,length, deve ser UInt8|16|32|64|128|256. Isso é rígido demais para os usuários do ClickHouse e, além disso, não é consistente com outras funções semelhantes, comoarrayResize,substringetc. #46103 (李扬). - Corrigida a asserção na função
welchTTestna compilação de depuração quando a estatística resultante é NaN. O comportamento foi unificado com o de outras funções semelhantes. Alterado o comportamento destudentTTestpara retornar NaN em vez de gerar uma exceção, pois o comportamento anterior era inconveniente. Isso fecha #41176. Isso fecha #42162. #46141 (Alexey Milovidov). - Uso mais prático de inteiros grandes e ORDER BY WITH FILL. Permite usar inteiros comuns para os pontos de início e fim em WITH FILL ao usar ORDER BY com inteiros grandes (128 bits e 256 bits). Corrige o resultado incorreto para inteiros grandes com pontos de início ou fim negativos. Isso fecha #16733. #46152 (Alexey Milovidov).
- Adicionar as colunas
parts,active_partsetotal_marksemsystem.tablesna issue. #46161 (attack204). - As funções “multi[Fuzzy]Match(Any|AnyIndex|AllIndices}” agora rejeitam expressões regulares que provavelmente seriam avaliadas muito lentamente no vectorscan. #46167 (Robert Schulze).
- Quando
insert_null_as_defaultestá habilitado e a coluna não tem um valor padrão definido, será usado o valor padrão do tipo da coluna. Além disso, este PR corrige o uso de valores padrão para nulls no caso de colunas LowCardinality. #46171 (Kruglov Pavel). - Prefira definir explicitamente as chaves de acesso para clientes S3. Se
use_environment_credentialsestiver definido comotruee o usuário tiver fornecido a chave de acesso por meio da consulta ou da configuração, ela será usada em vez da variável de ambiente. #46191 (Antonio Andelic). - Adiciona um alias “DATE_FORMAT()” para a função “formatDateTime()” para melhorar a compatibilidade com o dialeto SQL do MySQL, amplia a função
formatDateTimecom as substituições “a”, “b”, “c”, “h”, “i”, “k”, “l” “r”, “s”, “W”. ### Entrada de documentação para alterações voltadas ao usuário Breve descrição legível para o usuário:DATE_FORMATé um alias deformatDateTime. Formata um valor Time de acordo com a string de formato fornecida. O formato é uma expressão constante, portanto não é possível ter vários formatos para uma única coluna de resultado. (Forneça um link para formatDateTime). #46302 (Jake Bamrah). - Adicionar
ProfileEventseCurrentMetricsrelacionados às tarefas de callback para réplicas paralelas (tabelass3ClustereMergeTree). #46313 (Alexey Milovidov). - Adicionado suporte a
DELETEeUPDATEem tabelas que usam o mecanismo de armazenamentoKeeperMap. #46330 (Antonio Andelic). - Permitir o uso de parâmetros de consulta em consultas RENAME. Resolve #45778. #46407 (Nikolay Degterinsky).
- Corrige consultas SELECT parametrizadas com o transformador REPLACE. Resolve #33002. #46420 (Nikolay Degterinsky).
- Excluir do cálculo da métrica assíncrona “NumberOfDatabases” o banco de dados interno usado para tabelas temporárias/externas. Isso torna o comportamento consistente com a tabela de sistema “system.databases”. #46435 (Robert Schulze).
- Adicionada a coluna
last_exception_timeà tabela distribution_queue. #46564 (Aleksandr). - Suporte à cláusula IN com parâmetro em views parametrizadas. #46583 (SmitaRKulkarni).
- Não carregue coleções nomeadas na inicialização do servidor (carregue-as no primeiro acesso). #46607 (Kseniia Sumarokova).
Melhoria em Build/Testes/Empacotamento
- Introduz o GWP-ASan implementado pelo runtime do LLVM. Isso fecha #27039. #45226 (Han Fei).
- Queremos tornar nossos testes menos estáveis e mais propensos a falhas intermitentes: adicionar aleatorização às configurações da MergeTree nos testes. #38983 (Anton Popov).
- Habilita o suporte a HDFS no PowerPC, o que ajuda a corrigir os seguintes testes funcionais: 02113_hdfs_assert.sh, 02244_hdfs_cluster.sql e 02368_cancel_write_into_hdfs.sh. #44949 (MeenaRenganathan22).
- Adiciona o arquivo systemd.service para o clickhouse-keeper. Corrige #44293. #45568 (Mikhail f. Shiryaev).
- O fork do Poco do ClickHouse foi movido de “contrib/” para “base/poco/”. #46075 (Robert Schulze).
- Adiciona uma opção ao
clickhouse-watchdogpara reiniciar o processo filho. Isso não é muito útil. #46312 (Alexey Milovidov). - Se a variável de ambiente
CLICKHOUSE_DOCKER_RESTART_ON_EXITestiver definida como 1, o contêiner Docker executaráclickhouse-servercomo processo filho em vez de processo principal e o reiniciará quando ele for encerrado. #46391 (Alexey Milovidov). - Corrige o arquivo de serviço do systemd. #46461 (SuperDJY).
- Aumenta a versão mínima do Clang necessária para compilar o ClickHouse de 12 para 15. #46710 (Robert Schulze).
- Atualiza o Intel QPL da v0.3.0 para a v1.0.0 2. Compila a libaccel-config e a vincula estaticamente à biblioteca QPL em vez de dinamicamente. #45809 (jasperzhu).
Correção de bug (comportamento incorreto perceptível ao usuário no lançamento estável oficial)
- Faz o flush dos dados exatamente por
rabbitmq_flush_interval_msou porrabbitmq_max_block_sizeemStorageRabbitMQ. Fecha #42389. Fecha #45160. #44404 (Kseniia Sumarokova). - Usa PODArray para renderizar na função
sparkBar, para podermos controlar o uso de memória. Fecha #44467. #44489 (Duc Canh Le). - Corrige as funções (quantilesExactExclusive, quantilesExactInclusive) que retornavam um elemento de array fora de ordem. #45379 (wujunfu).
- Corrige exceção não capturada no HTTPHandler quando o OpenTelemetry está habilitado. #45456 (Frank Chen).
- Não infira datas a partir de números de 8 dígitos. Isso pode levar à leitura incorreta dos dados. #45581 (Kruglov Pavel).
- Correções para o uso correto da configuração
odbc_bridge_use_connection_pooling. #45591 (Bharat Nallan). - Quando o callback do cache é chamado, é possível que esse cache seja destruído. Para garantir a segurança, capturamos os membros por valor. Isso também é seguro para o agendamento de tarefas, porque ele será desativado antes de o armazenamento ser destruído. Resolve #45548. #45601 (Han Fei).
- Corrige a corrupção de dados quando os codecs Delta ou DoubleDelta são combinados com o codec Gorilla. #45615 (Robert Schulze).
- Verificação correta dos tipos ao usar o índice de filtro de Bloom N-gram para evitar leituras inválidas. #45617 (Antonio Andelic).
- Alguns
segfaultsenvolvendo oc-aresforam relatados. Eles foram introduzidos em meus pull requests anteriores. Eu os corrigi com a ajuda de Alexander Tokmakov. #45629 (Arthur Passos). - Corrige a descrição da chave ao encontrar chaves primárias duplicadas. Isso pode acontecer em projeções. Consulte #45590 para mais detalhes. #45686 (Amos Bird).
- Define o método e o nível de compressão para backup. Fecha #45690. #45737 (Pradeep Chhetri).
- Deve ser usado
select_query_typed.limitByOffsetem vez deselect_query_typed.limitOffset. #45817 (刘陶峰). - Ao usar o analyzer experimental, consultas como
SELECT number FROM numbers(100) LIMIT 10 OFFSET 10;retornam resultados incorretos (resultado vazio para este SQL). Isso é causado por um passo de OFFSET desnecessário adicionado pelo planner. #45822 (刘陶峰). - Compatibilidade com versões anteriores - permitir conversão implícita com redução de tipo de UInt64 para IPv4 - necessária para a expressão “INSERT … VALUES …”. #45865 (Yakov Olkhovskiy).
- Correção no parser IPv6 para endereço IPv4 misto sem o primeiro octeto (como
::.1.2.3). #45871 (Yakov Olkhovskiy). - Adiciona a coluna
query_kindà tabelasystem.processese à consultaSHOW PROCESSLIST. Remove código duplicado. Isso corrige um bug: o parâmetro global de configuraçãomax_concurrent_select_queriesnão era aplicado a consultas com cadeiasINTERSECTouEXCEPT. #45872 (Alexey Milovidov). - Corrige uma falha na função
stochasticLinearRegression. Encontrada pelo WingFuzz. #45985 (Nikolai Kochetov). - Corrige falha em consultas
SELECTcom os modificadoresINTERSECTeEXCEPTque leem dados de tabelas com colunas esparsas ativadas (controladas pela configuraçãoratio_of_defaults_for_sparse_serialization). #45987 (Anton Popov). - Corrige a otimização de leitura em ordem para ordenação DESC com FINAL, fecha #45815. #46009 (Vladimir C).
- Corrigida a leitura de colunas aninhadas inexistentes com vários níveis em partes compactas. #46045 (Azat Khuzhin).
- Corrigida a coluna elapsed em system.processes (erro de 10x). #46047 (Azat Khuzhin).
- Correção adicional para substituir tipos de domínio de IP (IPv4, IPv6) por tipos nativos https://github.com/ClickHouse/ClickHouse/pull/43221. #46087 (Yakov Olkhovskiy).
- Corrige a substituição de variáveis de ambiente na configuração quando um parâmetro já possui um valor. Fecha #46131. Fecha #9547. #46144 (pufit).
- Corrige o pushdown incorreto de predicados com grouping sets. Fecha #45947. #46151 (flynn).
- Corrige um possível erro em que o pipeline fica travado em
fulls_sorting_joincom chaves constantes. #46175 (Vladimir C). - Nunca reescreva funções de tupla como literais durante a formatação, para evitar resultados incorretos. #46232 (Salvatore Mesoraca).
- Corrigido um possível erro de acesso fora dos limites ao ler LowCardinality(Nullable) no formato Arrow. #46270 (Kruglov Pavel).
- Corrige falhas em consultas
SYSTEM UNFREEZEcom a exceçãoCANNOT_PARSE_INPUT_ASSERTION_FAILED. #46325 (Aleksei Filatov). - Corrige um possível travamento causado por overflow de inteiro ao desserializar o estado de agregação de uma função que armazena HashTable. #46349 (Nikolai Kochetov).
- Corrigido possível
LOGICAL_ERRORem inserts assíncronos com dados inválidos enviados no formatoVALUES. #46350 (Anton Popov). - Corrigido um LOGICAL_ERROR ao tentar executar
ALTER ... MOVE PART ... TO TABLE. Esse tipo de consulta nunca teve suporte de fato. #46359 (Alexander Tokmakov). - Corrige a inferência de esquema do s3Cluster em
insert selectdistribuído em paralelo quandoparallel_distributed_insert_selectestá habilitado. #46381 (Kruglov Pavel). - Corrige consultas como
ALTER TABLE ... UPDATE nested.arr1 = nested.arr2 ..., em quearr1earr2são campos da mesma colunaNested. #46387 (Anton Popov). - O agendador pode não conseguir agendar uma tarefa. Se isso acontecer, todo o MulityPartUpload deverá ser abortado, e o
UploadHelperdeve aguardar as tarefas já agendadas. #46451 (Dmitry Novik). - Corrige o
PREWHEREpara Merge com tipos padrão diferentes (corrige algunsNOT_FOUND_COLUMN_IN_BLOCKquando o tipo padrão da coluna é diferente; também permitePREWHEREquando o tipo da coluna é o mesmo em todas as tabelas e o proíbe apenas quando for diferente). #46454 (Azat Khuzhin). - Corrige um travamento que podia ocorrer quando valores constantes eram usados em
ORDER BY. Corrige #46466. #46493 (Nikolai Kochetov). - Não lançar exceção se a configuração
disktiver sido especificada no nível da consulta, masstorage_policytiver sido especificada na seção de configurações do MergeTree no arquivo de configuração.disksubstituirá a configuração do arquivo. #46533 (Kseniia Sumarokova). - Corrige o processamento inválido de um argumento constante
LowCardinalityna funçãoarrayMap. Esse bug podia causar uma falha de segmentação em build de release e o erro lógicoBad castem build de depuração. #46569 (Alexey Milovidov). - corrige #46557. #46611 (Alexander Gololobov).
- Corrige reinicializações sem fim da unidade systemd do clickhouse-server se o servidor não conseguir iniciar em até 1 min e 30 s (desativa a lógica de timeout na inicialização do clickhouse-server pelo serviço systemd). #46613 (Azat Khuzhin).
- A memória alocada nos buffers em memória durante as inserções assíncronas foi desalocada no contexto global, e os contadores do MemoryTracker para o usuário e a consulta correspondentes não foram atualizados corretamente. Isso levou a exceções de OOM por falso positivo. #46622 (Dmitry Novik).
- Atualizado para não limpar on_expression de table_join, pois isso é usado em execuções futuras de analyze; corrige #45185. #46487 (SmitaRKulkarni).
Lançamento do ClickHouse 23.1, 2023-01-26. Apresentação, Vídeo
Lançamento do ClickHouse 23.1
Notas de atualização
- A consulta
SYSTEM RESTART DISKpassa a ser um no-op. #44647 (alesapin). - A opção
PREALLOCATEpara dicionáriosHASHED/SPARSE_HASHEDpassa a ser um no-op. #45388 (Azat Khuzhin). Ela não oferece mais vantagens significativas. - É proibido usar o codec
Gorillaem colunas que não sejam do tipo Float32 ou Float64. #45252 (Robert Schulze). Isso não fazia sentido e levava a inconsistências. - Inserts com quorum em paralelo podem funcionar incorretamente com tabelas
*MergeTreecriadas com a sintaxe obsoleta. Portanto, o suporte a inserts com quorum em paralelo foi totalmente desabilitado para essas tabelas. Isso não afeta tabelas criadas com a nova sintaxe. #45430 (Alexander Tokmakov). - Use a requisição
GetObjectAttributesem vez da requisiçãoHeadObjectpara obter o tamanho de um objeto no AWS S3. Essa alteração corrige, por exemplo, o tratamento de endpoints sem regiões explícitas após a atualização do AWS SDK. #45288 (Vitaly Baranov). AWS S3 e Minio foram testados, mas tenha em mente que vários serviços compatíveis com S3 (GCS, R2, B2) podem ter incompatibilidades sutis. Essa alteração também pode exigir que você ajuste a ACL para permitir a requisiçãoGetObjectAttributes. - Não são permitidos caminhos em nomes de fuso horário. Por exemplo, um nome de fuso horário como
/usr/share/zoneinfo/Asia/Adennão é permitido; deve ser usado o nome do banco de dados de fusos horários da IANA, comoAsia/Aden. #44225 (Kruglov Pavel). - Consultas que combinam equijoin e expressões constantes (por exemplo,
JOIN ON t1.x = t2.x AND 1 = 1) são proibidas devido a resultados incorretos. #44016 (Vladimir C).
Nova funcionalidade
- Fonte de dicionário para extrair chaves ao percorrer a árvore de expressões regulares. Pode ser usada para análise de User-Agent. #40878 (Vage Ogannisian). #43858 (Han Fei).
- Adicionada a funcionalidade de views parametrizadas; agora é possível especificar parâmetros de consulta para o mecanismo de tabela View. Resolve #40907. #41687 (SmitaRKulkarni).
- Adicionadas as funções
quantileInterpolatedWeighted/quantilesInterpolatedWeighted. #38252 (Bharat Nallan). - Suporte a ARRAY JOIN para o tipo
Map, como a função “explode” do Spark. #43239 (李扬). - Suporte a literais de strings binárias e hexadecimais no padrão SQL. #43785 (Mo Xuan).
- Permite formatar
DateTimeno estilo Joda-Time. Consulte a documentação do Joda-Time. #43818 (李扬). - Implementado um formatador de frações de segundo (
%f) paraformatDateTime. #44060 (ltrk2). #44497 (Alexander Gololobov). - Adicionada a função
agepara calcular a diferença entre duas datas ou entre datas com valores de tempo, expressa como o número de unidades completas. Fecha #41115. #44421 (Robert Schulze). - Adicionada a fonte
Nullpara dicionários. Fecha #44240. #44502 (mayamika). - Permite configurar a classe de armazenamento do S3 com a opção de configuração
s3_storage_class, como em<s3_storage_class>STANDARD/INTELLIGENT_TIERING</s3_storage_class>. Fecha #44443. #44707 (chen). - Insere valores padrão em caso de elementos ausentes em objeto JSON durante a análise de uma tupla nomeada. Adiciona a configuração
input_format_json_defaults_for_missing_elements_in_named_tuple, que controla esse comportamento. Fecha #45142#issuecomment-1380153217. #45231 (Kruglov Pavel). - Registra o tempo de inicialização do servidor em ProfileEvents (
ServerStartupMilliseconds). Corrige #43188. #45250 (SmitaRKulkarni). - Refatore e melhore os motores de streaming Kafka/RabbitMQ/NATS e adicione suporte a todos os formatos, além de refatorar um pouco os formatos: - Corrija a produção de mensagens em formatos baseados em linhas com sufixos/prefixos. Agora, cada mensagem é formatada por completo com todos os delimitadores e pode ser analisada novamente usando o formato de entrada. - Adicione suporte a formatos baseados em blocos, como Native, Parquet, ORC etc. Cada bloco é formatado como uma mensagem separada. O número de linhas em uma mensagem depende do tamanho do bloco, então você pode controlá-lo por meio da configuração
max_block_size. - Adicione novas configurações de enginekafka_max_rows_per_message/rabbitmq_max_rows_per_message/nats_max_rows_per_message. Elas controlam o número de linhas formatadas em uma mensagem nos formatos baseados em linhas. Valor padrão: 1. - Corrija o alto consumo de memória no table engine NATS. - Adicione suporte a dados binários arbitrários no produtor NATS (anteriormente, funcionava apenas com strings contendo \0 no final) - Adicione à documentação as configurações de engine ausentes para Kafka/RabbitMQ/NATS. - Refatore a produção e o consumo em Kafka/RabbitMQ/NATS, separando-os da semântica de WriteBuffers/ReadBuffers. - Refatore os formatos de saída: remova os callbacks por linha usados em Kafka/RabbitMQ/NATS (agora não usamos callbacks ali), permita usar IRowOutputFormat diretamente, esclareça os delimitadores de fim de linha e entre linhas, e torne possível redefinir o formato de saída para reiniciar a formatação - Adicione uma implementação adequada na função formatRow (bônus após a refatoração dos formatos). #42777 (Kruglov Pavel). - Suporte para leitura/gravação de tabelas
NestedcomoListdeStructno formatoCapnProto. Leitura/gravação deDecimal32/64comoInt32/64. Fecha #43319. #43379 (Kruglov Pavel). - Foi adicionada uma coluna
message_format_stringasystem.text_log. A coluna contém um padrão usado para formatar a mensagem. #44543 (Alexander Tokmakov). Isso permite diversas análises dos logs do ClickHouse. - Tenta detectar automaticamente cabeçalhos com nomes de colunas (e talvez tipos) em formatos de entrada CSV/TSV/CustomSeparated. Adiciona as configurações input_format_tsv/csv/custom_detect_header, que habilitam esse comportamento (ativado por padrão). Fecha #44640. #44953 (Kruglov Pavel).
Funcionalidade experimental
- Adicionado um índice invertido experimental como novo tipo de índice secundário para pesquisa de texto eficiente. #38667 (larryluogit).
- Adicionado cache experimental de resultados de consulta. #43797 (Robert Schulze).
- Adicionado um subsistema de agendamento extensível e configurável para solicitações de E/S (ainda não integrado ao próprio código de E/S). #41840 (Sergei Trifonov). Esta funcionalidade não faz absolutamente nada, aproveite.
- Adicionado
SYSTEM DROP DATABASE REPLICA, que remove os metadados de uma réplica inativa de um banco de dadosReplicated. Resolve #41794. #42807 (Alexander Tokmakov).
Melhoria de desempenho
- Não carregar partes inativas na inicialização de tabelas
MergeTree. #42181 (Anton Popov). - Foi melhorada a latência de leitura do armazenamento
S3e da função de tabelas3com grandes quantidades de arquivos pequenos. Agora, as configuraçõesremote_filesystem_read_methoderemote_filesystem_read_prefetchpassam a surtir efeito durante a leitura do armazenamentoS3. #43726 (Anton Popov). - Otimização na leitura de campos de struct em arquivos Parquet/ORC. Apenas os campos necessários são carregados. #44484 (lgbo).
- O algoritmo de agregação em dois níveis foi desabilitado por engano para consultas pela interface HTTP. Ele foi habilitado novamente, o que traz uma grande melhoria de desempenho. #45450 (Nikolai Kochetov).
- Foi adicionado suporte a mmap ao StorageFile, o que deve melhorar o desempenho do clickhouse-local. #43927 (pufit).
- Adicionado suporte a sharding no HashedDictionary para permitir carregamento em paralelo (escalabilidade quase linear com base no número de shards). #40003 (Azat Khuzhin).
- Acelera o parsing de consultas. #42284 (Raúl Marín).
- Sempre substitua a cadeia OR
expr = x1 OR ... OR expr = xNporexpr IN (x1, ..., xN)quandoexprfor uma colunaLowCardinality. A configuraçãooptimize_min_equality_disjunction_chain_lengthé ignorada nesse caso. #42889 (Guo Wangyang). - Melhora leve no desempenho ao otimizar o código em torno de ThreadStatus. #43586 (Zhiguo Zhou).
- Otimização da avaliação da lógica ternária por coluna por meio de autovetorização. No teste de desempenho deste microbenchmark, observamos um pico de ganho de desempenho de 21x na plataforma ICX (CPU Intel Xeon Platinum 8380). #43669 (Zhiguo Zhou).
- Evite adquirir bloqueios de leitura na tabela
system.tablessempre que possível. #43840 (Raúl Marín). - Otimização do ThreadPool. Os experimentos de desempenho do SSB (Star Schema Benchmark) no dispositivo ICX (CPU Intel Xeon Platinum 8380, 80 núcleos, 160 threads) mostram que essa alteração pode reduzir efetivamente a contenção de bloqueio em ThreadPoolImpl::mutex em 75%, aumentando a utilização da CPU e melhorando o desempenho geral em 2,4%. #44308 (Zhiguo Zhou).
- Agora, a otimização para prever o tamanho da tabela hash é aplicada somente se o tamanho da tabela hash armazenado em cache for suficientemente grande (os limiares foram determinados empiricamente e fixados no código). #44455 (Nikita Taranov).
- Pequena melhoria de desempenho para leitura assíncrona em sistemas de arquivos remotos. #44868 (Kseniia Sumarokova).
- Adicionar via rápida para: -
col like '%%'; -col like '%'; -col not like '%'; -col not like '%'; -match(col, '.*'). #45244 (李扬). - Pequena melhoria na otimização do caso mais comum na filtragem (cláusula WHERE). #45289 (Nikita Taranov).
- Adiciona informações de monotonicidade para
toUnixTimestamp64*, permitindo mais otimizações algébricas na análise de índices. #44116 (Nikita Taranov). - Permitir que a configuração de dados temporários para o processamento de consultas (gravação em disco) coopere com o cache do sistema de arquivos (usando o espaço do disco de cache) #43972 (Vladimir C). Isso beneficia principalmente o ClickHouse Cloud, mas também pode ser usado em implantações autogerenciadas, se você souber o que está fazendo.
- Faz com que a tabela
system.replicasrealize fetches paralelos dos status das réplicas. Fecha #43918. #43998 (Nikolay Degterinsky). - Otimize o consumo de memória durante o backup para o S3: os arquivos enviados ao S3 agora serão copiados diretamente, sem usar
WriteBufferFromS3(o que poderia consumir muita memória). #45188 (Vitaly Baranov). - Adiciona um cache para IDs de blocos assíncronos. Isso reduzirá o número de requisições ao ZooKeeper quando habilitarmos a desduplicação de async inserts. #45106 (Han Fei).
Melhoria
- Usar a estrutura da tabela de inserção no generateRandom sem argumentos. #45239 (Kruglov Pavel).
- Permite converter implicitamente números de ponto flutuante armazenados em campos de texto em JSON para inteiros nas funções
JSONExtract. Ex.:JSONExtract('{"a": "1000.111"}', 'a', 'UInt64')->1000; anteriormente, retornava 0. #45432 (Anton Popov). - Adicionados os campos
supports_parallel_parsingesupports_parallel_formattingà tabelasystem.formatspara melhorar a introspecção. #45499 (Anton Popov). - Melhoria na leitura de campos CSV no formato CustomSeparated/Template. Fecha #42352 Fecha #39620. #43332 (Kruglov Pavel).
- Unificar as medições do tempo de execução da consulta. #43455 (Raúl Marín).
- Melhora o uso automático da estrutura da tabela de inserção nas funções de tabela file/hdfs/s3 quando há colunas virtuais presentes em uma consulta SELECT; isso corrige o possível erro
Block structure mismatchounumber of columns mismatch. #43695 (Kruglov Pavel). - Adiciona suporte a argumentos com sinal na função
range. Corrige #43333. #43733 (sanyu). - Remove a ordenação redundante, por exemplo, cláusulas
ORDER BYrelacionadas em subconsultas. Implementado sobre o plano de consulta. Faz uma otimização semelhante à deoptimize_duplicate_order_by_and_distinctem relação às cláusulasORDER BY, mas é mais genérico, pois se aplica a quaisquer passos de ordenação redundantes (não apenas aos causados pela cláusula ORDER BY) e a subconsultas de qualquer profundidade. Relacionado a #42648. #43905 (Igor Nikonov). - Adiciona a possibilidade de desabilitar a desduplicação de arquivos para BACKUP (para backups sem desduplicação, ATTACH pode ser usado em vez de um RESTORE completo). Por exemplo,
BACKUP foo TO S3(...) SETTINGS deduplicate_files=0(o padrão édeduplicate_files=1). #43947 (Azat Khuzhin). - Refatorada e aprimorada a inferência de esquema para formatos de texto. Adicionada a nova configuração
schema_inference_make_columns_nullable, que controla se os tipos de resultado serãoNullable(habilitada por padrão). #44019 (Kruglov Pavel). - Suporte aprimorado ao protocolo
PROXYv1. #44135 (Yakov Olkhovskiy). - Adiciona informações sobre a verificação mais recente das partes realizada pelas threads de limpeza na tabela
system.parts. #44244 (Dmitry Novik). - Desabilitar funções de tabela para inserções no modo readonly. #44290 (SmitaRKulkarni).
- Adiciona a configuração
simultaneous_parts_removal_limitpara limitar o número de partes processadas em uma iteração da CleanupThread. #44461 (Dmitry Novik). - Não inicialize o ReadBufferFromS3 quando apenas colunas virtuais forem necessárias em uma consulta. Isso pode ajudar com #44246. #44493 (chen).
- Evita avisos sobre nomes de coluna duplicados. Fecha #44130. #44519 (Joanna Hulboj).
- Permitir a substituição de macros no endpoint dos discos. Corrige #40951. #44533 (SmitaRKulkarni).
- Melhora a inferência de esquema quando
input_format_json_read_object_as_stringestá ativado. #44546 (Kruglov Pavel). - Adiciona uma configuração no nível do usuário
database_replicated_allow_replicated_engine_argumentsque permite bloquear a criação de tabelasReplicatedMergeTreecom argumentos emDatabaseReplicated. #44566 (alesapin). - Evita que os usuários especifiquem por engano o valor zero (inválido) para
index_granularity. Isso corrige #44536. #44578 (Alexey Milovidov). - Adicionada a possibilidade de definir o caminho do arquivo keytab do serviço no parâmetro
keytab, na seçãokerberosdo config.xml. #44594 (Roman Vasin). - Use a parte já escrita da consulta para busca difusa (passada para a biblioteca
skim, escrita em Rust e vinculada estaticamente ao ClickHouse). #44600 (Azat Khuzhin). - Habilita
input_format_json_read_objects_as_stringspor padrão para permitir a leitura de objetos JSON aninhados enquanto o tipo JSON Object ainda é experimental. #44657 (Kruglov Pavel). - Melhoria na desduplicação de inserções assíncronas: quando houver inserções assíncronas duplicadas, devemos fazer a desduplicação na memória antes de consultar o Keeper. #44682 (Han Fei).
- O formato
Avrode entrada/saída interpretará o tipo bool como o tipo bool do ClickHouse. #44684 (Kruglov Pavel). - Suporte ao tipo Bool em Arrow/Parquet/ORC. Fecha #43970. #44698 (Kruglov Pavel).
- Não faça o parsing de UUIDs de forma gulosa além das aspas — isso pode fazer com que dados incorretos sejam parseados com sucesso por engano. #44686 (Raúl Marín).
- Inferir UInt64 em caso de overflow de Int64 e corrigir algumas transformações na inferência de esquema. #44696 (Kruglov Pavel).
- Antes, a resolução de dependências dentro do banco de dados
Replicatedera feita de forma meio improvisada, e agora é feita corretamente usando um grafo explícito. #44697 (Nikita Mikhaylov). - Corrige
output_format_pretty_row_numbers, que não preservava o contador entre os blocos. Fecha #44815. #44832 (flynn). - Não relatar erros em
system.errorsdevido à mesclagem simultânea de partes com o processo de limpeza em segundo plano. #44874 (Raúl Marín). - Otimiza e corrige as métricas do INSERT assíncrono em Distributed. #44922 (Azat Khuzhin).
- Foram adicionadas configurações para impedir backups e restaurações simultâneos, resolvendo #43891 Implementação: * Foram adicionadas configurações no nível do servidor para impedir backups e restaurações simultâneos, lidas e definidas quando o BackupWorker é criado no Context. * As configurações são definidas como true por padrão. * Antes de iniciar um backup ou uma restauração, foi adicionada uma verificação para conferir se há outros backups/restaurações em execução. Para solicitações internas, é verificado se elas vêm do próprio nó usando backup_uuid. #45072 (SmitaRKulkarni).
- Adicionar o parâmetro de configuração
<storage_policy>para os logs do sistema. #45320 (Stig Bakken).
Melhoria de Build/Testes/Empacotamento
- Vinculação estática com a biblioteca
skim(escrita em Rust) para busca difusa no histórico local/no clickhouse client. #44239 (Azat Khuzhin). - Removemos o suporte a vinculação dinâmica por causa do Rust. Na verdade, o Rust é apenas um pretexto para essa remoção, que já queríamos fazer de qualquer forma. #44828 (Alexey Milovidov).
- Removida a dependência da ferramenta
addusernos pacotes, porque não a usamos. Isso corrige #44934. #45011 (Alexey Milovidov). - A biblioteca
SQLitefoi atualizada para a versão mais recente. Ela é usada para os motores de integração de banco de dados e de tabela do SQLite. Além disso, foi corrigido um falso positivo no TSan. Isso fecha #45027. #45031 (Alexey Milovidov). - Alterações no CRC-32 para resolver o problema de colisão de WeakHash no PowerPC. #45144 (MeenaRenganathan22).
- Atualização dos submódulos aws-c* #43020 (Vitaly Baranov).
- Mesclagem automática de backport PRs aprovados com status verde e de PRs aprovados com status verde #41110 (Mikhail f. Shiryaev).
- Introdução de um site para o status da CI do ClickHouse. Source.
Correção de bug
- Substitui tipos de domínio de IP (IPv4, IPv6) por tipos nativos. #43221 (Yakov Olkhovskiy). Isso corrige automaticamente algumas implementações ausentes no código.
- Corrige o processo de backup caso mutações sejam interrompidas durante o backup. #45351 (Vitaly Baranov).
- Corrige a mensagem da exceção
Invalid number of rows in Chunk. #41404. #42126 (Alexander Gololobov). - Corrige um possível uso de valor não inicializado após a execução de expressões depois da ordenação. Fecha #43386 #43635 (Kruglov Pavel).
- Melhor tratamento de NULL em combinadores de agregação, corrige um possível segfault/erro lógico ao usar uma otimização pouco conhecida,
optimize_rewrite_sum_if_to_count_if. Fecha #43758. #43813 (Kruglov Pavel). - Corrige as restrições das configurações de consulta em CREATE USER/ROLE. #43993 (Nikolay Degterinsky).
- Corrigido bug com valor padrão não interpretável para a coluna
EPHEMERALnos metadados da tabela. #44026 (Yakov Olkhovskiy). - Corrige o parsing de uma versão inválida na configuração de compatibilidade. #44224 (Kruglov Pavel).
- Alinhar a subtração de intervalos em datetime à adição. #44241 (ltrk2).
- Removidos os limites do tamanho máximo do resultado de uma view. #44261 (lizhuoyu5).
- Corrige um possível erro lógico no cache se
do_not_evict_index_and_mrk_files=1. Fecha #42142. #44268 (Kseniia Sumarokova). - Corrige uma possível interrupção prematura da gravação no cache em cache write-through (o armazenamento em cache poderia ser interrompido devido a uma suposição incorreta quando isso não deveria ocorrer). #44289 (Kseniia Sumarokova).
- Corrige uma possível falha quando a função
INcom argumentos constantes era usada como argumento constante junto comLowCardinality. Corrige #44221. #44346 (Nikolai Kochetov). - Corrige o suporte a parâmetros complexos (como arrays) em funções agregadas paramétricas. Isso fecha #30975. A função agregada
sumMapFilteredera inutilizável em consultas distribuídas antes dessa mudança. #44358 (Alexey Milovidov). - Corrigida a leitura de
ObjectIdna inferência de esquema BSON. #44382 (Kruglov Pavel). - Corrigida uma condição de corrida que pode levar à remoção prematura de partes temporárias antes que o merge termine no ReplicatedMergeTree. Esse problema podia causar erros como
No such file or directory: xxx. Corrige #43983. #44383 (alesapin). - Algumas consultas
SYSTEM ... ON CLUSTERinválidas funcionavam de forma inesperada quando nenhum nome de cluster era especificado. Isso foi corrigido: agora, consultas inválidas retornamSYNTAX_ERROR, como deveriam. Corrige #44264. #44387 (Alexander Tokmakov). - Corrigida a leitura do tipo Map no formato ORC. #44400 (Kruglov Pavel).
- Corrige a leitura de colunas que não estão presentes nos dados de entrada nos formatos Parquet/ORC. Antes, isso podia levar ao erro
INCORRECT_NUMBER_OF_COLUMNS. Fecha #44333. #44405 (Kruglov Pavel). - Anteriormente, a função
barusava o mesmo caractere ’▋’ (U+258B “bloco à esquerda de cinco oitavos”) para exibir barras de 5/8 e 6/8. Esta alteração corrige esse comportamento usando ’▊’ (U+258A “bloco à esquerda de três quartos”) para exibir a barra de 6/8. #44410 (Alexander Gololobov). - Colocar as configurações do perfil após as restrições das configurações do perfil no arquivo de configuração tornou essas restrições ineficazes. #44411 (Konstantin Bogdanov).
- Corrige
SYNTAX_ERRORao executar consultasEXPLAIN AST INSERTcontendo dados. Fecha #44207. #44413 (save-my-heart). - Corrige a leitura de valor bool com CRLF no formato CSV. Fecha #44401. #44442 (Kruglov Pavel).
- Não executa and/or/if/multiIf em um dicionário LowCardinality, portanto o tipo de resultado não pode ser LowCardinality. Isso poderia levar ao erro
Illegal column ColumnLowCardinalityem alguns casos. Corrige #43603. #44469 (Kruglov Pavel). - Corrige mutações com a configuração
max_streams_for_merge_tree_reading. #44472 (Anton Popov). - Corrigido um possível desreferenciamento de ponteiro nulo com GROUPING SETS em ASTSelectQuery::formatImpl (#43049). #44479 (Robert Schulze).
- Validação de tipos nos argumentos de funções de tabela, nos argumentos da função CAST e na inferência de esquema do JSONAsObject de acordo com as configurações. #44501 (Kruglov Pavel).
- Corrige a função IN com LowCardinality e coluna const, fechando #44503. #44506 (Duc Canh Le).
- Corrigido um bug na normalização de uma expressão
DEFAULTna instruçãoCREATE TABLE. O segundo argumento da funçãoin(ou o argumento à direita do operadorIN) poderia ser substituído pelo resultado da sua avaliação durante a execução da consulta CREATE. Corrige #44496. #44547 (Alexander Tokmakov). - As projeções não funcionam na presença de WITH ROLLUP, WITH CUBE e WITH TOTALS. Em versões anteriores, uma consulta gerava uma exceção em vez de simplesmente ignorar o uso de projeções. Isso fecha #44614. Isso fecha #42772. #44615 (Alexey Milovidov).
- Os blocos assíncronos não foram limpos porque a função
get all blocks sorted by timenão recuperava os blocos assíncronos. #44651 (Han Fei). - Corrige
LOGICAL_ERRORThe top step of the right pipeline should be ExpressionStepem JOIN com subconsulta, UNION e TOTALS. Corrige #43687. #44673 (Nikolai Kochetov). - Evita a exceção
std::out_of_rangeno mecanismo de tabela Executable. #44681 (Kruglov Pavel). - Não aplique
optimize_syntax_fuse_functionsaos quantis na AST, fecha #44712. #44713 (Vladimir C). - Corrige um bug de tipo incorreto na tabela Merge e em PREWHERE, fecha #43324. #44716 (Vladimir C).
- Corrige um possível travamento durante o encerramento (ao destruir o TraceCollector). Corrige #44757. #44758 (Nikolai Kochetov).
- Corrige uma possível falha no processamento distribuído de consultas. A falha poderia ocorrer se uma consulta com totais ou extremos retornasse um resultado vazio e houvesse tipos incompatíveis entre as tabelas Distributed e as tabelas locais. Corrige #44738. #44760 (Nikolai Kochetov).
- Corrigido o fsync para fetches (
min_compressed_bytes_to_fsync_after_fetch)/arquivos pequenos (ttl.txt, columns.txt) em mutações (min_rows_to_fsync_after_merge/min_compressed_bytes_to_fsync_after_merge). #44781 (Azat Khuzhin). - Uma rara condição de corrida podia ocorrer ao consultar as tabelas
system.partsousystem.parts_columnsenquanto partes eram movidas entre discos. Introduzido em #41145. #44809 (Alexey Milovidov). - Corrige o erro
Context has expired, que podia aparecer com a otimização de projeções ativada. Pode ser reproduzido em consultas com funções específicas, comodictHas/dictGet, que usam contexto em tempo de execução. Corrige #44844. #44850 (Nikolai Kochetov). - Correção para o erro
Cannot read all data, que podia ocorrer ao ler o dicionárioLowCardinalitydo remote fs. Corrige #44709. #44875 (Nikolai Kochetov). - Ignora os casos em que os sensores de monitoramento de hardware não podem ser lidos, em vez de exibir a mensagem completa da exceção nos logs. #44895 (Raúl Marín).
- Use o valor de
max_delay_to_insertquando o tempo de atraso calculado para o INSERT exceder o valor configurado. Relacionado a #44902. #44916 (Igor Nikonov). - Corrige o erro
Different order of columns in UNION subqueryem consultas comUNION. Corrige #44866. #44920 (Nikolai Kochetov). - O atraso do INSERT pode ser calculado incorretamente, o que pode fazer com que a configuração
max_delay_to_insertseja sempre usada como atraso, em vez do valor correto. Usa-se a fórmula simplesmax_delay_to_insert * (parts_over_threshold/max_allowed_parts_over_threshold), ou seja, o atraso aumenta proporcionalmente às partes acima do limite. Fecha #44902. #44954 (Igor Nikonov). - Corrige o erro de
alter table TTLquando uma parte wide tem a máscara de exclusão leve. #44959 (Mingliang Pan). - Correção complementar para substituir tipos IP de domínio (IPv4, IPv6) por tipos nativos #43221. #45024 (Yakov Olkhovskiy).
- Correção complementar para substituir os tipos de IP de domínio (IPv4, IPv6) por tipos nativos https://github.com/ClickHouse/ClickHouse/pull/43221. #45043 (Yakov Olkhovskiy).
- Havia a possibilidade de buffer overflow no parser. Encontrado por um fuzzer. #45047 (Alexey Milovidov).
- Corrige um possível erro de
cannot-read-all-datano armazenamento FileLog. Fecha #45051, #38257. #45057 (Kseniia Sumarokova). - A agregação com uso eficiente de memória (configuração
distributed_aggregation_memory_efficient) é desativada quando há grouping sets na consulta. #45058 (Nikita Taranov). - Corrige o dicionário
RANGE_HASHEDpara considerar as colunas de intervalo como parte da chave primária durante as atualizações quandoupdate_fieldé especificado. Fecha #44588. #45061 (Maksim Kita). - Corrige o erro
Cannot capture columnno argumentoLowCardinalitycapturado de uma lambda aninhada. Corrige #45028. #45065 (Nikolai Kochetov). - Corrige o resultado incorreto da consulta de
additional_table_filters(o filtro adicional não era aplicado) no caso de uso da projeção minmax/count. #45133 (Nikolai Kochetov). - Corrigido bug na função
histogram, que aceitava valores negativos. #45147 (simpleton). - Corrige a nulabilidade incorreta da coluna no StoreageJoin, fecha #44940. #45184 (Vladimir C).
- Corrigido o recarregamento da configuração
background_fetches_pool_size(aumento em tempo de execução). #45189 (Raúl Marín). - Processar corretamente consultas
SELECTem motores KV (por exemplo, KeeperMap, EmbeddedRocksDB) usandoINna chave com subconsulta que retorna um tipo diferente. #45215 (Antonio Andelic). - Corrige um erro lógico em SEMI JOIN & join_use_nulls em alguns casos, fecha #45163 e #45209. #45230 (Vladimir C).
- Corrige
heap-use-after-freeao ler do S3. #45253 (Kruglov Pavel). - Corrige um bug que ocorria quando o tipo Union do Avro é [‘null’, tipo Nested], fecha #45275. Corrige um bug que inferia incorretamente o tipo
bytescomoFloat. #45276 (flynn). - Lançar a exceção correta quando o PREWHERE explícito não puder ser usado com uma tabela que utiliza o mecanismo de armazenamento
Merge. #45319 (Antonio Andelic). - No Ubuntu no WSL1, o ClickHouse autoextraível não consegue descompactar devido a uma inconsistência:
/proc/self/mapsinforma o inode de um arquivo de 32 bits, enquantostatinforma um inode de 64 bits. #45339 (Yakov Olkhovskiy). - Corrige uma condição de corrida na inicialização da tabela Distributed (o que poderia fazer com que o arquivo de
async INSERTfosse processado várias vezes). #45360 (Azat Khuzhin). - Corrige uma possível falha ao ler do armazenamento
S3e da função de tabelas3quando a requisiçãoListObjectfalha. #45371 (Anton Popov). - Corrigida a exceção de
SELECT ... FROM system.dictionariesquando há um dicionário com estrutura inválida (por exemplo, tipo incorreto na configuração XML). #45399 (Aleksei Filatov). - Corrigida a inferência de esquema do s3Cluster quando a estrutura da tabela de inserção é usada em consultas
INSERT INTO ... SELECT * FROM s3Cluster. #45422 (Kruglov Pavel). - Corrigido erro na análise de JSON/BSONEachRow via HTTP que poderia levar ao uso de valores padrão para algumas colunas em vez dos valores dos dados. #45424 (Kruglov Pavel).
- Corrigido bug (Code: 632. DB::Exception: Unexpected data … after parsed IPv6 value …) no parsing tipado de tipos IP a partir de uma fonte de texto. #45425 (Yakov Olkhovskiy).
- fecha #45297 Adiciona verificação para expressões regulares vazias. #45428 (Han Fei).
- Corrige um possível travamento de consulta (provavelmente distribuída). #45448 (Azat Khuzhin).
- Corrige possível deadlock com
allow_asynchronous_read_from_io_pool_for_merge_treehabilitado no caso de exceção emThreadPool::schedule. #45481 (Nikolai Kochetov). - Corrige possível problema de tabela em uso após DETACH. #45493 (Azat Khuzhin).
- Corrige uma falha rara no caso em que uma consulta é cancelada e o parsing paralelo foi usado durante sua execução. #45498 (Anton Popov).
- Corrige uma condição de corrida entre a criação de uma tabela Distributed e o INSERT nela (o que poderia causar CANNOT_LINK durante o INSERT na tabela). #45502 (Azat Khuzhin).
- Adiciona o valor padrão adequado (SLRU) ao getter da política de cache. Fecha #45514. #45524 (Kseniia Sumarokova).
- Proibição de array join em mutações corrige #42637 #44447 (SmitaRKulkarni).
- Correção de asteriscos qualificados com nome de tabela de alias e transformador de coluna. Resolve #44736. #44755 (SmitaRKulkarni).