Pular para o conteúdo principal

Sumário

Lançamento do ClickHouse v23.12, 2023-12-28
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 = 1 ou SET compatibility = '23.11'. Fecha #37286. #51858 (Alexey Milovidov).
  • A configuração do MergeTree clean_deleted_rows está obsoleta e não tem mais efeito. A palavra-chave CLEANUP de OPTIMIZE não é permitida por padrão (isso pode ser reabilitado com a configuração allow_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áusula ON, 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 BY agora permite especificar ALL, o que significa que o ClickHouse ordena por todas as colunas da cláusula SELECT. 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 /binary abre 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 seriesPeriodDetectFFT para 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: default e union. 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 (e COMPLEX_KEY_HASHED_ARRAY) suporta SHARDS, assim como HASHED. #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_BYTES como alias de formatReadableSize. #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 tipo s3_plain e, 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_final está 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/RESTORE e o comando clickhouse-disks copy. #56744 (MikhailBurdukov).
  • O Hash JOIN respeita a configuração max_joined_block_size_rows e não produz blocos grandes no ALL 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 hasAny agora pode tirar proveito dos índices de skipping de texto completo. #57878 (Jpnock).
  • A função if(cond, then, else) (e seu alias cond ? 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_final se 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 MIN e MAX para tipos nativos. #58231 (Raúl Marín).
  • Implementada a política de cache SLRU para 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 15 para o valor da configuração background_fetches_pool_size. - A configuração de nível MergeTree replicated_max_parallel_fetches_for_host tornou-se obsoleta - As configurações de nível MergeTree replicated_fetches_http_connection_timeout, replicated_fetches_http_send_timeout e replicated_fetches_http_receive_timeout foram movidas para o nível do servidor. - A configuração keep_alive_timeout foi adicionada à lista de configurações de nível do servidor. #57523 (Nikita Mikhaylov).
  • Faça com que a consulta a system.filesystem_cache nã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_shards como uma configuração para tabelas Distributed, 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 tipos Enum. Antes, o primeiro argumento da função precisava ser um valor do tipo String ou FixedString. Isso melhora a compatibilidade com ferramentas de terceiros, como o Tableau, por meio da interface MySQL. #57277 (Serge Klochkov).
  • A função format agora oferece suporte a tipos de argumentos arbitrários (em vez de apenas argumentos String e FixedString). Isso é importante para calcular SELECT format('The {0} to all questions is {1}', 'answer', 42). #57549 (Robert Schulze).
  • Permite usar a função date_trunc com o primeiro argumento sem diferenciar maiúsculas de minúsculas. Agora, ambas as formas são aceitas: SELECT date_trunc('day', now()) e SELECT 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_drop e max_table_size_to_drop no 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_count em system.distribution_queue (no caso de distributed_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_zk e elemento não vazio com replace=1. #57628 (Azat Khuzhin).
  • Uma função de tabela fuzzJSON que 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ção async_block_ids_cache_min_update_interval_ms foi descontinuada. Agora o cache é atualizado apenas em caso de conflitos. #57743 (alesapin).
  • A função sleep() agora pode ser interrompida com KILL QUERY. #57746 (Vitaly Baranov).
  • Proíbe consultas CREATE TABLE ... AS SELECT para motores de tabela Replicated no banco de dados experimental Replicated, 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_trace para 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 aguardar storage_system_stack_trace_pipe_read_timeout_ms quando 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:// e s3://) 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 --obfuscate passará a reconhecer Settings, MergeTreeSettings e fusos horários, mantendo seus nomes inalterados. #58179 (Alexey Milovidov).
  • Adicionada a função explícita finalize() em ZipArchiveWriter. Simplificado o código excessivamente complexo em ZipArchiveWriter. 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_marks em ParallelReplicasReadingCoordinator #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_uncompressed em system.part_log #58167 (Jordi Villar).
  • Adicionar o nome do backup base às tabelas system.backups e system.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)

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) e named_collection_control (manipulação de coleções nomeadas por consultas SQL) habilitados para o usuário default por padrão. Isso corrige #56482. #56619 (Alexey Milovidov).
  • Várias melhorias em RESPECT NULLS/IGNORE NULLS para 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/%c na função parseDateTime agora conseguem interpretar horas/meses sem zeros à esquerda; por exemplo, select parseDateTime('2023-11-26 8:14', '%F %k:%i') agora funciona. Defina parsedatetime_parse_without_leading_zeros = 0 para restaurar o comportamento anterior, que exigia dois dígitos. A função formatDateTime agora também consegue imprimir horas/meses sem zeros à esquerda. Isso é controlado pela configuração formatdatetime_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 avgWeighted com argumentos do tipo Decimal. Solução alternativa: converta os argumentos para Float64. 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 argumentos Decimal, entre em contato com support@clickhouse.com. Foi corrigido um erro na função de agregação sumMap, 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ção groupArraySample — 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_databases para 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 motores Ordinary, Atomic e Replicated. 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 tabela system.asynchronous_loader para 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_compression dentro da seção zookeeper. 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 como true, 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 hostname a 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_DAYS do MySQL. Por exemplo, SELECT fromDaysSinceYearZero(739136) retorna 2023-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 Float16 para uso em arquivos .npy. Fecha #56344. #56424 (Yarik Briukhovetskyi).
  • Adicionada uma view de sistema information_schema.statistics para 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ório user_files. #56868 (Andrey Zvonov).
  • Adicionar a coluna virtual _size, com o tamanho do arquivo em bytes, aos motores s3/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_algorithm respeita 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_queries de 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 tabela system.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 tabela Merge. #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 seek no 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 de resize. #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 como select 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 File e HDFS. #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 BackupEntriesCollector em 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 tabelas CollapsingMergeTree, limitando o valor da coluna Sign a 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 Merge filtra 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 tabela Merge. #50209 (Ilya Golshtein).
  • Adiciona a configuração max_execution_time_leaf para limitar o tempo de execução no shard em consultas distribuídas, e timeout_overflow_mode_leaf para 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_size como 16 e background&#95;schedule&#95;pool&#95;size como 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 \r no 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\n ou \n\r; portanto, \r deve 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 \r aparece 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_LIST nos formatos Apache Arrow. #56118 (edef).
  • Permite a compactação manual do EmbeddedRocksDB por meio da consulta OPTIMIZE. #56225 (Azat Khuzhin).
  • Adicionada a possibilidade de especificar BlockBasedTableOptions para tabelas EmbeddedRocksDB. #56264 (Azat Khuzhin).
  • SHOW COLUMNS agora exibe o nome do tipo de dado equivalente no MySQL quando a conexão é feita por meio do protocolo MySQL. Anteriormente, isso ocorria ao definir use_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 ZooKeeper caso o servidor fosse reiniciado logo após TRUNCATE ou DROP PARTITION. #56282 (Alexander Tokmakov).
  • Corrigido o tratamento de strings de consulta não constantes nas funções formatQuery/ formatQuerySingleLine. Também foram adicionadas variantes OrNull de 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.replicas iniciam 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 a system.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_failures foi 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 valores false ou true) foi marcada como obsoleta. Ela foi substituída pela configuração query_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 null na seção JOIN ON. Experimental. Somente no Analyzer. #56538 (vdimir).
  • A funçãoconcat agora 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 de concat do MySQL. Por exemplo, SELECT concat('ab', 42) agora retorna ab42. #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 MaterializedPostgreSQL experimental. #53721 (takakawa).
  • Implementa a configuração em nível de usuário alter_move_to_space_execute_async, que permite executar consultas ALTER TABLE ... MOVE PARTITION|PART TO DISK|VOLUME de forma assíncrona. O tamanho do pool de execuções em segundo plano é controlado por background_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_bytes e total_rows em 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 concat agora pode ser chamada com um único argumento, por exemplo, SELECT concat('abc'). Isso torna seu comportamento mais consistente com a implementação da concat no 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_startup para true e use essa configuração somente se dictionaries_lazy_load for false. #57133 (Vitaly Baranov).
  • Verifica o tipo da origem do dicionário na criação, mesmo se dictionaries_lazy_load estiver 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 /dashboard agora oferece suporte a gráficos com várias linhas. #57236 (Sergei Trifonov).
  • A opção de linha de comando max_memory_usage_in_client aceita 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_window nas configurações do MergeTree de 100 para 1k. #57335 (sichenzhao).
  • Pare de usar INCONSISTENT_METADATA_FOR_BACKUP com 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-local e clickhouse-client agora 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ção coverage, que retorna um Array de endereços únicos no código encontrados desde o último reset da cobertura; (2) da consulta SYSTEM 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)

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 para distributed_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_timeout definido no lado do cliente como receive_timeout no 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 S3Queue foi 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 tabelas system.s3queue e system.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ção analyze_index_with_space_filling_curves para 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_name aceita 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 TABLE tem melhor desempenho e usabilidade (envia atualizações de progresso e pode ser cancelada). Há suporte para verificar uma parte específica com CHECK 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ção formatQuerySingleLine, 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 _error e _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 armazenamento nats_handle_error_mode para NATS, rabbitmq_handle_error_mode para RabbitMQ e handle_error_mode para FileLog, de forma semelhante a kafka_handle_error_mode. Se estiver definido como default, uma exceção será lançada quando o ClickHouse não conseguir processar um registro; se estiver definido como stream, 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 existente SHOW SETTINGS. #55979 (Maksim Kita).
  • Foram adicionados os campos substreams e filenames à tabela system.parts_columns. #55108 (Anton Popov).
  • Adicionado suporte à consulta SHOW MERGES. #55815 (megao).
  • Adiciona a configuração create_table_empty_primary_key_by_default para usar ORDER BY () como padrão. #55899 (Srikanth Chekuri).

Melhoria de desempenho

  • Adicionar a opção query_plan_preserve_num_streams_after_window_functions para 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_map por absl::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 IN quando o tipo de elemento do set não corresponde exatamente ao tipo da coluna. #55712 (Duc Canh Le).
  • Melhoria no desempenho de ColumnVector::insertMany e ColumnVector::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 de max_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 density passado à 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âmetro max_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 conjuntos watches e list_watches, que são pesados. #56054 (Alexander Gololobov).
  • Adiciona a configuração optimize_trivial_approximate_count_query para usar a aproximação de count no 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) e toWeek (WEEK) agora aceitam argumentos String. 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íveis ignore, 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 xid a system.zookeeper_connection. #50702 (helifu).
  • Exibir as configurações corretas do servidor em system.server_settings apó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_projection tornou-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 de untuple e 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 consulta DESCRIBE. Adicionada a configuração describe_compact_output. Se estiver definida como true, a consulta DESCRIBE retorna apenas os nomes e tipos das colunas, sem informações adicionais. #55129 (Anton Popov).
  • Às vezes, OPTIMIZE com optimize_throw_if_noop=1 pode falhar com o erro unknown reason, quando a causa real é haver projeções diferentes em partes distintas. Esse comportamento foi corrigido. #55130 (Nikita Mikhaylov).
  • Permite que várias tabelas MaterializedPostgreSQL acompanhem 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ção materialized_postgresql_use_unique_replication_consumer_identifier. Fecha #54918. #55145 (Kseniia Sumarokova).
  • Permite fazer o parse de DateTime64 e DateTime negativos com parte fracionária a partir de strings curtas. #55146 (Andrey Zvonov).
  • Para melhorar a compatibilidade com o MySQL, 1. information_schema.tables agora inclui o novo campo table_rows e 2. information_schema.columns agora inclui o novo campo extra. #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, como RENAME db.t1 to db.t2. #55373 (凌涛).
  • Adicionado internal_replication a system.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 COLUMNS agora informa corretamente o tipo FixedString como BLOB se a configuração use_mysql_types_in_show_columns estiver ativada. Também foram adicionadas duas novas configurações, mysql_map_string_to_text_in_show_columns e mysql_map_fixed_string_to_text_in_show_columns, para alternar a saída dos tipos String e FixedString entre TEXT e BLOB. #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-local e alternar para outro banco de dados. Isso torna o comportamento consistente com o clickhouse-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 null ao serializar Tuple como objetos JSON, o que possibilita manter a compatibilidade com a função to_json do Spark, algo que também é útil para o gluten. #55956 (李扬).
  • As funções (add|sub)Date agora 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-keeper com configuração embutida. #56086 (Maksim Kita).
  • Foi definido um limite para o valor máximo de configuração de queued.min.messages para 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 para minSampleSizeContinuous). 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-keeper autônomo a partir do pacote clickhouse-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 DEFAULT em 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_columns afete apenas SHOW COLUMNS #55481 (Robert Schulze).
  • Corrige a análise incorreta de DW_FORM_ref_addr pelo 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 FORMAT da 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_info e 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_strings passa 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_objects nos 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ção input_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ção input_format_json_infer_incomplete_types_as_strings. Agora, nos formatos JSON, podemos ler qualquer valor em uma coluna String e evitar o error Cannot determine type for column 'column_name' by first 25000 rows of data, most likely this column contains only Nulls or empty Arrays/Maps durante 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, hdfs e azure_blob_storage agora pode conter elementos read_resource e write_resource com nomes de recursos. As políticas de agendamento desses recursos podem ser configuradas em uma seção separada resources da configuração do servidor. As consultas podem ser marcadas usando a configuração workload e classificadas usando a seção workload_classifiers da 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ções max_speed e max_burst para 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 consultas DROP TABLE. #48915 (Pavel Novitskiy).
  • As funções SQL toString(datetime, timezone) e formatDateTime(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 para DECIMAL(P, 0)) e DECIMAL (como atalho para DECIMAL(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_log para registrar todas as operações BACKUP e RESTORE. #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ída Markdown. #53860 (irenjj).
  • Adicionada a função decodeHTMLComponent. #54097 (Bharat Nallan).
  • Adicionada peak_threads_usage à tabela query_log. #54335 (Alexey Gerasimchuck).
  • Adicionado suporte a SHOW FUNCTIONS ao clickhouse-client. #54337 (Julia Kartseva).
  • Adicionada a função toDaysSinceYearZero com alias TO_DAYS (para compatibilidade com MySQL), que retorna o número de dias transcorridos desde 0001-01-01 (no calendário gregoriano proléptico). #54479 (Robert Schulze). A função toDaysSinceYearZero agora oferece suporte a argumentos dos tipos DateTime e DateTime64. #54856 (Serge Klochkov).
  • Adicionadas as funções YYYYMMDDtoDate, YYYYMMDDtoDate32, YYYYMMDDhhmmssToDateTime e YYYYMMDDhhmmssToDateTime64. 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 existentes YYYYMMDDToDate, YYYYMMDDToDateTime, YYYYMMDDhhmmddToDateTime, YYYYMMDDhhmmddToDateTime64. #54509 (Quanfa Fu) (Robert Schulze).
  • Adicionadas várias funções de distância de strings, incluindo byteHammingDistance e editDistance. #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_names para 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 by com chaves constantes. Otimizará consultas com group by em _file/_path apó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 em MergeTree se ORDER BY contiver uma coluna Decimal. 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 de uniq como count quando selecionados de uma subconsulta com GROUP BY. #52082 #52645 (JackyWoo).
  • Remova as chamadas manuais para mmap/mremap/munmap e delegue todo esse trabalho ao jemalloc — 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 toString com 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 em ColumnString. #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 GeneratorJSONPath e 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-client processa arquivos em paralelo ao usar INFILE 'glob_expression'. Resolve #54218. #54533 (Max K.).
  • Permite usar a chave primária na função IN quando os tipos das colunas da chave primária são diferentes dos tipos das colunas no lado direito da função IN. 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_size para 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::ceilRowsToCompleteGranules por uma busca binária. #54869 (usurai).

Funcionalidade Experimental

  • A criação de índices Annoy agora pode ser paralelizada usando a configuração max_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 MergeTree por hashes dos nomes. Isso ajuda a evitar o erro File name too long em alguns casos. #50612 (Anton Popov).
  • Interpretar dados no formato JSON como JSONEachRow se não for possível analisar os metadados. Isso permitirá ler arquivos com a extensão .json mesmo 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_format para habilitar/desabilitar esse comportamento (habilitado por padrão). #52853 (Kruglov Pavel).
  • A view information_schema.tables agora conta com um novo campo data_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 createIfNotExists do 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 tabela EmbeddedRocksDB não fecha corretamente os arquivos no NFS após executar DROP TABLE. #53502 (Mingliang Pan).
  • RESTORE TABLE ON CLUSTER deve 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 pasta detached com o prefixo broken-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_ns aos cabeçalhos HTTP X-ClickHouse-Progress e X-ClickHouse-Summary. #54179 (joelynch).
  • Implementação dos comandos reconfig (https://github.com/ClickHouse/ClickHouse/pull/49450), sync e exists no keeper-client. #54201 (pufit).
  • clickhouse-local e clickhouse-client agora permitem especificar o parâmetro --query vá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_parts por 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 STD para a função stddevPop, para compatibilidade com MySQL. Fecha #54274. #54382 (Nikolay Degterinsky).
  • Adicionada a função addDate para compatibilidade com MySQL e subDate para manter a consistência. Consulte #54275. #54400 (Nikolay Degterinsky).
  • Adicionado modification_time a system.detached_parts. #54506 (Azat Khuzhin).
  • Foi adicionada uma configuração splitby_max_substrings_includes_remaining_string que 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 como map/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 version ao comando rm no keeper-client para 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 sistema system.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_schema foram 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 campo information_schema.tables.table_type mudou de Enum8 para String. 2. Foram adicionados os campos table_comment e table_collation à view information_schema.table. 3. Foram adicionadas as views information_schema.key_column_usage e referential_constraints. 4. Os aliases em maiúsculas nas views de information_schema foram 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, randomString e dictGet. 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 o clickhouse-server. #54807 (Michael Kolupaev).
  • Campo is_obsolete na tabela system.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 HOURS deve ser equivalente a INTERVAL 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, match e 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 usar string 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 timestamp para 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/env para localizar o bash — agora com suporte ao Nix OS. #54603 (Fionera).
  • O CMake adicionou a opção PROFILE_CPU, necessária para executar perf record sem 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 IPv6 em filtro de Bloom #54200 (Yakov Olkhovskiy).
  • corrige uma possível incompatibilidade de tipo com IPv4 #54212 (Bharat Nallan).
  • Corrigido o system.data_skipping_indices para índices recriados #54225 (Artur Malchanau).
  • corrige conflito de nomes no reescritor v2 para múltiplos join #54240 (Tao Wang).
  • Corrige erros inesperados em system.errors apó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 characters na função de tabela s3 #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-local agora oferece suporte ao argumento de linha de comando --database #54503 (vdimir).
  • Corrige um possível erro de parsing nos formatos -WithNames com input_format_with_names_use_header desabilitado #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 Chunk no MaterializedPostgreSQL #54844 (Kseniia Sumarokova).
  • Mover configurações de formato obsoletas para uma seção separada #54855 (Kruglov Pavel).
  • Reconstruir minmax_count_projection quando a chave de partição é modificada #54943 (Amos Bird).
  • Corrige conversão inválida para ColumnVector<Int128> na função if #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 FINAL produz 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ção disk. Na versão anterior, ele podia ser especificado como disk = disk_<disk_name>(...), o que não é mais suportado. #52820 (Kseniia Sumarokova).
  • O clickhouse-benchmark estabelecerá conexões em paralelo quando for executado com --concurrency maior 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 do clickhouse-benchmark foi removida. Se você usava essa opção, também pode extrair dados de system.query_log em formato JSON como alternativa. #53293 (Alexey Milovidov).
  • A coluna microseconds foi removida de system.text_log, e a coluna milliseconds foi removida de system.metric_log, porque são redundantes na presença da coluna event_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_cache foi 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 ptr a system.trace_log para trace_type = 'MemorySample'. Essa coluna contém um endereço de alocação. Adicionada a função flameGraph, 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 tabela s3Cluster. #50795 (SmitaRKulkarni).
  • Permitir o uso de cluster, clusterAllReplicas, remote e remoteSecure sem 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/fromUTCTimestamp para funcionar da mesma forma que to_utc_timestamp/from_utc_timestamp do Spark. #52117 (KevinyhZou).
  • Adiciona novas funções structureToCapnProtoSchema/structureToProtobufSchema que 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ções format_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ção output_format_schema. #52278 (Kruglov Pavel).
  • Um novo campo query_cache_usage em system.query_log agora indica se e como o cache de consultas foi usado. #52384 (Robert Schulze).
  • Adicionadas as novas funções startsWithUTF8 e endsWithUTF8. #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 o ReplicatedMergeTree). #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 coluna dummy, do tipo UInt8 e valor 0, como system.one. Ele pode ser usado em conjunto com as colunas virtuais _file/_path para 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_indexes para 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 name a system.clusters como 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 S3Queue para 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 WHERE e 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_implementation para reescrever countDistinctIf usando count_distinct_implementation. Fecha #30642. #46051 (flynn).
  • Acelera a mesclagem dos estados das funções de agregação uniq e uniqExact ao 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 ORC nativo 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_reaction para controlar a reação (none, log ou throw) quando há dados no stderr de um comando externo. Isso facilita a depuração de comandos externos. #43210 (Amos Bird).
  • Adicionar a coluna partition à tabela system part_log e à tabela merge. #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_control para 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 index em 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 Aggregator quando max_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 conf existente 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 arrayIntersect agora 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 FREEZE deixam 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 s3 se recusava a funcionar com URLs pré-assinadas. fecha #50846. #52310 (chen).
  • Adicionar a coluna name como alias de event e metric nas tabelas system.events e system.metrics. Fecha #51257. #52315 (chen).
  • Adicionado suporte à sintaxe CREATE UNIQUE INDEX no analisador como um no-op, para melhor compatibilidade com SQL. O índice UNIQUE não é suportado. Defina create_index_ignore_unique = 1 para 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_metrics agora 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_class na cláusula SETTINGS da instrução BACKUP para 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_schema em minúsculas e, outras vezes, em maiúsculas. Por esse motivo, temos o banco de dados information_schema, que contém tabelas em minúsculas, como information_schema.tables, e o banco de dados INFORMATION_SCHEMA, que contém tabelas em maiúsculas, como INFORMATION_SCHEMA.TABLES. Mas algumas ferramentas estão consultando INFORMATION_SCHEMA.tables e information_schema.TABLES. A solução proposta é duplicar as tabelas em minúsculas e em maiúsculas nos bancos de dados information_schema e INFORMATION_SCHEMA. #52695 (Yarik Briukhovetskyi).
  • A consulta CHECK TABLE tem melhor desempenho e usabilidade (envia atualizações de progresso, pode ser cancelada). #52745 (vdimir).
  • Adicionado suporte a modulo, intDiv e intDivOrZero para tuplas, distribuindo-os pelos elementos da tupla. #52758 (Yakov Olkhovskiy).
  • Procurar configurações padrão yaml e yml no clickhouse-client depois de xml. #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_parsing para 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 para clickhouse-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 SETTINGS de consultas RESTORE. #52970 (Victor Krasnov).
  • Adicionada a capacidade de limitar a taxa das solicitações ao S3 em operações de backup (os comandos BACKUP e RESTORE agora respeitam s3_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 hasTokenOrNull e hasTokenCaseInsensitiveOrNull retornem 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_path for 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 o path na configuração do cache for relativo, ele será colocado em filesystem_caches_path; se o path na configuração do cache for absoluto, será necessário que ele esteja dentro de filesystem_caches_path. Se filesystem_caches_path nã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_queries de 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 erro Directory for table data already exists ao replicar/recuperar um banco de dados Replicated. #53425 (Alexander Tokmakov).
  • Se as configurações do servidor asynchronous_metrics_update_period_s e asynchronous_heavy_metrics_update_period_s forem 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, DROP ou no desligamento do servidor. #53501 (Azat Khuzhin).
  • A função domainRFC agora é 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ção groupArray no momento da serialização. O valor padrão é 16777215. #53550 (Nikolai Kochetov).
  • SCHEMA foi adicionado como alias de DATABASE para 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

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

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 (aliases USE 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 pai NAMED COLLECTION ADMIN também vem desabilitado por padrão). Proposto em #50277. Para concedê-lo, use GRANT NAMED COLLECTION ON collection_name TO user ou GRANT NAMED COLLECTION ON * TO user; para poder conceder esses grants, named_collection_admin é necessário na configuração (anteriormente ele se chamava named_collection_control, portanto continuará disponível como alias). #50625 (Kseniia Sumarokova).
  • Corrige um erro de digitação no nome da coluna last_removal_attemp_time de system.parts. Agora ela se chama last_removal_attempt_time. #52104 (filimonov).
  • Eleva a versão de distributed_ddl_entry_format_version para 5 por padrão (habilitando OpenTelemetry e o repasse de initial_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 hashid foi 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 Overlay para combinar vários bancos de dados em um só. Adicionado o engine de banco de dados Filesystem para 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 dados S3 permite interagir com o armazenamento S3 em modo read-only, representando um prefixo como um conjunto de tabelas. Um novo engine de banco de dados HDFS permite 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_obsolete a system.settings e 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 LISTEN para 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_bins para 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 RowBinaryWithDefaults com 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 a default_table_engine, mas para tabelas temporárias. #51292. #51708 (velavokr).
  • Adicionadas novas funções initcap / initcapUTF8 que 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 KEY na 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 log e errorlog) quanto em argumentos de linha de comando (--log-file e --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ões CaseInsensitive e UTF8) para identificar subsequências em strings. #52050 (Dmitry Kardymon).
  • Adicionar array_agg como alias de groupArray para compatibilidade com PostgreSQL. Fecha #52100. ### Item de documentação para alterações voltadas ao usuário. #52135 (flynn).
  • Adiciona any_value como alias de compatibilidade para a função de agregação any. Fecha #52140. #52147 (flynn).
  • Adiciona a função de agregação array_concat_agg para compatibilidade com o BigQuery; é um alias de groupArrayArray. Fecha #52139. #52149 (flynn).
  • Adiciona OCTET_LENGTH como alias de length. Fecha #52153. #52176 (FFFFFFFHHHHHHH).
  • Adicionada a função firstLine para 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 consulta Kusto. #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 (true por padrão), que determina se a fila de inserções assíncronas deve ser descarregada durante um encerramento controlado. A configuração async_insert_threads agora é uma configuração do lado do servidor. #49160 (Anton Popov).
  • Aliases current_database e nova função current_schemas para compatibilidade com PostgreSQL. #51076 (Pedro Riera).
  • Adicionar aliases às funções today (agora também disponível pelos nomes curdate/current_date) e now (current_timestamp). #52106 (Lloyd-Pottiger).
  • Suporte a async_deduplication_token em 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.9375 55153. Você pode desativar o uso do formato de serialização esparso definindo a configuração ratio_of_defaults_for_sparse_serialization = 1 para suas tabelas MergeTree. #49631 (Alexey Milovidov).
  • As configurações move_all_conditions_to_prewhere e enable_multiple_prewhere_read_steps foram 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 em MergeTreeReadPool. 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 join com 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 tipos String com 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_parts por 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 de 4Mi. O número de threads em segundo plano é configurado pela definição de configuração de cache background_download_threads, com valor padrão de 2. Além disso, max_file_segment_size foi aumentado de 8Mi para 32Mi neste 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_columns adicionada. Se definida como true, apenas os tamanhos das colunas da seção PREWHERE serã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_ms que 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 FETCH sem OFFSET. 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_headers na configuração. Há suporte tanto para correspondência exata quanto para filtros por regexp. #51038 (Nikolay Degterinsky).
  • Não exiba mensagens sobre 16 EiB de 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ção function_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_log as consultas de flush de async insert. #51160 (Raúl Marín).
  • As funções date_diff e age agora 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_copy e s3_allow_native_copy para discos s3/s3_plain). #51448 (Azat Khuzhin).
  • Adicionar a coluna primary_key_size à tabela system.parts para exibir o tamanho compactado da chave primária em disco. Fecha #51400. #51496 (Yarik Briukhovetskyi).
  • Permite executar clickhouse-local sem 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 %a para o nome completo do arquivo na configuração rename_files_after_processing. #51603 (Kruglov Pavel).
  • Adiciona a coluna modification_time a system.parts_columns. #51685 (Azat Khuzhin).
  • Adiciona a nova configuração input_format_csv_use_default_on_bad_values ao 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 range com argumentos Nullable. #51767 (Dmitry Kardymon).
  • Converte uma condição como toyear(x) = c em c1 <= x < c2. #51795 (Han Fei).
  • Melhora na compatibilidade da instrução SHOW INDEX com o MySQL. #51796 (Robert Schulze).
  • Corrigido o problema em que use_structure_from_insertion_table_in_table_functions não funciona com colunas MATERIALIZED e ALIAS. 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 consultas ADD INDEX sem TYPE especificado. 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_log desde 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_projections para desativar projeções implícitas (no momento, apenas a projeção min_max_count). #52152 (Amos Bird).
  • Era possível usar a função hasToken para 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 block em 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 ZooKeeperRetriesControl relança um erro, é mais útil ver a stack trace original, não a do próprio ZooKeeperRetriesControl. #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 nome name). #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 reconfig do ZooKeeper para ClickHouse Keeper com reconfiguração incremental, que pode ser habilitada por meio da configuração keeper_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::fillArrowArrayWithArrayColumnData funcione 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.licenses agora 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 ,world em vez de Hello, world. #52549 (Alexey Milovidov).

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

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_files do 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_size e http_max_field_name_size para 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 CPU Normalized passarã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 como CASE com 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 TRUNCATE na cláusula INTO OUTFILE. Recomenda-se usar APPEND ou TRUNCATE com INTO OUTFILE quando o arquivo já existir. #50950 (alekar).
  • Adicionados o mecanismo de tabela Redis e a função de tabela redis. 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_columns para alterar a instrução SQL SHOW 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ções max_merge_selecting_sleep_ms, merge_selecting_sleep_slowdown_factor, max_cleanup_delay_period e cleanup_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_id local 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_storages para 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 PARTITION nem mutações por meio do banco de dados Replicated se ele tiver apenas um shard e a tabela subjacente for ReplicatedMergeTree. #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_inference para 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_default na 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_lines e input_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_delay e number_of_mutations_to_throw agora 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* e parseDateTime64BestEffort*. #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_files de system.parts para 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-client embutido 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 RUN enorme no Dockerfile em condicionais menores. Instala as ferramentas necessárias sob demanda na mesma camada RUN e 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)

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_marks e compress_primary_key na 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_storages e input_format_parquet_preserve_order foram 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, use parallelize_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_projections para controlar se as projeções serão selecionadas para consultas SELECT. A configuração allow_experimental_projection_optimization está obsoleta e não faz nada. #49719 (Alexey Milovidov).
  • Marcar joinGet como não determinístico (assim como dictGet). Isso permite usá-los em mutações sem necessidade de uma configuração extra. #49843 (Azat Khuzhin).
  • Reverter a alteração “groupArray returns cannot be nullable” (devido à quebra de compatibilidade binária de groupArray/groupArrayLast/groupArraySample sobre tipos Nullable, o que provavelmente levará a TOO_LARGE_ARRAY_SIZE ou CANNOT_READ_ALL_DATA). #49971 (Azat Khuzhin).
  • A configuração enable_memory_bound_merging_of_aggregation_results está ativada por padrão. Se você estiver atualizando de uma versão anterior à 22.12, recomendamos definir esse sinalizador como false até 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 totals e o modificador extremes. #48853 (Robert Schulze). Tornar a configuração allow_experimental_query_cache obsoleta 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, Polygon e MultiPolygon) 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ção default_password_type no arquivo config.xml do 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 function generateRandom. #47409 (Kruglov Pavel).
  • Permite o uso de CASE sem uma cláusula ELSE e estende transform para lidar com mais tipos. Também corrige alguns problemas que faziam transform() 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 header para 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_limit e merges_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étrica MergesMutationsMemoryTracking para permitir observar o uso atual de memória das tarefas em segundo plano. Reenvio de #46089. Fecha #48774. #48787 (Dmitry Novik).
  • A função dotProduct agora funciona com Array. #49050 (FFFFFFFHHHHHHH).
  • Adiciona suporte à instrução SHOW INDEX para melhorar a compatibilidade com o MySQL. #49158 (Robert Schulze).
  • Adicionado suporte às colunas virtuais _file e _path na função de tabela url. - Melhorada a mensagem de erro da função de tabela url. - resolve #49231 - resolve #49232. #49356 (Ziyi Tan).
  • Adicionado o campo grants ao 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 FILL agrupa o preenchimento com base no prefixo de ordenação. É controlado pela configuração use_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_timeout separado 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 dictGetAll para dicionários do tipo regexp tree retorne valores de múltiplas correspondências como arrays. Fecha #50254. #50255 (Johann Gan).
  • Adicionada a função toLastDayOfWeek para 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_processes e a consulta SHOW USER PROCESSES para 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_select para exibir segredos de tabelas, bancos de dados, table functions e dicionários. Adicionado o privilégio displaySecretsInShowAndSelect, 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_marks e compress_primary_key na 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 ANY hash join se nada for inserido. #48633 (vdimir).
  • Corrige o combinador de agregação -If quando 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_bytes para limitar a quantidade de memória usada em operações em segundo plano. - vertical_merge_algorithm_min_bytes_to_activate para 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_fs e max_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_HASHED agora consome 2.6x menos memória e é ~2x mais rápido). #49380 (Azat Khuzhin).
  • Otimize as tabelas system.query_log e system.query_thread_log aplicando LowCardinality quando for apropriado. As consultas nessas tabelas serão mais rápidas. #49530 (Alexey Milovidov).
  • Melhor desempenho na leitura de arquivos Parquet locais (por meio de leitura paralela). #49539 (Michael Kolupaev).
  • Melhora o desempenho de RIGHT/FULL JOIN em 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. Use LowCardinality onde 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 CheckNotExists ao 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 List ao 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_results vem habilitada por padrão. #50319 (Nikita Taranov).

Funcionalidade Experimental

  • O codec DEFLATE_QPL reduz 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 Outdated com “replicação zero-copy”. #49630 (Alexander Tokmakov).
  • Réplicas paralelas: 1) Corrigido um erro NOT_FOUND_COLUMN_IN_BLOCK ao usar réplicas paralelas com armazenamento não replicado, com a configuração parallel_replicas_for_non_replicated_merge_tree desabilitada 2) Agora allow_experimental_parallel_reading_from_replicas tem 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 se allow_experimental_parallel_reading_from_replicas estiver 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 BACKUP nã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 FROM de ATTACH PARTITION FROM e REPLACE PARTITION FROM. #49436 (Roman Vasin).
  • Adicionada a configuração async_insert para tabelas MergeTree. Ela tem o mesmo significado da configuração async_insert no 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 do clickhouse-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_value e last_value para aceitarem NULL. #46467 (lgbo).
  • Adiciona os aliases str_to_map e mapFromString para extractKeyValuePairs. 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ções oss e cosn, ela é apenas um alias da função de tabela s3 e 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 Replicated em system.clusters: database_shard_name, database_replica_name, is_active. Adicionada uma cláusula opcional FROM SHARD à consulta SYSTEM DROP DATABASE REPLICA. #48548 (Alexander Tokmakov).
  • Adicionada uma nova coluna zookeeper_name em system.replicas para indicar em qual cluster (auxiliar) do ZooKeeper os metadados da tabela replicada estão armazenados. #48549 (cangyin).
  • O operador IN oferece suporte à comparação entre Date e Date32. 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 Interval em tabelas. #49085 (larryluogit).
  • Permite usar a função de janela ntile sem 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 consultas ALTER que 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_directories no cache do sistema de arquivos. #49203 (Kseniia Sumarokova).
  • Copia exemplos embutidos para um novo campo example em system.functions, para complementar o campo description. #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 asymptotic para o método computacional asymp de kolmogorovSmirnovTest. 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_size e outdated_part_loading_thread_pool_queue_size. #49317 (Nikita Mikhaylov).
  • Não superestime o tamanho dos dados processados para colunas LowCardinality quando 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 ARRAY como 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_size e max_parts_cleaning_thread_pool_size na configuração de nível superior. As configurações em nível de tabela max_part_loading_threads e max_part_removal_threads tornaram-se obsoletas. #49474 (Nikita Mikhaylov).
  • Permite ?password=pass na 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_tracker após o ThreadGroup ser 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 dictionary para RegExpTreeDictionary. #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 upload para o GCS. Isso permite usar a operação de cópia em objetos enviados com multipart upload. Recomenda-se definir s3_strict_upload_part_size com 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 aceitar key_value_delimiter como 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_id a 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 partitions em system.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_prefix para ReplicatedMergeTree (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 de Duplicate interserver IO endpoint quando 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_config ou user_defined_executable_functions_config no 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 IN são tuplas de um único elemento. #49844 (MikhailBurdukov).
  • A função bitHammingDistance é compatível com os tipos de dados String e FixedString. 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 toUnixTimestamp agora aceita os argumentos Date e Date32. #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_*, como SQL_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_optimization para optimize_use_projections, allow_experimental_lightweight_delete para enable_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 n podia 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 CGroupCpuCfsPeriod e CGroupCpuCfsQuota em 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 chave multi - para cada requisição ou sub-requisição em múltiplas requisições, é possível definir um campo weight para 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 campos min_value e max_value sã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&#95;tests&#95;&#95;release&#95;&#95;databasereplicated&#95;&#95;[3&#95;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 assert em 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 arrayMap com 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_prefix no OptimizeRegularExpression #49919 (Han Fei).
  • Corrigidas as métricas WriteBufferFromS3Bytes, WriteBufferFromS3Microseconds e WriteBufferFromS3RequestsErrors #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 --query e --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 SELECT distribuído aninhado na cláusula WITH #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 path na 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 COLUMNS que mostra informações resumidas de system.columns. #48017 (Robert Schulze).
  • Foram adicionados os modificadores LIGHTWEIGHT e PULL à consulta SYSTEM SYNC REPLICA. A versão LIGHTWEIGHT aguarda apenas fetches e drop-ranges (merges e mutações são ignoradas). A versão PULL extrai novas entradas do ZooKeeper sem esperar por elas. Corrige #47794. #48085 (Alexander Tokmakov).
  • Adicionada a função kafkaMurmurHash para 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 à tabela system.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 perfil ReplicatedDataLoss, que não é persistente. #48526 (Sergei Trifonov).
  • Adicionada a função soundex para compatibilidade. Fecha #39880. #48567 (FriendLey).
  • Suporte ao tipo Map no JSONExtract. #48629 (李扬).
  • Adiciona o formato PrettyJSONEachRow para produzir JSON formatado com delimitadores de quebra de linha e recuo de 4 espaços. #48898 (Kruglov Pavel).
  • Adiciona o formato de entrada ParquetMetadata para ler metadados de arquivos Parquet. #48911 (Kruglov Pavel).
  • Adicionar a função extractKeyValuePairs para 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 \, \;) e quoting_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 Parquet agora está muito mais rápida. IO e decodificação são paralelizados (controlados pela configuração max_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 tabela t tiver múltiplas partes, então, para cada parte, um Set da subconsulta SELECT id FROM huge_table será 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_replica nã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 IN com 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 tabela url e file. #48727 (Igor Nikonov). Isso é controlado pela configuração parallelize_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_shards estiver habilitada. #48771 (Azat Khuzhin).

Funcionalidade experimental

  • As entradas no cache de consultas agora são combinadas em blocos de até max_block_size e 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_ms para 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 Iceberg funcionar com dados não particionados. - Suporte ao formato Iceberg v2 (antes, apenas a v1 era compatível) - Suporte à leitura de dados particionados no DeltaLake/Hudi - Leitura mais rápida dos metadados do DeltaLake usando os arquivos de checkpoint do Delta - Correção de leituras incorretas no Hudi: 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 para Iceberg/DeltaLake/Hudi usando 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_ms por padrão (https://github.com/ClickHouse/ClickHouse/issues/5188). #47229 (Kruglov Pavel).
  • Suporte às seções de configuração keeper/keeper_server como alternativa a zookeeper. 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 dados FixedString e String. #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_credentials para 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 no ORC. #48126 (Kruglov Pavel).
  • Adiciona as colunas perform_ttl_move_on_insert e load_balancing à tabela system.storage_policies e altera o tipo da coluna volume_type para Enum8. #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 Map como 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 tabelas KeeperMap. #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_key para compatibilidade (defina check_dictionary_primary_key =false para 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_filters e additional_result_filter no novo planner. Além disso, foi adicionada uma entrada na documentação para additional_result_filter. #48405 (Dmitry Novik).
  • parseDateTime agora 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 --user e --password sobrescrevam as variáveis de ambiente CLICKHOUSE_USER e CLICKHOUSE_PASSWORD. Fecha #38909. #48440 (Nikolay Degterinsky).
  • Adicionadas novas tentativas ao carregar partes de dados em tabelas MergeTree em caso de erros recuperáveis. #48442 (Anton Popov).
  • Adicionado suporte aos tipos de dados Date, Date32, DateTime e DateTime64 nas funções arrayMin, arrayMax e arrayDifference. 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 TABLE com o mesmo significado de SHOW 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_entry para ReplicatedMergeTree, que permite limitar o número de comandos de mutação em cada entrada MUTATE_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_size com 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 name e part_name de system.parts e system.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-threads em 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 LineAsString funcionava 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).
  • toTimeZone gera 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 Memory com 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 groupArray funciona 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 auth na 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 Date32 em uma coluna que não é Date32 #48864 (Kruglov Pavel).
  • Corrige o erro UNKNOWN_IDENTIFIER ao 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 consulta DELETE para tabelas MergeTree agora está disponível por padrão.
  • O comportamento das funções *domain*RFC e netloc mudou 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 em arrayIntersect. Funções de agregação estatísticas que envolvem momentos (como corr ou vários TTests) usarão Float64 como representação interna (antes desta mudança elas usavam Decimal128, mas isso não fazia sentido), e essas funções podem retornar nan em vez de inf em caso de variância infinita. Algumas funções eram permitidas em tipos de dado Decimal256, mas retornavam Decimal128 em versões anteriores — agora isso foi corrigido. Isso fecha #47569. Isso fecha #44864. Isso fecha #28335. #47594 (Alexey Milovidov).
  • backup_threads/restore_threads passam 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_key e parallel_replicas_custom_key_filter_type. Se o cluster consistir em um único shard com várias réplicas, até max_parallel_replicas serã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 que sample_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 a system.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 collection apenas a determinadas coleções, em vez de a todas de uma só vez). Fecha #40894. Adiciona o novo tipo de acesso NAMED_COLLECTION_CONTROL, que não é concedido ao usuário default a menos que seja explicitamente adicionado à configuração do usuário (ele é necessário para poder executar GRANT ALL); além disso, show_named_collections não precisa mais ser especificado manualmente para que o usuário default tenha 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 alias WIDTH_BUCKET para compatibilidade). #42974. #46790 (avoiderboi).
  • Adiciona a nova função parseDateTime/parseDateTimeInJodaSyntax de acordo com a string de formato especificada. parseDateTime converte String em DateTime na sintaxe MySQL, e parseDateTimeInJodaSyntax converte na sintaxe Joda. #46815 (李扬).
  • Use dummy UInt8 como estrutura padrão da função de tabela null. Fecha #46930. #47006 (flynn).
  • Suporte a formato de data com vírgula, como Dec 15, 2021, na função parseDateTimeBestEffort. Fecha #46816. #47071 (chen).
  • Adicionadas as configurações http_wait_end_of_query e http_response_buffer_size, que correspondem aos parâmetros de URL wait_end_of_query e buffer_size da 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 dados Atomic, mas que ainda não foram totalmente excluídas. #47364 (chen).
  • Adiciona INSTR como alias de positionCaseInsensitive para 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 alias str_to_date para 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_threads será definida com base no número de núcleos na inicialização do servidor (usando o mesmo algoritmo de max_threads). Isso melhora a concorrência da execução de final em 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=1 na seção SETTINGS da origem na instrução CREATE DICTIONARY. #47986 (Vladimir C).
  • Otimiza o desempenho da agregação com uma chave Nullable. #45772 (LiuNeng).
  • Implementado o uso do índice tokenbf_v1 em minúsculas para hasTokenOrNull, hasTokenCaseInsensitive e hasTokenCaseInsensitiveOrNull. #46252 (ltrk2).
  • Otimize as funções position e LIKE com 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_queue para 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-copier para usar GROUP BY em vez de DISTINCT para 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, Dictionary e EmbeddedRocksDB se 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_tuple por padrão. #46742 (Kruglov Pavel).
  • Permitir ignorar erros ao enviar para MATERIALIZED VIEW (adiciona a nova configuração materialized_views_ignore_errors, com padrão false, mas ela é definida como true para fazer flush dos logs nas tabelas system.*_log incondicionalmente). #46658 (Azat Khuzhin).
  • Rastreie em memória a fila de arquivos de envios distribuídos. #45491 (Azat Khuzhin).
  • Agora, os headers X-ClickHouse-Query-Id e X-ClickHouse-Timezone são adicionados às respostas de todas as consultas via protocolo HTTP. Antes, isso era feito apenas para consultas SELECT. #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=1 para 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_version para controlar a versão do Parquet, com os possíveis valores 1.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 tabelas web em 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.backups apó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_conversion para controlar isso (ativada por padrão). #46990 (Kruglov Pavel).
  • Permite usar IPv4 na função range para 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 Bool na função JSONType. Anteriormente, o tipo Null era retornado por engano para valores booleanos. #47046 (Anton Popov).
  • Use o parâmetro _request_body para 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 repeat aceitava 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ção repeat foi 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 ::__1 dos stacktraces. Exibir std::basic_string<char, ... como String nos 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 clrs para 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 no clickhouse-compressor sem o tipo da coluna. Corrige possíveis interrupções e erros aritméticos no clickhouse-compressor com 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 ExpiredToken em alguns casos extremos. Isso pode ser controlado pela configuração expiration_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 Ordinary para Atomic; 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 Protobuf usando apenas o nome do campo raiz como nome da coluna. Antes, o nome da coluna precisava conter todos os nomes dos campos aninhados (como a.b.c Array(Array(Array(UInt32))), mas agora você pode usar apenas a Array(Array(Array(UInt32))). #47650 (Kruglov Pavel).
  • Adicionado um modificador STRICT opcional para SYSTEM 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 que rows_before_limit_at_least reflita 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 WriteBufferFromS3Microseconds e WriteBufferFromS3RequestsErrors. #47885 (Antonio Andelic).
  • Adicionadas as opções --link e --noninteractive (-y) à instalação do ClickHouse. Corrige #47750. #47887 (Nikolay Degterinsky).
  • Corrigida a exceção UNKNOWN_TABLE ao 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, Map com qualquer tipo de chave e DateTime64 com 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 EXPLAIN no 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 clickhouse ao 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 vectorscan para 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 TABLE com tabelas ReplicatedMergeTree e bancos de dados Atomic. Em casos raros, isso poderia causar os erros Can't get data for node /zk_path/log_pointer e The specified key does not exist se 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 and durante 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-local durante 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 LIKE quando o padrão LIKE conté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 select na mesma tabela Join, 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 BSONEachRow quando o tamanho do documento é inválido #47540 (Kruglov Pavel).
  • Preserva o erro em system.distribution_queue no SYSTEM 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ão zlib e gzip #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 cidx está 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_size para filesystem_cache_max_download_size. #45614 (Kseniia Sumarokova).
  • O usuário default não terá, por padrão, permissões para o tipo de acesso SHOW NAMED COLLECTION (por exemplo, o usuário default nã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 countDigits em datasets realistas. Isso fechou #44518. Em versões anteriores, countDigits(0) retornava 0; agora retorna 1, 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 StorageIceberg e a função de tabela iceberg para acessar tabelas Iceberg armazenadas no S3. #45384 (flynn).
  • Permite configurar o armazenamento com SETTINGS disk = '<disk_name>' (em vez de storage_policy) e com a criação explícita de disco SETTINGS disk = disk(type=s3, ...). #41976 (Kseniia Sumarokova).
  • Expor contadores ProfileEvents em system.part_log. #38614 (Bharat Nallan).
  • Aprimoramento do engine ReplacingMergeTree existente para permitir inserções duplicadas. Ele combina os recursos de ReplacingMergeTree e CollapsingMergeTree em 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ção covarSamp e covarPop são semelhantes a corr, adiciono também covarSampMatrix e covarPopMatrix. @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_BINARY no Arrow e FIXED_LENGTH_BYTE_ARRAY no Parquet, com mapeamento para FixedString. Adicionadas as configurações output_format_parquet_fixed_string_as_fixed_byte_array/output_format_arrow_fixed_string_as_fixed_byte_array para controlar o tipo de saída padrão de FixedString. Fecha #45326. #45340 (Kruglov Pavel).
  • Adiciona uma nova coluna last_exception_time a 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 JodaTime para ‘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 final para aplicar implicitamente o modificador FINAL a cada tabela. #40945 (Arthur Passos).
  • Adicionadas as funções arrayPartialSort e arrayPartialReverseSort. #46296 (Joanna Hulboj).
  • O novo parâmetro HTTP client_protocol_version permite 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ção REGEXP_EXTRACT do Spark, para compatibilidade. Ela é semelhante à função existente extract. #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 Parquet com o uso de um leitor em lote. #45878 (LiuNeng).
  • Adicionado o novo método local_filesystem_read_method io_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ão pread. #38456 (Saulius Valatka).
  • Reescrita de funções de agregação com a expressão if como 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 multiIf com execução colunar, com ganho de velocidade de 2,3x. #45296 (李扬).
  • Adiciona uma otimização para a função position quando a subcadeia buscada está vazia. #45382 (李扬).
  • Habilitar a otimização query_plan_remove_redundant_sorting por 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 SELECT curtas que leem de tabelas com um grande número de colunas Array/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 _part e _partition_id como do tipo LowCardinality(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_write no 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_status responderá 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_distinct em relação às cláusulas DISTINCT. Pode ser habilitado por meio da configuração query_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_policy para selecionar o algoritmo de agendamento (round_robin ou shortest_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 para prewhere, em consultas com final. #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_size para 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 Gorilla em 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_tree foi refinado e agora é compatível com https://github.com/ua-parser/uap-core. #45631 (Han Fei).
  • Verificação de SYSTEM SYNC REPLICA atualizada, resolve #45508 #45648 (SmitaRKulkarni).
  • Renomeada a configuração replication_alter_partitions_sync para alter_sync. #45659 (Antonio Andelic).
  • A função de tabela generateRandom e o mecanismo agora suportam tipos de dados LowCardinality. Isso é útil para testes; por exemplo, você pode escrever INSERT 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 sistema sync. #8921. #45685 (DR).
  • Adiciona uma nova configuração do S3 allow_head_object_request. Este PR torna opcional o uso da requisição GetObjectAttributes em vez de HeadObject, 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.xml e 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_files foi desmembrada em duas colunas: num_files (para BACKUP) e files_read (para RESTORE). A coluna processed_files_size foi desmembrada em duas colunas: total_size (para BACKUP) e bytes_read (para RESTORE). #45800 (Vitaly Baranov).
  • Adicionar suporte à consulta SHOW ENGINES para 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_dependencies para verificar dependências referenciais no DROP TABLE. Este PR resolve #38326. #45936 (Vitaly Baranov).
  • Corrige tupleElement para retornar Null ao receber argumento Null. 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 Log passou a oferecer suporte à configuração de storage_policy. Fecha #43421. #46044 (flynn).
  • Aprimora o formato JSONColumns quando 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, leftPadUTF8 e rightPadUTF8, 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, como arrayResize, substring etc. #46103 (李扬).
  • Corrigida a asserção na função welchTTest na 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 de studentTTest para 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_parts e total_marks em system.tables na 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_default está 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_credentials estiver definido como true e 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 formatDateTime com 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 de formatDateTime. 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 ProfileEvents e CurrentMetrics relacionados às tarefas de callback para réplicas paralelas (tabelas s3Cluster e MergeTree). #46313 (Alexey Milovidov).
  • Adicionado suporte a DELETE e UPDATE em tabelas que usam o mecanismo de armazenamento KeeperMap. #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-watchdog para reiniciar o processo filho. Isso não é muito útil. #46312 (Alexey Milovidov).
  • Se a variável de ambiente CLICKHOUSE_DOCKER_RESTART_ON_EXIT estiver definida como 1, o contêiner Docker executará clickhouse-server como 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_ms ou por rabbitmq_max_block_size em StorageRabbitMQ. 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 segfaults envolvendo o c-ares foram 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.limitByOffset em vez de select_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 à tabela system.processes e à consulta SHOW PROCESSLIST. Remove código duplicado. Isso corrige um bug: o parâmetro global de configuração max_concurrent_select_queries não era aplicado a consultas com cadeias INTERSECT ou EXCEPT. #45872 (Alexey Milovidov).
  • Corrige uma falha na função stochasticLinearRegression. Encontrada pelo WingFuzz. #45985 (Nikolai Kochetov).
  • Corrige falha em consultas SELECT com os modificadores INTERSECT e EXCEPT que leem dados de tabelas com colunas esparsas ativadas (controladas pela configuração ratio_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_join com 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 UNFREEZE com a exceção CANNOT_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_ERROR em inserts assíncronos com dados inválidos enviados no formato VALUES. #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 select distribuído em paralelo quando parallel_distributed_insert_select está habilitado. #46381 (Kruglov Pavel).
  • Corrige consultas como ALTER TABLE ... UPDATE nested.arr1 = nested.arr2 ..., em que arr1 e arr2 são campos da mesma coluna Nested. #46387 (Anton Popov).
  • O agendador pode não conseguir agendar uma tarefa. Se isso acontecer, todo o MulityPartUpload deverá ser abortado, e o UploadHelper deve aguardar as tarefas já agendadas. #46451 (Dmitry Novik).
  • Corrige o PREWHERE para Merge com tipos padrão diferentes (corrige alguns NOT_FOUND_COLUMN_IN_BLOCK quando o tipo padrão da coluna é diferente; também permite PREWHERE quando 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 disk tiver sido especificada no nível da consulta, mas storage_policy tiver sido especificada na seção de configurações do MergeTree no arquivo de configuração. disk substituirá a configuração do arquivo. #46533 (Kseniia Sumarokova).
  • Corrige o processamento inválido de um argumento constante LowCardinality na função arrayMap. Esse bug podia causar uma falha de segmentação em build de release e o erro lógico Bad cast em 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 DISK passa a ser um no-op. #44647 (alesapin).
  • A opção PREALLOCATE para dicionários HASHED/SPARSE_HASHED passa a ser um no-op. #45388 (Azat Khuzhin). Ela não oferece mais vantagens significativas.
  • É proibido usar o codec Gorilla em 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 *MergeTree criadas 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 GetObjectAttributes em vez da requisição HeadObject para 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ção GetObjectAttributes.
  • 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/Aden não é permitido; deve ser usado o nome do banco de dados de fusos horários da IANA, como Asia/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 DateTime no estilo Joda-Time. Consulte a documentação do Joda-Time. #43818 (李扬).
  • Implementado um formatador de frações de segundo (%f) para formatDateTime. #44060 (ltrk2). #44497 (Alexander Gololobov).
  • Adicionada a função age para 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 Null para 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 engine kafka_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 Nested como List de Struct no formato CapnProto. Leitura/gravação de Decimal32/64 como Int32/64. Fecha #43319. #43379 (Kruglov Pavel).
  • Foi adicionada uma coluna message_format_string a system.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 dados Replicated. 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 S3 e da função de tabela s3 com grandes quantidades de arquivos pequenos. Agora, as configurações remote_filesystem_read_method e remote_filesystem_read_prefetch passam a surtir efeito durante a leitura do armazenamento S3. #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 = xN por expr IN (x1, ..., xN) quando expr for uma coluna LowCardinality. A configuração optimize_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.tables sempre 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.replicas realize 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_parsing e supports_parallel_formatting à tabela system.formats para 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 mismatch ou number 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 BY relacionadas em subconsultas. Implementado sobre o plano de consulta. Faz uma otimização semelhante à de optimize_duplicate_order_by_and_distinct em relação às cláusulas ORDER 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ão Nullable (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_limit para 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_string está ativado. #44546 (Kruglov Pavel).
  • Adiciona uma configuração no nível do usuário database_replicated_allow_replicated_engine_arguments que permite bloquear a criação de tabelas ReplicatedMergeTree com argumentos em DatabaseReplicated. #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ção kerberos do 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_strings por 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 Avro de 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 Replicated era 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.errors devido à 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 adduser nos pacotes, porque não a usamos. Isso corrige #44934. #45011 (Alexey Milovidov).
  • A biblioteca SQLite foi 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 EPHEMERAL nos 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 IN com argumentos constantes era usada como argumento constante junto com LowCardinality. 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 sumMapFiltered era inutilizável em consultas distribuídas antes dessa mudança. #44358 (Alexey Milovidov).
  • Corrigida a leitura de ObjectId na 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 CLUSTER inválidas funcionavam de forma inesperada quando nenhum nome de cluster era especificado. Isso foi corrigido: agora, consultas inválidas retornam SYNTAX_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 bar usava 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_ERROR ao executar consultas EXPLAIN AST INSERT contendo 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 ColumnLowCardinality em 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 DEFAULT na instrução CREATE TABLE. O segundo argumento da função in (ou o argumento à direita do operador IN) 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 time não recuperava os blocos assíncronos. #44651 (Han Fei).
  • Corrige LOGICAL_ERROR The top step of the right pipeline should be ExpressionStep em JOIN com subconsulta, UNION e TOTALS. Corrige #43687. #44673 (Nikolai Kochetov).
  • Evita a exceção std::out_of_range no mecanismo de tabela Executable. #44681 (Kruglov Pavel).
  • Não aplique optimize_syntax_fuse_functions aos 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.parts ou system.parts_columns enquanto 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, como dictHas/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ário LowCardinality do 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_insert quando 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 subquery em consultas com UNION. 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_insert seja sempre usada como atraso, em vez do valor correto. Usa-se a fórmula simples max_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 TTL quando 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-data no 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_HASHED para considerar as colunas de intervalo como parte da chave primária durante as atualizações quando update_field é especificado. Fecha #44588. #45061 (Maksim Kita).
  • Corrige o erro Cannot capture column no argumento LowCardinality capturado 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 SELECT em motores KV (por exemplo, KeeperMap, EmbeddedRocksDB) usando IN na 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-free ao 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 bytes como Float. #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/maps informa o inode de um arquivo de 32 bits, enquanto stat informa 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 INSERT fosse processado várias vezes). #45360 (Azat Khuzhin).
  • Corrige uma possível falha ao ler do armazenamento S3 e da função de tabela s3 quando a requisição ListObject falha. #45371 (Anton Popov).
  • Corrigida a exceção de SELECT ... FROM system.dictionaries quando 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_tree habilitado no caso de exceção em ThreadPool::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).
Última modificação em 2 de julho de 2026