Pular para o conteúdo principal

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

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

  • Uma correção para um recurso que antes apresentava um comportamento indesejado. Não permitir SELECT direto para Kafka/RabbitMQ/FileLog. Isso pode ser habilitado definindo stream_like_engine_allow_direct_select. O SELECT direto não será permitido mesmo se estiver habilitado por configuração, caso haja uma visão materializada anexada. Para Kafka e RabbitMQ, o SELECT direto, se permitido, não fará commit das mensagens por padrão. Para habilitar commits com SELECT direto, o usuário deve usar a configuração no nível de armazenamento kafka{rabbitmq}_commit_on_select=1 (padrão 0). #31053 (Kseniia Sumarokova).
  • Uma pequena mudança no comportamento de uma nova função. Retorna string sem aspas em JSON_VALUE. Fecha #27965. #31008 (Kseniia Sumarokova).
  • Renomeação de configuração. Adiciona suporte à representação personalizada de NULL para formatos de entrada TSV/CSV. Corrige a desserialização de Nullable(String) nos formatos de entrada TSV/CSV/JSONCompactStringsEachRow/JSONStringsEachRow. Renomeia output_format_csv_null_representation e output_format_tsv_null_representation para format_csv_null_representation e format_tsv_null_representation, respectivamente. #30497 (Kruglov Pavel).
  • Descontinuação adicional de código já não utilizado. Isso é relevante apenas se você estiver usando versões do ClickHouse anteriores à 20.6. Um mecanismo de “eleição de líder” foi removido de ReplicatedMergeTree, porque vários líderes são suportados desde 20.6. Se você estiver atualizando a partir de uma versão mais antiga e alguma réplica com uma versão antiga for a líder, o servidor não conseguirá iniciar após a atualização. Pare as réplicas com a versão antiga para permitir que a nova versão inicie. Depois disso, não será possível fazer downgrade para uma versão anterior à 20.6. #32140 (tavplubix).

Novo recurso

  • Implementados mais comandos Four Letter Words do ZooKeeper no clickhouse-keeper: https://zookeeper.apache.org/doc/r3.4.8/zookeeperAdmin.html#sc_zkCommands. #28981 (JackyWoo). Agora, clickhouse-keeper tem todos os recursos implementados.
  • Suporte ao tipo de dado Bool. #31072 (kevin wan).
  • Suporte a PARTITION BY nos armazenamentos File, URL e HDFS, bem como com a função de tabela INSERT INTO. Fecha #30273. #30690 (Kseniia Sumarokova).
  • Adicionado CONSTRAINT ... ASSUME ... (sem verificação durante INSERT). Adicionada a transformação de consultas para CNF (https://github.com/ClickHouse/ClickHouse/issues/11749), para uma otimização mais prática. Adicionada a reescrita simples de consultas usando restrições (por enquanto, apenas correspondência simples; depois será aprimorada para oferecer suporte a <,=,>…). Adicionada a capacidade de substituir colunas pesadas por colunas leves, quando possível. #18787 (Nikita Vasilev).
  • Autenticação básica de acesso para funções http/url. #31648 (michael1589).
  • Suporte ao tipo INTERVAL na cláusula STEP do modificador WITH FILL. #30927 (Anton Popov).
  • Adicionado suporte à leitura paralela de vários arquivos e a globs na cláusula FROM INFILE. #30135 (Filatenkov Artur).
  • Adicionado suporte a parâmetros de consulta Identifier para tabelas e bancos de dados. Fecha #27226. #28668 (Nikolay Degterinsky).
  • TLDR: Grandes melhorias na completude e na consistência dos formatos de texto. Refatoração dos formatos TSV, TSVRaw, CSV, JSONCompactEachRow e JSONCompactStringsEachRow, remoção de duplicação de código e adição de uma interface base para formatos com os sufixos -WithNames e -WithNamesAndTypes. Adicionados os formatos CSVWithNamesAndTypes, TSVRawWithNames, TSVRawWithNamesAndTypes, JSONCompactEachRowWIthNames, JSONCompactStringsEachRowWIthNames, RowBinaryWithNames. Suporte a parsing paralelo para os formatos TSVWithNamesAndTypes, TSVRaw(WithNames/WIthNamesAndTypes), CSVWithNamesAndTypes, JSONCompactEachRow(WithNames/WIthNamesAndTypes) e JSONCompactStringsEachRow(WithNames/WIthNamesAndTypes). Suporte a mapeamento de colunas e verificação de tipos para o formato RowBinaryWithNamesAndTypes. Adicionada a configuração input_format_with_types_use_header, que especifica se os tipos gravados no formato <format_name>WIthNamesAndTypes devem corresponder à estrutura da tabela. Adicionada a configuração input_format_csv_empty_as_default, usada no formato CSV em vez de input_format_defaults_for_omitted_fields (porque essa configuração não deve controlar csv_empty_as_default). Corrigido o uso da configuração input_format_defaults_for_omitted_fields (ela estava sendo usada apenas como csv_empty_as_default, mas deveria controlar o cálculo de expressões de valor padrão para campos omitidos). Corrigida a entrada/saída de Nullable no formato TSVRaw, tornando esse formato totalmente compatível com inserções em TSV. Corrigida a inserção de NULLs em LowCardinality(Nullable) quando input_format_null_as_default está habilitada (antes, valores padrão eram inseridos em vez de NULLs reais). Corrigida a desserialização de strings nos formatos JSONStringsEachRow/JSONCompactStringsEachRow (as strings eram parseadas apenas até o primeiro ‘\n’ ou ‘\t’). Adicionada a capacidade de usar a regra de escaping Raw no input format Template. Adicionadas informações de diagnóstico para o input format JSONCompactEachRow(WithNames/WIthNamesAndTypes). Corrigido um bug no parsing paralelo de formatos -WithNames quando a configuração min_chunk_bytes_for_parallel_parsing é menor que a quantidade de bytes em uma única linha. #30178 (Kruglov Pavel). Passa a ser possível imprimir e parsear nomes e tipos de colunas no input/output format CustomSeparated. Adicionados os formatos CustomSeparatedWithNames/WithNamesAndTypes, semelhantes a TSVWithNames/WithNamesAndTypes. #31434 (Kruglov Pavel).
  • Suporte ao armazenamento no Aliyun OSS. #31286 (cfcz48).
  • Expõe todas as configurações do pool global de threads no arquivo de configuração. #31285 (Tomáš Hromada).
  • Introduzidas as funções de janela exponentialTimeDecayedSum, exponentialTimeDecayedMax, exponentialTimeDecayedCount e exponentialTimeDecayedAvg, que são mais eficientes do que exponentialMovingAverage para janelas maiores. Além disso, passaram a cobrir mais casos de uso. #29799 (Vladimir Chebotarev).
  • Adicionada a opção de compactar logs com LZ4 antes de gravá-los em um arquivo. Fecha #23860. #29219 (Nikolay Degterinsky).
  • Suporte a JOIN ON 1 = 1 com semântica de CROSS JOIN. Isso encerra #25578. #25894 (Vladimir C).
  • Adiciona o combinador Map para o tipo Map. - Renomeia o antigo sum-, min-, max- Map de arrays mapeados para sum-, min-, max- MappedArrays. #24539 (Ildus Kurbangaliev).
  • Permite tentar novamente leituras via HTTP. Fecha #29696. #29894 (Kseniia Sumarokova).

Recurso experimental

  • WINDOW VIEW para habilitar o processamento de streams no ClickHouse. #8331 (vxider).
  • Remove o suporte ao uso de bancos de dados Ordinary com MaterializedMySQL. #31292 (Stig Bakken).
  • Implementa os comandos BACKUP e RESTORE para a família Log. Esta funcionalidade está em desenvolvimento. #30688 (Vitaly Baranov).

Melhoria de desempenho

  • Reduz o uso de memória ao ler nos formatos s3 / url / hdfs Parquet, ORC e Arrow (controlado pela configuração input_format_allow_seeks, habilitada por padrão). Também adiciona a configuração remote_read_min_bytes_for_seek para controlar seeks. Fecha #10461. Fecha #16857. #30936 (Kseniia Sumarokova).
  • Adiciona otimizações para condições constantes em JOIN ON, ref. #26928. #27021 (Vladimir C).
  • Oferece suporte a formatação paralela para todos os formatos de texto, exceto JSONEachRowWithProgress e PrettyCompactMonoBlock. #31489 (Kruglov Pavel).
  • Acelera count em colunas Nullable. #31806 (Raúl Marín).
  • Acelera as funções agregadas avg e sumCount. #31694 (Raúl Marín).
  • Melhora o desempenho dos formatos de saída JSON e XML. #31673 (alexey-milovidov).
  • Melhora o desempenho da sincronização de dados para block device. Isso fecha #31181. #31229 (zhanglistar).
  • Corrige um problema de desempenho de consulta em tabelas LiveView. Corrige #30831. #31006 (vzakaznikov).
  • Acelera o parsing de consultas. #31949 (Raúl Marín).
  • Permite dividir as regras de rollup do GraphiteMergeTree para métricas simples/com tags (campo opcional rule_type). #25122 (Michail Safronov).
  • Remove solicitações excessivas de DESC TABLE para remote() (no caso de remote('127.1', system.one) (ou seja, identificador como db.table em vez de string), havia uma solicitação excessiva de DESC TABLE). #32019 (Azat Khuzhin).
  • Otimiza a função tupleElement para ler subcoluna com a configuração optimize_functions_to_subcolumns habilitada. #31261 (Anton Popov).
  • Otimiza a função mapContains para ler a subcoluna key com a configuração optimize_functions_to_subcolumns habilitada. #31218 (Anton Popov).
  • Adiciona as configurações merge_tree_min_rows_for_concurrent_read_for_remote_filesystem e merge_tree_min_bytes_for_concurrent_read_for_remote_filesystem. #30970 (Kseniia Sumarokova).
  • Ignora mutações de partições diferentes em StorageMergeTree. #21326 (Vladimir Chebotarev).

Melhoria

  • Não permitir a remoção de uma tabela ou dicionário se houver tabelas ou dicionários que dependam dele. #30977 (tavplubix).
  • Permite o versionamento dos estados de funções de agregação. Agora, podemos introduzir alterações retrocompatíveis no formato de serialização dos estados de funções de agregação. Fecha #12552. #24820 (Kseniia Sumarokova).
  • Suporte à sintaxe ALTER MODIFY COLUMN no estilo do PostgreSQL. #32003 (SuperDJY).
  • Adicionado suporte ao update_field para RangeHashedDictionary e ComplexKeyRangeHashedDictionary. #32185 (Maksim Kita).
  • As funções murmurHash3_128 e sipHash128 agora aceitam uma quantidade arbitrária de argumentos. Isso corrige #28774. #28965 (小路).
  • Adiciona suporte a expressão padrão para o armazenamento HDFS e otimiza a busca de dados quando a origem é colunar. #32256 (李扬).
  • Melhorado o nome da operação de um span do OpenTelemetry. #32234 (Frank Chen).
  • Use Content-Type: application/x-ndjson (http://ndjson.org/) para o formato de saída JSONEachRow. #32223 (Dmitriy Dorofeev).
  • Melhorada a omissão de campos desconhecidos com a regra de escape entre aspas nos formatos Template/CustomSeparated. Antes, só era possível ignorar strings entre aspas; agora, é possível ignorar valores de qualquer tipo. #32204 (Kruglov Pavel).
  • Agora, o clickhouse-keeper se recusa a iniciar ou a aplicar alterações de configuração quando elas contêm IDs ou endpoints duplicados. Corrige #31339. #32121 (alesapin).
  • Define o Content-Type nos pacotes HTTP emitidos pelo URL engine. #32113 (Frank Chen).
  • Retorna o Content-Type como ‘application/json’ para o formato JSONEachRow se output_format_json_array_of_rows estiver habilitado. #32112 (Frank Chen).
  • Permite interpretar + antes de valores Float32/Float64. #32079 (Kruglov Pavel).
  • Permite que o usuário configure o parâmetro hdfs_replication para DiskHDFS e StorageHDFS. Fecha #32039. #32049 (leosunli).
  • Adicionados ao log de spans do OpenTelemetry os campos exception e exception_code do ClickHouse. #32040 (Frank Chen).
  • Melhora a duração do log de span do OpenTelemetry - ela ficava zerada no nível da consulta quando havia uma exceção na consulta. #32038 (Frank Chen).
  • Corrigido o problema que impedia a criação de LowCardinality de Int256. #31832 (alexey-milovidov).
  • Recriar as tabelas system.*_log em caso de engine/partition_by diferentes. #31824 (Azat Khuzhin).
  • MaterializedMySQL: Corrige o problema com a tabela chamada ‘table’. #31781 (Håvard Kvålen).
  • Fonte de dicionário do ClickHouse: suporte a conexões predefinidas. Fecha #31705. #31749 (Kseniia Sumarokova).
  • Permite usar configurações de conexões predefinidas para os motores Kafka e RabbitMQ (da mesma forma que em outros motores de tabela de integração). #31691 (Kseniia Sumarokova).
  • Sempre renderize novamente o prompt ao navegar pelo histórico no clickhouse-client. Isso facilita a manipulação de consultas muito longas que não cabem na tela. #31675 (alexey-milovidov) (autor: Amos Bird).
  • Adicionar atalhos de teclado para navegar no histórico (em vez de linhas/histórico). #31641 (Azat Khuzhin).
  • Aprimoradas as verificações de max_execution_time. Corrigidos alguns casos em que as verificações de timeout não eram realizadas e a consulta podia continuar em execução por tempo demais. #31636 (Raúl Marín).
  • Mensagem de exceção mais clara quando users.xml não pode ser carregado devido a um hash de senha inválido. Isso fecha #24126. #31557 (Vitaly Baranov).
  • Use os nomes do shard e da réplica dos argumentos do banco de dados Replicated ao expandir macros nos argumentos de ReplicatedMergeTree, se essas macros não estiverem definidas na configuração. Fecha #31471. #31488 (tavplubix).
  • Análise aprimorada para a projeção min/max/count. Agora, com allow_experimental_projection_optimization ativada, a projeção virtual min/max/count pode ser usada junto com colunas da chave de partição. #31474 (Amos Bird).
  • Adicionado suporte ao --pager no clickhouse-local. #31457 (Azat Khuzhin).
  • Corrigida a espera pelo editor durante a edição interativa de consultas (waitpid() retorna -1 em SIGWINCH, e EDITOR e clickhouse-local/clickhouse-client funcionam de forma concorrente). #31456 (Azat Khuzhin).
  • Gerar uma exceção se houver dados inválidos após o campo no formato JSONCompactStrings(EachRow). #31455 (Kruglov Pavel).
  • Os valores padrão das configurações http_send_timeout e http_receive_timeout foram alterados de 1800 (30 minutos) para 180 (3 minutos). #31450 (tavplubix).
  • MaterializedMySQL agora oferece suporte a consultas DDL CREATE TABLE ... LIKE .... #31410 (Stig Bakken).
  • Retornar uma consulta CREATE artificial ao executar show create table em tabelas do sistema. #31391 (SuperDJY).
  • Anteriormente, o progresso era exibido apenas para a função de tabela numbers. Agora, ele também é exibido para numbers_mt. #31318 (Kseniia Sumarokova).
  • As funções iniciais do usuário agora são usadas para determinar as políticas de linha, veja #31080. #31262 (Vitaly Baranov).
  • Se alguma configuração obsoleta for alterada, exibir um aviso em system.warnings. #31252 (tavplubix).
  • Melhorado o backoff para tarefas de limpeza em segundo plano no MergeTree. As configurações merge_tree_clear_old_temporary_directories_interval_seconds e merge_tree_clear_old_parts_interval_seconds foram movidas das configurações de usuário para as configurações do MergeTree. #31180 (tavplubix).
  • Agora, cada réplica enviará ao cliente apenas informações incrementais sobre os contadores de eventos de perfil. #31155 (Dmitry Novik). Isso torna a opção --hardware_utilization no clickhouse-client útil.
  • Ative a edição de múltiplas linhas no clickhouse-client por padrão. Isso corrige #31121 . #31123 (Amos Bird).
  • Normalização de nomes de funções para consultas ALTER. Isso ajuda a evitar inconsistências de metadados entre a criação de tabelas com índices/projeções e a adição de índices/projeções por meio de comandos ALTER. Este é um PR complementar a https://github.com/ClickHouse/ClickHouse/pull/20174. Marcado como melhoria, pois não há relatos de bugs e o cenário é relativamente raro. #31095 (Amos Bird).
  • Suporte ao modificador IF EXISTS na consulta RENAME DATABASE/TABLE/DICTIONARY. Se essa diretiva for usada, não ocorrerá erro se o DATABASE/TABLE/DICTIONARY a ser renomeado não existir. #31081 (victorgao).
  • Cancelar mesclagens verticais quando a partição for removida. Trata-se de um desdobramento de https://github.com/ClickHouse/ClickHouse/pull/25684 e https://github.com/ClickHouse/ClickHouse/pull/30996. #31057 (Amos Bird).
  • A sessão local dentro de uma fonte de Dicionário do ClickHouse não enviará mais seus eventos para o log de sessão. Isso corrige um possível deadlock (alerta do TSAN) durante o encerramento. Além disso, este PR corrige a instabilidade de test_dictionaries_dependency_xml/. #31013 (Vitaly Baranov).
  • Menos bloqueios no comando ALTER. #31010 (Amos Bird).
  • Corrigida a opção --verbose no modo interativo do clickhouse-local e permitido o logging em arquivo. #30881 (Kseniia Sumarokova).
  • Adicionados os comandos \l, \d e \c ao clickhouse-client, como no MySQL e no PostgreSQL. #30876 (Pavel Medvedev).
  • Para clickhouse-local ou clickhouse-client: se houver a opção --interactive com --query ou --queries-file, primeiro execute-os como no modo não interativo e depois inicie o modo interativo. #30851 (Kseniia Sumarokova).
  • Corrige o possível erro “The local set of parts of X doesn’t look like the set of parts in ZooKeeper” (se o DROP falhar ao remover znodes do ZooKeeper). #30826 (Azat Khuzhin).
  • O formato Avro passa a funcionar com o Kafka. Adicionada a configuração output_format_avro_rows_in_file. #30351 (Ilya Golshtein).
  • Permite especificar um ou mais schemas do PostgreSQL para um banco de dados MaterializedPostgreSQL. Fecha #28901. Fecha #29324. #28933 (Kseniia Sumarokova).
  • Portas padrão substituídas para a comunicação interna do clickhouse-keeper, de 44444 para 9234. Corrige #30879. #31799 (alesapin).
  • Implementação da função transform com argumentos Decimal. #31839 (李帅).
  • Corrigido o abort no servidor de depuração e o erro DB::Exception: std::out_of_range: basic_string no servidor de release em caso de URL hdfs inválida, com a adição de uma verificação extra da estrutura da URL hdfs. #31042 (Kruglov Pavel).
  • Corrige uma possível falha de asserção na table function/engine hdfs, adiciona um teste. #31036 (Kruglov Pavel).

Correções de bugs

  • Corrige aliases de GROUP BY / ORDER BY / LIMIT BY com argumentos posicionais habilitados. Fecha #31173. #31741 (Kseniia Sumarokova).
  • Corrige o uso da engine de tabela Buffer com o tipo Map. Corrige #30546. #31742 (Anton Popov).
  • Corrigida a leitura de tabelas MergeTree com use_uncompressed_cache habilitado. #31826 (Anton Popov).
  • Corrigido o comportamento quando mutações sem nada a fazer ficam travadas (com a configuração empty_result_for_aggregation_by_empty_set habilitada). #32358 (Nikita Mikhaylov).
  • Corrige o problema de ignorar colunas ao gravar em protobuf. Este PR corrige #31160; veja o comentário #31160#issuecomment-980595318. #31988 (Vitaly Baranov).
  • Corrige um bug ao remover colunas desnecessárias em uma subconsulta. Se houver uma função de agregação em uma consulta sem GROUP BY, não a remova, mesmo que seja desnecessária. #32289 (dongyifeng).
  • O limite da quota não foi atingido, mas o limite foi excedido. Este PR corrige #31174. #31337 (sunny).
  • Corrige o SHOW GRANTS quando são usadas revogações parciais. Este PR corrige #31138. #31249 (Vitaly Baranov).
  • A quantidade de memória era estimada incorretamente quando o ClickHouse era executado em contêineres com limites de cgroup. #31157 (Pavel Medvedev).
  • Corrige consultas ALTER ... MATERIALIZE COLUMN ... nos casos em que o tipo de dados da expressão padrão não corresponde ao tipo de dados da coluna. #32348 (Anton Popov).
  • Corrigido travamento com SIGFPE na função de agregação avgWeighted com argumento Decimal. Corrige #32053. #32303 (tavplubix).
  • O servidor pode não iniciar e exibir o erro Cannot attach 1 tables due to cyclic dependencies se a tabela Dictionary apontar para um dicionário XML com o mesmo nome; isso foi corrigido. Corrige #31315. #32288 (tavplubix).
  • Corrigido erro de parsing ao desserializar NaN em Nullable(Float) com a regra de escape Quoted. #32190 (Kruglov Pavel).
  • Dicionários XML: identificadores usados na consulta CREATE TABLE podem ser qualificados com default_database durante a atualização para uma versão mais recente. Fecha #31963. #32187 (Maksim Kita).
  • O número de réplicas ativas pode ser calculado incorretamente ao inserir com quórum se a configuração replicated_can_become_leader estiver desabilitada em algumas réplicas. Isso foi corrigido. #32157 (tavplubix).
  • Dictionaries: corrige casos em que {condition} não funciona em consultas personalizadas ao banco de dados. #32117 (Maksim Kita).
  • Corrigido o CAST de Nullable com cast_keep_nullable (antes, havia o erro PARAMETER_OUT_OF_BOUND, por exemplo, em toUInt32OrDefault(toNullable(toUInt32(1)))). #32080 (Azat Khuzhin).
  • Corrige o CREATE TABLE do Join Storage em alguns casos pouco comuns. Fecha #31680. #32066 (SuperDJY).
  • Corrigido o erro Directory ... already exists and is not empty ao desanexar a parte. #32063 (tavplubix).
  • MaterializedMySQL (funcionalidade experimental): Corrige a interpretação incorreta de dados DECIMAL do MySQL. #31990 (Håvard Kvålen).
  • O mecanismo FileLog (funcionalidade experimental) criava desnecessariamente o diretório de metadados quando a criação da tabela falhava. Correção #31962. #31967 (flynn).
  • Uma entrada GET_PART pode ficar presa na fila de replicação se uma parte for perdida em todas as réplicas e não houver outras partes na mesma partição. Isso foi corrigido nos casos em que a chave de partição contém apenas colunas de tipos inteiros ou Date[Time]. Corrige #31485. #31887 (tavplubix).
  • Corrigidas as funções empty e notEmpty com argumentos do tipo UUID. Corrige #31819. #31883 (Anton Popov).
  • Altere o caminho da configuração de keeper_server.session_timeout_ms para keeper_server.coordination_settings.session_timeout_ms ao construir um KeeperTCPHandler. O mesmo vale para operation_timeout. #31859 (JackyWoo).
  • Corrige a conversão inválida do tipo Nullable quando uma chave primária Nullable é usada. (Chave primária Nullable é um recurso desaconselhado — por favor, não use.) Isso corrige #31075. #31823 (Amos Bird).
  • Corrigida falha em UDF recursiva no SQL. Fecha #30856. #31820 (Maksim Kita).
  • Corrige falha quando a função dictGet com um tipo é usada para um atributo de dicionário cujo tipo é Nullable. Corrige #30980. #31800 (Maksim Kita).
  • Corrige falha causada por resultado vazio em consulta ODBC (com alguns drivers ODBC). Fecha #31465. #31766 (Kseniia Sumarokova).
  • Corrigida a falha na desativação do profiler de consulta (no caso de query_profiler_real_time_period_ns>0/query_profiler_cpu_time_period_ns>0, o profiler de consulta podia continuar habilitado mesmo após o término da consulta). #31740 (Azat Khuzhin).
  • Corrigida uma rara falha de segmentação em consultas concorrentes ATTACH PARTITION. #31738 (tavplubix).
  • Corrigida uma condição de corrida no formato de saída JSONEachRowWithProgress quando dados e linhas de progresso se misturam na saída. #31736 (Kruglov Pavel).
  • Corrigido o erro there are no such cluster here na execução da consulta ON CLUSTER caso o nome do cluster especificado seja o nome de um banco de dados Replicated. #31723 (tavplubix).
  • Corrigida exceção em alguns usos da função decrypt em colunas Nullable. Isso fecha #31662. Isso fecha #31426. #31707 (alexey-milovidov).
  • Corrigido um problema na função ngrams quando a string contém caracteres UTF-8. #31706 (yandd).
  • As configurações input_format_allow_errors_num e input_format_allow_errors_ratio não funcionavam ao analisar tipos de domínio, como IPv4; isso foi corrigido. Corrige #31686. #31697 (tavplubix).
  • Corrigida a exceção de ponteiro nulo em MATERIALIZE COLUMN. #31679 (Nikolai Kochetov).
  • A consulta RENAME TABLE apresentava comportamento incorreto ao tentar renomear um dicionário DDL no banco de dados Ordinary; isso foi corrigido. #31638 (tavplubix).
  • Implemente a função de agregação sparkbar como foi concebida, veja: #26175#issuecomment-960353867, comentário. #31624 (小路).
  • Corrige o JSON gerado inválido quando apenas os nomes das colunas contêm sequências UTF-8 inválidas. #31534 (Kevin Michel).
  • Desative partial_merge_join_left_table_buffer_bytes até que o bug nessa otimização seja corrigido. Veja #31009). Remova a opção redundante partial_merge_join_optimizations. #31528 (Vladimir C).
  • Corrige o progresso de consultas curtas INSERT SELECT. #31510 (Azat Khuzhin).
  • Corrige o comportamento incorreto ao usar group by e argumentos posicionais. Fecha #31280#issuecomment-968696186. #31420 (Kseniia Sumarokova).
  • Corrigido erro de nullptr no provedor de credenciais STS para S3. #31409 (Vladimir Chebotarev).
  • Removida a função notLike da análise de índice, porque estava incorreta. #31169 (sundyli).
  • Corrigido erro no Keeper que pode impedir a inicialização quando alguns logs de coordination forem perdidos e houver um snapshot mais recente do que o log mais recente. #31150 (alesapin).
  • Reescreve a tabela distribuída à direita em join local. Resolve #25809. #31105 (abel-cheng).
  • Corrige a tabela Merge com aliases e where (antes, ela não funcionava de forma alguma). Fecha #28802. #31044 (Kseniia Sumarokova).
  • Corrige JSON_VALUE/JSON_QUERY com identificadores entre aspas. Isso permite usar espaços no caminho JSON. Fecha #30971. #31003 (Kseniia Sumarokova).
  • O uso da função formatRow com formatos que não são orientados a linhas levava a falha de segmentação. Não permitir o uso dessa função com esses formatos (pois isso não faz sentido). #31001 (Kruglov Pavel).
  • Corrigido um erro que comprometia consultas select quando executadas após a exclusão de uma visão materializada. Encontrado em #30691. #30997 (Kseniia Sumarokova).
  • Ignorar a verificação max_partition_size_to_drop check nos casos de ATTACH PARTITION … FROM e MOVE PARTITION … #30995 (Amr Alaa).
  • Corrige alguns casos extremos com os operadores INTERSECT e EXCEPT. Fecha #30803. #30965 (Kseniia Sumarokova).

Melhorias de Build/Testes/Empacotamento

  • Corrigido o resultado incorreto da filtragem em builds não x86. Isso fecha #31417. Isso fecha #31524. #31574 (alexey-milovidov).
  • Tornado o build do ClickHouse totalmente reproduzível (bytes idênticos em máquinas diferentes). Isso fecha #22113. #31899 (alexey-milovidov). Removido o path do filesystem para o diretório de build dos binários para viabilizar builds reproduzíveis. Isso foi necessário para #22113. #31838 (alexey-milovidov).
  • Uso dos nossos próprios CMakeLists para zlib-ng, cassandra, mariadb-connector-c e xz, re2, sentry, gsasl, arrow, protobuf. Isso é necessário para #20151. Parte de #9226. Um pequeno passo rumo à remoção de lixo incômodo do sistema de build. #30599 (alexey-milovidov).
  • Builds herméticos: uso de uma versão fixa da libc e garantia de que nenhum arquivo-fonte ou binário do sistema operacional hospedeiro seja usado durante o build. Isso fecha #27133. Isso fecha #21435. Isso fecha #30462. #30011 (alexey-milovidov).
  • Adicionada a função getFuzzerData() para facilitar o fuzzing de funções específicas. Isso fecha #23227. #27526 (Alexey Boykov).
  • Configuração mais adequada de capabilities no Docker. #31802 (Constantine Peresypkin).
  • Habilitadas as opções de compilação do clang -fstrict-vtable-pointers, -fwhole-program-vtables. #20151 (Maksim Kita).
  • Evitado o download de tarballs da toolchain para compilação cruzada para FreeBSD. #31672 (alexey-milovidov).
  • Suporte inicial a risc-v. Veja development/build-cross-riscv para detalhes específicos e o comando de build que foi testado. #31309 (Vladimir Smirnov).
  • Suporte à compilação em máquina arm com o parâmetro “-DENABLE_TESTS=OFF”. #31007 (zhanghuajie).

Lançamento do ClickHouse v21.11, de 2021-11-09. Apresentação, Vídeo

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

  • Altera a ordem dos argumentos json_path e json nas funções SQL/JSON (para ficar consistente com o padrão). Fecha #30449. #30474 (Kseniia Sumarokova).
  • Remove a configuração de tabela write_final_mark do MergeTree. Ela passará a ser sempre true. #30455 (Kseniia Sumarokova). Nenhuma ação é necessária; todas as tabelas são compatíveis com a nova versão.
  • A função bayesAB foi removida. Ajude a trazer essa função de volta, atualizada. Isso fecha #26233. #29934 (alexey-milovidov).
  • Isso é relevante apenas se você já começou a usar o suporte experimental ao clickhouse-keeper. Agora, os snapshots do ClickHouse Keeper são compactados com o codec ZSTD por padrão, em vez da compactação de bloco LZ4 personalizada do ClickHouse. Esse comportamento pode ser desativado com a configuração de coordination compress_snapshots_with_zstd_format (deve ser igual em todas as réplicas do quorum). Essa incompatibilidade com versões anteriores é bastante rara e só pode ocorrer quando um nó novo envia um snapshot (o que acontece em caso de recuperação) para um nó antigo, que não consegue ler snapshots no formato ZSTD. #29417 (alesapin).

Novo recurso

  • O novo modo de INSERT assíncrono permite acumular os dados inseridos e armazená-los em um único lote em segundo plano. No cliente, ele pode ser habilitado definindo async_insert para consultas INSERT com dados embutidos na consulta ou em um buffer separado (por exemplo, para consultas INSERT via protocolo HTTP). Se wait_for_async_insert for verdadeiro (padrão), o cliente aguardará até que os dados sejam gravados na tabela. No servidor, isso é controlado pelas configurações async_insert_threads, async_insert_max_data_size e async_insert_busy_timeout_ms. Implementa #18282. #27537 (Anton Popov). #20557 (Ivan). Observações sobre desempenho: com inserções assíncronas, é possível fazer até cerca de 10 000 consultas INSERT individuais por segundo, portanto ainda é recomendável inserir em lotes se você quiser atingir um desempenho de até milhões de linhas inseridas por segundo.
  • Adicionado o modo interativo ao clickhouse-local. Assim, você pode simplesmente executar clickhouse-local para obter uma interface de linha de comando do ClickHouse sem se conectar a um servidor e processar dados de arquivos e fontes de dados externas. O código de clickhouse-client e clickhouse-local também foi unificado. Fecha #7203. Fecha #25516. Fecha #22401. #26231 (Kseniia Sumarokova).
  • Adicionado suporte a funções definidas pelo usuário executáveis (scriptáveis). Ou seja, UDFs que podem ser escritas em qualquer linguagem de programação. #28803 (Maksim Kita).
  • Permitir conexões predefinidas com fontes de dados externas. Isso evita a necessidade de especificar credenciais ou endereços ao usar fontes de dados externas, que podem ser referenciadas pelos nomes. Fecha #28367. #28577 (Kseniia Sumarokova).
  • Adicionado o banco de dados INFORMATION_SCHEMA, com as views SCHEMATA, TABLES, VIEWS e COLUMNS, correspondentes às tabelas no banco de dados system. Fecha #9770. #28691 (tavplubix).
  • Suporte para EXISTS (subquery). Fecha #6852. #29731 (Kseniia Sumarokova).
  • Registro de sessões para auditoria. Registro de todos os eventos de login e logout, bem-sucedidos ou com falha, em uma nova tabela system.session_log. #22415 (Vasily Nemkov) (Vitaly Baranov).
  • Suporte a funções multidimensionais de distância de cosseno e distância euclidiana; distâncias e normas L1, L2, Lp e Linf. Produto escalar em tuplas e vários operadores aritméticos em tuplas. Isso resolve completamente #4509 e muito mais. #27933 (Alexey Boykov).
  • Adicionado suporte a compressão e descompressão para INTO OUTFILE e FROM INFILE (com detecção automática ou com um parâmetro opcional adicional). #27135 (Filatenkov Artur).
  • Adiciona suporte a CORS (Cross Origin Resource Sharing) com requisições HTTP OPTIONS. Isso significa que, agora, o Grafana funcionará com requisições serverless sem gambiarras. Fecha #18693. #29155 (Filatenkov Artur).
  • Consultas com JOIN ON agora oferecem suporte a disjunções (OR). #21320 (Ilya Golshtein).
  • Adicionada a função tokens. Ela permite dividir uma string em tokens usando caracteres ASCII não alfanuméricos como separadores. #29981 (Maksim Kita). Adicionada a função ngrams para extrair ngrams de um texto. Fecha #29699. #29738 (Maksim Kita).
  • Adicionadas funções de normalização Unicode: normalizeUTF8NFC, normalizeUTF8NFD, normalizeUTF8NFKC, normalizeUTF8NFKD. #28633 (darkkeks).
  • Consumo em streaming de arquivos de log de aplicações no ClickHouse com o mecanismo de tabela FileLog. É como o mecanismo Kafka ou RabbitMQ, mas para logs apenas com acréscimo e rotacionados no sistema de arquivos local. Fecha #6953. #25969 (flynn) (Kseniia Sumarokova).
  • Adicionado o formato de saída CapnProto, refatorado o formato de entrada CapnProto. #29291 (Kruglov Pavel).
  • Permite escrever números em consultas como literais binários. Exemplo: SELECT 0b001;. #29304 (Maksim Kita).
  • Adicionado o tipo de dicionário hashed_array. Ele economiza memória ao usar dicionários com vários atributos. Fecha #30236. #30242 (Maksim Kita).
  • Adicionada a função JSONExtractKeys. #30056 (Vitaly).
  • Adicionada a função getOSKernelVersion — ela retorna uma string com a versão do kernel do sistema operacional. #29755 (Memo).
  • Adicionadas as funções MD4 e SHA384. O MD4 é uma função de hash obsoleta e insegura; só pode ser usado em casos raros, quando o MD4 já é usado em algum sistema legado e você precisa obter exatamente o mesmo resultado. #29602 (Nikita Tikhomirov).
  • O HSTS pode ser ativado no servidor HTTP do ClickHouse definindo hsts_max_age no arquivo de configuração com um valor positivo. #29516 (凌涛).
  • Suporte ao armazenamento OBS da Huawei. Fecha #24294. #29511 (kevin wan).
  • Nova função mapContainsKeyLike para retornar o map cuja chave corresponde a uma expressão regular simples. #29471 (凌涛). Nova função mapExtractKeyLike para retornar o map mantendo apenas os elementos que correspondem ao padrão especificado. #30793 (凌涛).
  • Adicionado ALTER TABLE x MODIFY COMMENT. #29264 (Vasily Nemkov).
  • Adiciona funções de inspeção de H3 que não estão disponíveis no ClickHouse, mas podem ser acessadas pela API do H3: https://h3geo.org/docs/api/inspection. #29209 (Bharat Nallan).
  • Permite operações ALTER TABLE FETCH e ATTACH não replicadas em bancos de dados Replicated. #29202 (Kevin Michel).
  • Adicionada a configuração output_format_csv_null_representation: é a mesma que output_format_tsv_null_representation, mas para a saída em CSV. #29123 (PHO).
  • Adicionada a função zookeeperSessionUptime(), que retorna o tempo de atividade da sessão atual do ZooKeeper em segundos. #28983 (tavplubix).
  • Implementa a função h3ToGeoBoundary. #28952 (Ivan Veselov).
  • Adiciona a função de agregação exponentialMovingAverage, que pode ser usada como função de janela. Isso fecha #27511. #28914 (alexey-milovidov).
  • Permite incluir subcolunas das colunas da tabela no resultado da consulta DESCRIBE (pode ser habilitado pela configuração describe_include_subcolumns). #28905 (Anton Popov).
  • Executable, ExecutablePool adicionaram a opção send_chunk_header. Se essa opção for verdadeira, a contagem de linhas do fragmento rows_count, seguida de uma quebra de linha, será enviada ao cliente antes do fragmento. #28833 (Maksim Kita).
  • tokenbf_v1 e ngram oferecem suporte a Map com chave String do tipo FixedSring. Isso melhora o skipping de dados em consultas com filtro pela chave do map. sql CREATE TABLE map_tokenbf ( row_id UInt32, map Map(String, String), INDEX map_tokenbf map TYPE ngrambf_v1(4,256,2,0) GRANULARITY 1 ) Engine=MergeTree() Order by id Com a tabela acima, a consulta select * from map_tokebf where map['K']='V' ignorará o grânulo que não contém a chave A . Claro que quantas linhas serão ignoradas depende da granularity e da index_granularity que você definir. #28511 (凌涛).
  • Envia eventos de perfil do servidor para o cliente. Foi adicionado um novo tipo de pacote, ProfileEvents. Fecha #26177. #28364 (Dmitry Novik).
  • Operações de deslocamento de bits para os tipos de dados FixedString e String. Isso fecha #27763. #28325 (小路).
  • Suporte à adição/exclusão dinâmica de tabelas da replicação do PostgreSQL no database engine MaterializedPostgreSQL. Suporte a ALTER para configurações do banco de dados. Fecha #27573. #28301 (Kseniia Sumarokova).
  • Adicionada a função accurateCastOrDefault(x, T). Fecha #21330. Autores: @taiyang-li. #23028 (Maksim Kita).
  • Adicionar as funções toUUIDOrDefault, toUInt8/16/32/64/256OrDefault, toInt8/16/32/64/128/256OrDefault, que permitem ao usuário definir um valor padrão (não nulo) quando o parsing da string falhar. #21330 (taiyang-li).

Melhorias de desempenho

  • Merges em segundo plano podem ser preemptados uns pelos outros e são programados com prioridades apropriadas. Agora, merges de longa duração não impedirão que merges curtos prossigam. Isso é necessário para melhorar o agendamento e o controle da execução dos merges. Isso reduz as chances de ocorrer o erro “too many parts”. #22381. #25165 (Nikita Mikhaylov). Foi adicionada a possibilidade de executar mais merges e mutações do que o número de threads no background pool. Merges e mutações serão executados passo a passo de acordo com seus tamanhos (quanto menor, maior a prioridade). A proporção entre o número de tarefas e threads a serem executadas é controlada pela configuração background_merges_mutations_concurrency_ratio, 2 por padrão. #29140 (Nikita Mikhaylov).
  • Permite usar leituras assíncronas em filesystems remotos. Reduz o número de seeks durante a leitura em filesystems remotos. Isso melhora muito o desempenho e faz com que os discos experimentais web e s3 funcionem mais rápido que o EBS em determinadas condições. #29205 (Kseniia Sumarokova). Enquanto isso, o tipo de disco web (dataset estático hospedado em um servidor web) deixa de ser experimental e passa a ser considerado pronto para produção.
  • Consultas com INTO OUTFILE no clickhouse-client usarão várias threads. Corrigido o problema de oscilação da barra de progresso ao usar INTO OUTFILE. Isto fecha #30873. Isto fecha #30872. #30886 (alexey-milovidov).
  • Reduz a quantidade de dados compactados redundantes lidos do disco em alguns tipos de consultas SELECT (apenas para a família de motores MergeTree). #30111 (alesapin).
  • Removidas algumas chamadas redundantes de seek durante a leitura de blocos compactados na família de motores de tabela MergeTree. #29766 (alesapin).
  • Permite que a função de tabela url processe várias URLs em paralelo. Isso corrige #29670 e #29671. #29673 (alexey-milovidov).
  • Melhora o desempenho da agregação seguindo a ordem da chave primária (com a configuração optimize_aggregation_in_order habilitada). #30266 (Anton Popov).
  • Agora, o ClickHouse usa cache de DNS ao se comunicar com o S3 externo. #29999 (alesapin).
  • Adiciona suporte ao pushdown de IS NULL/IS NOT NULL para bancos de dados externos (por exemplo, MySQL). #29463 (Azat Khuzhin). Converte isNull/isNotNull em IS NULL/IS NOT NULL (para DBs externos, por exemplo, MySQL). #29446 (Azat Khuzhin).
  • Consultas SELECT em tabelas de Dicionário usarão várias threads. #30500 (Maksim Kita).
  • Melhora o desempenho da filtragem (operação WHERE) em colunas Decimal. #30431 (Jun Jin).
  • Removido o código com muitos desvios condicionais na operação de filtro, substituindo-o por uma implementação melhor com popcnt/ctz, que oferece melhor desempenho. #29881 (Jun Jin).
  • Aprimora a função tudo em um do gerador de máscara de bytes do filtro (usado pelo operador WHERE) com instruções SSE/AVX2/AVX512. Observe que, por padrão, o ClickHouse usa apenas SSE, portanto isso só é relevante para builds personalizadas. #30014 (jasperzhu). #30670 (jasperzhu).
  • Melhora o desempenho da função de agregação SUM para números de ponto flutuante Nullable. #28906 (Raúl Marín).
  • Acelera o processo de carregamento de partes quando há vários discos em uso. A ideia é semelhante à de https://github.com/ClickHouse/ClickHouse/pull/16423 . Em produção, houve melhora: 24 min -> 16 min . #28363 (Amos Bird).
  • Reduzir o tamanho padrão das partes de upload multipart no S3 para diminuir o uso de memória. #28679 (ianton-ru).
  • Melhora o desempenho da função bitmapAnd. #28332 (dddounaiking).
  • Removidas notificações inadequadas de mutações no StorageMergeTree quando os merges ainda estão em andamento. #27552 (Vladimir Chebotarev).
  • Tentativa de melhorar o desempenho na comparação de strings. #28767 (alexey-milovidov).
  • O índice de chave primária e o filtro de partição podem funcionar com tuplas. #29281 (凌涛).
  • Se uma consulta tiver várias funções de agregação quantile com os mesmos argumentos, mas com parâmetros de nível diferentes, elas serão combinadas e executadas em uma única passagem se a configuração optimize_syntax_fuse_functions estiver habilitada. #26657 (hexiaoting).
  • Agora, a agregação min-max na primeira expressão da chave primária é otimizada usando projeção. Relacionado a #329. #29918 (Amos Bird).

Recurso experimental

  • Adicionada a capacidade de alterar a configuração dos nós (no arquivo .xml) do ClickHouse Keeper. #30372 (alesapin).
  • Adicionada a função de agregação sparkbar. Isso fecha #26175. #27481 (小路). Observação: há uma falha nessa função; o comportamento será alterado em versões futuras.

Melhoria

  • Permite que o usuário altere os níveis de log sem reiniciar. #29586 (Nikolay Degterinsky).
  • Várias melhorias para UDFs SQL. As consultas para manipulação de funções SQL definidas pelo usuário agora são compatíveis com a cláusula ON CLUSTER. Exemplo CREATE FUNCTION test_function ON CLUSTER 'cluster' AS x -> x + 1;. Fecha #30666. #30734 (Maksim Kita). Suporte às sintaxes CREATE OR REPLACE e CREATE IF NOT EXISTS. #30454 (Maksim Kita). Adicionado suporte a DROP IF EXISTS. Exemplo DROP FUNCTION IF EXISTS test_function. #30437 (Maksim Kita). Suporte a lambdas. Exemplo CREATE FUNCTION lambda_function AS x -> arrayMap(element -> element * 2, x);. #30435 (Maksim Kita). Suporte a funções SQL definidas pelo usuário no clickhouse-local. #30179 (Maksim Kita).
  • Habilitado globalmente o profiler de memória por consulta (com memory_profiler_step = 4MiB). #29455 (Azat Khuzhin).
  • Foram adicionadas as colunas data_compressed_bytes, data_uncompressed_bytes, marks_bytes a system.data_skipping_indices. Foram adicionadas as colunas secondary_indices_compressed_bytes, secondary_indices_uncompressed_bytes, secondary_indices_marks_bytes a system.parts. Fecha #29697. #29896 (Maksim Kita).
  • Adicionar o alias table a system.tables e o alias database a system.databases #29677. #29882 (kevin wan).
  • Resolve corretamente as interdependências entre tabelas ao iniciar o servidor. Fecha #8004, fecha #15170. #28373 (tavplubix).
  • Evita o erro “Division by zero” quando o denominador é Nullable nas funções divide, intDiv e modulo. Fecha #22621. #28352 (Kruglov Pavel).
  • Permite interpretar valores do tipo de dado Date em formatos de texto como YYYYMMDD, além de YYYY-MM-DD. Isso fecha #30870. #30871 (alexey-milovidov).
  • UI da Web: exibir barras nas células da tabela. #29792 (alexey-milovidov).
  • Agora os usuários podem criar dicionários com comentários: CREATE DICTIONARY ... COMMENT 'vaue'#29899 (Vasily Nemkov). Os usuários agora podem definir comentários em bancos de dados na instrução CREATE DATABASE#29429 (Vasily Nemkov).
  • Adiciona a configuração compiled_expression_cache_elements_size. Se algum dia você quiser usar essa configuração, já vai saber o que ela faz. #30667 (Maksim Kita).
  • clickhouse-format agora oferece suporte à opção --query. Nas versões anteriores, era preciso passar a consulta via stdin. #29325 (凌涛).
  • Suporte a ALTER TABLE para tabelas em bancos de dados Memory. Bancos de dados Memory são usados no clickhouse-local. #30866 (tavplubix).
  • Arrays de todos os tipos serializáveis agora são suportados por arrayStringConcat. #30840 (Nickita Taranov).
  • O ClickHouse agora passará a considerar as limitações de Docker/cgroups para determinar a quantidade de memória do sistema. Veja #25662. #30574 (Pavel Medvedev).
  • A estrutura da tabela obtida do banco de dados PostgreSQL agora é mais confiável. #30477 (Kseniia Sumarokova).
  • Suporte completo a argumentos posicionais em GROUP BY e ORDER BY. #30433 (Kseniia Sumarokova).
  • Permite extrair como string um elemento que não é do tipo string usando JSONExtractString. Isto é para pull/25452#issuecomment-927123287. #30426 (Amos Bird).
  • Adicionada a possibilidade de usar a cláusula FINAL em consultas SELECT no GraphiteMergeTree. #30360 (Nikita Mikhaylov).
  • Pequenas melhorias na clonagem de réplicas e no enfileiramento da busca de partes corrompidas, que devem evitar casos extremamente raros de travamento de entradas GET_PART na fila de replicação. #30346 (tavplubix).
  • Permitir links simbólicos para arquivos no diretório user_files na função de tabela file. #30309 (Kseniia Sumarokova).
  • Corrigida a comparação entre Date32 e Date, DateTime, DateTime64 e String. #30219 (liang.huang).
  • Agora é possível remover a expressão SAMPLE BY de tabelas MergeTree (ALTER TABLE <table> REMOVE SAMPLE BY). #30180 (Anton Popov).
  • Agora, o Keeper (como parte do clickhouse-server) será iniciado de forma assíncrona se conseguir se conectar a algum outro nó. #30170 (alesapin).
  • Agora, o clickhouse-client oferece suporte nativo à edição em várias linhas. #30143 (Amos Bird).
  • dicionários polygon (geocodificação reversa): adicionado suporte à leitura do conteúdo do dicionário com o método de consulta SELECT se a configuração store_polygon_key_column = true. Fecha #30090. #30142 (Maksim Kita).
  • Adicionar o logotipo do ClickHouse à UI Play. #29674 (alexey-milovidov).
  • Mensagem de exceção mais clara ao ler uma coluna de formatos compatíveis com Arrow, como Arrow, ArrowStream, Parquet e ORC. Isso fecha #29926. #29927 (alexey-milovidov).
  • Corrigida uma condição de corrida entre o flush e a inicialização nas tabelas Buffer. Isso pode ocorrer nos testes. #29930 (Azat Khuzhin).
  • Corrige a inversão da ordem de bloqueio (lock-order-inversion) entre DROP TABLE para DatabaseMemory e LiveView. A visualização em tempo real é um recurso experimental. O banco de dados Memory é usado no clickhouse-local. #29929 (Azat Khuzhin).
  • Corrigida a inversão na ordem de bloqueio entre a recarga periódica do dicionário e a recarga da configuração. #29928 (Azat Khuzhin).
  • Atualizados os arquivos zoneinfo para 2021c. #29925 (alexey-milovidov).
  • Adicionada a possibilidade de configurar retentativas e os atrasos entre elas para clickhouse-copier. #29921 (Azat Khuzhin).
  • Adicionada a configuração do servidor shutdown_wait_unfinished_queries para permitir aguardar consultas em execução por até o tempo definido em shutdown_wait_unfinished. Isso é para #24451. #29914 (Amos Bird).
  • Adicionada a capacidade de rastrear o pico de uso de memória (com o novo trace_type em system.trace_log - MemoryPeak). #29858 (Azat Khuzhin).
  • Tabelas estrangeiras do PostgreSQL: adicionado o prefixo de tabela particionada ‘p’ à consulta para obter o índice de replica identity. #29828 (Shoh Jahon).
  • Aplique max_untracked_memory/memory_profiler_step/memory_profiler_sample_probability durante mutate/merge para gerar o perfil de uso de memória durante as mesclagens. #29681 (Azat Khuzhin).
  • Ofuscador de consultas: clickhouse-format --obfuscate agora funciona com mais tipos de consultas. #29672 (alexey-milovidov).
  • Corrigido o problema em que clickhouse-format --obfuscate não conseguia processar consultas com Embedded Dictionaries (funções regionTo...). #29667 (alexey-milovidov).
  • Corrige o tratamento incorreto de Nullable nas funções JSON. Isso corrige #29615. Marcar como melhoria porque https://github.com/ClickHouse/ClickHouse/pull/28012 ainda não foi lançado. #29659 (Amos Bird).
  • Aumento de listen_backlog por padrão (para corresponder ao valor padrão nas versões mais recentes do kernel Linux). #29643 (Azat Khuzhin).
  • Recarrega dicionários, modelos e funções executáveis definidas pelo usuário caso a configuração do servidor dictionaries_config, models_config, user_defined_executable_functions_config seja alterada. Fecha #28142. #29529 (Maksim Kita).
  • Removida a restrição desnecessária sobre o nome da projeção. Agora, o nome da projeção pode começar com tmp_. #29520 (Amos Bird).
  • Corrigido o erro There is no query or query context has expired em mutações com subconsultas aninhadas. Não são permitidas subconsultas em mutações se a tabela for replicada e a configuração allow_nondeterministic_mutations estiver desabilitada. #29495 (tavplubix).
  • Aplique alterações de configuração em max_concurrent_queries em tempo de execução (sem necessidade de reiniciar). #29414 (Raúl Marín).
  • Adicionada a configuração use_skip_indexes. #29405 (Maksim Kita).
  • Adicionado suporte para aplicar FREEZE a partes em memória (para backups). #29376 (Mo Xuan).
  • Encaminhar o query&#95;id inicial para clickhouse-benchmark (antes, se você executasse uma consulta remota via clickhouse-benchmark, as consultas nos shards não eram vinculadas à consulta inicial por meio de initial_query_id). #29364 (Azat Khuzhin).
  • Índices de salto tokenbf_v1 e ngrambf_v1: adicionado suporte ao tipo de dado Array com chave do tipo String ou FixedString. #29280 (Maksim Kita). Os índices de salto tokenbf_v1 e ngrambf_v1 passaram a oferecer suporte ao tipo de dado Map com chave do tipo String ou FixedString. Autor @lingtaolf. #29220 (Maksim Kita).
  • Função has: foi adicionado suporte ao tipo de dado Map. #29267 (Maksim Kita).
  • Adicionadas as configurações compress_logs para o clickhouse-keeper, que permitem compactar os logs do clickhouse-keeper (para a máquina de estados replicada) em ZSTD. Implementa: #26977. #29223 (alesapin).
  • Adiciona a configuração external_table_strict_query - ela forçará o envio de toda a expressão WHERE em consultas para bancos de dados externos, mesmo que seja incompatível. #29206 (Azat Khuzhin).
  • Desative as projeções quando ARRAY JOIN for usado. Em versões anteriores, a análise de projeções podia quebrar aliases no array join. #29139 (Amos Bird).
  • Suporte para mais tipos no formato de entrada/saída MsgPack. #29077 (Kruglov Pavel).
  • Permite ler e gravar colunas LowCardinality no formato de entrada/saída ORC. #29062 (Kruglov Pavel).
  • Consultas em system.distributed_ddl_queue podem mostrar valores incorretos; isso foi corrigido. #29061 (tavplubix).
  • Comportamento correto para métodos desconhecidos em conexão HTTP. Resolve #29050. #29057 (Filatenkov Artur).
  • clickhouse-keeper: Corrige um bug em clickhouse-keeper-converter que pode causar alguma perda de dados ao restaurar a partir dos logs do ZooKeeper (não do snapshot). #29030 (小路). Corrige um bug em clickhouse-keeper-converter que pode levar à desserialização incorreta do log do ZooKeeper. #29071 (小路).
  • Aplica as configurações de consultas CREATE ... AS SELECT (corrige: #28810). #28962 (Azat Khuzhin).
  • Respeito à configuração padrão do banco de dados para ALTER TABLE … ON CLUSTER … REPLACE/MOVE PARTITION FROM/TO … #28955 (anneji-dev).
  • protocolo gRPC: Permitir alterar a compressão no servidor a partir do cliente. #28953 (Vitaly Baranov).
  • Ignora a exceção “sem dados” ao ler sensores térmicos para métricas assíncronas. Fecha #28852. #28882 (alexey-milovidov).
  • Corrigida uma race condition lógica que, em casos raros, poderia causar o erro Dictionary not found para um dicionário existente. #28853 (tavplubix).
  • Flexibiliza a verificação de função aninhada para o combinator If (mas proíbe o aninhamento de combinators idênticos). #28828 (Azat Khuzhin).
  • Corrigida uma possível exceção não capturada durante o encerramento do servidor. #28761 (Azat Khuzhin).
  • Impedir a limpeza de diretórios tmp que possam ser usados por uma mutation/merge ativa se a mutation/merge for extraordinariamente longa. #28760 (Azat Khuzhin).
  • Permite a otimização optimize_arithmetic_operations_in_aggregate_functions = 1 quando um alias é usado. #28746 (Amos Bird).
  • Implementa a configuração detach_not_byte_identical_parts para ReplicatedMergeTree, que desanexa, em vez de remover, partes que não são idênticas byte a byte (após merge/mutate). #28708 (Azat Khuzhin).
  • Implementa a configuração max_suspicious_broken_parts_bytes para MergeTree (para limitar o tamanho total de todas as partes corrompidas; o valor padrão é 1GiB). #28707 (Azat Khuzhin).
  • Habilitada a expansão de macros nas configurações da tabela RabbitMQ. #28683 (Vitaly Baranov).
  • Restaurada a possibilidade de ler dados de uma tabela com o mecanismo Log em múltiplas threads. #28125 (Vitaly Baranov).
  • Corrige o comportamento incorreto no tratamento de colunas NULL em funções JSON. Isso corrige #27930. #28012 (Amos Bird).
  • Permite definir separadamente o tamanho do cache de Mark/Uncompressed para índices de salto em relação às colunas. #27961 (Amos Bird).
  • Permite combinar JOIN com USING com outros tipos de JOIN. #23881 (darkkeks).
  • Atualizado o submódulo aws-sdk para throttling no S3 do Yandex Cloud. #30646 (ianton-ru).
  • Corrigida a liberação do ID da consulta e do ID da sessão ao final do processamento da consulta durante o tratamento da chamada gRPC. #29954 (Vitaly Baranov).
  • Corrigido o desligamento do AccessControlManager para corrigir um teste instável. #29951 (Vitaly Baranov).
  • Corrige a falha de asserção na leitura de HDFS. Atualiza a biblioteca libhdfs3 para que possa ser executada em testes no modo de depuração. Fecha #29251. Fecha #27814. #29276 (Kseniia Sumarokova).

Melhoria de build/testes/empacotamento

  • Adicionado suporte a builds do FreeBSD para máquinas Aarch64. #29952 (MikaelUrankar).
  • Submódulos recursivos não são mais necessários para o ClickHouse. #30315 (alexey-milovidov).
  • O ClickHouse agora pode ser compilado estaticamente com Musl. Isso foi adicionado como experimento e não oferece suporte à compilação de odbc-bridge, library-bridge, à integração com CatBoost nem a algumas bibliotecas. #30248 (alexey-milovidov).
  • Habilitado Protobuf, Arrow, ORC e Parquet para builds AArch64 e Darwin (macOS). Isso fecha #29248. Isso fecha #28018. #30015 (alexey-milovidov).
  • Adicionada compilação cruzada para PowerPC (powerpc64le). Isso fecha #9589. Habilitado o suporte à interação com MySQL para AArch64 e PowerPC. Isso fecha #26301. #30010 (alexey-milovidov).
  • Mantidos apenas os arquivos necessários nas toolchains de compilação cruzada. Eles foram incluídos como submódulos (antes eram baixados como tarballs). #29974 (alexey-milovidov).
  • Implementada no ClickHouse uma abordagem de fuzzing com reconhecimento de estrutura para o parser da instrução SELECT. #30012 (Paul).
  • Ativado um avaliador experimental de expressões constexpr no clang para acelerar a compilação de código de template. #29668 (myrrc).
  • Adicionada a capacidade de compilar usando uma versão mais recente da glibc sem usar símbolos novos. #29594 (Azat Khuzhin).
  • Reduzido o tamanho do binário da build Debug com uma opção de otimização do clang. #28736 (flynn).
  • Agora, todas as imagens de CI serão colocadas em um repositório separado no Docker Hub. #28656 (alesapin).
  • Melhorado o suporte à compilação com clang-13. #28046 (Sergei Semin).
  • Adicionada a capacidade de imprimir profile events brutos no clickhouse-client (isso pode ser útil para debugging e testes). #30064 (Azat Khuzhin).
  • Adicionada uma dependência de tempo para a unidade do clickhouse-server (init do systemd e do sysvinit). #28891 (Azat Khuzhin).
  • Recarregado o cache de stack traces quando um símbolo é recarregado. #28137 (Amos Bird).

Correção de bug

  • Funções de busca sem distinção entre maiúsculas e minúsculas em strings UTF-8, como positionCaseInsensitiveUTF8 e countSubstringsCaseInsensitiveUTF8, em casos muito raros podem encontrar substrings que na verdade não correspondem; isso foi corrigido. #30663 (tavplubix).
  • Corrige a leitura de um arquivo vazio em disco criptografado. #30494 (Vitaly Baranov).
  • Corrige a conversão da cadeia de disjunções em IN (controlada pela configuração optimize_min_equality_disjunction_chain_length) em consultas distribuídas com a configuração legacy_column_name_of_tuple_literal = 0. #28658 (Anton Popov).
  • Permitir o uso de uma coluna materializada como chave de sharding em uma tabela distribuída, mesmo se insert_allow_materialized_columns=0:. #28637 (Vitaly Baranov).
  • Corrigido ORDER BY ... WITH FILL com TO e FROM definidos e sem linhas no conjunto de resultados. #30888 (Anton Popov).
  • Corrige o não uso do índice Set em expressões AND/OR quando há mais de dois operandos. Isso corrige #30416 . #30887 (Amos Bird).
  • Corrige uma falha quando uma projeção com função de hash é materializada. Isso corrige #30861 . O problema é semelhante a https://github.com/ClickHouse/ClickHouse/pull/28560, causado pela falta de compreensão adequada do invariante de o header estar vazio. #30877 (Amos Bird).
  • Corrigida a ambiguidade ao extrair o nome auxiliar do ZooKeeper do caminho do ZooKeeper em ReplicatedMergeTree. Antes, o servidor podia não iniciar e exibir Unknown auxiliary ZooKeeper name se o caminho do ZooKeeper contivesse dois-pontos. Corrige #29052. Além disso, era permitido especificar um caminho do ZooKeeper que não começasse com uma barra, mas isso agora está descontinuado, e a criação de novas tabelas com esse tipo de caminho não é permitida. Barras e dois-pontos em nomes auxiliares do ZooKeeper também não são permitidos. #30822 (tavplubix).
  • Limpa o diretório temporário caso localBackup falhe por algum motivo. #30797 (ianton-ru).
  • Corrigida uma race condition entre REPLACE/MOVE PARTITION e o merge em segundo plano em MergeTree não replicado, que poderia fazer com que parte dos dados movidos/substituídos permanecesse na partição. Corrige #29327. #30717 (tavplubix).
  • Corrigido o uso de PREWHERE com WHERE no caso de PREWHERE sempre verdadeiro. #30668 (Azat Khuzhin).
  • A otimização de push down do LIMIT poderia causar o erro Cannot find column. Corrige #30438. #30562 (Nikolai Kochetov).
  • Adiciona parênteses ausentes nas reescritas de isNotNull/isNull para IS [NOT] NULL (corrige consultas com algo como isNotNull(1)+isNotNull(2)). #30520 (Azat Khuzhin).
  • Corrige deadlock no ALTER com subconsulta escalar na mesma tabela, fecha #30461. #30492 (Vladimir C).
  • Corrigida uma falha de segmentação que poderia ocorrer se a sessão expirasse durante a execução de REPLACE PARTITION. #30432 (tavplubix).
  • Consultas com condição do tipo IN (subquery) podiam retornar resultados incorretos caso uma projeção agregada fosse aplicada. Corrigida a criação de sets para projeções. #30310 (Amos Bird).
  • Corrige a resolução de aliases de colunas em consultas JOIN quando a projeção está habilitada. Isso corrige #30146. #30293 (Amos Bird).
  • Corrigida uma deficiência na função replaceRegexpAll. #30292 (Memo).
  • Corrige o parsing da opção preallocate na configuração de layout do ComplexKeyHashedDictionary e do ComplexKeySparseHashedDictionary. #30246 (Maksim Kita).
  • Corrigida a função [I]LIKE. Fecha #28661. #30244 (Nikolay Degterinsky).
  • Corrige um travamento com shortcircuit e lowcardinality em multiIf. #30243 (Raúl Marín).
  • FlatDictionary, HashedDictionary corrigem o cálculo de bytes_allocated para atributos Nullable. #30238 (Maksim Kita).
  • Permite identificadores iniciados por números em múltiplas junções. #30230 (Vladimir C).
  • Corrigida a leitura do MergeTree com max_read_buffer_size = 0 (quando o usuário quer dar um tiro no próprio pé) (pode levar às exceções Can't adjust last granule, LOGICAL_ERROR ou até mesmo à perda de dados). #30192 (Azat Khuzhin).
  • Corrigido pread_fake_async/pread_threadpool com min_bytes_to_use_direct_io. #30191 (Azat Khuzhin).
  • Corrige o preenchimento incorreto de uma coluna MATERIALIZED em INSERT SELECT com base em uma coluna Nullable. #30189 (Azat Khuzhin).
  • Suporte para argumentos Nullable na função initializeAggregation. #30177 (Anton Popov).
  • Corrige o erro Port is already connected em consultas com GLOBAL IN e WITH TOTALS. Apenas nas versões 21.9 e 21.10. #30086 (Nikolai Kochetov).
  • Corrige condição de corrida entre MOVE PARTITION e merges/mutações no MergeTree. #30074 (Azat Khuzhin).
  • O banco de dados Memory removido podia voltar a aparecer após a reinicialização do servidor; isso foi corrigido (#29795). Também foi adicionada a configuração force_remove_data_recursively_on_drop como solução alternativa para o erro Directory not empty ao remover o banco de dados Ordinary (porque não é possível remover manualmente os dados remanescentes em um ambiente de nuvem). #30054 (tavplubix).
  • Corrige travamento de sample com tuple(), fecha #30004. #30016 (flynn).
  • tenta fechar a issue: #29965. #29976 (hexiaoting).
  • Corrige uma possível condição de corrida entre FileChecker e StorageLog/StorageStripeLog. #29959 (Azat Khuzhin).
  • Corrige uma condição de corrida entre LogSink::writeMarks() e LogSource em StorageLog. #29946 (Azat Khuzhin).
  • Corrige um possível vazamento de recursos no limite de consultas simultâneas de tabelas MergeTree, introduzido em https://github.com/ClickHouse/ClickHouse/pull/19544. #29879 (Amos Bird).
  • Corrigida a verificação de recriação de tabelas de sistema (falhava em detectar alterações nos valores de enum). #29857 (Azat Khuzhin).
  • MaterializedMySQL: Corrige um problema em que, se a conexão com o MySQL fosse interrompida, apenas partes de uma transação poderiam ser processadas. #29837 (Håvard Kvålen).
  • Evita o erro Timeout exceeded: elapsed 18446744073.709553 seconds, que pode ocorrer em casos extremamente raros, possivelmente devido a algum bug no kernel. Corrige #29154. #29811 (tavplubix).
  • Corrigido cast incorreto na consulta ATTACH TABLE ... FROM 'path' quando um literal não string é usado no lugar de um caminho. Isso pode levar à leitura de memória não inicializada. #29790 (alexey-milovidov).
  • Corrige o acesso concorrente a LowCardinality durante GROUP BY (em combinação com tabelas Buffer, pode causar problemas). #29782 (Azat Khuzhin).
  • Corrige um GROUP BY incorreto (múltiplas linhas com as mesmas chaves no resultado) no caso de consulta distribuída quando os shards tinham versões mistas <= 21.3 e >= 21.4, a chave de GROUP BY tinha várias colunas, todas de tamanho fixo, e a agregação em dois níveis estava ativada (consulte group_by_two_level_threshold e group_by_two_level_threshold_bytes). Corrige #29580. #29735 (Nikolai Kochetov).
  • Corrigido o comportamento incorreto da configuração materialized_postgresql_tables_list na reinicialização do servidor. Relatado em #28529. #29686 (Kseniia Sumarokova).
  • A condição do predicado de filtro poderia ser perdida após a otimização de push-down. #29625 (Nikolai Kochetov).
  • Corrigida a compilação JIT de expressões com aliases e a avaliação de expressões com curto-circuito. Fecha #29403. #29574 (Maksim Kita).
  • Corrige uma falha de segmentação rara na consulta ALTER MODIFY ao usar um identificador de tabela inválido na expressão DEFAULT, como x.y.z... Corrige #29184. #29573 (alesapin).
  • Corrigida a desreferenciação de nullptr em GROUP BY WITH TOTALS HAVING (quando a coluna de HAVING não havia sido selecionada). #29553 (Azat Khuzhin).
  • Evita deadlocks ao ler e gravar em tabelas com o mecanismo de tabela Join ao mesmo tempo. #29544 (Raúl Marín).
  • Corrigido um bug na verificação pathStartsWith, pois havia um problema no uso de std::mismatch: The behavior is undefined if the second range is shorter than the first range.. #29531 (Kseniia Sumarokova).
  • No ODBC bridge, adicione tentativas de repetição para o erro Invalid cursor state. É um erro que permite nova tentativa. Fecha #29473. #29518 (Kseniia Sumarokova).
  • Corrigida a interpretação incorreta do nome da tabela durante o carregamento do banco de dados Lazy. Corrige #29456. #29476 (tavplubix).
  • Corrige possível Block structure mismatch em subconsultas com pushdown do predicado HAVING. Corrige #29010. #29475 (Nikolai Kochetov).
  • Corrige o erro lógico Cannot capture columns nas funções greatest/least. Fecha #29334. #29454 (Kruglov Pavel).
  • RocksDB table engine: corrige uma condição de corrida durante a abertura de vários DBs (e restaura alguns testes que acionam o problema na CI). #29393 (Azat Khuzhin).
  • Corrigido o problema em que o armazenamento de acesso replicado não era encerrado corretamente quando estava configurado incorretamente. #29388 (Kevin Michel).
  • Removida a função de janela nth_value, pois não é segura em termos de memória. Isso fecha #29347. #29348 (alexey-milovidov).
  • Corrige as mesclagens verticais de partes de projeção. Isso corrige #29253. Este PR também corrige vários problemas de mesclagem/mutação de projeção introduzidos em https://github.com/ClickHouse/ClickHouse/pull/25165. #29337 (Amos Bird).
  • Corrige consultas DDL travadas no banco de dados Replicated ao adicionar uma nova réplica. #29328 (Kevin Michel).
  • Corrige os timeouts de conexão (send_timeout/receive_timeout). #29282 (Azat Khuzhin).
  • Corrigida uma possível exceção Table columns structure in ZooKeeper is different from local table structure ao recriar ou criar novas réplicas de ReplicatedMergeTree, quando uma das colunas da tabela tem expressões padrão com funções que não diferenciam maiúsculas de minúsculas. #29266 (Anton Popov).
  • Enviar ao cliente (via TCP) o erro normal Database doesn't exist error (UNKNOWN_DATABASE) em vez de Attempt to read after eof (ATTEMPT_TO_READ_AFTER_EOF). #29229 (Azat Khuzhin).
  • Corrigida falha de segmentação ao inserir em coluna do tipo LowCardinality(Nullable) no formato de entrada Avro. #29132 (Kruglov Pavel).
  • Não permitir a reutilização das credenciais anteriores no caso de segredo interservidor (Antes, o INSERT via Buffer/Kafka em uma tabela distribuída com segredo interservidor configurado para esse cluster podia reutilizar o usuário definido anteriormente para essa conexão). #29060 (Azat Khuzhin).
  • Ajusta any_join_distinct_right_table_keys ao fazer join com Dicionário, fecha #29007. #29014 (Vladimir C).
  • Corrige o erro “Not found column … in block” ao fazer join em uma coluna com alias, fecha #26980. #29008 (Vladimir C).
  • Corrigido o número de threads utilizadas na subconsulta GLOBAL IN (ela estava sendo executada em uma única thread desde a correção do bug #19414). #28997 (Nikolai Kochetov).
  • Corrige otimizações inadequadas de ORDER BY quando ele contém WITH FILL. Isso fecha #28908. Isso fecha #26049. #28910 (alexey-milovidov).
  • Correção nas funções de array de ordem superior (SIGSEGV para arrayCompact/ILLEGAL_COLUMN para arrayDifference/arrayCumSumNonNegative) com constantes. #28904 (Azat Khuzhin).
  • Corrigida a espera por uma mutação com mutations_sync=2. #28889 (Azat Khuzhin).
  • Corrige consultas a bancos de dados externos (por exemplo, MySQL) com várias colunas em IN (por exemplo, (k,v) IN ((1, 2)) ). #28888 (Azat Khuzhin).
  • Corrige bug com LowCardinality na avaliação de funções com curto-circuito. Fecha #28884. #28887 (Kruglov Pavel).
  • Corrigida a leitura de subcolunas em partes compactas. #28873 (Anton Popov).
  • Corrigida uma condição de corrida entre DROP PART e REPLACE/MOVE PARTITION que, em casos raros, poderia fazer com que as réplicas divergissem. #28864 (tavplubix).
  • Corrigida a compilação de expressões com avaliação de curto-circuito. #28821 (Azat Khuzhin).
  • Corrige um caso extremamente raro em que réplicas de ReplicatedMergeTree podem ficar divergentes após a reinicialização forçada de todas as réplicas. O erro aparece como Part ... intersects (previous|next) part .... #28817 (alesapin).
  • Melhor verificação da usabilidade da conexão e também tratamento de qualquer exceção no desligamento do RabbitMQ, por precaução. #28797 (Kseniia Sumarokova).
  • Corrige uma condição de corrida benigna em ReplicatedMergeTreeQueue. Não deve ser visível para o usuário, mas pode levar a bugs sutis. #28734 (alesapin).
  • Corrige possível travamento em SELECT com projeção agregada parcialmente criada em caso de exceção. #28700 (Amos Bird).
  • Corrige o coredump ao criar tabelas distribuídas quando os parâmetros informados estão incorretos. #28686 (Zhiyong Wang).
  • Adicionados os aliases Settings.Names e Settings.Values à tabela system.processes. #28685 (Vitaly).
  • Suporte à biblioteca S2 Geometry: corrige o número de argumentos exigidos pelas funções s2RectAdd e s2RectContains. #28663 (Bharat Nallan).
  • Corrige a conversão inválida de tipo constante quando é usada uma chave primária Nullable ou LowCardinality. #28636 (Amos Bird).
  • Corrige “A coluna não está em uma função de agregação nem em GROUP BY” com PREWHERE (Corrige: #28461). #28502 (Azat Khuzhin).

Lançamento do ClickHouse v21.10, 2021-10-16. Apresentação, Vídeo

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

  • As seguintes configurações do MergeTree no nível da tabela: replicated_max_parallel_sends, replicated_max_parallel_sends_for_table, replicated_max_parallel_fetches, replicated_max_parallel_fetches_for_table agora não têm mais efeito. Elas nunca funcionaram bem e foram substituídas por max_replicated_fetches_network_bandwidth, max_replicated_sends_network_bandwidth e background_fetches_pool_size. #28404 (alesapin).

Novo recurso

  • Adiciona um recurso para criar Funções Definidas pelo Usuário (UDF) como expressões lambda. Sintaxe CREATE FUNCTION {function_name} as ({parameters}) -> {function core}. Exemplo: CREATE FUNCTION plus_one as (a) -> a + 1. Autores: @Realist007. #27796 (Maksim Kita) #23978 (Realist007).
  • Adicionado o mecanismo de armazenamento Executable e a função de tabela executable. Isso permite processar dados com scripts externos em streaming. #28102 (Maksim Kita) (ruct).
  • Adicionado o mecanismo de armazenamento ExecutablePool. Semelhante ao Executable, mas usa um pool de processos de longa duração. #28518 (Maksim Kita).
  • Adiciona a consulta ALTER TABLE ... MATERIALIZE COLUMN. #27038 (Vladimir Chebotarev).
  • Suporte a gravação particionada na função de tabela s3. #23051 (Vladimir Chebotarev).
  • Suporte ao formato de compressão lz4 (além de gz, bz2, xz, zstd) para importação/exportação de dados. #25310 (Bharat Nallan).
  • Permite argumentos posicionais com a configuração enable_positional_arguments. Fecha #2592. #27530 (Kseniia Sumarokova).
  • Aceita configurações do usuário relacionadas a formatos de arquivo na cláusula SETTINGS da consulta CREATE para tabelas s3. Isso fecha #27580. #28037 (Nikita Mikhaylov).
  • Permite conexão SSL para o mecanismo RabbitMQ. #28365 (Kseniia Sumarokova).
  • Adiciona a função getServerPort para obter a porta do servidor. Quando a porta não é usada pelo servidor, gera uma exceção. #27900 (Amos Bird).
  • Adiciona funções de conversão entre “Snowflake ID” e DateTime, DateTime64. Veja #27058. #27704 (jasine).
  • Adiciona a função SHA512. #27830 (zhanglistar).
  • Adiciona a configuração log_queries_probability, que permite ao usuário gravar no query_log apenas uma amostra das consultas. Fecha #16609. #27527 (Nikolay Degterinsky).

Recurso Experimental

  • Discos do tipo web para armazenar tabelas readonly em um servidor web na forma de arquivos estáticos. Veja #23982. #25251 (Kseniia Sumarokova). Isso é necessário principalmente para facilitar os testes de operações em armazenamento compartilhado e para importar conjuntos de dados com facilidade. Não é recomendável usar antes da versão 21.11.
  • Foram adicionados os novos comandos BACKUP e RESTORE. #21945 (Vitaly Baranov). Isso está em desenvolvimento e não se destina ao uso na versão atual.

Melhoria de desempenho

  • Acelera as funções de agregação sumIf e countIf. #28272 (Raúl Marín).
  • Cria uma projeção virtual para índices minmax. Agora, quando allow_experimental_projection_optimization estiver habilitado, as consultas usarão o índice minmax em vez de ler os dados, quando possível. #26286 (Amos Bird).
  • Introduz duas verificações em sequenceMatch e sequenceCount que permitem encerrar mais cedo quando alguma parte determinística do padrão da sequência não está presente na lista de eventos. Essa mudança viabiliza muitas consultas que antes falhavam por atingir o limite de operações e, de modo geral, acelera o pipeline. #27729 (Jakub Kuklis).
  • Aprimora a análise da chave primária com informações de monotonicidade garantida para funções binárias, especialmente divisão por constante diferente de zero. #28302 (Amos Bird).
  • Faz com que a condição de filtro hasAll aproveite skipping indexes com filtro de Bloom. #27984 (Braulio Valdivielso Martínez).
  • Acelera o carregamento de data parts ao adiar o processo de inicialização da tabela. #28313 (Amos Bird).
  • Corrige um possível número excessivo de conditions movidas de WHERE para PREWHERE (otimização controlada pela configuração optimize_move_to_prewhere). #28139 (lthaooo).
  • Habilita optimize_distributed_group_by_sharding_key por padrão. #28105 (Azat Khuzhin).

Melhoria

  • Verifique o nome do cluster antes de criar a tabela Distributed; não permita a criação de uma tabela com nome de cluster incorreto. Corrige #27832. #27927 (tavplubix).
  • Adicionada a função de agregação quantileBFloat16Weighted, de modo semelhante às outras funções quantile…Weighted. Isso fecha #27745. #27758 (Ivan Novitskiy).
  • Permite criar dicionários com lista vazia de atributos. #27905 (Maksim Kita).
  • Adicionar documentação interativa no clickhouse-client sobre como redefinir a senha. Isso é útil em cenários em que o usuário instalou o ClickHouse, configurou uma senha e a esqueceu logo em seguida. Veja #27750. #27903 (alexey-milovidov).
  • Suporta o caso em que os dados estão encapsulados em um array no formato de entrada JSONAsString. Fecha #25517. #25633 (Kruglov Pavel).
  • Adicionada a nova coluna last_queue_update_exception à tabela system.replicas. #26843 (nvartolomei).
  • Suporte a reconexões em caso de failover para tabelas MaterializedPostgreSQL. Fecha #28529. #28614 (Kseniia Sumarokova).
  • Gerar um UUID exclusivo para o servidor na primeira inicialização. #20089 (Bharat Nallan).
  • Adiciona a configuração connection_wait_timeout (o padrão é 5 segundos; 0 = não esperar) ao engine MySQL. #28474 (Azat Khuzhin).
  • Não permitir a criação de MaterializedPostgreSQL com argumentos inválidos. Fecha #28423. #28430 (Kseniia Sumarokova).
  • Use um arquivo tmp real em vez de “rows_sources” predefinido para mesclagens verticais. Isso evita a geração de diretórios inúteis em discos tmp. #28299 (Amos Bird).
  • Adicionado libhdfs3_conf à configuração do servidor, em vez de exportar a variável de ambiente LIBHDFS3_CONF em clickhouse-server.service. Isso serve para configurar a interação com o HDFS. #28268 (Zhichang Yu).
  • Corrigida a remoção de partes no estado Temporary, que pode levar a uma exceção inesperada (Part %name% doesn't exist). Corrige #23661. #28221 #28221) (Azat Khuzhin).
  • Corrige zookeeper_log.address (antes do primeiro patch neste PR, o endereço era sempre ::) e reduz o número de chamadas a getpeername(2) para esta coluna (já que, toda vez que uma entrada de zookeeper_log é adicionada, getpeername() é chamado; armazene esse endereço em cache no cliente zookeeper para evitar isso). #28212 (Azat Khuzhin).
  • Suporte a conversões implícitas entre o índice no operador [] e a chave do tipo Map (por exemplo, diferentes tipos de Int, String e FixedString). #28096 (Anton Popov).
  • Suporte à cláusula ON CONFLICT ao inserir no table engine PostgreSQL ou na table function. Fecha #27727. #28081 (Kseniia Sumarokova).
  • Reduz as restrições do tipo de dado Enum para permitir anexar dados compatíveis. Fecha #26672. #28028 (Dmitry Novik).
  • Adiciona uma configuração empty_result_for_aggregation_by_constant_keys_on_empty_set para controlar o comportamento do agrupamento por chaves constantes em um conjunto vazio. Isso restaura o comportamento antigo de #6842. #27932 (Amos Bird).
  • Adicionada a configuração replication_wait_for_inactive_replica_timeout. Ela permite especificar por quanto tempo aguardar que réplicas inativas executem a consulta ALTER/OPTIMZE/TRUNCATE (o padrão é 120 segundos). Se replication_alter_partitions_sync for 2 e algumas réplicas permanecerem inativas por mais de replication_wait_for_inactive_replica_timeout segundos, a exceção UNFINISHED será lançada. #27931 (tavplubix).
  • Suporte a argumento lambda no transformador de coluna APPLY, permitindo aplicar funções com mais de um argumento. Isto se refere a #27877. #27901 (Amos Bird).
  • Ativa tcp_keep_alive_timeout por padrão. #27882 (Azat Khuzhin).
  • Aprimorado o cancelamento de consultas remotas (caso o servidor remoto seja encerrado de forma anormal). #27881 (Azat Khuzhin).
  • Use upload com cópia multipart para objetos grandes no S3. #27858 (ianton-ru).
  • Permitir seguir links simbólicos no caminho do dicionário da biblioteca. #27815 (Kseniia Sumarokova).
  • Agora, ALTER MODIFY COLUM T para Nullable(T) não exige mutação. #27787 (victorgao).
  • Não ignore erros de forma silenciosa nem contabilize atrasos em ReadBufferFromS3. #27484 (Vladimir Chebotarev).
  • Melhora em ALTER ... MATERIALIZE TTL, com recálculo apenas dos metadados, sem executar a ação de TTL em si. #27019 (lthaooo).
  • Permite ler a lista de domínios de nível superior personalizados sem uma quebra de linha no fim do arquivo. #28213 (Azat Khuzhin).

Correção de bug

  • Corrige casos em que a leitura de dados compactados do carbon-clickhouse falha com ‘attempt to read after end of file’. Fecha #26149. #28150 (FArthur-cmd).
  • Corrigida a verificação dos privilégios de acesso ao executar a instrução GRANT WITH REPLACE com a cláusula ON CLUSTER. Este PR aprimora a correção #27001. #27983 (Vitaly Baranov).
  • Permite selecionar com extremes = 1 em uma coluna do tipo LowCardinality(UUID). #27918 (Vitaly Baranov).
  • Corrige o cast no estilo do PostgreSQL (operador ::) com números negativos. #27876 (Anton Popov).
  • Após #26864. Corrigido o encerramento de NamedSessionStorage: os contextos de sessão armazenados em NamedSessionStorage agora são destruídos antes do contexto global. #27875 (Vitaly Baranov).
  • Correção no modo “strict” de windowFunnel. Isso corrige #27469. #27563 (achimbab).
  • Corrigido um loop infinito ao ler um arquivo bzip2 truncado. #28543 (Azat Khuzhin).
  • Corrige a sobreposição de UUID em DROP TABLE para DDLs internos do MaterializedMySQL. O MaterializedMySQL é um recurso experimental. #28533 (Azat Khuzhin).
  • Corrigido o erro There is no subcolumn ao fazer SELECT em tabelas que têm colunas Nested e colunas escalares com ponto no nome e o mesmo prefixo de Nested (por exemplo, n.id UInt32, n.arr1 Array(UInt64), n.arr2 Array(UInt64)). #28531 (Anton Popov).
  • Corrige um bug que pode levar ao erro Existing table metadata in ZooKeeper differs in sorting key expression. após um ALTER em ReplicatedVersionedCollapsingMergeTree. Corrige #28515. #28528 (alesapin).
  • Corrigido um possível vazamento de watches no ZooKeeper (problema menor) durante o processamento em segundo plano da fila de DDL distribuído. Fecha #26036. #28446 (tavplubix).
  • Corrige a falta de aspas nos nomes de tabelas no mecanismo MaterializedPostgreSQL. Fecha #28316. #28433 (Kseniia Sumarokova).
  • Corrigido o comportamento incorreto de linhas sem correspondência de coluna Nullable. Fecha #27691. #28349 (vdimir).
  • Corrige a otimização do índice NOT-IN quando nem todas as colunas da chave são usadas. Isso corrige #28120. #28315 (Amos Bird).
  • Correção de partes sobrepostas causada pela substituição de uma nova parte por uma parte vazia. #28310 (Azat Khuzhin).
  • Corrigido um resultado inconsistente em consultas com ORDER BY e em tabelas Merge com a configuração optimize_read_in_order habilitada. #28266 (Anton Popov).
  • Corrige uma possível leitura de memória não inicializada em consultas com o tipo Nullable(LowCardinality) e a configuração extremes definida como 1. Corrige #28165. #28205 (Nikolai Kochetov).
  • Várias pequenas correções nas projeções. Veja a descrição detalhada no PR. #28178 (Amos Bird).
  • Corrige falhas de segmentação extremamente raras durante o desligamento devido à ordem incorreta de encerramento do recarregador de contexto/configuração. #28088 (nvartolomei).
  • Corrige o tratamento do valor NULL com o tipo Nullable(String) na função JSONExtract. Isso corrige #27929 e #27930. Essa alteração foi introduzida em https://github.com/ClickHouse/ClickHouse/pull/25452 . #27939 (Amos Bird).
  • Várias correções para a nova ferramenta clickhouse-keeper. Corrige um bug raro no clickhouse-keeper em que o cliente pode receber uma resposta de watch antes da resposta à solicitação. #28197 (alesapin). Corrige um comportamento incorreto no clickhouse-keeper quando watches de lista (getChildren) eram acionados por solicitações set para nós filhos. #28190 (alesapin). Corrige um caso raro em que alterações nas configurações do clickhouse-keeper podem levar à perda de logs e ao travamento do servidor. #28360 (alesapin). Corrige um bug no clickhouse-keeper que pode levar à geração infinita de logs quando rotate_logs_interval é reduzido. #28152 (alesapin).

Melhoria em Build/Testes/Empacotamento

  • Habilita o Thread Fuzzer no Stress Test. O Thread Fuzzer é um recurso do ClickHouse que permite testar mais permutações no agendamento de threads e descobrir mais problemas em potencial. Isso fecha #9813. Isso fecha #9814. Isso fecha #9515. Isso fecha #9516. #27538 (alexey-milovidov).
  • Adiciona um novo nível de log test para ambientes de teste. Ele é ainda mais verboso que o trace padrão. #28559 (alesapin).
  • Exibe informações do status do git na etapa de configuração do CMake. #28047 (Braulio Valdivielso Martínez).
  • Altera temporariamente o repositório apt do Ubuntu para o espelho ru.archive.ubuntu.com, já que o padrão (archive.ubuntu.com) não está respondendo em nosso CI. #28016 (Ilya Yatsishin).

Lançamento do ClickHouse v21.9, 2021-09-09

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

  • Não gerar zeros à direita na representação textual de tipos Decimal. Exemplo: 1.23 será exibido em vez de 1.230000 para um decimal com escala 6. Isso fecha #15794. Isso pode introduzir uma pequena incompatibilidade caso suas aplicações dependessem, de alguma forma, dos zeros à direita. A serialização em formatos de saída pode ser controlada pela configuração output_format_decimal_trailing_zeros. A implementação de toString e a conversão para String foram alteradas incondicionalmente. #27680 (alexey-milovidov).
  • Não permitir aplicar uma função de agregação paramétrica com o combinador -Merge ao estado de uma função de agregação se esse estado tiver sido produzido por uma função de agregação com parâmetros diferentes. Por exemplo, o estado de fooState(42)(x) não pode ser finalizado com fooMerge(s) ou fooMerge(123)(s); os parâmetros devem ser especificados explicitamente como fooMerge(42)(s) e devem ser iguais. Isso não afeta algumas funções de agregação especiais, como quantile e sequence*, que usam parâmetros apenas para finalização. #26847 (tavplubix).
  • No clickhouse-local, sempre tratar endereços locais com porta como remotos. #26736 (Raúl Marín).
  • Corrige o problema em que, em algumas consultas complexas com aliases de coluna idênticos aos nomes das expressões, pode ocorrer uma conversão incorreta. Isso corrige #25447. Isso corrige #26914. Essa correção pode introduzir incompatibilidade retroativa: se houver expressões diferentes com nomes idênticos, uma exceção será gerada. Isso pode quebrar alguns casos raros quando enable_optimize_predicate_expression está definido. #26639 (alexey-milovidov).
  • Agora, uma subconsulta escalar sempre retorna um resultado Nullable se seu tipo puder ser Nullable. Isso é necessário porque, no caso de uma subconsulta vazia, o resultado deve ser Null. Antes, era possível obter um erro sobre tipos incompatíveis (a dedução de tipo não executa a subconsulta escalar e podia usar um tipo não anulável). Uma subconsulta escalar com resultado vazio que não pode ser convertida para Nullable (como Array ou Tuple) agora gera erro. Corrige #25411. #26423 (Nikolai Kochetov).
  • Introduz sintaxe para here documents. Exemplo: SELECT $doc$ VALUE $doc$. #26671 (Maksim Kita). Essa alteração é incompatível com versões anteriores se houver, na consulta, identificadores que contenham $ #28768.
  • Agora, índices podem lidar com tipos Nullable, incluindo isNull e isNotNull. #12433 e #12455 (Amos Bird) e #27250 (Azat Khuzhin). Mas isso foi feito com alterações no formato em disco e, embora o novo servidor consiga ler dados antigos, o servidor antigo não consegue. Além disso, caso você tenha índices de data skipping MINMAX, poderá receber o erro Data after mutation/merge is not byte-identical, já que o novo índice terá a extensão .idx2, enquanto antes era .idx. Portanto, nesse caso, você não deve adiar a atualização de todas as réplicas existentes; caso contrário, se uma réplica antiga (<21.9) baixar dados de uma nova réplica com 21.9+, ela não conseguirá aplicar o índice à parte baixada.

Novo recurso

  • Implementação da avaliação de funções com curto-circuito, fecha #12587. Adiciona a configuração short_circuit_function_evaluation para controlar a avaliação de funções com curto-circuito. #23367 (Kruglov Pavel).
  • Adicionado suporte para os operadores INTERSECT, EXCEPT, ANY e ALL. #24757 (Kirill Ershov). (Kseniia Sumarokova).
  • Adicionar suporte à criptografia no nível do sistema de arquivos virtual (criptografia de dados em repouso) usando o algoritmo AES-CTR. #24206 (Latysheva Alexandra). (Vitaly Baranov) #26733 #26377 #26465.
  • Adicionadas funções de processamento de linguagem natural (NLP) para tokenização, stemming, lematização e busca nas extensões de sinônimos. #24997 (Nikolay Degterinsky).
  • Adicionada integração com a biblioteca de geometria S2. #24980 (Andr0901). (Nikita Mikhaylov).
  • Adiciona engine de tabela SQLite, função de tabela e engine de banco de dados. #24194 (Arslan Gumerov). (Kseniia Sumarokova).
  • Adicionado suporte a consultas personalizadas para fontes de dicionário MySQL, PostgreSQL, ClickHouse, JDBC e Cassandra. Fecha #1270. #26995 (Maksim Kita).
  • Adicionar armazenamento compartilhado (replicado) de usuários, funções, políticas de linha, quotas e perfis de configuração por meio do ZooKeeper. #27426 (Kevin Michel).
  • Adiciona compressão para INTO OUTFILE, com seleção automática do algoritmo de compressão. Fecha #3473. #27134 (Filatenkov Artur).
  • Adicionado INSERT ... FROM INFILE, de forma semelhante a SELECT ... INTO OUTFILE. #27655 (Filatenkov Artur).
  • Adicionado o dicionário complex_key_range_hashed. Fecha #22029. #27629 (Maksim Kita).
  • Suporte a expressões na cláusula JOIN ON. Fecha #21868. #24420 (Vladimir C).
  • Quando o cliente se conecta ao servidor, ele recebe informações sobre todos os avisos já coletados pelo servidor. (Isso pode ser desativado com a opção --no-warnings). Adicionada a tabela system.warnings para coletar avisos sobre a configuração do servidor. #26246 (Filatenkov Artur). #26282 (Filatenkov Artur).
  • Permitir o uso de expressões constantes de WITH e SELECT nos parâmetros de funções de agregação. Fecha #10945. #27531 (abel-cheng).
  • Adiciona tupleToNameValuePairs, uma função que converte uma tupla nomeada em um array de pares. #27505 (Braulio Valdivielso Martínez).
  • Adiciona suporte ao método de compressão bzip2 para importação/exportação. Corrige #22428. #27377 (Nikolay Degterinsky).
  • Adicionada a função bitmapSubsetOffsetLimit(bitmap, offset, cardinality_limit). Ela cria um subconjunto do bitmap, limitando os resultados a cardinality_limit com um deslocamento de offset. #27234 (DHBin).
  • Adicionada a coluna default_database a system.users. #27054 (kevin wan).
  • Suporte a macros cluster nas funções de tabela ‘cluster’ e ‘clusterAllReplicas’. #26913 (polyprogrammist).
  • Adicionadas novas funções currentRoles(), enabledRoles(), defaultRoles(). #26780 (Vitaly Baranov).
  • Novas funções currentProfiles(), enabledProfiles(), defaultProfiles(). #26714 (Vitaly Baranov).
  • Adicionadas funções que retornam o (initial_)query_id da consulta atual. Isso fecha #23682. #26410 (Alexey Boykov).
  • Adicionado o recurso REPLACE GRANT. #26384 (Caspian).
  • EXPLAIN agora conta com o modo EXPLAIN ESTIMATE ..., que exibirá informações sobre linhas lidas, marcas e partes de tabelas MergeTree. Fecha #23941. #26131 (fastio).
  • Foi adicionada a tabela system.zookeeper_log. Todas as ações do cliente ZooKeeper são registradas nessa tabela. Implementa #25449. #26129 (tavplubix).
  • Replicação zero-copy para ReplicatedMergeTree no armazenamento HDFS. #25918 (Zhichang Yu).
  • Permite inserir o tipo Nested como um array de structs nos formatos de entrada Arrow, ORC e Parquet. #25902 (Kruglov Pavel).
  • Adicionar um novo tipo de dado Date32 (armazena dados como Int32), oferecer suporte ao mesmo intervalo de datas de DateTime64, oferecer suporte ao carregamento de date32 do Parquet para Date32 no ClickHouse, adicionar a nova função toDate32, semelhante a toDate. #25774 (LiuNeng).
  • Permite que você defina um banco de dados padrão. #25268. #25687 (kevin wan).
  • Adiciona um parâmetro opcional ao engine MongoDB para aceitar opções de string de conexão e suportar conexão SSL. Fecha #21189. Fecha #21041. #22045 (Omar Bazaraa).

Recurso experimental

  • Adicionado o codec de compressão AES_128_GCM_SIV, que criptografa colunas em vez de compactá-las. #19896 (PHO). Será reescrito; não use.
  • Renomeado MaterializeMySQL para MaterializedMySQL. #26822 (tavplubix).

Melhoria de desempenho

  • Melhora o desempenho de consultas rápidas quando max_execution_time = 0, reduzindo o número de chamadas de sistema clock_gettime. #27325 (filimonov).
  • Especializa comparações relacionadas a data e hora para obter melhor desempenho. Isso corrige #27083. #27122 (Amos Bird).
  • Compartilha descritores de arquivo em leituras simultâneas dos mesmos arquivos. Não há diferença perceptível de desempenho no Linux. Mas o número de arquivos abertos será significativamente menor (de 10 a 100 vezes) em servidores típicos, o que facilita as operações. Veja #26214. #26768 (alexey-milovidov).
  • Melhora a latência de consultas curtas que exigem leitura de tabelas com um grande número de colunas. #26371 (Anton Popov).
  • Não cria conjuntos para índices ao analisar uma consulta. #26365 (Raúl Marín).
  • Vetoriza o SUM de tipos inteiros Nullable com representação nativa (David Manzanares, Raúl Marín). #26248 (Raúl Marín).
  • Compila expressões que envolvem colunas com tipos Enum. #26237 (Maksim Kita).
  • Compila as funções de agregação groupBitOr, groupBitAnd, groupBitXor. #26161 (Maksim Kita).
  • Melhora o uso de memória com uma previsão melhor do tamanho do bloco ao ler colunas DEFAULT vazias. Fecha #17317. #25917 (Vladimir Chebotarev).
  • Reduz o uso de memória e o número de linhas lidas em consultas com ORDER BY primary_key. #25721 (Anton Popov).
  • Habilita distributed_push_down_limit por padrão. #27104 (Azat Khuzhin).
  • Torna toTimeZone monotônico quando timeZone é um valor constante para dar suporte ao pruning de partições ao usar SQL como:. #26261 (huangzhaowei).

Melhoria

  • As funções de janela passam a ser consideradas prontas para uso geral. Removida a configuração allow_experimental_window_functions. #27184 (Alexander Kuzmenkov).
  • Melhora na compatibilidade com deslocamentos de fuso horário que não são múltiplos de um minuto. #27080 (Raúl Marín).
  • Se o descritor de arquivo na tabela File for um arquivo regular, passa a ser possível lê-lo várias vezes. Isso permite que o clickhouse-local leia da stdin várias vezes (com várias consultas SELECT ou subconsultas), se a stdin for um arquivo regular, como em clickhouse-local --query "SELECT * FROM table UNION ALL SELECT * FROM table" ... < file. Isso fecha #11124. Em coautoria com (alexey-milovidov). #25960 (BoloniniD).
  • Remova a análise duplicada de índice e evite possíveis verificações inválidas de limite durante a análise de projeção. #27742 (Amos Bird).
  • Permite passar parâmetros de consulta no corpo de requisições HTTP. #27706 (Hermano Lustosa).
  • Impedir arrayJoin em expressões de partição. #27648 (Raúl Marín).
  • Registrar o endereço IP do cliente em caso de falha na autenticação. #27514 (Misko Lee).
  • Usar bytes em vez de strings para dados binários no protocolo GRPC. #27431 (Vitaly Baranov).
  • Enviar uma resposta com mensagem de erro caso a porta HTTP não esteja configurada e o usuário tente enviar uma requisição HTTP para a porta TCP. #27385 (Braulio Valdivielso Martínez).
  • Adicionar a função _CAST para uso interno, que não preservará a nulabilidade do tipo, mas o cast não interno a preservará de acordo com a configuração cast_keep_nullable. Fecha #12636. #27382 (Kseniia Sumarokova).
  • Adiciona a configuração log_formatted_queries para registrar uma consulta formatada adicional em system.query_log. Isso é útil para a análise de consultas normalizadas, porque funções como normalizeQuery e normalizeQueryKeepNames não fazem o parsing/formatação das consultas para obter melhor desempenho. #27380 (Amos Bird).
  • Adicionadas duas configurações, max_hyperscan_regexp_length e max_hyperscan_regexp_total_length, para evitar o uso de expressões regulares muito grandes em funções relacionadas ao Hyperscan, como multiMatchAny. #27378 (Amos Bird).
  • A memória consumida pelas funções de agregação de bitmap agora é levada em consideração nos limites de memória. Isso fecha #26555. #27252 (alexey-milovidov).
  • Adiciona um cache de 10 segundos para o resolvedor de proxy do S3. #27216 (ianton-ru).
  • O mutex global foi dividido em construções individuais de regexps. Isso ajuda a evitar que a construção de regexps muito grandes bloqueie outras threads relacionadas. #27211 (Amos Bird).
  • Suporte a schema no mecanismo de banco de dados PostgreSQL. Fecha #27166. #27198 (Kseniia Sumarokova).
  • Monitorar o uso de memória no clickhouse-client. #27191 (Filatenkov Artur).
  • Tentar registrar query_kind em system.query_log mesmo quando a consulta não consegue ser iniciada. #27182 (Amos Bird).
  • Adicionadas colunas replica_is_active que mapeiam o nome da réplica para o status que indica se a réplica está ativa na tabela system.replicas. Fecha #27138. #27180 (Maksim Kita).
  • Permite passar configurações de consulta pela URI do servidor na UI da Web. #27177 (kolsys).
  • Adiciona uma nova métrica chamada MaxPushedDDLEntryID, que é o ID máximo da entrada DDL que o nó atual envia ao ZooKeeper. #27174 (Fuwang Hu).
  • Aprimorada a verificação da condição de existência e do nó de string vazia quando o clickhouse-keeper cria znode. #27125 (小路).
  • Merge JOIN lida corretamente com conjunto vazio no lado direito. #27078 (Vladimir C).
  • Agora, as funções podem ser constantes no nível do shard, o que significa que, se forem executadas no contexto de uma tabela distribuída, geram uma coluna normal; caso contrário, produzem um valor constante. As funções mais notáveis são: hostName(), tcpPort(), version(), buildId(), uptime(), etc. #27020 (Amos Bird).
  • extractAllGroupsHorizontal atualizado - o limite máximo do número de correspondências por linha pode ser definido por meio de um terceiro argumento opcional. #26961 (Vasily Nemkov).
  • Expõe estatísticas do RocksDB por meio da tabela system.rocksdb. Lê as opções do RocksDB na configuração do ClickHouse (chaves rocksdb...). OBSERVAÇÃO: o ClickHouse não depende do RocksDB; ele é apenas um dos motores de armazenamento de integração adicionais. #26821 (Azat Khuzhin).
  • Logs internos do RocksDB menos verbosos. OBSERVAÇÃO: o ClickHouse não depende do RocksDB; ele é apenas um dos motores adicionais de armazenamento para integrações. Isso encerra #26252. #26789 (alexey-milovidov).
  • A alteração das roles padrão afeta apenas as novas sessões. #26759 (Vitaly Baranov).
  • O watchdog é desativado no docker por padrão. Correção para quando ctrl+c não é tratado. #26757 (Mikhail f. Shiryaev).
  • SET PROFILE agora também aplica restrições, se elas estiverem definidas para um perfil especificado. #26730 (Vitaly Baranov).
  • Melhoria no tratamento de solicitações de KILL QUERY. #26675 (Raúl Marín).
  • A função mapPopulatesSeries oferece suporte ao tipo Map. #26663 (Ildus Kurbangaliev).
  • Corrige o excesso de tentativas (x2) de conexão com skip_unavailable_shards. #26658 (Azat Khuzhin).
  • Evita que o clickhouse-benchmark trave se a conexão falhar (ou seja, em EMFILE). #26656 (Azat Khuzhin).
  • Permitir o uso de mais threads pelo engine Kafka. #26642 (feihengye).
  • Adicionar suporte a round-robin para clickhouse-benchmark (não difere da execução regular com vários hosts/portas, exceto pelo relatório de estatísticas). #26607 (Azat Khuzhin).
  • Dicionários executáveis (executable, executable_pool) permitem a criação por meio de consulta DDL usando clickhouse-local. Fecha #22355. #26510 (Maksim Kita).
  • Definido o tipo de consulta do cliente para handlers de protocolo de compatibilidade com mysql e postgresql. #26498 (anneji-dev).
  • Aplique LIMIT aos shards para consultas como SELECT * FROM dist ORDER BY key LIMIT 10 com distributed_push_down_limit=1. Evite executar etapas de Distinct/LIMIT BY para consultas como SELECT DISTINCT shading_key FROM dist ORDER BY key. Agora, distributed_push_down_limit é respeitado pela otimização optimize_distributed_group_by_sharding_key. #26466 (Azat Khuzhin).
  • O protobuf foi atualizado para a versão 3.17.3. Os changelogs estão disponíveis em https://github.com/protocolbuffers/protobuf/releases. #26424 (Ilya Yatsishin).
  • Ativa a configuração use_hedged_requests, que permite mitigar as latências de cauda em clusters grandes. #26380 (alexey-milovidov).
  • Melhora o comportamento ao usar um host inexistente na lista de hosts permitidos do usuário. #26368 (ianton-ru).
  • Adiciona a possibilidade de definir as configurações do monitor de diretório Distributed via CREATE TABLE (ou seja, CREATE TABLE dist (key Int) Engine=Distributed(cluster, db, table) SETTINGS monitor_batch_inserts=1 e similares). #26336 (Azat Khuzhin).
  • Salvar o endereço do servidor nas URLs do histórico da UI web se ele for diferente da origem da UI web. Isso fecha #26044. #26322 (alexey-milovidov).
  • Adicionar eventos às chamadas de perfil de sleep / sleepEachRow. #26320 (Raúl Marín).
  • Permite reutilizar conexões de shards entre clusters diferentes. Isso também evita a criação de novas conexões ao usar a table function cluster. #26318 (Amos Bird).
  • Controlar o intervalo de execução da limpeza de diretórios temporários antigos por meio de um parâmetro com valor padrão. #26212. #26313 (fastio).
  • Adicionada a configuração function_range_max_elements_in_block para ajustar o limite de segurança do volume de dados gerado pela função range. Isso fecha #26303. #26305 (alexey-milovidov).
  • Verificar a função de hash na criação da tabela, e não na amostragem. Adicionar configurações para MergeTree; se alguém criar uma tabela com uma coluna de amostragem incorreta, mas a amostragem nunca for usada, desativar essas configurações para iniciar o servidor sem gerar exceção. #26256 (zhaoyu).
  • Adicionada a configuração output_format_avro_string_column_pattern para gravar as colunas String especificadas em Avro como string, em vez do padrão bytes. Implementa #22414. #26245 (Ilya Golshtein).
  • Adicionadas informações sobre o tamanho das colunas na tabela system.columns para as tabelas Log e TinyLog. Isso encerra #9001. #26241 (Nikolay Degterinsky).
  • Não gerar exceção ao consultar a tabela system.detached_parts se houver uma configuração de disco personalizada e o diretório detached não existir em alguns discos. Isso fecha #26078. #26236 (alexey-milovidov).
  • Verificação de funções não determinísticas em chaves, incluindo expressões constantes como now() e today(). Fecha #25875. Fecha #11333. #26235 (alexey-milovidov).
  • converte os tipos de dados timestamp e timestamptz para DateTime64 no mecanismo de tabela PostgreSQL. #26234 (jasine).
  • Aplique uma análise agressiva de índice IN para projeções, para que uma projeção candidata melhor possa ser selecionada. #26218 (Amos Bird).
  • Removida a palavra-chave GLOBAL de IN quando uma função escalar é passada. Em versões anteriores, se o usuário especificasse GLOBAL IN f(x), era gerada uma exceção. #26217 (Amos Bird).
  • Adiciona o ID do erro (como BAD_ARGUMENTS) às mensagens de exceção. Fecha #25862. #26172 (alexey-milovidov).
  • Corrige a saída incorreta com a opção —progress no clickhouse-local. A barra de progresso será limpa ao atingir 100%, da mesma forma que no clickhouse-client. Fecha #17484. #26128 (Kseniia Sumarokova).
  • Adiciona a configuração merge_selecting_sleep_ms. #26120 (lthaooo).
  • Remova o uso complexo do Linux AIO com leitura antecipada de um bloco e substitua-o por I/O síncrona simples com O_DIRECT. Em versões anteriores, a configuração min_bytes_to_use_direct_io pode não funcionar corretamente se max_threads for maior que um. A leitura com I/O direto (desabilitada por padrão para consultas e habilitada por padrão para grandes mesclagens) passará a funcionar de forma menos eficiente. Isso fecha #25997. #26003 (alexey-milovidov).
  • Executa flush da tabela Distributed na consulta REPLACE TABLE. Resolve #24566 - Não substitui (nem cria) a tabela na consulta [CREATE OR] REPLACE TABLE ... AS SELECT se a inserção na nova tabela falhar. Resolve #23175. #25895 (tavplubix).
  • Adiciona a coluna views a system.query_log, contendo os nomes das views (materializadas ou live) executadas pela consulta. Adiciona uma nova tabela de log (system.query_views_log) que contém informações sobre cada view executada durante uma consulta. Modifica a execução de views: quando uma exceção é lançada durante a execução de uma view, qualquer view que já tenha sido iniciada continuará em execução até ser concluída. Antes, esse era o comportamento com parallel_view_processing=true; agora, esse comportamento é sempre o mesmo. - Views dependentes agora reportam o progresso de leitura ao contexto. #25714 (Raúl Marín).
  • Realiza a drenagem assíncrona de conexões ao concluir a execução de consultas distribuídas. Foi adicionada uma nova configuração do servidor, max_threads_for_connection_collector, que especifica o número de workers para reciclar conexões em segundo plano. Se o pool estiver cheio, a conexão será drenada de forma síncrona, mas de um jeito um pouco diferente de antes: ela será drenada depois de enviarmos EOS ao cliente, a consulta será concluída com sucesso assim que receber dados suficientes, e qualquer exceção será registrada em log em vez de ser repassada ao cliente. Foi adicionada a configuração drain_timeout (3 segundos por padrão). A drenagem da conexão será interrompida ao atingir o timeout. #25674 (Amos Bird).
  • Suporte a múltiplas inclusões na configuração. É possível incluir a configuração de usuários e a de servidores remotos a partir de múltiplas fontes. Basta inserir o elemento <include /> com o atributo from_zk, from_env ou incl, e ele será substituído pelo conteúdo correspondente. #24404 (nvartolomei).
  • Corrigida a inserção de múltiplos blocos em tabela distribuída com insert_distributed_one_random_shard = 1. Este é um recurso marginal. Classificado como melhoria. #23140 (Amos Bird).
  • Suporte para chaves/valores LowCardinality e FixedString no tipo Map. #21543 (hexiaoting).
  • Ativa o recarregamento da configuração do disco local. #19526 (taiyang-li).

Correção de erro

  • Corrige alguns bugs que podem fazer as réplicas divergirem. #27808 (tavplubix).
  • Corrige um bug raro no DROP PART que pode levar ao erro Unexpected merged part intersects drop range. #27807 (alesapin).
  • Evita falhas em alguns formatos quando uma mensagem NULL (tombstone) era recebida do Kafka. Fecha #19255. #27794 (filimonov).
  • Corrige a filtragem de colunas com union distinct em subconsulta. Fecha #27578. #27689 (Kseniia Sumarokova).
  • Corrige a conversão de tipo inadequada quando funções como arrayHas são aplicadas a arrays de LowCardinality de Nullable de diferentes tipos não numéricos, como DateTime e DateTime64. Em versões anteriores, ocorria uma conversão inadequada. Na nova versão, isso gerará uma exceção. Isso fecha #26330. #27682 (alexey-milovidov).
  • Corrige a função de tabela postgresql, que resultava em conexões não fechadas. Fecha #26088. #27662 (Kseniia Sumarokova).
  • Corrigido outro caso do erro Unexpected merged part ... intersecting drop range .... #27656 (tavplubix).
  • Corrige um erro em uma coluna com alias na tabela Distributed. #27652 (Vladimir C).
  • Após definir max_memory_usage* com um valor diferente de zero, não era possível redefini-lo para 0 (ilimitado). Isso foi corrigido. #27638 (tavplubix).
  • Corrigido o underflow no valor de tempo ao construí-lo a partir de componentes. Fecha #27193. #27605 (Vasily Nemkov).
  • Corrige uma falha durante a materialização de projeção quando algumas partes contêm colunas ausentes. Isso corrige #27512. #27528 (Amos Bird).
  • corrigida a métrica BackgroundMessageBrokerSchedulePoolTask, possivelmente com erro de digitação. #27452 (Ben).
  • Corrige consultas distribuídas com zero shards e agregação. #27427 (Azat Khuzhin).
  • Compatibilidade com /proc/meminfo quando ele não contém o sufixo KB. #27361 (Mike Kot).
  • Corrige resultado incorreto em consulta com segurança em nível de linha, PREWHERE e filtro LowCardinality. Corrige #27179. #27329 (Nikolai Kochetov).
  • Corrigida a validação incorreta do ID da partição para tabelas MergeTree criadas com a sintaxe antiga. #27328 (tavplubix).
  • Corrigido o protocolo MySQL ao usar formatos paralelos (CSV / TSV). #27326 (Raúl Marín).
  • Corrige o erro Cannot find column em consultas com amostragem. Introduzido em #24574. Corrige #26522. #27301 (Nikolai Kochetov).
  • Corrige erros como Expected ColumnLowCardinality, gotUInt8 ou Bad cast from type DB::ColumnVector<char8_t> to DB::ColumnLowCardinality em algumas consultas com LowCardinality em PREWHERE. E, mais importante, corrige a falta de espaço em branco na mensagem de erro. Corrige #23515. #27298 (Nikolai Kochetov).
  • Corrigido distributed_group_by_no_merge = 2 com distributed_push_down_limit = 1 ou optimize_distributed_group_by_sharding_key = 1 com LIMIT BY e LIMIT OFFSET. #27249 (Azat Khuzhin). Essas são combinações obscuras de configurações que ninguém usa.
  • Corrige mutação travada em partições inválidas no MergeTree não replicado. #27248 (Azat Khuzhin).
  • Em caso de ambiguidade, as funções lambda dão preferência a seus argumentos em vez de outros aliases ou identificadores. #27235 (Raúl Marín).
  • Corrige a estrutura da coluna no merge join, fecha #27091. #27217 (Vladimir C).
  • Em casos raros, a tabela system.detached_parts podia conter informações incorretas para algumas partes; isso foi corrigido. Corrige #27114. #27183 (tavplubix).
  • Corrige o uso de memória não inicializada nas funções multiSearch* com array vazio, fecha #27169. #27181 (Vladimir C).
  • Corrige a sincronização no GRPCServer. Este PR corrige #27024. #27064 (Vitaly Baranov).
  • Corrigido o processamento da configuração de cache, complex_key_cache, ssd_cache, complex_key_ssd_cache. As opções allow_read_expired_keys, max_update_queue_size, update_queue_push_timeout_milliseconds, query_wait_timeout_milliseconds não eram processadas para dicionários de tipos diferentes de cache. #27032 (Maksim Kita).
  • Corrigido possível acúmulo de mutations devido a uma condição de corrida com DROP_RANGE. #27002 (Azat Khuzhin).
  • Agora, o ID da partição em consultas como ALTER TABLE ... PARTITION ID xxx é validado quanto à sua correção. Corrige #25718. #26963 (alesapin).
  • Corrige o erro “Nome de coluna desconhecido” em junções múltiplas em alguns casos, fecha #26899. #26957 (Vladimir C).
  • Corrige a leitura de TLDs personalizados (o processamento era interrompido com buffer menor ou arquivo maior). #26948 (Azat Khuzhin).
  • Corrige o erro Missing columns: 'xxx' quando a coluna DEFAULT faz referência a outra coluna não materializada sem expressão DEFAULT. Corrige #26591. #26900 (alesapin).
  • Corrigido o carregamento das chaves de dicionário no library-bridge para a fonte de dicionário library. #26834 (Kseniia Sumarokova).
  • Os parâmetros de funções agregadas podiam se perder ao aplicar alguns combinadores, causando exceções como Conversion from AggregateFunction(topKArray, Array(String)) to AggregateFunction(topKArray(10), Array(String)) is not supported. Isso foi corrigido. Corrige #26196 e #26433. #26814 (tavplubix).
  • Adicionado o valor event_time_microseconds para REMOVE_PART em system.part_log. Nas versões anteriores, ele não era definido. #26720 (Azat Khuzhin).
  • Não remova os dados ao desligar a tabela ReplicatedMergeTree, para evitar inconsistências entre dados e metadados. #26716 (nvartolomei).
  • Às vezes, SET ROLE podia não funcionar corretamente; este PR corrige isso. #26707 (Vitaly Baranov).
  • Algumas correções na formatação paralela (https://github.com/ClickHouse/ClickHouse/issues/26694). #26703 (Raúl Marín).
  • Corrige uma possível desreferenciação de nullptr em funções de janela. Isso corrige #25276. #26668 (Alexander Kuzmenkov).
  • Corrigida a conversão do arquivo de histórico do clickhouse-client (ao atualizar a partir do formato usado por uma versão do clickhouse-client de 3 anos atrás) se o arquivo estiver vazio. #26589 (Azat Khuzhin).
  • Corrige nomes incorretos das funções groupBitmapAnd/Or/Xor (que podem ser exibidos em algumas ocasiões). Isso foi corrigido. #26557 (Amos Bird).
  • Atualiza a verificação do comando chown no entrypoint do Docker do clickhouse-server. Corrige o bug em que a reinicialização de pods do Kubernetes em cluster falhava (ou atingia timeout). #26545 (Ky Li).
  • Corrige falha no desligamento do RabbitMQ caso sua inicialização não tenha sido iniciada. Fecha #26504. #26529 (Kseniia Sumarokova).
  • Corrige problemas na consulta CREATE DICTIONARY se o nome do dicionário ou do banco de dados estivesse entre aspas. Fecha #26491. #26508 (Maksim Kita).
  • Corrige a resolução de nomes de coluna que ficava incorreta após reescrever aliases de coluna. Isso corrige #26432. #26475 (Amos Bird).
  • Corrige algumas falhas do msan encontradas por fuzzing. Corrige #22517. #26428 (Nikolai Kochetov).
  • Corrige fluxo infinito de blocos não correspondidos no join em partial_merge_join, fecha #26325. #26374 (Vladimir C).
  • Corrige possível travamento ao fazer login com um usuário removido. Este PR corrige #26073. #26363 (Vitaly Baranov).
  • Corrigido optimize_distributed_group_by_sharding_key para várias colunas (causava resultado incorreto com optimize_skip_unused_shards=1/allow_nondeterministic_optimize_skip_unused_shards=1 e várias colunas na expressão da chave de sharding). #26353 (Azat Khuzhin).
  • Corrigido um bug raro na recuperação de réplica perdida que podia fazer as réplicas divergirem. #26321 (tavplubix).
  • Corrige a descompressão zstd (para importação/exportação no formato de encapsulamento zstd, não relacionado aos dados das tabelas) caso haja sequências de escape no fim do buffer interno. Fecha #26013. #26314 (Kseniia Sumarokova).
  • Corrige erro lógico no join com totals, fecha #26017. #26250 (Vladimir C).
  • Removida a quebra de linha excessiva na coluna thread_name da tabela system.stack_trace. Isso corrige #24124. #26210 (alexey-milovidov).
  • Corrige uma possível falha se mais de uma expressão untuple for usada. #26179 (alexey-milovidov).
  • Não gerar exceção em toString para Enum Nullable se o Enum não tiver valor para zero, fecha #25806. #26123 (Vladimir C).
  • Corrigido o sequence_id incorreto em pacotes do protocolo MySQL que o ClickHouse envia em caso de exceção durante a execução da consulta. Isso pode fazer com que o cliente MySQL redefina a conexão com o servidor ClickHouse. Corrige #21184. #26051 (tavplubix).
  • Correção para o caso em que cutToFirstSignificantSubdomainCustom()/cutToFirstSignificantSubdomainCustomWithWWW()/firstSignificantSubdomainCustom() retorna um tipo incorreto para constantes e, portanto, optimize_skip_unused_shards não funciona. #26041 (Azat Khuzhin).
  • Corrige um possível cabeçalho inconsistente ao usar projeção normal com prewhere. Isso corrige #26020. #26038 (Amos Bird).
  • Corrige o sharding_key de uma coluna sem função para remote() (antes, select * from remote('127.1', system.one, dummy) resultava no erro Unknown column: dummy, there are only columns .). #25824 (Azat Khuzhin).
  • Corrigidos os erros Not found column ... e Missing column ... ao selecionar em MaterializeMySQL. Corrige #23708, #24830, #25794. #25822 (tavplubix).
  • Corrigido optimize_skip_unused_shards_rewrite_in para tipos diferentes de UInt64 (pode, eventualmente, selecionar shards incorretos ou gerar Cannot infer type of an empty tuple ou Function tuple requires at least one argument). #25798 (Azat Khuzhin).

Melhoria em Compilação/Testes/Empacotamento

  • Agora, os testes stateful e stateless são executados em fusos horários aleatórios. Corrige #12439. A leitura de String como DateTime e a gravação de DateTime como String no formato Protobuf agora respeitam o fuso horário. A leitura de UInt16 como DateTime nos formatos Arrow e Parquet agora o trata como Date e depois o converte em DateTime de acordo com o fuso horário do DateTime, porque Date é serializado em Arrow e Parquet como UInt16. O GraphiteMergeTree agora respeita o fuso horário no arredondamento de valores de tempo. Corrige #5098. Autor: @alexey-milovidov. #15408 (alesapin).
  • clickhouse-test oferece suporte a testes SQL com templates Jinja2. #26579 (Vladimir C).
  • Adiciona suporte para compilação com clang-13. Isso encerra #27705. #27714 (alexey-milovidov). #27777 (Sergei Semin)
  • Adiciona opções do CMake para compilação com ou sem um conjunto específico de instruções de CPU. Isso se refere a #17469 e #27509. #27508 (alexey-milovidov).
  • Corrige a vinculação de programas auxiliares ao usar bibliotecas dinâmicas. #26958 (Raúl Marín).
  • Atualiza o RocksDB para a master de 2021-07-16. #26411 (alexey-milovidov).

Lançamento do ClickHouse v21.8, 2021-08-12

Notas de atualização

  • A nova versão usa o tipo de dados Map nas tabelas de logs do sistema (system.query_log, system.query_thread_log, system.processes, system.opentelemetry_span_log). Essas tabelas serão criadas automaticamente com os novos tipos de dados. Colunas virtuais são criadas para dar suporte a consultas antigas. Fecha #18698. #23934, #25773 (hexiaoting, sundy-li, Maksim Kita). Se você quiser fazer downgrade da versão 21.8 para versões anteriores, precisará limpar manualmente as tabelas de sistema com logs. Consulte /var/lib/clickhouse/data/system/*_log.

Novos recursos

  • Adiciona suporte a parte do padrão SQL/JSON. #24148 (l1tsolaiki, Kseniia Sumarokova).
  • Coleta métricas comuns do sistema (em system.asynchronous_metrics e system.asynchronous_metric_log) sobre uso de CPU, disco, memória, IO, rede, arquivos, média de carga, frequências da CPU, sensores térmicos, contadores EDAC e uptime do sistema; também foram adicionadas métricas sobre o jitter de escalonamento e o tempo gasto na coleta dessas métricas. Funciona de forma semelhante ao atop no ClickHouse e permite acessar dados de monitoramento mesmo sem ferramentas adicionais instaladas. Fecha #9430. #24416 (alexey-milovidov, Yegor Levankov).
  • Adiciona o engine de tabela e o engine de banco de dados MaterializedPostgreSQL. Esse engine de banco de dados permite replicar um banco de dados inteiro ou qualquer subconjunto de tabelas desse banco. #20470 (Kseniia Sumarokova).
  • Adiciona as novas funções leftPad(), rightPad(), leftPadUTF8(), rightPadUTF8(). #26075 (Vitaly Baranov).
  • Adiciona a palavra-chave FIRST ao comando ADD INDEX para permitir adicionar o índice no início da lista de índices. #25904 (xjewer).
  • Introduz a tabela system.data_skipping_indices, que contém informações sobre os índices de data skipping existentes. Fecha #7659. #25693 (Dmitry Novik).
  • Adiciona as funções bin/unbin. #25609 (zhaoyu).
  • Passa a oferecer suporte aos tipos Map, UInt128, Int128, UInt256 e Int256 nas funções mapAdd e mapSubtract. #25596 (Ildus Kurbangaliev).
  • Passa a oferecer suporte à expressão DISTINCT ON (columns), fecha #25404. #25589 (Zijie Lu).
  • Adiciona a capacidade de redefinir uma configuração personalizada para o valor padrão e removê-la dos metadados da tabela. Isso permite reverter a alteração sem precisar conhecer o valor padrão do sistema/configuração. Fecha #14449. #17769 (xjewer).
  • Renderiza pipelines como gráficos na Web UI se a consulta EXPLAIN PIPELINE graph = 1 for enviada. #26067 (alexey-milovidov).

Melhorias de desempenho

  • Compila funções de agregação. Use a opção compile_aggregate_expressions para habilitá-la. #24789 (Maksim Kita).
  • Melhora a latência de consultas curtas que exigem leitura de tabelas com muitas colunas. #26371 (Anton Popov).

Melhorias

  • Use o tipo de dados Map nas tabelas de logs do sistema (system.query_log, system.query_thread_log, system.processes, system.opentelemetry_span_log). Essas tabelas serão criadas automaticamente com os novos tipos de dados. São criadas colunas virtuais para dar suporte às consultas antigas. Fecha #18698. #23934, #25773 (hexiaoting, sundy-li, Maksim Kita).
  • Para um dicionário com uma chave complexa contendo apenas um atributo, permitir não envolver a expressão de chave em uma tupla para as funções dictGet, dictHas. #26130 (Maksim Kita).
  • Implementar a função bin/hex a partir dos estados de AggregateFunction. #26094 (zhaoyu).
  • Suporte a argumentos do tipo UUID nas funções empty e notEmpty. Um UUID é considerado vazio se for composto apenas por zeros (UUID nulo). Fecha #3446. #25974 (zhaoyu).
  • Adicionado suporte a SET SQL_SELECT_LIMIT no protocolo MySQL. Fecha #17115. #25972 (Kseniia Sumarokova).
  • Mais instrumentação para interação de rede: adiciona contadores para bytes recebidos/enviados; adiciona gauges para operações de recebimento/envio. Adicionada a documentação que faltava. Fecha #5897. #25962 (alexey-milovidov).
  • Adicionada a configuração optimize_move_to_prewhere_if_final. Se a consulta tiver FINAL, a otimização move_to_prewhere será habilitada somente se optimize_move_to_prewhere e optimize_move_to_prewhere_if_final estiverem habilitadas. Fecha #8684. #25940 (Kseniia Sumarokova).
  • Permitir identificadores complexos entre aspas para tabelas em JOIN. Fecha #17861. #25924 (alexey-milovidov).
  • Adiciona suporte a componentes Unicode (por exemplo, chinês, cirílico) em tipos de dados Nested. Fecha #25594. #25923 (alexey-milovidov).
  • Permite que as funções quantiles* funcionem com aggregate_functions_null_for_empty. Fecha #25892. #25919 (alexey-milovidov).
  • Permite que os parâmetros de funções agregadas paramétricas sejam expressões constantes arbitrárias (por exemplo, 1 + 2), e não apenas valores literais. Também permite usar parâmetros de consulta (em consultas parametrizadas como {param:UInt8}) dentro de funções agregadas paramétricas. Fecha #11607. #25910 (alexey-milovidov).
  • Lança corretamente a exceção ao tentar interpretar um Date inválido. Fecha #6481. #25909 (alexey-milovidov).
  • Suporte a múltiplos includes na configuração. É possível incluir a configuração de usuários e a configuração de servidores remotos a partir de várias fontes. Basta adicionar o elemento <include /> com o atributo from_zk, from_env ou incl, e ele será substituído pelo valor correspondente. #24404 (nvartolomei).
  • Suporte a consultas com uma coluna chamada "null" (deve ser especificada entre acentos graves ou aspas duplas) e ON CLUSTER. Fecha #24035. #25907 (alexey-milovidov).
  • Suporte para LowCardinality, Decimal e UUID no JSONExtract. Fecha #24606. #25900 (Kseniia Sumarokova).
  • Converta o arquivo de histórico do formato readline para o formato replxx. #25888 (Azat Khuzhin).
  • Corrige um problema que pode resultar em partes sobrepostas após DROP PART ou a exclusão em segundo plano de uma parte vazia. #25884 (alesapin).
  • Melhor tratamento para partes perdidas em tabelas ReplicatedMergeTree. Corrige inconsistências raras na ReplicationQueue. Corrige #10368. #25820 (alesapin).
  • Permite iniciar o clickhouse-client com um diretório de trabalho ilegível. #25817 (ianton-ru).
  • Corrigido o erro “No available columns” no armazenamento Merge. #25801 (Azat Khuzhin).
  • O mecanismo MySQL agora oferece suporte à troca de comentários de colunas entre o MySQL e o ClickHouse. #25795 (Storozhuk Kostiantyn).
  • Corrige o comportamento inconsistente de constante no GROUP BY em conjunto vazio. Fecha #6842. #25786 (Kseniia Sumarokova).
  • Cancela merges já em execução na partição ao usar DROP PARTITION e TRUNCATE no ReplicatedMergeTree. Resolve #17151. #25684 (tavplubix).
  • Adicionado suporte ao tipo de dados ENUM` para o MaterializeMySQL. #25676 (Storozhuk Kostiantyn).
  • Adiciona suporte a colunas materializadas e com alias em JOIN, fecha #13274. #25634 (Vladimir C).
  • Foi corrigida uma possível condição de corrida lógica entre ALTER TABLE ... DETACH e merges em segundo plano. #25605 (Azat Khuzhin).
  • Faz com que a métrica NetworkReceiveElapsedMicroseconds passe a incluir corretamente o tempo gasto aguardando dados do cliente para INSERT. Fecha #9958. #25602 (alexey-milovidov).
  • Adiciona suporte a TRUNCATE TABLE para S3 e HDFS. Resolve #25530. #25550 (Kseniia Sumarokova).
  • Suporte ao recarregamento dinâmico da configuração para alterar o número de threads no pool de execução de tarefas em segundo plano (merges, mutações, fetches). #25548 (Nikita Mikhaylov).
  • Permite extrair um elemento que não seja string como string usando JSONExtract. Isso é para #25414. #25452 (Amos Bird).
  • Suporte a expressões regulares no argumento Database de StorageMerge. Fecha #776. #25064 (flynn).
  • UI da web: se o valor parecer uma URL, gerar automaticamente um link. #25965 (alexey-milovidov).
  • Faz sudo service clickhouse-server start funcionar em sistemas com systemd, como o CentOS 8. Fecha #14298. Fecha #17799. #25921 (alexey-milovidov).

Correções de bugs

  • Corrige o SET ROLE incorreto em alguns casos. #26707 (Vitaly Baranov).
  • Corrigida uma possível desreferenciação de nullptr em funções de janela. Corrigido #25276. #26668 (Alexander Kuzmenkov).
  • Corrigidos os nomes incorretos das funções groupBitmapAnd/Or/Xor. Corrige #26557 (Amos Bird).
  • Corrige falha no desligamento do RabbitMQ caso a configuração do RabbitMQ não tenha sido iniciada. Fecha #26504. #26529 (Kseniia Sumarokova).
  • Corrige problemas na consulta CREATE DICTIONARY caso o nome do dicionário ou do banco de dados estivesse entre aspas. Fecha #26491. #26508 (Maksim Kita).
  • Corrige a falha na resolução de nomes após a reescrita de aliases de coluna. Corrige #26432. #26475 (Amos Bird).
  • Corrige um fluxo infinito de blocos sem junção em partial_merge_join; fecha #26325. #26374 (Vladimir C).
  • Corrige um possível travamento ao fazer login com um usuário removido. Corrige #26073. #26363 (Vitaly Baranov).
  • Corrige optimize_distributed_group_by_sharding_key para várias colunas (leva a um resultado incorreto com optimize_skip_unused_shards=1/allow_nondeterministic_optimize_skip_unused_shards=1 e várias colunas na expressão da chave de sharding). #26353 (Azat Khuzhin).
  • CAST de Date para DateTime (ou DateTime64) não estava usando o fuso horário do tipo DateTime. Isso também pode afetar a comparação entre Date e DateTime. A inferência do tipo comum para Date e DateTime também não estava usando o fuso horário correspondente. Isso afetava os resultados da função if e a construção de arrays. Fecha #24128. #24129 (Maksim Kita).
  • Corrigido um bug raro na recuperação de uma réplica perdida que pode fazer com que as réplicas fiquem divergentes. #26321 (tavplubix).
  • Corrige a descompressão com zstd caso haja sequências de escape no final do buffer interno. Fecha #26013. #26314 (Kseniia Sumarokova).
  • Corrige erro lógico em join com totals, resolve #26017. #26250 (Vladimir C).
  • Removida a quebra de linha excessiva na coluna thread_name da tabela system.stack_trace. Corrige #24124. #26210 (alexey-milovidov).
  • Corrige o joinGet com colunas LowCardinality, fecha #25993. #26118 (Vladimir C).
  • Corrige uma possível queda em pointInPolygon se a configuração validate_polygons estiver desativada. #26113 (alexey-milovidov).
  • Corrigida a exceção gerada ao iterar sobre um diretório remoto inexistente. #26087 (ianton-ru).
  • Corrige um travamento raro do servidor causado por abort no cliente ZooKeeper. Corrige #25813. #26079 (alesapin).
  • Corrige a estimativa incorreta da quantidade de threads para o join RIGHT com subconsulta em alguns casos. Fecha #24075. #26052 (Vladimir C).
  • Corrigido o sequence_id incorreto nos pacotes do protocolo MySQL que o ClickHouse envia em caso de exceção durante a execução da consulta. Isso podia fazer com que o cliente MySQL redefinisse a conexão com o servidor ClickHouse. Corrige #21184. #26051 (tavplubix).
  • Corrige possível incompatibilidade no cabeçalho ao usar projeção normal com PREWHERE. Corrige #26020. #26038 (Amos Bird).
  • Corrigida a formatação para JSON do tipo Map com chaves inteiras. #25982 (Anton Popov).
  • Corrigido um possível deadlock durante o desenrolamento da pilha no profiler de consultas. Corrige #25968. #25970 (Maksim Kita).
  • Corrige travamento ao chamar dictGet() com argumentos inválidos. #25913 (Vitaly Baranov).
  • Corrigida a autenticação scram-sha-256 para os motores do PostgreSQL. Fecha #24516. #25906 (Kseniia Sumarokova).
  • Corrige um backoff excessivamente longo em tarefas em segundo plano quando o pool de segundo plano está cheio. Corrige #25836. #25893 (alesapin).
  • Corrigido o tratamento de exceções em ARM com tamanho de página diferente do padrão. Corrige #25512, #25044, #24901, #23183, #20221, #19703, #19028, #18391, #18121, #17994, #12483. #25854 (Maksim Kita).
  • Corrigido sharding&#95;key de coluna sem função para remote() (antes, select * from remote('127.1', system.one, dummy) resultava no erro Unknown column: dummy, there are only columns .). #25824 (Azat Khuzhin).
  • Corrigidos os erros Not found column ... e Missing column ... ao fazer consultas em MaterializeMySQL. Corrige #23708, #24830, #25794. #25822 (tavplubix).
  • Corrige optimize_skip_unused_shards_rewrite_in para tipos diferentes de UInt64 (pode acabar selecionando shards incorretos ou gerar Cannot infer type of an empty tuple ou Function tuple requires at least one argument). #25798 (Azat Khuzhin).
  • Corrige um bug raro na consulta DROP PART em tabelas ReplicatedMergeTree, que pode levar à mensagem de erro Unexpected merged part intersecting drop range. #25783 (alesapin).
  • Corrigido um bug no TTL com expressão GROUP BY que deixava de executar o TTL após a primeira execução na parte. #25743 (alesapin).
  • Permitir ao StorageMerge acessar tabelas com aliases. Fecha #6051. #25694 (Kseniia Sumarokova).
  • Corrige lentidão no dict join em alguns casos, fecha #24209. #25618 (Vladimir C).
  • Corrigido o ALTER MODIFY COLUMN para colunas que participam de expressões TTL. #25554 (Anton Popov).
  • Corrige a asserção em PREWHERE com tipo diferente de UInt8, fecha #19589. #25484 (Vladimir C).
  • Corrige uma falha do msan detectada por fuzzing. Corrige #22517. #26428 (Nikolai Kochetov).
  • Atualiza a verificação do comando chown no entrypoint do Docker clickhouse-server. Isso corrige o erro ‘falha ao reiniciar o pod do cluster (ou timeout)’ no Kubernetes. #26545 (Ky Li).

Lançamento do ClickHouse v21.7, 2021-07-09

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

  • Melhorado o desempenho de consultas com grandes conjuntos definidos explicitamente. Foi adicionada a configuração de compatibilidade legacy_column_name_of_tuple_literal. Faz sentido defini-la como true ao realizar uma atualização gradual do cluster de uma versão anterior à 21.7 para qualquer versão superior. Caso contrário, consultas distribuídas com conjuntos definidos explicitamente na cláusula IN podem falhar durante a atualização. #25371 (Anton Popov).
  • Alteração incompatível com versões anteriores e posteriores no tamanho máximo do buffer no clickhouse-keeper (uma alternativa experimental ao ZooKeeper). É melhor fazer isso agora (antes de entrar em produção) do que depois. #25421 (alesapin).

Novo recurso

  • Suporte à configuração em formato YAML como alternativa ao XML. Isso fecha #3607. #21858 (BoloniniD).
  • Fornece uma forma de restaurar uma tabela replicada quando os dados estão (possivelmente) presentes, mas os metadados do ZooKeeper foram perdidos. Resolve #13458. #13652 (Mike Kot).
  • Suporte a structs e maps em Arrow/Parquet/ORC e a dicionários nos formatos de entrada/saída Arrow. Introduz a nova configuração output_format_arrow_low_cardinality_as_dictionary. #24341 (Kruglov Pavel).
  • Adicionado suporte ao tipo Array em dicionários. #25119 (Maksim Kita).
  • Adicionada a função bitPositionsToArray. Fecha #23792. Autor [Kevin Wan] (@MaxWk). #25394 (Maksim Kita).
  • Adicionada a função dateName para retornar nomes como ‘Friday’ ou ‘April’. Autor [Daniil Kondratyev] (@dankondr). #25372 (Maksim Kita).
  • Adicionada a função toJSONString para serializar colunas em suas representações JSON. #25164 (Amos Bird).
  • Agora, query_log tem duas novas colunas: initial_query_start_time, initial_query_start_time_microsecond, que registram o horário de início de uma consulta distribuída, se houver. #25022 (Amos Bird).
  • Adicionada a função de agregação segmentLengthSum. #24250 (flynn).
  • Adicionada uma nova configuração booleana prefer_global_in_and_join, que faz com que todos os IN/JOIN sejam, por padrão, GLOBAL IN/JOIN. #23434 (Amos Bird).
  • Suporte a consultas ALTER DELETE para o mecanismo de tabela Join. #23260 (foolchi).
  • Adicionada a função de agregação quantileBFloat16, bem como as correspondentes quantilesBFloat16 e medianBFloat16. É um estimador de quantil muito simples e rápido, com erro relativo não superior a 0.390625%. Isso fecha #16641. #23204 (Ivan Novitskiy).
  • Implementada a função sequenceNextNode(), útil para flow analysis. #19766 (achimbab).

Recurso experimental

  • Adicionado suporte a um sistema de arquivos virtual sobre HDFS. #11058 (overshov) (Kseniia Sumarokova).
  • Agora, o clickhouse-keeper (uma alternativa experimental ao ZooKeeper) oferece suporte a ACLs digest semelhantes às do ZooKeeper. #24448 (alesapin).

Melhoria de desempenho

  • Adicionada uma otimização que converte algumas funções em leitura de subcolunas para reduzir a quantidade de dados lidos. Por exemplo, a instrução col IS NULL é convertida em leitura da subcoluna col.null. A otimização pode ser habilitada pela configuração optimize_functions_to_subcolumns, que atualmente fica desativada por padrão. #24406 (Anton Popov).
  • Reescreve mais colunas como possíveis expressões de alias. Isso pode permitir otimizações melhores, como projeções. #24405 (Amos Bird).
  • Um índice do tipo bloom_filter pode ser usado em expressões com a função hasAny e arrays constantes. Isso fecha: #24291. #24900 (Vasily Nemkov).
  • Adicionado backoff exponencial para reagendar a tentativa de leitura caso as filas do RabbitMQ estejam vazias. (O ClickHouse oferece suporte à importação de dados do RabbitMQ). Fecha #24340. #24415 (Kseniia Sumarokova).

Melhoria

  • Permite limitar a largura de banda da replicação. Adiciona duas configurações do Replicated*MergeTree: max_replicated_fetches_network_bandwidth e max_replicated_sends_network_bandwidth, que permitem limitar a velocidade máxima de fetches/envios replicados para a tabela. Adiciona duas configurações para todo o servidor (no perfil de usuário default): max_replicated_fetches_network_bandwidth_for_server e max_replicated_sends_network_bandwidth_for_server, que limitam a velocidade máxima da replicação para todas as tabelas. As configurações não são aplicadas com total precisão. Desativado por padrão. Corrige #1821. #24573 (alesapin).
  • Restrições de recursos e isolamento para bridges ODBC e Library. Use um grupo e um usuário clickhouse-bridge separados para os processos de bridge. Defina oom&#95;score&#95;adj para que as bridges sejam os primeiros alvos do OOM killer. Defina o RSS máximo como 1 GiB. Fecha #23861. #25280 (Kseniia Sumarokova).
  • Adiciona um link simbólico independente clickhouse-keeper ao binário principal clickhouse. Agora é possível executar a coordenação sem o servidor ClickHouse principal. #24059 (alesapin).
  • Usa configurações globais para consultas a VIEW. Foi corrigido o comportamento quando consultas a VIEW usam configurações locais, o que levava a erros se as configurações em CREATE VIEW e SELECT fossem diferentes. A partir de agora, VIEW não usará essas configurações modificadas, mas você ainda pode passar configurações adicionais na seção SETTINGS da consulta CREATE VIEW. Fecha #20551. #24095 (Vladimir).
  • Na inicialização do servidor, partes com ID de partição incorreto nunca eram removidas, mas sempre eram desanexadas. #25070. #25166 (Nikolai Kochetov).
  • Aumentado o tamanho do pool de agendamento em segundo plano para 128 (configuração background_schedule_pool_size). Isso ajuda a evitar que a fila de replicação fique travada em conexões lentas com o ZooKeeper. #25072 (alesapin).
  • Adiciona a configuração do MergeTree max_parts_to_merge_at_once, que limita o número de partes que podem ser mescladas simultaneamente em segundo plano. Não afeta a consulta OPTIMIZE FINAL. Corrige #1820. #24496 (alesapin).
  • Permitir o uso do operador NOT IN na poda de partições. #24894 (Amos Bird).
  • Passa a reconhecer como locais endereços IPv4 como 127.0.1.1. Isso é controverso e encerra #23504. Michael Filimonov testará essa funcionalidade. #24316 (alexey-milovidov).
  • O banco de dados ClickHouse criado com MaterializeMySQL (é um recurso experimental) agora contém todos os comentários das colunas do banco de dados MySQL que foi materializado. #25199 (Storozhuk Kostiantyn).
  • Adicionadas configurações (connection_auto_close/connection_max_tries/connection_pool_size) no mecanismo de armazenamento MySQL. #24146 (Azat Khuzhin).
  • Melhora no tempo de inicialização do engine Distributed. #25663 (Azat Khuzhin).
  • Melhoria nas tabelas Distributed. Remoção das réplicas de dirname para internal_replication=true (permite INSERT em Distributed com cluster a partir de qualquer número de réplicas; antes, apenas 15 réplicas eram suportadas, e qualquer quantidade acima disso falhava com ENAMETOOLONG ao criar o diretório para blocos assíncronos). #25513 (Azat Khuzhin).
  • Adicionado suporte ao tipo Interval em LowCardinality. Isso é necessário para os valores intermediários de algumas expressões. Fecha #21730. #25410 (Vladimir).
  • Adicionado o operador == às condições de tempo nas funções sequenceMatch e sequenceCount. Por exemplo: sequenceMatch(’(?1)(?t==1)(?2)’)(time, data = 1, data = 2). #25299 (Christophe Kalenzaga).
  • Adicionadas as configurações http_max_fields, http_max_field_name_size, http_max_field_value_size. #25296 (Ivan).
  • Adicionado suporte à função if com tipos Decimal e Int em seus ramos. Isso fecha #20549. Isso fecha #10142. #25283 (alexey-milovidov).
  • Atualiza o prompt no clickhouse-client e exibe uma mensagem ao reconectar. Isso fecha #10577. #25281 (alexey-milovidov).
  • Corrigido o rastreamento de memória na função de agregação topK. Isso fecha #25259. #25260 (alexey-milovidov).
  • Corrige topLevelDomain para nomes de host IDN (ou seja, example.рф); antes, retornava uma string vazia para esses hosts. #25103 (Azat Khuzhin).
  • Detectar a versão do kernel do Linux em tempo de execução (para que epoll aninhado funcione, isso é necessário para async_socket_for_remote/use_hedged_requests; caso contrário, consultas remotas podem ficar travadas). #25067 (Azat Khuzhin).
  • Para consulta distribuída, quando optimize_skip_unused_shards=1, permite ignorar o shard com uma condição como (chave de sharding) IN (tupla de um elemento). (Tuplas com muitos elementos já eram compatíveis. Tuple com um único elemento não funcionava porque é interpretada como literal). #24930 (Amos Bird).
  • Mensagens de log de erros do S3 aprimoradas, sem mais espaços em branco duplos quando chaves e buckets estão vazios. #24897 (Vladimir Chebotarev).
  • Algumas consultas exigem análise semântica em múltiplas etapas. Tente reutilizar os conjuntos já criados para IN nesse caso. #24874 (Amos Bird).
  • Passa a respeitar max_distributed_connections para insert_distributed_sync (caso contrário, em clusters muito grandes e com inserção síncrona, pode esgotar max_thread_pool_size). #24754 (Azat Khuzhin).
  • Evite ocultar erros como Limit for rows or bytes to read exceeded em subconsultas escalares. #24545 (nvartolomei).
  • Deixe o parser de String para Int mais rigoroso, para que toInt64('+') lance uma exceção. #24475 (Amos Bird).
  • Se SSD_CACHE for criado com uma consulta DDL, ele poderá ser criado apenas dentro do diretório user_files. #24466 (Maksim Kita).
  • Suporte no PostgreSQL para especificar um schema não padrão para consultas de insert. Fecha #24149. #24413 (Kseniia Sumarokova).
  • Corrige a resolução de endereços IPv6 (isto é, corrige select * from remote('[::1]', system.one)). #24319 (Azat Khuzhin).
  • Corrige os espaços em branco à direita na cláusula FROM com subconsultas no modo multilinha e também altera ligeiramente a saída das consultas para deixá-la mais amigável para humanos. #24151 (Azat Khuzhin).
  • Melhoria para tabelas distribuídas. Adicionada a capacidade de dividir o batch distribuído em caso de falha (ou seja, devido a limites de memória ou corrupção), com distributed_directory_monitor_split_batch_on_failure (desativado por padrão). #23864 (Azat Khuzhin).
  • Resolve conflitos de nomes de colunas na engine de tabela Join. Fecha #20309. #23769 (Vladimir).
  • Exibe o progresso do mecanismo de tabela File no clickhouse-local e da consulta INSERT no clickhouse-client quando os dados são passados via stdin. Fecha #18209. #23656 (Kseniia Sumarokova).
  • Correções de bugs e melhorias no clickhouse-copier. Permite copiar tabelas com esquemas diferentes (mas compatíveis). Fecha #9159. Adicionado um teste para copiar ReplacingMergeTree. Fecha #22711. Suporte a TTL em colunas e índices de skipping de dados. Ele simplesmente os remove para criar a tabela Distributed interna (a tabela subjacente terá TTL e índices de skipping). Fecha #19384. Permite copiar colunas MATERIALIZED e ALIAS. Há casos em que isso pode ser útil (por exemplo, se essa coluna estiver na PRIMARY KEY). Agora isso pode ser permitido definindo a propriedade allow_to_copy_alias_and_materialized_columns como true na configuração da tarefa. Fecha #9177. Fecha [#11007] (https://github.com/ClickHouse/ClickHouse/issues/11007). Fecha #9514. Adicionada a propriedade allow_to_drop_target_partitions na configuração da tarefa para remover a partição da tabela original antes de mover as tabelas auxiliares. Fecha #20957. Remove a consulta OPTIMIZE DEDUPLICATE. Esse hack era necessário porque ALTER TABLE MOVE PARTITION era tentado novamente muitas vezes, e tabelas MergeTree simples não têm desduplicação. Fecha #17966. Grava o progresso no nó do ZooKeeper no caminho task_path + /status em formato JSON. Fecha #20955. Suporte a ReplicatedTables sem argumentos. Fecha #24834 .#23518 (Nikita Mikhaylov).
  • Adicionado sleep com backoff entre as tentativas de leitura do S3. #23461 (Vladimir Chebotarev).
  • Passa a respeitar insert_allow_materialized_columns (permite colunas materializadas) para INSERT na tabela Distributed. #23349 (Azat Khuzhin).
  • Adicionada a capacidade de aplicar o LIMIT remotamente em consultas distribuídas. #23027 (Azat Khuzhin).
  • Corrigida a replicação zero-copy com vários volumes S3 (corrige #22679). #22864 (ianton-ru).
  • Resolver o número real da porta atribuída quando um usuário solicita ao sistema operacional qualquer porta disponível, para exibi-lo na mensagem de log. #25569 (bnaecker).
  • Corrigido o caso em que, às vezes, a conversão de arrays do Postgres resultava no tipo de dado String, e não em um array n-dimensional, porque attndims funciona incorretamente em alguns casos. Fecha #24804. #25538 (Kseniia Sumarokova).
  • Corrigida a conversão de DateTime com fuso horário para MySQL, PostgreSQL e ODBC. Fecha #5057. #25528 (Kseniia Sumarokova).
  • Diferenciar KILL MUTATION entre diferentes tabelas (corrige o erro inesperado Cancelled mutating parts). #25025 (Azat Khuzhin).
  • Permite declarar um disco S3 na raiz do bucket (o filesystem virtual do S3 é um recurso experimental em desenvolvimento). #24898 (Vladimir Chebotarev).
  • Habilita a leitura de subcolunas (por exemplo, componentes de Tuples) em tabelas distribuídas. #24472 (Anton Popov).
  • Um recurso do protocolo de compatibilidade com MySQL: fazer com que a função user retorne a saída correta. Fecha #25697. #25697 (sundyli).

Correção de bug

  • Melhoria na compatibilidade com versões anteriores. Usa a versão antiga da função de módulo quando ela é usada na chave de partição. Fecha #23508. #24157 (Kseniia Sumarokova).
  • Corrige um bug extremamente raro em servidores com pouca memória que pode impedir a execução de merges sem reinicialização. Possivelmente corrige #24603. #24872 (alesapin).
  • Corrige o erro extremamente raro Tagging already tagged part na fila de replicação durante operações simultâneas de alter move/replace partition. Possivelmente corrige #22142. #24961 (alesapin).
  • Corrige um possível travamento ao calcular estados de funções de agregação por meio da agregação de estados de funções de agregação de outras funções de agregação (não é um caso de uso prático). Consulte #24523. #25015 (alexey-milovidov).
  • Foi corrigido o comportamento quando a consulta SYSTEM RESTART REPLICA ou SYSTEM SYNC REPLICA não é concluída. Isso foi detectado em um servidor com uma quantidade extremamente baixa de RAM. #24457 (Nikita Mikhaylov).
  • Corrige um bug que pode fazer com que o cliente do ZooKeeper fique bloqueado dentro do clickhouse-server. #24721 (alesapin).
  • Se a conexão com o ZooKeeper fosse perdida e a réplica fosse clonada após o restabelecimento da conexão, sua fila de replicação poderia conter entradas desatualizadas. Corrigida uma falha de asserção quando a fila de replicação contém partes virtuais sobrepostas. Isso pode acontecer raramente se alguma parte de dados for perdida. Passa a registrar um erro no log em vez de encerrar. #24777 (tavplubix).
  • Corrige a perda da condição WHERE na otimização de push-down de expressões do plano de consulta (com query_plan_filter_push_down = 1 definido por padrão). Corrige #25368. #25370 (Nikolai Kochetov).
  • Corrige um bug que pode levar a partes sobrepostas após merges com TTL: Part all_40_40_0 is covered by all_40_40_1 but should be merged into all_40_41_1. This shouldn't happen often.. #25549 (alesapin).
  • Ao perder a conexão com o ZooKeeper, a tabela ReplicatedMergeTree podia aguardar a conclusão das operações em segundo plano antes de tentar se reconectar. Isso foi corrigido; agora, as operações em segundo plano são interrompidas à força. #25306 (tavplubix).
  • Corrige o erro Key expression contains comparison between inconvertible types em consultas com ARRAY JOIN quando um array é usado na chave primária. Corrige #8247. #25546 (Anton Popov).
  • Corrige totais incorretos em consultas com WITH TOTALS e WITH FILL. Corrige #20872. #25539 (Anton Popov).
  • Corrige uma condição de corrida ao consultar system.clusters enquanto a configuração do cluster é recarregada simultaneamente. #25737 (Amos Bird).
  • Corrigido o erro No such file or directory ao mover uma tabela Distributed entre bancos de dados. Corrige #24971. #25667 (tavplubix).
  • REPLACE PARTITION pode ser ignorado em casos raros se a partição de origem estiver vazia. Corrigido. Corrige #24869. #25665 (tavplubix).
  • Corrigido um bug no engine de banco de dados Replicated que, em casos raros, poderia fazer com que uma réplica deixasse de executar uma consulta DDL enfileirada. #24805 (tavplubix).
  • Corrige uma desreferenciação de ponteiro nulo em EXPLAIN AST sem consulta. #25631 (Nikolai Kochetov).
  • Corrige a espera pela remoção automática de partes vazias. Isso poderia levar à ocupação completa do background pool e ao travamento da replicação. #23315 (Anton Popov).
  • Corrige a restauração de uma tabela armazenada no sistema de arquivos virtual do S3 (é um recurso experimental, ainda não pronto para produção). #25601 (ianton-ru).
  • Corrigida a desreferenciação de nullptr no formato Arrow ao usar Decimal256. Adicionado suporte a Decimal256 no formato Arrow. #25531 (Kruglov Pavel).
  • Corrige o excesso de underscores antes dos nomes dos arquivos de configuração pré-processados. #25431 (Vitaly Baranov).
  • Uma correção para a ferramenta clickhouse-copier: corrige uma falha de segmentação quando sharding_key está ausente na configuração da tarefa do copier. #25419 (Nikita Mikhaylov).
  • Corrige o transformador de coluna REPLACE quando usado em DDL, colocando corretamente a consulta formatada entre aspas. Isso corrige #23925. #25391 (Amos Bird).
  • Corrige a possibilidade de comportamento não determinístico na função quantileDeterministic e em funções semelhantes. Isso fecha #20480. #25313 (alexey-milovidov).
  • Oferece suporte a SimpleAggregateFunction(LowCardinality) para SummingMergeTree. Corrige #25134. #25300 (Nikolai Kochetov).
  • Corrigido erro lógico com a mensagem de exceção “Cannot sum Array/Tuple in min/maxMap”. #25298 (Kruglov Pavel).
  • Corrige o erro Bad cast from type DB::ColumnLowCardinality to DB::ColumnVector<char8_t> em consultas em que o argumento LowCardinality foi usado com IN (esse bug surgiu na versão 21.6). Corrige #25187. #25290 (Nikolai Kochetov).
  • Corrige o comportamento incorreto de joinGetOrNull com colunas não Nullable. Isso corrige #24261. #25288 (Amos Bird).
  • Corrige o comportamento incorreto e o relatório do UBSan em inteiros grandes. Em versões anteriores, CAST(1e19 AS UInt128) retornava zero. #25279 (alexey-milovidov).
  • Corrigido um erro que ocorria ao inserir um subconjunto de colunas no formato CSVWithNames. Corrige #25129. #25169 (Nikita Mikhaylov).
  • Não use a projeção da tabela para SELECT com FINAL. Isso ainda não tem suporte. #25163 (Amos Bird).
  • Corrige uma possível perda de partes após a atualização até a versão 21.5, caso a tabela usasse UUID na chave de partição. (Não é recomendado usar UUID na chave de partição). Corrige #25070. #25127 (Nikolai Kochetov).
  • Corrige uma falha em consulta com cross join e joined_subquery_requires_alias = 0. Corrige #24011. #25082 (Nikolai Kochetov).
  • Corrige um erro com mapas constantes na função mapContains que causava o erro empty column was returned by function mapContains. Fecha #25077. #25080 (Kruglov Pavel).
  • Remove a possibilidade de criar tabelas com colunas que se referenciam, como a UInt32 ALIAS a + 1 ou b UInt32 MATERIALIZED b. Corrige #24910, #24292. #25059 (alesapin).
  • Corrige resultado incorreto ao usar uma projeção agregada com uma chave GROUP BY não vazia para executar uma consulta com GROUP BY por uma chave vazia. #25055 (Amos Bird).
  • Corrige a serialização de mensagens aninhadas divididas no formato Protobuf. Este PR corrige #24647. #25000 (Vitaly Baranov).
  • Corrigidas as configurações de LIMIT/OFFSET para consultas distribuídas (ignoradas nos nós remotos). #24940 (Azat Khuzhin).
  • Corrigido um possível heap-buffer-overflow no formato Arrow. #24922 (Kruglov Pavel).
  • Corrigido um possível erro ‘Cannot read from istream at offset 0’ ao ler um arquivo do DiskS3 (o sistema de arquivos virtual S3 é um recurso experimental em desenvolvimento e não deve ser usado em produção). #24885 (Pavel Kovalenko).
  • Corrigida a exceção “Missing columns” ao fazer join em visão materializada Distributed. #24870 (Azat Khuzhin).
  • Permite valores NULL no protocolo de compatibilidade do PostgreSQL. Fecha #22622. #24857 (Kseniia Sumarokova).
  • Corrigido o bug em que a exceção Mutation was killed podia ser retornada ao cliente ao aguardar a mutação, quando ela ainda não havia sido carregada na memória. #24809 (alesapin).
  • Corrigido bug na desserialização do estado do gerador aleatório, que poderia fazer com que alguns tipos de dados, como AggregateFunction(groupArraySample(N), T)), se comportassem de maneira não determinística. #24538 (tavplubix).
  • Proibir a criação de uniqXXXXStates a partir de outros estados de agregação. #24523 (Raúl Marín). Depois, voltar a permitir isso ao eliminar de fato a causa raiz do problema relacionado. (alexey-milovidov).
  • Corrigido o uso de tuplas em consultas CREATE .. AS SELECT. #24464 (Anton Popov).
  • Corrige o cálculo do total de bytes na tabela Buffer. Na versão atual do ClickHouse, o contador total_writes.bytes diminui excessivamente durante o flush do buffer. Isso leva a estouro do contador, e totalBytes retorna algo em torno de 17,44 EB algum tempo após o flush. #24450 (DimasKovas).
  • Corrige informações incorretas sobre a monotonicidade da função toWeek. Isso corrige #24422. Esse bug foi introduzido em https://github.com/ClickHouse/ClickHouse/pull/5212 e foi revelado mais tarde por um eliminador de partições mais inteligente. #24446 (Amos Bird).
  • Quando a autenticação de usuários é gerenciada por LDAP. Corrigido um possível deadlock que pode ocorrer durante o (re)mapeamento de funções do LDAP, quando um grupo do LDAP é mapeado para uma função local inexistente. #24431 (Denis Glazachev).
  • Na mensagem “multipart/form-data”, considere o CRLF que precede o boundary como parte dele. Corrige #23905. #24399 (Ivan).
  • Corrige o drop partition com partes fictícias de intersect. Em casos raros, pode haver partes com versão de mutação maior que o número atual do bloco. #24321 (Amos Bird).
  • Corrigido um bug ao mover uma visão materializada de um banco de dados Ordinary para um banco de dados Atomic (consulta RENAME TABLE). Agora, a tabela interna é movida para o novo banco de dados junto com a visão materializada. Corrige #23926. #24309 (tavplubix).
  • Permite cabeçalhos HTTP vazios. Corrige #23901. #24285 (Ivan).
  • Processamento correto de mutações (ALTER UPDATE/DELETE) em tabelas Memory. Corrige #24274. #24275 (flynn).
  • Faz com que a propriedade LowCardinality da coluna na saída de JOIN seja a mesma da entrada, fecha #23351, fecha #20315. #24061 (Vladimir).
  • Uma correção para tabelas Kafka. Corrige o bug no comportamento de failover em que o Engine = Kafka não conseguia iniciar o consumo se o mesmo consumer tivesse tido anteriormente uma atribuição vazia. Fecha #21118. #21267 (filimonov).

Melhoria em compilação/testes/empacotamento

  • Adiciona builds darwin-aarch64 (Mac M1 / Apple Silicon) no CI #25560 (Ivan) e inclui os links para a documentação e o site (alexey-milovidov).
  • Adiciona incorporação multiplataforma de recursos binários em executáveis. Funciona no Illumos. #25146 (bnaecker).
  • Adiciona opções relacionadas a join aos testes de estresse para melhorar o fuzzing. #25200 (Vladimir).
  • Habilita a build com o módulo S3 no OSX #25217. #25218 (kevin wan).
  • Adiciona casos de teste de integração para cobrir a bridge JDBC. #25047 (Zhichun Wu).
  • A configuração dos testes de integração tem tratamento especial para dicionários. Remove a configuração manual restante dos dicionários. #24728 (Ilya Yatsishin).
  • Adiciona testes com libfuzzer para a classe YAMLParser. #24480 (BoloniniD).
  • O Ubuntu 20.04 agora é usado para executar os testes de integração, e a versão do docker-compose usada para executá-los foi atualizada para 1.28.2. As variáveis de ambiente agora têm efeito no docker-compose. Refatora test_dictionaries_all_layouts_separate_sources para permitir execução paralela. #20393 (Ilya Yatsishin).
  • Corrige um erro TOCTOU no script de instalação. #25277 (alexey-milovidov).

Versão 21.6 do ClickHouse, 2021-06-05

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

  • uniqState / uniqHLL12State / uniqCombinedState / uniqCombined64State geram estados incompatíveis com o tipo UUID. #33607.

Notas de atualização

  • A biblioteca de compressão zstd foi atualizada para a v1.5.0. Você pode receber mensagens sobre “checksum does not match” na replicação. Essas mensagens são esperadas devido à atualização do algoritmo de compressão e podem ser ignoradas. Elas são apenas informativas e não indicam nenhum tipo de comportamento indesejado.
  • A configuração compile_expressions vem habilitada por padrão. Embora tenha sido amplamente testada em diversos cenários, se você encontrar algum comportamento indesejado em seus servidores, pode tentar desabilitar essa configuração.
  • Valores do tipo UUID não podem ser comparados com inteiros. Por exemplo, em vez de escrever uuid != 0, digite uuid != '00000000-0000-0000-0000-000000000000'.

Novo recurso

  • Adicionado operador de conversão de tipo no estilo do Postgres (::). Ex.: [1, 2]::Array(UInt8), 0.1::Decimal(4, 4), number::UInt16. #23871 (Anton Popov).
  • Torna os inteiros grandes prontos para produção. Adiciona suporte ao tipo de dado UInt128. Corrige problemas conhecidos no tipo de dado Decimal256. Adiciona suporte a inteiros grandes em dicionários. Adiciona suporte às funções gcd/lcm para inteiros grandes. Adiciona suporte a inteiros grandes em funções condicionais e de busca em array. Adiciona suporte a LowCardinality(UUID). Adiciona suporte a inteiros grandes na função de tabela generateRandom e no clickhouse-obfuscator. Corrige o erro ao retornar UUID de subconsultas escalares. Isso corrige #7834. Isso corrige #23936. Isso corrige #4176. Isso corrige #24018. Alteração incompatível com versões anteriores: valores do tipo UUID não podem ser comparados com inteiros. Por exemplo, em vez de escrever uuid != 0, escreva uuid != '00000000-0000-0000-0000-000000000000'. #23631 (alexey-milovidov).
  • Suporte ao tipo de dado Array para inserção e seleção de dados nos formatos Arrow, Parquet e ORC. #21770 (taylor12805).
  • Implementa comentários em tabelas. Fecha #23225. #23548 (flynn).
  • Suporte à criação de dicionários com consultas DDL no clickhouse-local. Fecha #22354. Adicionado suporte a DETACH DICTIONARY PERMANENTLY. Adicionado suporte a EXCHANGE DICTIONARIES para o engine de banco de dados Atomic. Adicionado suporte para mover dicionários entre bancos de dados usando RENAME DICTIONARY. #23436 (Maksim Kita).
  • Adicionada a função de agregação uniqTheta para dar suporte ao Theta Sketch no ClickHouse. #23894. #22609 (Ping Yu).
  • Adicionada a função splitByRegexp. #24077 (abel-cheng).
  • Adicionada a função arrayProduct, que aceita um array como parâmetro e retorna o produto de todos os elementos do array. Fecha #21613. #23782 (Maksim Kita).
  • Adicionada a coluna thread_name em system.stack_trace. Isso fecha #23256. #24124 (abel-cheng).
  • Se insert_null_as_default = 1, insere valores padrão em vez de NULL nas consultas INSERT ... SELECT e INSERT ... SELECT ... UNION ALL .... Fecha #22832. #23524 (Kseniia Sumarokova).
  • Adicionado suporte à exibição de progresso no clickhouse-local com a opção --progress. #23196 (Egor Savin).
  • Adiciona suporte à compressão HTTP (determinada pelo cabeçalho HTTP Content-Encoding) na fonte de dicionário http. Isso corrige #8912. #23946 (FArthur-cmd).
  • Adicionados SYSTEM QUERY RELOAD MODEL, SYSTEM QUERY RELOAD MODELS. Resolve #18722. #23182 (Maksim Kita).
  • Adiciona a configuração json (booleana, 0 por padrão) à consulta EXPLAIN PLAN. Quando ativada, a saída da consulta será uma única linha JSON. Recomenda-se usar o formato TSVRaw para evitar caracteres de escape desnecessários. #23082 (Nikolai Kochetov).
  • Adicionada a configuração indexes (booleana, desativada por padrão) à consulta EXPLAIN PIPELINE. Quando ativada, mostra os índices usados, o número de partes e grânulos filtrados para cada índice aplicado. Compatível com tabelas MergeTree*. #22352 (Nikolai Kochetov).
  • LDAP: implementada a funcionalidade de detecção de user DN para uso no mapeamento de grupos do Active Directory para roles do ClickHouse. #22228 (Denis Glazachev).
  • Nova função de agregação deltaSumTimestamp para somar a diferença entre linhas consecutivas, mantendo a ordenação durante o merge ao armazenar timestamps. #21888 (Russ Frank).
  • Adicionado um provedor de credenciais IMDS menos seguro para S3, que funciona corretamente no Docker. #21852 (Vladimir Chebotarev).
  • Adiciona de volta a função indexHint. Isso é para #21238. Isso reverte #9542. Isso corrige #9540. #21304 (Amos Bird).

Funcionalidade experimental

  • Adicionado suporte a PROJECTION em tabelas MergeTree*. #20202 (Amos Bird).

Melhoria de desempenho

  • Habilita a configuração compile_expressions por padrão. Quando essa configuração está habilitada, composições de funções simples e operadores são compiladas para código nativo com LLVM em tempo de execução. #8482 (Maksim Kita, alexey-milovidov). Observação: se você tiver problemas, desative esta opção.
  • Atualiza a biblioteca re2. O desempenho da correspondência de expressões regulares foi melhorado. Além disso, este PR adiciona compatibilidade com gcc-11. #24196 (Raúl Marín).
  • Leitura do formato de entrada ORC por stripe, em vez de carregar a tabela inteira na memória de uma só vez, o que consome muita memória quando o arquivo é muito grande. #23102 (Chao Ma).
  • Fusão das funções agregadas sum, count e avg em uma consulta em uma única função agregada. A otimização é controlada pela configuração optimize_fuse_sum_count_avg. Isso é implementado com uma nova função agregada sumCount. Essa função retorna uma tupla com dois campos: sum e count. #21337 (hexiaoting).
  • Atualiza zstd para v1.5.0. O desempenho da compressão foi melhorado em alguns pontos percentuais. #24135 (Raúl Marín). Observação: você pode receber mensagens sobre “checksum does not match” na replicação. Essas mensagens são esperadas devido à atualização do algoritmo de compressão e podem ser ignoradas.
  • Desempenho das tabelas Buffer melhorado: não adquirir bloqueio para total_bytes/total_rows no engine Buffer. #24066 (Azat Khuzhin).
  • O suporte à pré-alocação para dicionários hashed/sparse_hashed foi restaurado. #23979 (Azat Khuzhin).
  • Habilita async_socket_for_remote por padrão (reduz a quantidade de threads ao consultar tabelas distribuídas com grande fanout). #23683 (Nikolai Kochetov).

Melhoria

  • Adicionar a coluna virtual _partition_value à família de tabelas MergeTree. Ela pode ser usada para fazer o pruning de partições de forma determinística. Isso é necessário para implementar a correspondência de partições para mutações. #23673 (Amos Bird).
  • Adicionado o parâmetro region para o armazenamento S3 e o disco. #23846 (Vladimir Chebotarev).
  • Permite configurar níveis de log diferentes para diferentes canais de logging. Fecha #19569. #23857 (filimonov).
  • Mantenha o fuso horário padrão nas operações com DateTime se ele não for fornecido explicitamente. Por exemplo, se você adicionar um segundo a um valor do tipo DateTime sem fuso horário, ele continuará sendo DateTime sem fuso horário. Nas versões anteriores, o valor do fuso horário padrão era atribuído explicitamente ao tipo de dados retornado, de modo que ele se tornava DateTime(‘something’). Isso corrige #4854. #23392 (alexey-milovidov).
  • Permite que o usuário especifique uma string vazia em vez do nome do banco de dados para o mecanismo de armazenamento MySQL. O banco de dados padrão será usado nas queries. Nas versões anteriores, isso funcionava para queries SELECT, e também foi adicionado suporte a INSERT. Isso fecha #19281. Isso pode ser útil ao trabalhar com Sphinx ou outros bancos de dados externos compatíveis com MySQL. #23319 (alexey-milovidov).
  • Corrigido quantile(s)TDigest. Adicionado tratamento especial para centróides singleton de acordo com tdunning/t-digest 3.2+. Também foi corrigido um bug de compressão excessiva dos centróides na implementação de uma versão anterior do algoritmo. #23314 (Vladimir Chebotarev).
  • A função now64 agora aceita um argumento opcional de fuso horário. #24091 (Vasily Nemkov).
  • Corrige o caso em que a barra de progresso no modo interativo do clickhouse-client, ao aparecer no meio dos dados, pode sobrescrever partes dos dados visíveis no terminal. Isso encerra #19283. #23050 (alexey-milovidov).
  • Corrige falha quando a alocação de memória falha no simdjson. https://github.com/simdjson/simdjson/pull/1567 . Classificado como melhoria porque é um bug muito raro. #24147 (Amos Bird).
  • Preservar os dicionários até o desligamento do armazenamento (isso evitará possíveis erros external dictionary 'DICT' not found no desligamento do servidor durante o flush final do mecanismo Buffer). #24068 (Azat Khuzhin).
  • Fazer flush das tabelas Buffer antes de encerrar as tabelas (dentro de um banco de dados), para evitar o descarte de blocos porque a tabela subjacente já havia sido detached (e o erro Destination table default.a_data_01870 doesn't exist. Block of data is discarded no log). #24067 (Azat Khuzhin).
  • Agora prefer_column_name_to_alias = 1 também passará a priorizar os nomes das colunas em group by, having e order by. Isso corrige #23882. #24022 (Amos Bird).
  • Adicionado suporte ao ORDER BY WITH FILL com DateTime64. #24016 (kevin wan).
  • Permite usar DateTime64 como coluna de versão no ReplacingMergeTree. #23992 (kevin wan).
  • Registrar, na inicialização do servidor, informações sobre o nome do SO, a versão do kernel e a arquitetura da CPU. #23988 (Azat Khuzhin).
  • Suporte à especificação do esquema da tabela para a fonte de dicionário postgresql. Fecha #23958. #23980 (Kseniia Sumarokova).
  • Adiciona sugestões para nomes de elementos Enum (sugere nomes em caso de erros de digitação). Fecha #17112. #23919 (flynn).
  • Medir a taxa de valores encontrados (o percentual de vezes em que o valor foi encontrado) para dicionários (consulte found_rate em system.dictionaries). #23916 (Azat Khuzhin).
  • Permite adicionar configurações específicas de fila por meio da configuração de tabela rabbitmq_queue_settings_list. (Fecha #23737 e #23918). Permite que o usuário controle toda a configuração do RabbitMQ: se a configuração de tabela rabbitmq_queue_consume estiver definida como 1, o table engine RabbitMQ se conectará apenas à fila especificada e não realizará nenhuma configuração do RabbitMQ no lado do consumer, como declarar exchange, filas e bindings. (Fecha #21757). Adiciona a limpeza adequada quando a tabela RabbitMQ é removida: exclui as filas declaradas pela tabela e todos os exchanges vinculados, se tiverem sido criados pela tabela. #23887 (Kseniia Sumarokova).
  • Adiciona broken_data_files/broken_data_compressed_bytes em system.distribution_queue. Adiciona uma métrica para o número de arquivos de inserção assíncrona em tabelas Distributed marcados como corrompidos (BrokenDistributedFilesToInsert). #23885 (Azat Khuzhin).
  • A consulta a system.tables não acessa mais o ZooKeeper. #23793 (Fuwang Hu).
  • Passa a respeitar lock_acquire_timeout_for_background_operations em consultas OPTIMIZE. #23623 (Azat Khuzhin).
  • Possibilidade de alterar as configurações do disco S3 em tempo de execução com o novo comando SQL SYSTEM RESTART DISK. #23429 (Pavel Kovalenko).
  • Se o usuário aplicou uma configuração incorreta ao definir por engano max_distributed_connections como zero, toda consulta a uma tabela Distributed lançará uma exceção com uma mensagem contendo “logical error”. Mas, na verdade, isso é um comportamento esperado, não um erro lógico, portanto a mensagem da exceção estava ligeiramente incorreta. Isso também acionou verificações em nosso ambiente de CI que garantem que erros lógicos nunca ocorram. Em vez disso, trataremos max_distributed_connections configurado incorretamente como zero como o menor valor possível (um). #23348 (Azat Khuzhin).
  • Desabilitado min_bytes_to_use_mmap_io por padrão. #23322 (Azat Khuzhin).
  • Adiciona suporte à nulabilidade de LowCardinality com join_use_nulls, fecha #15101. #23237 (vdimir).
  • Adicionada a possibilidade de restaurar partes do MergeTree no diretório detached para disco S3. #23112 (Pavel Kovalenko).
  • Tentativas de repetição em caso de queda da conexão HTTP no S3. #22988 (Vladimir Chebotarev).
  • Adicionadas as configurações external_storage_max_read_rows e external_storage_max_read_rows para o mecanismo de tabela MySQL, a origem do dicionário e pequenas buscas de dados do MaterializeMySQL. #22697 (TCeason).
  • MaterializeMySQL (funcionalidade experimental): Anteriormente, o MySQL 5.7.9 não era compatível devido à incompatibilidade de SQL. Agora, a verificação dos parâmetros do MySQL fica a cargo do MaterializeMySQL. #23413 (TCeason).
  • Habilitada a leitura de subcolunas em tabelas distribuídas. #24472 (Anton Popov).
  • Corrigido o uso de tuplas em consultas CREATE .. AS SELECT. #24464 (Anton Popov).
  • Suporte ao formato Parquet em tabelas Kafka. #23412 (Chao Ma).

Correção de bug

  • Use a versão antiga da função de módulo quando ela for usada na chave de partição e na chave primária. Fecha #23508. #24157 (Kseniia Sumarokova). Isso era uma causa de quebra de compatibilidade com versões anteriores em releases anteriores.
  • Corrigido o comportamento quando a consulta SYSTEM RESTART REPLICA ou SYSTEM SYNC REPLICA entrava em processamento infinito. Isso foi detectado em um servidor com uma quantidade extremamente pequena de RAM. #24457 (Nikita Mikhaylov).
  • Corrige a monotonicidade incorreta da função toWeek. Isso corrige #24422. Esse bug foi introduzido em #5212 e foi revelado posteriormente por um podador de partições mais inteligente. #24446 (Amos Bird).
  • Corrigido o drop partition com partes falsas no intersect. Em casos raros, pode haver partes com versão de mutação superior ao número do bloco atual. #24321 (Amos Bird).
  • Corrigido um bug ao mover uma visão materializada de um banco de dados Ordinary para um banco de dados Atomic (consulta RENAME TABLE). Agora, a tabela interna é movida para o novo banco de dados junto com a visão materializada. Corrige #23926. #24309 (tavplubix).
  • Permite cabeçalhos HTTP vazios nas requisições do cliente. Corrige #23901. #24285 (Ivan).
  • Defina max_threads = 1 para corrigir a falha de mutation em tabelas Memory. Fecha #24274. #24275 (flynn).
  • Corrige um erro de digitação na implementação das tabelas Memory; esse bug foi introduzido em #15127. Fecha #24192. #24193 (张中南).
  • Corrige o encerramento anormal do servidor quando o HDFS se torna inacessível durante a execução da consulta. Fecha #24117. #24191 (Kseniia Sumarokova).
  • Corrige falha na atualização da coluna Nested com condição constante. #24183 (hexiaoting).
  • Corrige uma race condition que poderia ocorrer no RBAC sob carga intensa. Este PR corrige #24090, #24134,. #24176 (Vitaly Baranov).
  • Corrige um bug raro que poderia resultar em uma tabela parcialmente inicializada capaz de aceitar solicitações de escrita (insert/alter/etc.). Agora, essas tabelas ficarão em modo readonly. #24122 (alesapin).
  • Corrigido um problema: EXPLAIN PIPELINE com SELECT xxx FINAL exibia um pipeline incorreto. (hexiaoting).
  • Corrigido o uso de um valor DateTime constante em vez de uma coluna DateTime64 em WHERE. #24100 (Vasily Nemkov).
  • Corrigida falha em merge JOIN, fecha #24010. #24013 (vdimir).
  • Algumas consultas ALTER PARTITION podiam causar os erros Part A intersects previous part B e Unexpected merged part C intersecting drop range D na fila de replicação. Isso foi corrigido. Corrige #23296. #23997 (tavplubix).
  • Corrige SIGSEGV em GROUP BY externo e na linha de overflow (isto é, consultas como SELECT FROM GROUP BY WITH TOTALS SETTINGS max_bytes_before_external_group_by>0, max_rows_to_group_by>0, group_by_overflow_mode='any', totals_mode='before_having'). #23962 (Azat Khuzhin).
  • Corrigida a contabilização das métricas de chaves para o dicionário CACHE com duplicatas na origem (o que leva a overflows em DictCacheKeysRequestedMiss). #23929 (Azat Khuzhin).
  • Corrigida a implementação do pool de conexões da engine PostgreSQL. Fecha #23897. #23909 (Kseniia Sumarokova).
  • Corrige distributed_group_by_no_merge = 2 com GROUP BY e função de agregação encapsulada em uma função regular (havia sido quebrado em #23546). Lança uma exceção caso alguém tente usar distributed_group_by_no_merge = 2 com funções de janela. Desabilita optimize_distributed_group_by_sharding_key para consultas com funções de janela. #23906 (Azat Khuzhin).
  • Correção na função de tabela s3: melhor tratamento de erros HTTP. Antes, os corpos das respostas de erros HTTP eram ignorados. #23844 (Vladimir Chebotarev).
  • Uma correção para a s3 table function: melhor tratamento de URIs. Foi corrigida uma incompatibilidade com URLs que contêm o símbolo +; antes, dados com essas chaves não podiam ser lidos. #23822 (Vladimir Chebotarev).
  • Corrige o erro Can't initialize pipeline with empty pipe em consultas com GLOBAL IN/JOIN e use_hedged_requests. Corrige o problema #23431. #23805 (Nikolai Kochetov).
  • Corrige o problema em que CLEAR COLUMN não funciona quando é referenciado por uma visão materializada. Fecha #23764. #23781 (flynn).
  • Corrigido o uso da heap após a memória já ter sido liberada ao ler do HDFS se o formato Values for usado. #23761 (Kseniia Sumarokova).
  • Evita o possível erro “Cannot schedule a task” (caso tenha ocorrido alguma exceção) ao fazer INSERT em Distributed. #23744 (Azat Khuzhin).
  • Corrigido um bug na recuperação de uma réplica ReplicatedMergeTree desatualizada. Algumas atualizações de metadados poderiam ser ignoradas pela réplica desatualizada se uma consulta ALTER fosse executada durante a indisponibilidade da réplica. #23742 (tavplubix).
  • Corrige um bug em Join e WITH TOTALS, fecha #17718. #23549 (vdimir).
  • Corrige o possível erro Block structure mismatch em consultas com UNION, que pode ocorrer após a otimização de pushdown de filtro. Corrige #23029. #23359 (Nikolai Kochetov).
  • Adicionada a conversão de tipo quando a configuração optimize_skip_unused_shards_rewrite_in está habilitada. Isso resolve um relatório do MSan. #23219 (Azat Khuzhin).
  • Adicionada uma verificação ausente ao atualizar subcolunas aninhadas, fecha a issue: #22353. #22503 (hexiaoting).

Melhoria em Compilação/Testes/Empacotamento

  • Suporte à compilação no Illumos. #24144. Adiciona suporte à compilação em sistemas operacionais derivados do Solaris. #23746 (bnaecker).
  • Adiciona mais benchmarks para tabelas hash, incluindo a Swiss Table do Google (que pareceu ser mais lenta que o map hash do ClickHouse em nosso cenário de uso específico). #24111 (Maksim Kita).
  • Atualiza o librdkafka da versão 1.6.0-RC3 para a 1.6.1. #23874 (filimonov).
  • Sempre habilita asynchronous-unwind-tables explicitamente. Isso pode corrigir o profiler de consultas em AArch64. #23602 (alexey-milovidov).
  • Evita uma possível dependência da compilação em relação à localidade e à ordem do sistema de arquivos. Isso permite compilações reproduzíveis. #23600 (alexey-milovidov).
  • Remove uma fonte de não determinismo da compilação. Agora, compilações feitas em momentos diferentes produzirão binários byte a byte idênticos. Resolve parcialmente #22113. #23559 (alexey-milovidov).
  • Adiciona uma ferramenta simples para benchmark do (Zoo)Keeper. #23038 (alesapin).

Lançamento do ClickHouse 21.5, 2021-05-20

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

  • Altera a comparação entre inteiros e números de ponto flutuante quando o inteiro não pode ser representado exatamente no tipo de dado de ponto flutuante. Na nova versão, a comparação retornará false, pois ocorrerá erro de arredondamento. Exemplo: 9223372036854775808.0 != 9223372036854775808, porque o número 9223372036854775808 não pode ser representado exatamente como número de ponto flutuante (e 9223372036854775808.0 é arredondado para 9223372036854776000.0). Porém, na versão anterior, a comparação retornava que os números eram iguais, porque, se o número de ponto flutuante 9223372036854776000.0 fosse convertido de volta para UInt64, o resultado seria 9223372036854775808. Como referência, a linguagem de programação Python também trata esses números como iguais. Mas esse comportamento dependia do modelo de CPU (com resultados diferentes em AMD64 e AArch64 para alguns números fora do intervalo), por isso tornamos a comparação mais precisa. Ela tratará números int e float como iguais somente se o int estiver representado exatamente no tipo de ponto flutuante. #22595 (alexey-milovidov).
  • Remove o suporte a argMin e argMax para um único argumento Tuple. O código não era seguro em termos de memória. O recurso foi adicionado por engano e causa confusão. Essas funções poderão ser reintroduzidas posteriormente com nomes diferentes. Isso corrige #22384 e reverte #17359. #23393 (alexey-milovidov).

Novo recurso

  • Adicionadas as funções dictGetChildren(dictionary, key), dictGetDescendants(dictionary, key, level). A função dictGetChildren retorna todos os filhos na forma de um array de índices. É uma transformação inversa de dictGetHierarchy. A função dictGetDescendants retorna todos os descendentes como se dictGetChildren fosse aplicada recursivamente level vezes. O valor zero de level equivale a infinito. Melhorado o desempenho das funções dictGetHierarchy e dictIsIn. Fecha #14656. #22096 (Maksim Kita).
  • Adicionada a função dictGetOrNull. Ela funciona como dictGet, mas retorna Null caso a chave não seja encontrada no dicionário. Fecha #22375. #22413 (Maksim Kita).
  • Adicionada uma função de tabela s3Cluster, que permite processar arquivos de s3 em paralelo em cada nó de um cluster especificado. #22012 (Nikita Mikhaylov).
  • Adicionado suporte a réplicas e shards no engine de tabela/função de tabela MySQL/PostgreSQL. Você pode escrever SELECT * FROM mysql('host{1,2}-{1|2}', ...). Fecha #20969. #22217 (Kseniia Sumarokova).
  • Adicionada a consulta ALTER TABLE ... FETCH PART .... Ela é semelhante a FETCH PARTITION, mas busca apenas uma parte. #22706 (turbo jason).
  • Adicionada uma configuração max_distributed_depth que limita a profundidade de consultas recursivas a tabelas Distributed. Fecha #20229. #21942 (flynn).

Melhoria de desempenho

  • Melhorado o desempenho de intDiv com despacho dinâmico para AVX2. Isso fecha #22314. #23000 (alexey-milovidov).
  • Melhorado o desempenho da leitura no formato de entrada ArrowStream para fontes que não sejam arquivo local (por exemplo, URL). #22673 (nvartolomei).
  • Compressão desabilitada por padrão ao interagir com localhost (com o clickhouse-client ou de servidor para servidor em consultas distribuídas) via protocolo nativo. Isso pode melhorar o desempenho de algumas operações de importação/exportação. Isso fecha #22234. #22237 (alexey-milovidov).
  • Exclui valores que não pertencem ao shard da parte direita da cláusula IN em consultas distribuídas (em optimize_skip_unused_shards_rewrite_in, habilitado por padrão, já que ainda requer optimize_skip_unused_shards). #21511 (Azat Khuzhin).
  • Melhorado o desempenho da leitura de um subconjunto de colunas com table engine do tipo File e formato colunar, como Parquet, Arrow ou ORC. Isso fecha #issue:20129. #21302 (keenwolf).
  • Permite mover mais condições para PREWHERE, como era antes da versão 21.1 (ajuste de heurísticas internas). Um número insuficiente de condições movidas poderia levar a um desempenho pior. #23397 (Anton Popov).
  • Melhorado o desempenho das conexões ODBC e corrigidos todos os problemas pendentes do backlog. Uso da biblioteca nanodbc em vez de Poco::ODBC. Fecha #9678. Adicionado suporte a DateTime64 e Decimal* para o table engine ODBC. Fecha #21961. Corrigido um problema em que texto em cirílico era truncado. Fecha #16246. Adicionados connection pools para a odbc bridge. #21972 (Kseniia Sumarokova).

Melhoria

  • O max_uri_size (o tamanho máximo da URL na interface HTTP) foi aumentado para 1 MiB por padrão. Isso fecha #21197. #22997 (alexey-milovidov).
  • Defina background_fetches_pool_size como 8, o que é mais adequado para uso em produção com inserções pequenas e frequentes ou com um cluster ZooKeeper lento. #22945 (alexey-milovidov).
  • FlatDictionary: adicionadas as opções initial_array_size e max_array_size. #22521 (Maksim Kita).
  • Adicionada a nova configuração non_replicated_deduplication_window para a desduplicação de inserções no MergeTree não replicado. #22514 (alesapin).
  • Atualização dos caminhos para as configurações do modelo CatBoost no recarregamento de configuração. #22434 (Kruglov Pavel).
  • Adicionado suporte ao tipo Decimal256 nos Dictionaries. Decimal256 é um recurso experimental. Fecha #20979. #22960 (Maksim Kita).
  • async_socket_for_remote ativado por padrão (usando menos threads do SO para consultas distribuídas). #23683 (Nikolai Kochetov).
  • Corrigido quantile(s)TDigest. Adicionado tratamento especial para centroides singleton, de acordo com tdunning/t-digest 3.2+. Também foi corrigido um bug de compressão excessiva de centroides na implementação de uma versão anterior do algoritmo. #23314 (Vladimir Chebotarev).
  • Tornar o nome da função unhex insensível a maiúsculas e minúsculas para compatibilidade com o MySQL. #23229 (alexey-milovidov).
  • Implementadas as funções arrayHasAny, arrayHasAll, has, indexOf, countEqual para o caso genérico em que os tipos dos elementos do array são diferentes. Nas versões anteriores, as funções arrayHasAny e arrayHasAll retornavam false, e has, indexOf e countEqual lançavam exceção. Também foi adicionado suporte a Decimal e a tipos inteiros grandes nas funções has e similares. Isso fecha #20272. #23044 (alexey-milovidov).
  • Aumentado o limite para o número máximo de correspondências no resultado da função extractAllGroupsHorizontal. #23036 (Vasily Nemkov).
  • Não execute optimize_skip_unused_shards em clusters com um único nó. #22999 (Azat Khuzhin).
  • Adicionada a possibilidade de executar clickhouse-keeper (substituto experimental compatível com o ZooKeeper) com SSL. A configuração keeper_server.tcp_port_secure pode ser usada para interação segura entre o cliente e o keeper-server. keeper_server.raft_configuration.secure pode ser usada para habilitar a comunicação interna segura entre os nós. #22992 (alesapin).
  • Adicionada a capacidade de descarregar o buffer somente em segundo plano nas tabelas Buffer. #22986 (Azat Khuzhin).
  • Ao selecionar de uma tabela MergeTree com NULL na condição WHERE, em casos raros, era gerada uma exceção. Isso fecha #20019. #22978 (alexey-milovidov).
  • Corrigido o tratamento de erros no cliente HTTP Poco para AWS. #22973 (kreuzerkrieg).
  • Passa a respeitar max_part_removal_threads no ReplicatedMergeTree. #22971 (Azat Khuzhin).
  • Corrige um caso de borda obscuro nas configurações do MergeTree inactive_parts_to_throw_insert = 0 com inactive_parts_to_delay_insert > 0. #22947 (Azat Khuzhin).
  • dateDiff agora funciona com argumentos DateTime64 (mesmo para valores fora do intervalo de DateTime) #22931 (Vasily Nemkov).
  • MaterializeMySQL (funcionalidade experimental): passou a permitir replicar bancos de dados MySQL que contêm views sem falhar. Isso é feito ignorando as views. #22760 (Christian).
  • Permite ROW POLICY do RBAC via protocolo PostgreSQL. Fecha #22658. O protocolo PostgreSQL é habilitado por padrão na configuração. #22755 (Kseniia Sumarokova).
  • Adicionada uma métrica para rastrear quanto tempo é gasto aguardando o bloqueio da camada Buffer. #22725 (Azat Khuzhin).
  • Permite o uso de CTE na definição de VIEW. Isso fecha #22491. #22657 (Amos Bird).
  • Limpa o restante da tela e mostra o cursor no clickhouse-client caso o programa anterior tenha deixado resíduos no terminal. Isso fecha #16518. #22634 (alexey-milovidov).
  • Faz com que a função round se comporte de forma consistente em plataformas não x86_64. É usado o arredondamento para o par mais próximo quando a fração é exatamente metade (arredondamento bancário). #22582 (alexey-milovidov).
  • Verificação correta da estrutura dos blocos de dados enviados por tabelas Distributed. #22325 (Azat Khuzhin).
  • Permite publicar erros do Kafka em uma coluna virtual do engine Kafka, controlada pela configuração kafka_handle_error_mode. #21850 (fastio).
  • Adiciona aliases simpleJSONExtract/simpleJSONHas para visitParam/visitParamExtract{UInt, Int, Bool, Float, Raw, String}. Corrige #21383. #21519 (fastio).
  • Adiciona clickhouse-library-bridge para fonte de dicionário de biblioteca. Fecha #9502. #21509 (Kseniia Sumarokova).
  • Proibida a remoção de uma coluna se ela for referenciada por uma visão materializada. Fecha #21164. #21303 (flynn).
  • Suporte a credenciais dinâmicas entre servidores (rotação de credenciais sem indisponibilidade). #14113 (johnskopis).
  • Adicionado suporte ao armazenamento no Kafka com mensagens nos formatos Arrow e ArrowStream. #23415 (Chao Ma).
  • Corrigido o ponto e vírgula ausente na mensagem de exceção. O usuário pode achar essa mensagem de exceção desagradável de ler. #23208 (alexey-milovidov).
  • Corrigida a ausência de espaço em branco em algumas mensagens de exceção sobre o tipo LowCardinality. #23207 (alexey-milovidov).
  • Alguns valores eram formatados com alinhamento centralizado nas células da tabela no formato Markdown. Isso não acontece mais. #23096 (alexey-milovidov).
  • Remova detalhes não essenciais das sugestões no clickhouse-client. Isso fecha #22158. #23040 (alexey-milovidov).
  • Cálculo correto do campo bytes_allocated em system.dictionaries para dicionários sparse_hashed. #22867 (Azat Khuzhin).
  • Corrigida a contabilização aproximada do total de linhas na leitura reversa do MergeTree. #22726 (Azat Khuzhin).
  • Corrige o caso em que era possível configurar um Dicionário com uma fonte ClickHouse que apontava para si mesma, o que levava a um loop infinito. Fecha #14314. #22479 (Maksim Kita).

Correção de bug

  • Múltiplas correções para hedged requests. Corrigido o erro Can't initialize pipeline with empty pipe em consultas com GLOBAL IN/JOIN quando a configuração use_hedged_requests está habilitada. Corrige #23431. #23805 (Nikolai Kochetov). Corrigida uma condição de corrida em conexões hedged que levava a falha. Isso corrige #22161. #22443 (Kruglov Pavel). Corrigida uma possível falha caso um unknown packet seja recebido de uma consulta remota (com async_socket_for_remote habilitado). Corrige #21167. #23309 (Nikolai Kochetov).
  • Corrigido o comportamento em que, ao desabilitar a configuração input_format_with_names_use_header , todos os dados de entrada no formato CSVWithNames são descartados. Isso corrige #22406. #23202 (Nikita Mikhaylov).
  • Corrigido um problema de timeout na conexão da bridge JDBC remota. Fecha #9609. #23771 (Maksim Kita, alexey-milovidov).
  • Corrige a lógica da carga inicial de complex_key_hashed caso update_field esteja especificado. Fecha #23800. #23824 (Maksim Kita).
  • Corrigida uma falha quando PREWHERE e o filtro de política de linha entravam em vigor simultaneamente e o resultado era vazio. #23763 (Amos Bird).
  • Evita o possível erro “Cannot schedule a task” (em caso de alguma exceção) ao executar INSERT em Distributed. #23744 (Azat Khuzhin).
  • Adicionada uma exceção para o caso de valores totalmente iguais em ambas as amostras na função de agregação mannWhitneyUTest. Isso corrige #23646. #23654 (Nikita Mikhaylov).
  • Corrigida uma falha no servidor ao inserir dados via HTTP que causava uma exceção. Isso corrige #23512. #23643 (Nikita Mikhaylov).
  • Corrigida a interpretação equivocada de algumas expressões LIKE com sequências de escape. #23610 (alexey-milovidov).
  • Corrigido o travamento nos comandos de reinicialização/parada. Fecha #20214. #23552 (filimonov).
  • Corrigido o matcher COLUMNS no caso de múltiplas junções em uma consulta SELECT. Fecha #22736. #23501 (Maksim Kita).
  • Corrigido um travamento ao modificar o valor padrão de uma coluna quando a própria coluna é usada como parâmetro do ReplacingMergeTree. #23483 (hexiaoting).
  • Corrigidos casos extremos em mesclagens verticais com ReplacingMergeTree. Em casos raros, isso podia levar a falhas nas mesclagens com exceções como Incomplete granules are not allowed while blocks are granules size. #23459 (Anton Popov).
  • Corrigido bug que não permitia fazer cast de um literal de array vazio para um array com dimensões maiores que 1, por exemplo, CAST([] AS Array(Array(String))). Fecha #14476. #23456 (Maksim Kita).
  • Corrigido um bug em que a função de agregação deltaSum produzia um resultado incorreto após a redefinição do contador. #23437 (Russ Frank).
  • Corrigido o erro Cannot unlink file durante a criação sem sucesso de uma tabela ReplicatedMergeTree com configuração multidisco. Isso fecha #21755. #23433 (tavplubix).
  • Corrigida a geração de expressões constantes incompatíveis durante a partition pruning com base em colunas virtuais. Isso corrige https://github.com/ClickHouse/ClickHouse/pull/21401#discussion&#95;r611888913. #23366 (Amos Bird).
  • Corrigida uma falha ao definir join_algorithm como ‘auto’ e executar um Join com um Dicionário. Fecha #23002. #23312 (Vladimir).
  • Não afrouxe as condições NOT durante a poda de partições. Isso corrige #23305 e #21539. #23310 (Amos Bird).
  • Corrigida uma condição de corrida muito rara na limpeza em segundo plano de blocos antigos. Ela poderia fazer com que um bloco não fosse desduplicado se estivesse muito próximo do fim da janela de desduplicação. #23301 (tavplubix).
  • Corrigida uma condição de corrida (distribuída) muito rara entre a criação e a remoção de tabelas ReplicatedMergeTree. Isso podia causar exceções como node doesn't exist ao tentar criar uma tabela replicada. Corrige #21419. #23294 (tavplubix).
  • Corrigida a criação via DDL de Dicionário com chave simples quando a chave primária não é o primeiro atributo. Corrige #23236. #23262 (Maksim Kita).
  • Corrigida a leitura via ODBC quando há muitos nomes de colunas longos em uma tabela. Fecha #8853. #23215 (Kseniia Sumarokova).
  • MaterializeMySQL (funcionalidade experimental): corrigido o erro Not found column ao selecionar em MaterializeMySQL com uma condição na coluna-chave. Corrige #22432. #23200 (tavplubix).
  • Corrige o tratamento de aliases caso a subconsulta tenha sido otimizada para uma constante. Corrige #22924. Corrige #10401. #23191 (Maksim Kita).
  • O servidor pode não iniciar se a configuração data_type_default_nullable estiver habilitada no perfil padrão; isso foi corrigido. Corrige #22573. #23185 (tavplubix).
  • Corrigida uma falha no desligamento que ocorria devido à contagem incorreta das conexões atuais. #23154 (Vitaly Baranov).
  • Corrigido o erro Table .inner_id... doesn't exist ao consultar uma visão materializada após desanexá-la do banco de dados Atomic e anexá-la novamente. #23047 (tavplubix).
  • Corrige o erro Cannot find column in ActionsDAG result, que pode ocorrer se a subconsulta usar untuple. Corrige #22290. #22991 (Nikolai Kochetov).
  • Corrigido o uso de colunas constantes do tipo Map com valores anuláveis. #22939 (Anton Popov).
  • corrigidos formatDateTime() em DateTime64 e o especificador de formato “%C”; corrigido toDateTime64() para valores grandes e escala não zero. #22937 (Vasily Nemkov).
  • Corrigido um travamento ao usar mannWhitneyUTest e rankCorr com funções de janela. Isso corrige #22728. #22876 (Nikita Mikhaylov).
  • LIVE VIEW (funcionalidade experimental): corrigido um possível travamento durante DROP/CREATE concorrente de TEMPORARY LIVE VIEW no TemporaryLiveViewCleaner, veja. #22858 (Vitaly Baranov).
  • Foi corrigido o pushdown de HAVING no caso em que a coluna de filtro é usada na agregação. #22763 (Anton Popov).
  • Corrigidos possíveis travamentos nas solicitações ao Zookeeper em caso de exceção de OOM. Corrige #22438. #22684 (Nikolai Kochetov).
  • Corrigida a espera por mutações em várias réplicas nos motores de tabela ReplicatedMergeTree. Antes, a consulta de mutation/alter podia terminar antes de a mutação ser realmente executada em outras réplicas. #22669 (alesapin).
  • Corrigida a exceção para Log com tipos aninhados sem colunas na cláusula SELECT. #22654 (Azat Khuzhin).
  • Corrigida a espera indefinida por solicitações auxiliares da AWS. #22594 (Vladimir Chebotarev).
  • Corrigido um travamento quando o cliente fecha a conexão muito cedo #22579. #22591 (nvartolomei).
  • Tipo de dado Map (funcionalidade experimental): corrigido um problema na formatação da função map em consultas distribuídas. #22588 (foolchi).
  • Corrigida a desserialização de string vazia sem quebra de linha no final do formato TSV. Isso corrige #20244. Possível solução alternativa sem atualizar a versão: defina input_format_null_as_default como zero. Era zero nas versões antigas. #22527 (alexey-milovidov).
  • Corrigido o CAST incorreto de uma coluna do tipo LowCardinality no algoritmo Merge Join. Fecha #22386, fecha #22388. #22510 (Vladimir).
  • Era possível haver um estouro de buffer (na leitura) no índice de texto completo tokenbf_v1. Os bytes excedentes não são usados, mas a operação de leitura pode causar uma falha em casos raros. Isso fecha #19233. #22421 (alexey-milovidov).
  • Não limitar o tamanho dos fragmentos HTTP. Corrige #21907. #22322 (Ivan).
  • Corrigido um bug que levava à agregação insuficiente dos dados quando optimize_aggregation_in_order estava habilitado e havia muitas partes na tabela. Leve melhora no desempenho da agregação com optimize_aggregation_in_order habilitado. #21889 (Anton Popov).
  • Verificar se a função de tabela view é usada como coluna. Isso complementa #20350. #21465 (Amos Bird).
  • Corrige o erro de “coluna desconhecida” em tabelas com o mecanismo Merge em consultas com JOIN e agregação. Fecha #18368, fecha #22226. #21370 (Vladimir).
  • Corrigidos conflitos de nomes na otimização de pushdown. Isso causava filtragem incorreta em WHERE após FULL JOIN. Fecha #20497. #20622 (Vladimir).
  • Corrigido um bug muito raro em que uma inserção com quórum com quorum_parallel=1 não era realmente um “quórum” por causa da desduplicação. #18215 (filimonov - reportado, alesapin - corrigido).

Melhoria em compilação/testes/empacotamento

Lançamento do ClickHouse 21.4

Lançamento do ClickHouse 21.4.1 2021-04-12

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

  • A toStartOfIntervalFunction alinhará os intervalos de hora à meia-noite (em versões anteriores, eles eram alinhados ao início da epoch Unix). Por exemplo, toStartOfInterval(x, INTERVAL 11 HOUR) dividirá cada dia em três intervalos: 00:00:00..10:59:59, 11:00:00..21:59:59 e 22:00:00..23:59:59. Esse comportamento é mais adequado às necessidades práticas. Fecha #9510. #22060 (alexey-milovidov).
  • Age e Precision nas configurações de rollup do Graphite devem aumentar de uma retenção para outra. Agora isso é verificado, e uma configuração incorreta gera uma exceção. #21496 (Mikhail f. Shiryaev).
  • Corrige cutToFirstSignificantSubdomainCustom()/firstSignificantSubdomainCustom() que retornavam resultados incorretos para domínios com 3 ou mais níveis presentes na lista personalizada de domínios de nível superior. Para domínios de entrada que correspondem a esses domínios de nível superior personalizados, o domínio de terceiro nível era considerado o primeiro significativo. Isso foi corrigido. Essa alteração pode introduzir incompatibilidade se a função for usada, por exemplo, na chave de sharding. #21946 (Azat Khuzhin).
  • A coluna keys na tabela system.dictionaries foi substituída pelas colunas key.names e key.types. As colunas key.names, key.types, attribute.names, attribute.types da tabela system.dictionaries não exigem que o dicionário esteja carregado. #21884 (Maksim Kita).
  • Agora, as réplicas que estão processando o comando ALTER TABLE ATTACH PART[ITION] procuram em suas pastas detached/ antes de buscar os dados de outras réplicas. Como detalhe de implementação, um novo comando ATTACH_PART foi introduzido no log replicado. As partes são procuradas e comparadas por suas somas de verificação. #18978 (Mike Kot). Observação:
    • As consultas ATTACH PART[ITION] podem não funcionar durante a atualização do cluster.
    • Não é possível reverter para uma versão mais antiga do ClickHouse após executar a consulta ALTER ... ATTACH na nova versão, pois os servidores antigos não conseguiriam processar a entrada ATTACH_PART no log replicado.
  • Nesta versão, <remote_url_allow_hosts></remote_url_allow_hosts> vazio bloqueará todo o acesso a hosts remotos, enquanto nas versões anteriores isso não fazia nada. Se você quiser manter o comportamento antigo e tiver o elemento remote_url_allow_hosts vazio no arquivo de configuração, remova-o. #20058 (Vladimir Chebotarev).

Novo recurso

  • Faixa estendida de DateTime64 para suportar datas do ano de 1925 a 2283. Suporte aprimorado a DateTime em torno da data zero (1970-01-01). #9404 (alexey-milovidov, Vasily Nemkov). Nem todas as funções de data e hora funcionam com a faixa estendida de datas.
  • Adicionado suporte à autenticação Kerberos para usuários pré-configurados e requisições HTTP (GSS-SPNEGO). #14995 (Denis Glazachev).
  • Adiciona a configuração prefer_column_name_to_alias para usar os nomes originais das colunas em vez de aliases. Isso é necessário para haver maior compatibilidade com as regras de alias comuns em bancos de dados. Isso é para #9715 e #9887. #22044 (Amos Bird).
  • Adicionadas as funções dictGetChildren(dictionary, key), dictGetDescendants(dictionary, key, level). A função dictGetChildren retorna todos os filhos em um array de índices. É a transformação inversa de dictGetHierarchy. A função dictGetDescendants retorna todos os descendentes como se dictGetChildren fosse aplicada recursivamente level vezes. O valor zero de level é equivalente a infinito. Fecha #14656. #22096 (Maksim Kita).
  • Adicionada a fonte de dicionário executable_pool. Fecha #14528. #21321 (Maksim Kita).
  • Adicionada a função de tabela dictionary. Funciona da mesma forma que o engine Dictionary. Fecha #21560. #21910 (Maksim Kita).
  • Suporte ao tipo Nullable no atributo PolygonDictionary. #21890 (Maksim Kita).
  • As funções dictGet, dictHas usam o nome do banco de dados atual caso ele não seja especificado para dicionários criados com DDL. Fecha #21632. #21859 (Maksim Kita).
  • Adicionada a função dictGetOrNull. Ela funciona como dictGet, mas retorna Null caso a chave não seja encontrada no dicionário. Fecha #22375. #22413 (Maksim Kita).
  • Adicionada atualização assíncrona aos dicionários ComplexKeyCache, SSDCache e SSDComplexKeyCache. Adicionado suporte ao tipo Nullable nos dicionários Cache, ComplexKeyCache, SSDCache e SSDComplexKeyCache. Adicionado suporte à busca de múltiplos atributos com as funções dictGet e dictGetOrDefault. Corrige #21517. #20595 (Maksim Kita).
  • Adiciona suporte à função dictHas para RangeHashedDictionary. Corrige #6680. #19816 (Maksim Kita).
  • Adiciona a função timezoneOf, que retorna o nome do fuso horário dos tipos de dados DateTime ou DateTime64. Isso não fecha #9959. Corrige inconsistências nos nomes das funções: adiciona os aliases timezone e timeZone, bem como toTimezone e toTimeZone, além de timezoneOf e timeZoneOf. #22001 (alexey-milovidov).
  • Adiciona a nova cláusula opcional GRANTEES para os comandos CREATE/ALTER USER. Ela especifica os usuários ou roles que podem receber grants deste usuário, desde que ele também tenha todos os acessos necessários concedidos com a opção de grant. Por padrão, usa-se GRANTEES ANY, o que significa que um usuário com a opção de grant pode conceder a qualquer pessoa. Sintaxe: CREATE USER ... GRANTEES {user | role | ANY | NONE} [,...] [EXCEPT {user | role} [,...]]. #21641 (Vitaly Baranov).
  • Adicionada a nova coluna slowdowns_count a system.clusters. Ao usar solicitações hedged, ela mostra quantas vezes mudamos para outra réplica porque esta estava respondendo lentamente. Também passa a mostrar o valor real de errors_count em system.clusters. #21480 (Kruglov Pavel).
  • Adicionar a coluna virtual _partition_id para motores MergeTree*. Permitir o pruning de partições por _partition_id. Adicionar a função partitionID() para calcular o ID da partição como string. #21401 (Amos Bird).
  • Adiciona a função isIPAddressInRange para verificar se um endereço IPv4 ou IPv6 pertence a um determinado prefixo de rede CIDR. #21329 (PHO).
  • Adicionado o novo comando SQL ALTER TABLE 'table_name' UNFREEZE [PARTITION 'part_expr'] WITH NAME 'backup_name'. Esse comando é necessário para remover corretamente as partições ‘congeladas’ de todos os discos. #21142 (Pavel Kovalenko).
  • Oferece suporte à conversão implícita do tipo de chave em JOIN. #19885 (Vladimir).

Funcionalidade Experimental

  • Suporte ao frame RANGE OFFSET (para funções de janela) para tipos de ponto flutuante. Implementadas as funções de janela lagInFrame/leadInFrame, que são análogas a lag/lead, mas respeitam o frame da janela. Elas são idênticas quando o frame é between unbounded preceding and unbounded following. Isso corrige #5485. #21895 (Alexander Kuzmenkov).
  • Replicação zero-copy para ReplicatedMergeTree com armazenamento S3. #16240 (ianton-ru).
  • Adicionada a possibilidade de migrar um disco S3 existente para o esquema com recursos de backup e restauração. #22070 (Pavel Kovalenko).

Melhoria de desempenho

  • Suporte à formatação paralela no clickhouse-local e em todos os outros lugares. #21630 (Nikita Mikhaylov).
  • Suporte a parsing paralelo para os formatos CSVWithNames e TSVWithNames. Isso fecha #21085. #21149 (Nikita Mikhaylov).
  • Habilita leitura com mmap IO para intervalos de arquivos a partir de 64 MiB (a configuração min_bytes_to_use_mmap_io). Isso pode resultar em uma melhora moderada de desempenho. #22326 (alexey-milovidov).
  • Adiciona cache para arquivos lidos com a configuração min_bytes_to_use_mmap_io. Isso proporciona um ganho significativo de desempenho (2x ou mais) quando o valor da configuração é pequeno, evitando chamadas frequentes de mmap/munmap e as falhas de página resultantes. Observe que mmap IO tem desvantagens importantes, o que o torna menos confiável em produção (por exemplo, travamentos ou SIGBUS em discos com falha; uso de memória menos controlável). Ainda assim, é bom em benchmarks. #22206 (alexey-milovidov).
  • Evita cópia desnecessária de dados ao usar o codec NONE. Observe que o codec NONE é, em grande parte, inútil — recomenda-se sempre usar compressão (LZ4 é o padrão). Apesar do que muitos acreditam, desabilitar a compressão pode não melhorar o desempenho (o efeito oposto também é possível). O codec NONE é útil em alguns casos: - quando os dados não são compressíveis; - para benchmarks sintéticos. #22145 (alexey-milovidov).
  • GROUP BY mais rápido com max_rows_to_group_by pequeno e group_by_overflow_mode='any'. #21856 (Nikolai Kochetov).
  • Otimiza o desempenho de consultas como SELECT ... FINAL ... WHERE. Agora, em consultas com FINAL, é permitido mover para PREWHERE colunas que estão na chave de ordenação. #21830 (foolchi).
  • Desempenho aprimorado ao substituir memcpy por outra implementação. Isso fecha #18583. #21520 (alexey-milovidov).
  • Melhora o desempenho da agregação na ordem da chave de ordenação (com a configuração optimize_aggregation_in_order habilitada). #19401 (Anton Popov).

Melhoria

  • Adiciona um pool de conexões para o engine de tabela/banco de dados PostgreSQL e a fonte de dicionário. Deve corrigir #21444. #21839 (Kseniia Sumarokova).
  • Suporte a schema de tabela não padrão no storage/table-function do Postgres. Fecha #21701. #21711 (Kseniia Sumarokova).
  • Suporte à prioridade de réplicas na origem de dicionário do Postgres. #21710 (Kseniia Sumarokova).
  • Introduz uma nova configuração do MergeTree, min_bytes_to_rebalance_partition_over_jbod, que permite distribuir novas partes entre diferentes discos de um volume JBOD de forma equilibrada. #16481 (Amos Bird).
  • Adicionados à coluna query_kind os valores Grant, Revoke e System para as consultas correspondentes em system.query_log. #21102 (Vasily Nemkov).
  • Permite configurar separadamente os timeouts das conexões HTTP usadas para replicação em relação aos demais timeouts HTTP. #20088 (nvartolomei).
  • Mensagem de exceção mais clara no cliente em caso de exceção enquanto o servidor grava blocos. Em versões anteriores, o cliente podia receber uma mensagem enganosa, como Data compressed with different methods. #22427 (alexey-milovidov).
  • Corrige o erro Directory tmp_fetch_XXX already exists, que podia ocorrer após uma falha ao buscar uma parte. Exclui o diretório temporário de busca se ele já existir. Corrige #14197. #22411 (nvartolomei).
  • Corrige o erro relatado pelo MSan na função range com argumento UInt256 (o suporte a inteiros grandes é experimental). Isso fecha #22157. #22387 (alexey-milovidov).
  • Adicionar a coluna current_database à tabela system.processes. Ela contém o banco de dados atual da consulta. #22365 (Alexander Kuzmenkov).
  • Adiciona ao clickhouse-client recursos de busca/navegação no histórico sem diferenciar maiúsculas de minúsculas e movimentação por subpalavras. #22105 (Amos Bird).
  • Se uma tupla de NULLs, por exemplo (NULL, NULL), estiver no lado esquerdo do operador IN, com tuplas sem NULLs no lado direito, por exemplo SELECT (NULL, NULL) IN ((0, 0), (3, 1)), retorna 0 em vez de lançar uma exceção sobre tipos incompatíveis. A expressão também pode aparecer devido à otimização de algo como SELECT (NULL, NULL) = (8, 0) OR (NULL, NULL) = (3, 2) OR (NULL, NULL) = (0, 0) OR (NULL, NULL) = (3, 1). Isso fecha #22017. #22063 (alexey-milovidov).
  • Atualiza a versão usada do simdjson para 0.9.1. Isso corrige #21984. #22057 (Vitaly Baranov).
  • Adicionados aliases sem distinção entre maiúsculas e minúsculas para as funções CONNECTION_ID() e VERSION(). Isso corrige #22028. #22042 (Eugene Klimov).
  • Adicionada a opção strict_increase à função windowFunnel para calcular cada evento apenas uma vez (corrige #21835). #22025 (Vladimir).
  • Se a chave de partição de uma tabela MergeTree não incluir colunas Date nem DateTime, mas incluir exatamente uma coluna DateTime64, exiba seus valores nas colunas min_time e max_time das tabelas system.parts e system.parts_columns. Adicione as colunas min_time e max_time à tabela system.parts_columns (havia uma inconsistência em relação à tabela system.parts). Isso fecha #18244. #22011 (alexey-milovidov).
  • Suporte adicionado à configuração replication_alter_partitions_sync=1 no clickhouse-copier para mover partições da tabela auxiliar para o destino. Reduzidos os timeouts padrão. Corrige #21911. #21912 (turbo jason).
  • Mostrar, nas tabelas de sistema, o caminho para o diretório de dados das tabelas EmbeddedRocksDB. #21903 (tavplubix).
  • Adicionado o evento de perfil HedgedRequestsChangeReplica; alterado o timeout de leitura de dados de s para ms. #21886 (Kruglov Pavel).
  • DiskS3 (recurso experimental em desenvolvimento). Corrigido um bug que impedia mover o diretório se o destino não estivesse vazio e fosse usado um disco de cache. #21837 (Pavel Kovalenko).
  • Formatação aprimorada para os tipos de dados Array e Map na Web UI. #21798 (alexey-milovidov).
  • Atualize os clusters somente se suas configurações tiverem sido atualizadas. #21685 (Kruglov Pavel).
  • Propaga as configurações de consulta e de sessão para consultas de DDL distribuído. Defina distributed_ddl_entry_format_version como 2 para habilitar isso. Adicionada a configuração distributed_ddl_output_mode. Modos compatíveis: none, throw (padrão), null_status_on_timeout e never_throw. Correções e melhorias diversas no engine de banco de dados Replicated. #21535 (tavplubix).
  • Se PODArray fosse instanciado com um tamanho de elemento que não fosse nem uma fração nem um múltiplo de 16, poderia ocorrer um estouro de buffer. Não há bugs nas versões atuais. #21533 (alexey-milovidov).
  • Adicionadas as colunas last_error_time/last_error_message/last_error_stacktrace/remote à system.errors. #21529 (Azat Khuzhin).
  • Adiciona aliases simpleJSONExtract/simpleJSONHas para visitParam/visitParamExtract{UInt, Int, Bool, Float, Raw, String}. Corrige #21383. #21519 (fastio).
  • Adicionada a configuração optimize_skip_unused_shards_limit para limitar o número de valores da chave de sharding de optimize_skip_unused_shards. #21512 (Azat Khuzhin).
  • Melhoria no clickhouse-format para não lançar exceção quando houver espaços extras ou comentários após a última consulta e para lançar a exceção antecipadamente, com uma mensagem compreensível, ao formatar ASTInsertQuery com dados. #21311 (flynn).
  • Melhorado o suporte a chaves inteiras no tipo de dado Map. #21157 (Anton Popov).
  • MaterializeMySQL: tentar se reconectar ao MySQL se a conexão for perdida. #20961 (Håvard Kvålen).
  • Suporte a mais casos de reescrita de CROSS JOIN para INNER JOIN. #20392 (Vladimir).
  • Não cria partes vazias no INSERT quando a configuração optimize_on_insert está habilitada. Corrige #20304. #20387 (Kruglov Pavel).
  • MaterializeMySQL: adiciona índice minmax do tipo skipping para a coluna _version. #20382 (Stig Bakken).
  • Adicionar a opção --backslash ao clickhouse-format, que pode adicionar uma barra invertida ao final de cada linha da consulta formatada. #21494 (flynn).
  • Agora o ClickHouse não lançará a exceção LOGICAL_ERROR quando tentarmos aplicar uma mutação à parte já coberta. Corrige #22013. #22291 (alesapin).

Correção de bug

  • Remova o socket do epoll antes de cancelar o receptor de pacotes em HedgedConnections para evitar uma possível condição de corrida. Corrige #22161. #22443 (Kruglov Pavel).
  • Adiciona a contabilização de uso de memória (ausente) em rotinas paralelas de análise. Em versões anteriores, era possível ocorrer OOM quando o conjunto de resultados continha blocos de dados muito grandes. Isso fecha #22008. #22425 (alexey-milovidov).
  • Corrige uma exceção que pode ocorrer quando SELECT tem uma condição WHERE constante e a tabela de origem possui colunas com nomes formados por dígitos. #22270 (LiuNeng).
  • Corrigido o cancelamento de consulta com use_hedged_requests=0 e async_socket_for_remote=1. #22183 (Azat Khuzhin).
  • Corrigida exceção não capturada em InterserverIOHTTPHandler. #22146 (Azat Khuzhin).
  • Corrigido o entrypoint do Docker caso http_port não esteja na configuração. #22132 (Ewout).
  • Corrige o erro Invalid number of rows in Chunk em JOIN com TOTALS e arrayJoin. Fecha #19303. #22129 (Vladimir).
  • Corrigido o nome do pool de threads em segundo plano usado para buscar mensagens do Kafka. O engine Kafka com o pool de threads com defeito não consumirá mensagens da fila de mensagens. #22122 (fastio).
  • Corrigida a espera por consultas OPTIMIZE e ALTER em motores de tabela ReplicatedMergeTree. Agora, a consulta não ficará travada quando a tabela tiver sido desanexada ou reiniciada. #22118 (alesapin).
  • Desativa async_socket_for_remote/use_hedged_requests para kernels do Linux com falhas. #22109 (Azat Khuzhin).
  • Entrypoint do Docker: evitar o chown de . quando LOG_PATH estiver vazio. Fecha #22100. #22102 (filimonov).
  • A função decrypt não tinha uma verificação do tamanho mínimo dos dados criptografados no modo AEAD. Isso corrige #21897. #22064 (alexey-milovidov).
  • Em casos raros, a mesclagem no CollapsingMergeTree pode criar um grânulo com index_granularity + 1 linhas. Por causa disso, a verificação interna adicionada em #18928 (afeta as versões 21.2 e 21.3) pode falhar com o erro Incomplete granules are not allowed while blocks are granules size. Esse erro impedia a mesclagem das partes. #21976 (Nikolai Kochetov).
  • Revertida a #15454, que pode causar um aumento significativo no uso de memória durante o carregamento de dicionários externos do tipo hash. Isso encerra #21935. #21948 (Maksim Kita).
  • Evita sobreposição entre conexões hedged (erro Unknown packet 9 from server). #21941 (Azat Khuzhin).
  • Corrigida a leitura de solicitações HTTP POST com o tipo de conteúdo “multipart/form-data” em alguns casos. #21936 (Ivan).
  • Corrige resultados incorretos de ORDER BY quando uma consulta contém funções de janela e é aplicada a otimização de leitura na ordem da chave primária. Corrige #21828. #21915 (Alexander Kuzmenkov).
  • Corrigido deadlock na primeira execução do modelo catboost. Fecha #13832. #21844 (Kruglov Pavel).
  • Corrige resultado incorreto de consulta (e possível travamento) que podia ocorrer quando a condição WHERE ou HAVING é aplicada antes de GROUP BY. Corrige #21773. #21841 (Nikolai Kochetov).
  • Melhor tratamento de erros e logging em WriteBufferFromS3. #21836 (Pavel Kovalenko).
  • Corrige possíveis travamentos em funções de agregação com o combinador Distinct ao usar agregação em dois níveis. Esta é uma correção complementar de #18365 . Só pode ser reproduzido em ambiente de produção. #21818 (Amos Bird).
  • Corrigida a análise de índice de subconsulta escalar. Isso corrige #21717, introduzido em #18896. #21766 (Amos Bird).
  • Corrige um bug nos motores de tabela ReplicatedMerge quando a consulta ALTER MODIFY COLUMN não altera o tipo da coluna Decimal caso o tamanho dela (32 bits ou 64 bits) não mude. #21728 (alesapin).
  • Corrigida a possível espera infinita quando OPTIMIZE e DROP são executados de forma concorrente em ReplicatedMergeTree. #21716 (Azat Khuzhin).
  • Corrige a função arrayElement para o tipo Map ao usar argumentos inteiros constantes. #21699 (Anton Popov).
  • Corrigido SIGSEGV em atributos inexistentes no ip_trie com access_to_key_from_attributes. #21692 (Azat Khuzhin).
  • O servidor agora só passa a aceitar conexões após a inicialização do DDLWorker e dos dicionários. #21676 (Azat Khuzhin).
  • Adicionar conversão de tipo para as chaves de tabelas do tipo Join (antes, isso levava a SIGSEGV). #21646 (Azat Khuzhin).
  • Corrige o cancelamento de requisições distribuídas (por exemplo, um select simples em vários shards com limite, isto é, select * from remote('127.{2,3}', system.numbers) limit 100) com async_socket_for_remote=1. #21643 (Azat Khuzhin).
  • Corrigido fsync_part_directory para merge horizontal. #21642 (Azat Khuzhin).
  • Remove colunas desconhecidas da tabela do JOIN em WHERE para consultas a motores de banco de dados externos (MySQL, PostgreSQL). close #14614, close #19288 (dup), close #19645 (dup). #21640 (Vladimir).
  • std::terminate foi chamado se houvesse um erro ao gravar dados no S3. #21624 (Vladimir).
  • Corrige um possível erro Cannot find column quando optimize_skip_unused_shards está habilitado e nenhum shard é usado. #21579 (Azat Khuzhin).
  • Se a consulta tiver uma condição WHERE constante e a configuração optimize_skip_unused_shards estiver habilitada, todos os shards poderão ser ignorados, e a consulta poderá retornar incorretamente um resultado vazio. #21550 (Amos Bird).
  • Corrigida a função de tabela clusterAllReplicas, que retornava _shard_num incorreto. Fecha #21481. #21498 (flynn).
  • Correção do problema em que a tabela S3 mantinha credenciais antigas após a atualização da configuração. #21457 (Grigory Pervakov).
  • Corrigida uma condição de corrida no objeto SSL dentro de SecureSocket, no Poco. #21456 (Nikita Mikhaylov).
  • Corrige o parsing do formato Avro no Kafka. Corrige #21437. #21438 (Ilya Golshtein).
  • Corrigidos os timeouts de recebimento e envio e a leitura não bloqueante em socket seguro. #21429 (Kruglov Pavel).
  • A flag force_drop_table não funcionava com MATERIALIZED VIEW; isso foi corrigido. Corrige #18943. #20626 (tavplubix).
  • Corrige conflitos de nomes em PredicateRewriteVisitor. Isso causava filtragem incorreta na cláusula WHERE após FULL JOIN. Fecha #20497. #20622 (Vladimir).

Melhoria em Compilação/Testes/Empacotamento

  • Adicionados testes Jepsen para o ClickHouse Keeper. #21677 (alesapin).
  • Execute testes sem estado em paralelo no CI. Depende de #22181. #22300 (alesapin).
  • Ativada a verificação de status para a execução de CI do SQLancer. #22015 (Ilya Yatsishin).
  • Várias melhorias preparatórias para builds em PowerPC: habilita o openldap empacotado em ppc64le. #22487 (Kfir Itzhak). Habilita a compilação em ppc64le com Clang. #22476 (Kfir Itzhak). Corrige a compilação do boost em ppc64le. #22474 (Kfir Itzhak). Corrige o erro do CMake relacionado à variável interna CMAKE_ASM_COMPILE_OBJECT, que não estava definida em ppc64le. #22469 (Kfir Itzhak). Corrige o problema em que Fedora/RHEL/CentOS não encontravam libclang_rt.builtins em ppc64le. #22458 (Kfir Itzhak). Habilita a compilação com jemalloc em ppc64le. #22447 (Kfir Itzhak). Corrige a incorporação da configuração do ClickHouse e do timezone do cctz em ppc64le. #22445 (Kfir Itzhak). Corrige a compilação em ppc64le e o uso do registrador correto de ponteiro de instrução em ppc64le. #22430 (Kfir Itzhak).
  • Reabilite a biblioteca S3 (AWS) em aarch64. #22484 (Kfir Itzhak).
  • Adicione tzdata aos contêineres do Docker, pois a leitura de formatos ORC exige isso. Isso corrige #14156. #22000 (alexey-milovidov).
  • Adiciona 2 argumentos ao Dockerfile da imagem clickhouse-server: deb_location & single_binary_location. #21977 (filimonov).
  • Permite usar o clang-tidy com builds de release, habilitando assertions quando ele é usado. #21914 (alexey-milovidov).
  • Adicionado o nome dos binários do llvm-12 à busca nos scripts do CMake. Conversões implícitas de constantes para silenciar avisos do Clang. Submódulos atualizados para compilação com o CMake 3.19. Silenciada a recursão na expansão de macro na biblioteca readpassphrase. A opção obsoleta -fuse-ld foi alterada para --ld-path no Clang. #21597 (Ilya Yatsishin).
  • Atualização de docker/test/testflows/runner/dockerd-entrypoint.sh para usar o dockerhub-proxy da Yandex, porque o Docker Hub passou a impor limites de taxa muito restritivos #21551 (vzakaznikov).
  • Corrigida a compilação da biblioteca compartilhada no macOS. #20184 (nvartolomei).
  • Adiciona a opção ctime ao zookeeper-dump-tree. Ela permite exportar a hora de criação do nó. #21842 (Ilya).

Lançamento do ClickHouse 21.3 (LTS)

Lançamento do ClickHouse v21.3, 2021-03-12

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

  • Agora não é mais permitido criar tabelas MergeTree usando a sintaxe antiga com TTL de tabela, porque ela é simplesmente ignorada. O Attach de tabelas antigas ainda continua sendo possível. #20282 (alesapin).
  • Agora, todos os nomes de função sem distinção entre maiúsculas e minúsculas serão reescritos para suas representações canônicas. Isso é necessário para o roteamento de consultas de projeção (um recurso futuro). #20174 (Amos Bird).
  • Corrigida a criação de TTL nos casos em que sua expression é uma função e coincide com a chave ORDER BY. Agora é permitido definir uma aggregation personalizada para colunas de chave primária em TTL com GROUP BY. Incompatível com versões anteriores: para colunas de chave primária que não estão em GROUP BY e não são definidas explicitamente, agora é aplicada a função any em vez de max quando o TTL expira. Além disso, se você usar TTL com WHERE ou GROUP BY, poderá ver exceções durante merges ao fazer rolling update. #15450 (Anton Popov).

Novo recurso

  • Adicionadas as configurações do engine de arquivo: engine_file_empty_if_not_exists e engine_file_truncate_on_insert. #20620 (M0r64n).
  • Adicionada a função de agregação deltaSum para somar as diferenças entre linhas consecutivas. #20057 (Russ Frank).
  • Nova coluna event_time_microseconds na tabela system.part_log. #20027 (Bharat Nallan).
  • Adicionada a função timezoneOffset(datetime), que retorna o deslocamento em relação a UTC em segundos. Isso fecha #issue:19850. #19962 (keenwolf).
  • Adicionada a configuração insert_shard_id para oferecer suporte à inserção de dados em um shard específico a partir de uma tabela distribuída. #19961 (flynn).
  • A função reinterpretAs foi atualizada para oferecer suporte a inteiros grandes. Corrige #19691. #19858 (Maksim Kita).
  • Adicionado suporte a Server Side Encryption Customer Keys (o header x-amz-server-side-encryption-customer-(key/md5)) no cliente S3. Veja o link. Fecha #19428. #19748 (Vladimir Chebotarev).
  • Adicionada a opção implicit_key para a origem de Dicionário executable. Ela permite evitar imprimir a chave para cada registro se os registros vierem na mesma ordem das chaves de entrada. Implementa #14527. #19677 (Maksim Kita).
  • Adicionados os tipos de QUOTA query_selects e query_inserts. #19603 (JackyWoo).
  • Adicionada a função extractTextFromHTML #19600 (zlx19950903), (alexey-milovidov).
  • Tabelas com engine MergeTree* agora têm duas novas configurações no nível da tabela para controle de concorrência de consultas. A configuração max_concurrent_queries limita o número de consultas executadas simultaneamente relacionadas a essa tabela. A configuração min_marks_to_honor_max_concurrent_queries determina que a configuração anterior seja aplicada apenas se a consulta ler pelo menos esse número de marcas. #19544 (Amos Bird).
  • Adicionada a função file para ler arquivos do diretório user_files como String. Isso é diferente da table function file. Isso implementa #issue:18851. #19204 (keenwolf).

Funcionalidade experimental

  • Adicionado o engine de banco de dados experimental Replicated. Ele replica consultas DDL entre vários hosts. #16193 (tavplubix).
  • Introduzido suporte experimental a funções de janela, habilitado com allow_experimental_window_functions = 1. Esta é uma implementação preliminar, de qualidade alfa, que não é adequada para uso em produção e sofrerá mudanças incompatíveis com versões anteriores em releases futuras. Consulte a documentação para ver a lista de funcionalidades suportadas. #20337 (Alexander Kuzmenkov).
  • Adicionada a capacidade de fazer backup e restaurar arquivos de metadados do DiskS3. #18377 (Pavel Kovalenko).

Melhoria de desempenho

  • Solicitações hedged para consultas remotas. Ao habilitar use_hedged_requests (desativado por padrão), é permitido estabelecer várias conexões com diferentes réplicas para a consulta. Uma nova conexão é habilitada caso a(s) conexão(ões) existente(s) com a(s) réplica(s) não tenha(m) sido estabelecida(s) dentro de hedged_connection_timeout ou nenhum dado tenha sido recebido dentro de receive_data_timeout. A consulta usa a primeira conexão que envia um pacote Progress não vazio (ou um pacote Data, se allow_changing_replica_until_first_data_packet); as outras conexões são canceladas. Consultas com max_parallel_replicas > 1 são suportadas. #19291 (Kruglov Pavel). Isso permite reduzir significativamente a latência de cauda em clusters muito grandes.
  • Adicionado suporte a PREWHERE (com a otimização correspondente habilitada) quando as tabelas têm expressões de segurança em nível de linha definidas. #19576 (Denis Glazachev).
  • A configuração distributed_aggregation_memory_efficient vem habilitada por padrão. Ela reduz o uso de memória e melhora o desempenho das consultas distribuídas. #20599 (alexey-milovidov).
  • Melhora no desempenho do GROUP BY com múltiplas chaves de tamanho fixo. #20472 (alexey-milovidov).
  • Melhoria no desempenho das funções de agregação com aliasing mais estrito. #19946 (alexey-milovidov).
  • Acelera a leitura de tabelas Memory em casos extremos (quando a velocidade de leitura é da ordem de 50 GB/s) por meio da simplificação do pipeline e, consequentemente, da redução da contenção de bloqueios no agendamento do pipeline. #20468 (alexey-milovidov).
  • Servidor HTTP parcialmente reimplementado para fazer menos cópias dos dados de entrada e saída. Isso proporciona um ganho de desempenho de até 1,5x ao inserir registros longos por HTTP. #19516 (Ivan).
  • Adicionada a configuração compress para tabelas Memory. Se estiver habilitada, a tabela usará menos RAM. Em algumas máquinas e conjuntos de dados, ela também pode ter desempenho melhor em SELECT, mas nem sempre é o caso. Isso fecha #20093. Observação: há motivos pelos quais tabelas Memory podem funcionar mais lentamente que MergeTree: (1) ausência de compressão (2) tamanho estático dos blocos (3) ausência de índices e prewhere… #20168 (alexey-milovidov).
  • Pequena melhoria no código de agregação. #20978 (alexey-milovidov).
  • Reintroduz as especializações de intDiv/modulo para melhorar o desempenho. Isso corrige #21293 . A regressão foi introduzida em https://github.com/ClickHouse/ClickHouse/pull/18145 . #21307 (Amos Bird).
  • Não compacte demais os blocos no INSERT SELECT ao inserir em uma tabela Memory. Em versões anteriores, era criada uma representação de dados ineficiente na tabela Memory após o INSERT SELECT. Isso fecha #13052. #20169 (alexey-milovidov).
  • Corrige pelo menos um caso em que o parser de DataType pode ter complexidade exponencial (encontrado por fuzzer). Isso fecha #20096. #20132 (alexey-milovidov).
  • Paraleliza o SELECT com FINAL para uma única parte de dados com nível > 0 quando a configuração do_not_merge_across_partitions_select_final é 1. #19375 (Kruglov Pavel).
  • Preencher apenas as colunas solicitadas ao consultar system.parts e system.parts_columns. Fecha #19570. #21035 (Anmol Arora).
  • Realiza otimizações algébricas em expressões aritméticas dentro da função de agregação avg. Fecha #20092. #20183 (flynn).

Melhoria

  • Métodos de compressão, para funções de tabela, sem distinção entre maiúsculas e minúsculas. Também foi corrigido o método de compressão LZMA, que era verificado em letras maiúsculas. #21416 (Vladimir Chebotarev).
  • Adicionadas duas configurações para atrasar a inserção ou retornar erro quando há muitas partes inativas. Isso é útil quando o servidor não consegue limpar as partes com rapidez suficiente. #20178 (Amos Bird).
  • Melhora a compatibilidade com clientes mysql. 1. mysql jdbc 2. mycli. #21367 (Amos Bird).
  • Impede a remoção de uma coluna se ela for referenciada por uma visão materializada. Fecha #21164. #21303 (flynn).
  • A fonte de dicionário MySQL agora fará nova tentativa em caso de falhas inesperadas de conexão (Lost connection to MySQL server during query), que às vezes ocorrem em conexões SSL/TLS. #21237 (Alexander Kazakov).
  • Melhoria de usabilidade: parsing mais consistente de DateTime64: reconhece o caso em que um timestamp Unix com resolução de subsegundos é especificado como um inteiro escalado (como 1111111111222 em vez de 1111111111.222). Isso fecha #13194. #21053 (alexey-milovidov).
  • Faça apenas a mesclagem de blocos ordenados no nó iniciador com distributed_group_by_no_merge. #20882 (Azat Khuzhin).
  • Ao carregar a configuração da origem MySQL, o ClickHouse agora passará a embaralhar a lista de réplicas com a mesma prioridade para garantir a lógica round-robin de escolha do endpoint MySQL. Isso fecha #20629. #20632 (Alexander Kazakov).
  • Função ‘reinterpretAs(x, Type)’ renomeada para ‘reinterpret(x, Type)’. #20611 (Maksim Kita).
  • Suporte a vhost no mecanismo RabbitMQ #20576. #20596 (Kseniia Sumarokova).
  • Serialização aprimorada para tipos de dados compostos por Arrays e Tuples. Correspondência aprimorada entre tipos de dados enum e o tipo enum do protobuf. Corrigida a serialização do tipo de dado Map. Valores omitidos agora são definidos por padrão. #20506 (Vitaly Baranov).
  • Corrigida a condição de corrida entre a execução de tarefas de DDL distribuído e a limpeza da fila de DDL. Agora, a tarefa de DDL não pode ser removida do ZooKeeper se houver workers em atividade. Corrige #20016. #20448 (tavplubix).
  • Fazer com que o FQDN e outras funções relacionadas a DNS funcionem corretamente em imagens Alpine. #20336 (filimonov).
  • Não permitir o constant folding precoce de funções explicitamente proibidas. #20303 (Azat Khuzhin).
  • A conversão implícita de inteiro para o tipo Decimal podia ser bem-sucedida mesmo quando o valor inteiro não cabia no tipo Decimal. Agora, ela lança ARGUMENT_OUT_OF_BOUND. #20232 (tavplubix).
  • SYSTEM FLUSH DISTRIBUTED livre de bloqueios. #20215 (Azat Khuzhin).
  • Normalize count(constant) e sum(1) para count(). Isso é necessário para o roteamento de consultas com projeção. #20175 (Amos Bird).
  • Suporte a todos os tipos inteiros nativos nas funções de bitmap. #20171 (Amos Bird).
  • Atualizados CacheDictionary, ComplexCacheDictionary, SSDCacheDictionary e SSDComplexKeyDictionary para usar LRUHashMap como índice subjacente. #20164 (Maksim Kita).
  • A configuração access_management agora pode ser definida na inicialização ao fornecer CLICKHOUSE_DEFAULT_ACCESS_MANAGEMENT; o padrão é desabilitado (0), que era o valor anterior. #20139 (Marquitos).
  • Correção de toDateTime64(toDate()/toDateTime()) para DateTime64 - Implementação da limitação de valores de DateTime64 para corresponder ao comportamento de DateTime. #20131 (Azat Khuzhin).
  • Melhorias nas cotas: SHOW TABLES agora é considerado uma consulta nos cálculos de cota, e não duas. As consultas SYSTEM agora consomem cota. Corrigido o cálculo do fim do intervalo no consumo de cota. #20106 (Vitaly Baranov).
  • Suporta expressões path IN (set) na tabela system.zookeeper. #20105 (小路).
  • Mostrar os detalhes completos das tabelas MaterializeMySQL em system.tables. #20051 (Stig Bakken).
  • Corrigida uma condição de corrida no dicionário executável que só era possível em caso de uso indevido (quando o script retorna dados ignorando a entrada). #20045 (alexey-milovidov).
  • O valor da opção MYSQL_OPT_RECONNECT agora pode ser controlado pelo parâmetro “opt_reconnect” na seção de configuração da réplica MySQL. #19998 (Alexander Kazakov).
  • Se o usuário chamar a função JSONExtract solicitando o tipo Float32, permitir a conversão imprecisa para o tipo de resultado. Por exemplo, o número 0.1 em JSON é de precisão dupla e não pode ser representado como Float32, mas o usuário ainda quer obtê-lo. As versões anteriores retornavam 0 para o tipo não Nullable e NULL para o tipo Nullable para indicar que a conversão era imprecisa. A lógica estava 100% correta, mas isso surpreendia os usuários e gerava dúvidas. Isso encerra #13962. #19960 (alexey-milovidov).
  • Adicionar a conversão da estrutura do bloco para INSERT em tabelas Distributed caso não corresponda. #19947 (Azat Khuzhin).
  • Melhoria na tabela system.distributed_ddl_queue. Inicializa o MaxDDLEntryID com o último valor após a reinicialização. Antes deste PR, o MaxDDLEntryID permanecia em zero até que uma nova DDLTask fosse processada. #19924 (Amos Bird).
  • Exibir tabelas MaterializeMySQL em system.parts. #19770 (Stig Bakken).
  • Adicionada uma diretiva de configuração separada para o perfil Buffer. #19721 (Azat Khuzhin).
  • Mova condições não relacionadas ao JOIN para a cláusula WHERE. #18720. #19685 (hexiaoting).
  • Adicionada a capacidade de limitar a taxa de INSERT em Distributed com base na quantidade de bytes pendentes de envio assíncrono (foram adicionadas as configurações bytes_to_delay_insert/max_delay_to_insert e bytes_to_throw_insert para o engine Distributed). #19673 (Azat Khuzhin).
  • Corrige alguns casos raros em que erros de gravação podem ser ignorados em destrutores. #19451 (Azat Khuzhin).
  • Exibir frames embutidos em stack traces de erros fatais. #19317 (Ivan).

correção de bug

  • Corrige reconexões redundantes ao ZooKeeper e a possibilidade de duas sessões ativas em um único servidor ClickHouse. Ambos os problemas foram introduzidos em #14678. #21264 (alesapin).
  • Corrige o erro Bad cast from type ... to DB::ColumnLowCardinality ao inserir em uma tabela com coluna LowCardinality a partir do formato Values. Corrige #21140 #21357 (Nikolai Kochetov).
  • Corrige um deadlock em mutações ALTER DELETE para motores de tabela MergeTree não replicados quando o predicado contém a própria tabela. Corrige #20558. #21477 (alesapin).
  • Corrige SIGSEGV em consultas distribuídas em caso de falhas. #21434 (Azat Khuzhin).
  • Agora, as consultas ALTER MODIFY COLUMN passarão a refletir corretamente alterações na chave de partição, nos índices de omissão, nos TTLs e assim por diante. Corrige #13675. #21334 (alesapin).
  • Corrige um bug em join_use_nulls e ao fazer JOIN de TOTALS de subconsultas. Isso fecha #19362 e #21137. #21248 (vdimir).
  • Corrige travamento no EXPLAIN para consulta com UNION. Corrige #20876, #21170. #21246 (flynn).
  • Agora, as mutações passam a ser permitidas apenas para motores de tabela que as suportam (família MergeTree, Memory, MaterializedView). Outros motores retornarão um erro mais claro. Corrige #21168. #21183 (alesapin).
  • Corrige #21112. Corrigido um bug que poderia causar duplicatas na consulta INSERT (se um dos callbacks chegasse um pouco tarde). #21138 (Kseniia Sumarokova).
  • Corrigido o problema em que input_format_null_as_default não entrava em vigor quando os tipos eram Nullable. Isso corrige #21116 . #21121 (Amos Bird).
  • corrige bug relacionado ao cast de Tuple para Map. Fecha #21029. #21120 (hexiaoting).
  • Corrige o vazamento de metadados ao remover o Replicated*MergeTree com cluster ZooKeeper personalizado (não padrão). #21119 (fastio).
  • Corrige o problema de incompatibilidade de tipos ao usar chaves LowCardinality no joinGet. Isso corrige #21114. #21117 (Amos Bird).
  • corrige o fato de os valores default_replica_path e default_replica_name serem inúteis no mecanismo Replicated(*)MergeTree quando ele precisa especificar outros parâmetros. #21060 (mxzlxy).
  • Era possível acessar memória fora dos limites ao formatar um valor do tipo DateTime64 fora do intervalo, especialmente criado para isso. Isso corrige #20494. Isso corrige #20543. #21023 (alexey-milovidov).
  • Bloquear inserções paralelas no storage join. #21009 (vdimir).
  • Corrigido o comportamento em que ALTER MODIFY COLUMN criava uma mutação que sabidamente falharia. #21007 (Anton Popov).
  • Fecha #9969. Corrigido um erro de compressão HTTP com Brotli, que ocorria com grandes volumes de dados, estrutura um pouco mais complexa e formato de saída JSON. Brotli atualizado para a versão mais recente para incluir a “correção para acesso raro a dados não inicializados no buffer circular”. #20991 (Kseniia Sumarokova).
  • Corrige ‘Uma tarefa vazia foi retornada pela fila de tarefas assíncronas’ ao cancelar a consulta. #20881 (Azat Khuzhin).
  • A consulta USE database; não funcionava ao usar o cliente MySQL 5.7 para se conectar ao servidor ClickHouse; isso foi corrigido. Corrige #18926. #20878 (tavplubix).
  • Corrigido o uso do combinador -Distinct com o combinador -State em funções de agregação. #20866 (Anton Popov).
  • Corrige subconsulta com UNION DISTINCT e cláusula LIMIT. Fecha #20597. #20610 (flynn).
  • Corrigido o comportamento inconsistente do Dicionário em consultas nas quais procuramos chaves ausentes no dicionário. #20578 (Nikita Mikhaylov).
  • Corrige a quantidade de threads para subconsultas escalares e subconsultas de índice (após #19007, uma única thread era sempre usada). Corrige #20457, #20512. #20550 (Nikolai Kochetov).
  • Corrige uma falha que poderia ocorrer se um pacote desconhecido fosse recebido de uma consulta REMOVE (foi introduzida em #17868). #20547 (Azat Khuzhin).
  • Adiciona verificações adequadas durante a análise de nomes de diretório para async INSERT (corrige SIGSEGV). #20498 (Azat Khuzhin).
  • Corrigido o problema em que a função transform não funcionava corretamente com chaves de ponto flutuante. Fecha #20460. #20479 (flynn).
  • Corrige loop infinito ao propagar aliases de WITH para subconsultas. Isso corrige #20388. #20476 (Amos Bird).
  • Corrige o encerramento anormal do servidor quando o cliente HTTP se desconecta. #20464 (Azat Khuzhin).
  • Corrigido LOGICAL_ERROR para join_use_nulls=1 quando o JOIN contém const do SELECT. #20461 (Azat Khuzhin).
  • Verifique se a função de tabela view é usada na lista de expressões e retorne um erro. Isso corrige #20342. #20350 (Amos Bird).
  • Evita a desreferenciação inválida no dicionário RANGE_HASHED(). #20345 (Azat Khuzhin).
  • Corrige a desreferência de ponteiro nulo com join_use_nulls=1. #20344 (Azat Khuzhin).
  • Corrige o resultado incorreto de operações binárias entre dois decimais constantes de escalas diferentes. Corrige #20283. #20339 (Maksim Kita).
  • Corrige as tentativas frequentes demais de repetir tarefas em segundo plano com falha na família de motores de tabela ReplicatedMergeTree. Isso podia levar a um logging excessivamente verboso e ao aumento da carga de CPU. Corrige #20203. #20335 (alesapin).
  • Restringir DROP ou RENAME da coluna de versão dos motores de tabela *CollapsingMergeTree e ReplacingMergeTree. #20300 (alesapin).
  • Corrigido o comportamento em que, no caso de JSON corrompido, tentava-se ler o arquivo inteiro para a memória, o que levava a uma exceção do alocador. Corrige #19719. #20286 (Nikita Mikhaylov).
  • Corrige a exceção durante a mesclagem vertical em motores de tabela da família MergeTree que não permitem realizar mesclagens verticais. Corrige #20259. #20279 (alesapin).
  • Corrige uma rara falha do servidor ao recarregar a configuração durante o encerramento. Corrige #19689. #20224 (alesapin).
  • Corrige CTE ao usar INSERT SELECT. Isso corrige #20187 e #20195. #20211 (Amos Bird).
  • Corrigido #19314. #20156 (Ivan).
  • corrigida a função toMinute para lidar corretamente com fusos horários especiais. #20149 (keenwolf).
  • Corrige falha do servidor após uma consulta com a função if, com tipo Tuple no resultado dos ramos then/else. O tipo Tuple deve conter Array ou outro tipo complexo. Corrige #18356. #20133 (alesapin).
  • O mecanismo de tabela MongoDB agora só estabelece conexão quando vai ler dados. ATTACH TABLE não tentará mais estabelecer conexão. #20110 (Vitaly Baranov).
  • Correção no StorageJoin. #20079 (vdimir).
  • Corrige o caso em que, ao calcular o módulo da divisão de um número negativo por um divisor pequeno, o tipo de dado resultante não era grande o suficiente para comportar o resultado negativo. Isso fecha #20052. #20067 (alexey-milovidov).
  • MaterializeMySQL: corrige a replicação em instruções que atualizam várias tabelas. #20066 (Håvard Kvålen).
  • Evita “Connection refused” no Docker durante a execução do script de inicialização. #20012 (filimonov).
  • EmbeddedRocksDB é um mecanismo de armazenamento experimental. Corrigido o problema da falta de verificação adequada de tipos. Código simplificado. Isso fecha #19967. #19972 (alexey-milovidov).
  • Corrige uma falha de segmentação na função fromModifiedJulianDay quando o tipo do argumento é Nullable(T) para qualquer tipo integral diferente de Int32. #19959 (PHO).
  • Correção de travamento do índice BloomFilter. Corrige #19757. #19884 (Maksim Kita).
  • Era possível haver um deadlock se system.text_log estiver habilitado. Isso corrige #19874. #19875 (alexey-milovidov).
  • Corrigida a inicialização do servidor com tabelas que têm expressões padrão contendo dictGet(). Agora é possível obter o tipo de retorno de dictGet() sem carregar o dicionário. #19805 (Vitaly Baranov).
  • Corrigida a exceção de abort no clickhouse-client ao executar apenas select. #19790 (taiyang-li).
  • Corrige um bug em que a movimentação de partes para a tabela de destino podia falhar ao iniciar vários clickhouse-copiers. #19743 (madianjun).
  • Uma thread em segundo plano que executa consultas ON CLUSTER podia ficar travada, aguardando que uma tabela replicada removida fizesse algo. Isso foi corrigido. #19684 (yiguolei).

Melhoria de Build/Testes/Empacotamento

  • Permite compilar o ClickHouse com AVX-2 habilitado globalmente. Isso traz pequenos ganhos de desempenho em CPUs modernas. Não é recomendado para produção e, por enquanto, não terá suporte como build oficial. #20180 (alexey-milovidov).
  • Corrige alguns dos problemas encontrados pelo Coverity. Veja #19964. #20010 (alexey-milovidov).
  • Permite iniciar com o binário modificado no gdb. Na versão anterior, se você definisse um breakpoint no gdb antes de iniciar, o servidor se recusava a iniciar devido a uma falha na verificação de integridade. #21258 (alexey-milovidov).
  • Adiciona um teste para diferentes métodos de compressão no Kafka. #21111 (filimonov).
  • Corrige conflito de porta no teste test_storage_kerberized_hdfs. #19974 (Ilya Yatsishin).
  • Registra stdout e stderr no log quando ocorre falha ao iniciar o docker nos testes de integração. Antes deste PR, havia uma mensagem de erro muito curta nesse caso, o que não ajudava a investigar os problemas. #20631 (Vitaly Baranov).

Versão 21.2 do ClickHouse

versão do ClickHouse v21.2.2.8-stable, 2021-02-07

mudança incompatível com versões anteriores

  • Funções bit a bit (bitAnd, bitOr, etc.) não são permitidas com argumentos de ponto flutuante. Agora é necessário fazer uma conversão explícita para inteiro. #19853 (Azat Khuzhin).
  • lcm/gcd não são mais permitidos para floats. #19532 (Azat Khuzhin).
  • Corrigido o rastreamento de memória para OPTIMIZE TABLE/merges; agora os limites de memória da consulta e a amostragem são contabilizados para OPTIMIZE TABLE/merges. #18772 (Azat Khuzhin).
  • Colunas de ponto flutuante não são permitidas como chave de partição; veja #18421. #18464 (hexiaoting).
  • Parênteses em excesso nas definições de tipo não são mais suportados, por exemplo: Array((UInt8)).

Novo recurso

  • Adicionado o mecanismo de tabela PostgreSQL (com select/insert e suporte a arrays multidimensionais), também como função de tabela. Adicionada a fonte de dicionário PostgreSQL. Adicionado o mecanismo de banco de dados PostgreSQL. #18554 (Kseniia Sumarokova).
  • O tipo de dado Nested agora oferece suporte a níveis arbitrários de aninhamento. Foram introduzidas subcolunas para tipos complexos, como size0 em Array, null em Nullable e nomes de elementos de Tuple, que podem ser lidas sem precisar ler a coluna inteira. #17310 (Anton Popov).
  • Adicionado suporte a Nullable em FlatDictionary, HashedDictionary, ComplexKeyHashedDictionary, DirectDictionary, ComplexKeyDirectDictionary e RangeHashedDictionary. #18236 (Maksim Kita).
  • Adiciona uma nova tabela chamada system.distributed_ddl_queue, que exibe as consultas na fila do worker de DDL. #17656 (Bharat Nallan).
  • Adicionado suporte ao mapeamento de nomes de grupos LDAP e de valores de attribute em geral para roles locais de usuários de diretórios LDAP. #17211 (Denis Glazachev).
  • Suporte a insert na table function cluster e, para as table functions remote e cluster, suporte à distribuição de dados entre nós com a especificação da sharding key. Fecha #16752. #18264 (flynn).
  • Adiciona a função decodeXMLComponent para decodificar caracteres em XML. Exemplo: SELECT decodeXMLComponent('Hello,&quot;world&quot;!') #17659. #18542 (nauta).
  • Adicionadas as funções parseDateTimeBestEffortUSOrZero e parseDateTimeBestEffortUSOrNull. #19712 (Maksim Kita).
  • Adicionada a função matemática sign. #19527 (flynn).
  • Adicionadas informações sobre os recursos usados (funções, motores de tabela etc.) ao system.query_log. #18495. #19371 (Kseniia Sumarokova).
  • A função formatDateTime oferece suporte ao modificador %Q para formatar a data como trimestre. #19224 (Jianmei Zhang).
  • Suporte ao atalho MetaKey+Enter na UI do play. #19012 (sundyli).
  • Adiciona três funções para o tipo de dado map: 1. mapContains(map, key) para verificar se map.keys inclui a segunda chave de parâmetro. 2. mapKeys(map) retorna todas as chaves no formato Array 3. mapValues(map) retorna todos os valores no formato Array. #18788 (hexiaoting).
  • Adicionada a configuração log_comment, relacionada ao #18494. #18549 (Zijie Lu).
  • Adicionado suporte a argumento do tipo Tuple nas funções argMin e argMax. #17359 (Ildus Kurbangaliev).
  • Suporte para a sintaxe EXISTS VIEW. #18552 (Du Chuan).
  • Adicionada a sintaxe SELECT ALL. Fecha #18706. #18723 (flynn).

Melhoria de desempenho

  • Remoção mais rápida de partes ao reduzir o número de chamadas de sistema stat. Isso restaura uma otimização que existia anteriormente. Interface mais segura para IDisk. Isso fecha #19065. #19086 (alexey-milovidov).
  • Aliases declarados na instrução WITH agora são usados corretamente na análise de índice. Consultas como WITH column AS alias SELECT ... WHERE alias = ... agora podem usar um índice. #18896 (Amos Bird).
  • Adiciona optimize_alias_column_prediction (ativado por padrão), que: - considera colunas com alias no WHERE durante o pruning de partição e o skipping de dados usando índices secundários; - considera colunas com alias no WHERE em consultas triviais de contagem para optimize_trivial_count; - considera colunas com alias em GROUP BY/ORDER BY para optimize_aggregation_in_order/optimize_read_in_order. #16995 (sundyli).
  • Acelera a função de agregação sum. A melhoria só é visível em benchmarks sintéticos e não é muito prática. #19216 (alexey-milovidov).
  • Atualiza o libc++ e usa outra ABI para oferecer melhor desempenho. #18914 (Danila Kutenin).
  • Reescreve as funções sumIf() e sum(if()) como a função countIf() quando forem logicamente equivalentes. #17041 (flynn).
  • Usa um pool de conexões para conexões S3, controlado pela configuração s3_max_connections. #13405 (Vladimir Chebotarev).
  • Adiciona suporte à opção long do zstd para melhorar a compressão de colunas String e economizar espaço. #17184 (ygrek).
  • Melhora ligeiramente a latência do servidor ao remover o acesso à configuração em cada conexão. #19863 (alexey-milovidov).
  • Reduz a contenção de bloqueios em várias camadas do engine Buffer. #19379 (Azat Khuzhin).
  • Passa a oferecer suporte à divisão da etapa Filter do plano de consulta em um par Expression + Filter. Junto com a otimização de mesclagem Expression + Expression (#17458), isso pode adiar a execução de algumas expressões para depois da etapa Filter. #19253 (Nikolai Kochetov).

Melhoria

  • SELECT count() FROM table agora pode ser executado se for possível selecionar apenas uma coluna qualquer da table. Este PR corrige #10639. #18233 (Vitaly Baranov).
  • Define o conjunto de caracteres como utf8mb4 ao interagir com servidores MySQL remotos. Corrige #19795. #19800 (alexey-milovidov).
  • A table function S3 agora suporta o modo de compressão auto (detecção automática). Isso fecha #18754. #19793 (Vladimir Chebotarev).
  • Gera corretamente argumentos infinitos para a função formatReadableTimeDelta. Em versões anteriores, havia conversão implícita para um valor inteiro específico da implementação. #19791 (alexey-milovidov).
  • A função de tabela S3 usará a região global se a região não puder ser determinada com precisão. Isso resolve #10998. #19750 (Vladimir Chebotarev).
  • Em consultas distribuídas, se a configuração async_socket_for_remote estiver habilitada, era possível haver estouro de pilha, pelo menos em compilações de depuração, se um tipo de dado aninhado em profundidade excessiva fosse usado em uma tabela (por exemplo, Array(Array(Array(...more...)))). Isso corrige #19108. Esta alteração introduz uma pequena incompatibilidade com versões anteriores: parênteses em excesso em definições de tipo não são mais aceitos, por exemplo: Array((UInt8)). #19736 (alexey-milovidov).
  • Adicionar um pool separado para os brokers de mensagens (RabbitMQ e Kafka). #19722 (Azat Khuzhin).
  • Corrige um raro caso de ultrapassagem do limite max_number_of_merges_with_ttl_in_pool (mais merges com TTL podem ser atribuídos) para MergeTree não replicado. #19708 (alesapin).
  • Dicionário: mensagem de erro mais clara durante a análise de atributos. #19678 (Maksim Kita).
  • Adiciona uma opção para desativar a validação de checksums durante a leitura. Nunca deve ser usada em produção. Não espere nenhum benefício ao desativá-la. Ela só pode ser usada para experimentos e benchmarks. A configuração se aplica apenas a tabelas da família MergeTree. Os checksums são sempre validados para outros motores de tabela e ao receber dados pela rede. Pelas minhas observações, não há diferença de desempenho, ou ela é inferior a 0,5%. #19588 (alexey-milovidov).
  • Suporte para resultado constante na função multiIf. #19533 (Maksim Kita).
  • Habilita as funções length/empty/notEmpty para o tipo de dado Map, que retornam o número de chaves no Map. #19530 (taiyang-li).
  • Adicionada a opção --reconnect ao clickhouse-benchmark. Quando essa opção é especificada, a conexão é restabelecida antes de cada solicitação. Isso é necessário para testes. #19872 (alexey-milovidov).
  • Suporte ao novo local do arquivo .debug. Isso corrige #19348. #19520 (Amos Bird).
  • A função toIPv6 faz o parsing de endereços IPv4. #19518 (Bharat Nallan).
  • Adiciona o campo http_referer a system.query_log, system.processes, etc. Isso fecha #19389. #19390 (alexey-milovidov).
  • Melhora a compatibilidade com MySQL ao tornar mais funções insensíveis a maiúsculas e minúsculas e ao adicionar aliases. #19387 (Daniil Kondratyev).
  • Adicionar métricas para tipos de partes do MergeTree (Wide/Compact/InMemory). #19381 (Azat Khuzhin).
  • Permitir que o Docker seja executado com um UID arbitrário. #19374 (filimonov).
  • Corrige o alinhamento incorreto dos valores do tipo de dado IPv4 nos formatos Pretty. Eles eram alinhados à direita, e não à esquerda. Isso fecha #19184. #19339 (alexey-milovidov).
  • Permite alterar max_server_memory_usage sem reiniciar. Fecha #18154. #19186 (alexey-milovidov).
  • A exceção gerada quando a função bar é chamada com determinado argumento NaN pode ser um pouco enganosa nas versões anteriores. Isso corrige #19088. #19107 (alexey-milovidov).
  • Defina explicitamente o uid / gid do usuário e do grupo clickhouse com os valores fixos (101) nas imagens do clickhouse-server. #19096 (filimonov).
  • Corrigido o erro PeekableReadBuffer: Memory limit exceed ao inserir dados com strings muito grandes. Corrige #18690. #18979 (tavplubix).
  • Imagem Docker: várias melhorias no entrypoint do clickhouse-server. #18954 (filimonov).
  • Adicionadas normalizeQueryKeepNames e normalizedQueryHashKeepNames para normalizar consultas sem mascarar nomes longos com ?. Isso ajuda a analisar melhor os logs de consultas complexas. #18910 (Amos Bird).
  • Verifica a soma de verificação por bloco do lote distribuído no remetente antes do envio (sem ler o arquivo duas vezes; as somas de verificação serão verificadas durante a leitura); isso evitará o travamento do INSERT no destinatário (em caso de arquivo .bin truncado no remetente). Evita ler arquivos .bin duas vezes para INSERTs em lote (isso era necessário para calcular linhas/bytes e levar o squashing em conta; agora, essas informações são incluídas no cabeçalho, e a compatibilidade com versões anteriores é preservada). #18853 (Azat Khuzhin).
  • Corrige problemas com RIGHT e FULL JOIN de tabelas com estados de funções de agregação. Em versões anteriores, era gerada uma exceção relacionada ao método cloneResized. #18818 (templarzq).
  • Adicionadas configurações de endpoint do S3 com base em prefixo. #18812 (Vladimir Chebotarev).
  • Adicionado suporte aos tipos de argumentos [UInt8, UInt16, UInt32, UInt64] para as funções bitmapTransform, bitmapSubsetInRange, bitmapSubsetLimit e bitmapContains. Isso fecha #18713. #18791 (sundyli).
  • Permitir atribuir aliases adicionais a CTEs (expressões de tabela comuns). Propagar a CSE (eliminação de subexpressões comuns) para subconsultas no mesmo nível quando enable_global_with_statement = 1. Isso corrige #17378. Isso corrige https://github.com/ClickHouse/ClickHouse/pull/16575#issuecomment-753416235. #18684 (Amos Bird).
  • Atualizado o librdkafka para v1.6.0-RC2. Corrige #18668. #18671 (filimonov).
  • Em caso de exceções inesperadas, reinicia automaticamente a thread em segundo plano responsável por executar consultas de DDL distribuído. Corrige #17991. #18285 (徐炘).
  • Atualizado o SDK AWS C++ para usar regiões globais no S3. #17870 (Vladimir Chebotarev).
  • Adicionado suporte à cláusula WITH ... [AND] [PERIODIC] REFRESH [interval_in_sec] na criação de tabelas LIVE VIEW. #14822 (vzakaznikov).
  • Restringe consultas MODIFY TTL para tabelas MergeTree criadas com a sintaxe antiga. Antes, a consulta era executada com sucesso, mas, na prática, não tinha efeito. #19064 (Anton Popov).

Correção de bug

  • Corrige a análise de índice de funções binárias com argumento constante, que resultava em consultas com resultados incorretos. Isso corrige #18364. #18373 (Amos Bird).
  • Corrigida a inicialização do servidor com tabelas que têm expressões padrão contendo dictGet(). Agora é possível obter o tipo de retorno de dictGet() sem carregar o dicionário. #19805 (Vitaly Baranov).
  • Corrige falha do servidor após uma consulta com a função if, em que o tipo Tuple do resultado dos ramos then/else. O tipo Tuple deve conter Array ou outro tipo complexo. Corrige #18356. #20133 (alesapin).
  • MaterializeMySQL (funcionalidade experimental): Corrige a replicação de instruções que atualizam várias tabelas. #20066 (Håvard Kvålen).
  • Evita o erro “Conexão recusada” no Docker durante a execução do script de inicialização. #20012 (filimonov).
  • EmbeddedRocksDB é um mecanismo de armazenamento Experimental. Corrigido o problema da falta de verificação adequada de tipos. Código simplificado. Isso fecha #19967. #19972 (alexey-milovidov).
  • Corrige uma falha de segmentação na função fromModifiedJulianDay quando o tipo do argumento é Nullable(T) para qualquer tipo integral diferente de Int32. #19959 (PHO).
  • A função greatCircleAngle retornava resultados imprecisos em versões anteriores. Isso fecha #19769. #19789 (alexey-milovidov).
  • Corrige um bug raro em que algumas operações replicadas (como mutation) não conseguem processar certas partes após uma corrupção de dados. Corrige #19593. #19702 (alesapin).
  • A thread em segundo plano que executa consultas ON CLUSTER podia travar enquanto esperava que uma tabela replicada removida fizesse alguma coisa. Isso foi corrigido. #19684 (yiguolei).
  • Corrige a desserialização incorreta da descrição de colunas. Isso impossibilita fazer INSERT em uma tabela com uma coluna chamada \. #19479 (alexey-milovidov).
  • Marcar o lote distribuído como inválido em caso de bloco de dados vazio em um dos arquivos. #19449 (Azat Khuzhin).
  • Corrigido um bug muito raro que poderia fazer com que a mutation ficasse bloqueada após DROP/DETACH/REPLACE/MOVE PARTITION. Isso já havia sido parcialmente corrigido por #15537 na maioria dos casos. #19443 (tavplubix).
  • Corrige o possível erro Extremes transform was already added to pipeline. Corrige #14100. #19430 (Nikolai Kochetov).
  • Corrige o valor padrão em tipos de join cujo valor padrão é diferente de zero (por exemplo, alguns Enums). Fecha #18197. #19360 (vdimir).
  • Não marcar como corrompido o arquivo de envio distribuído ao encontrar EOF. #19290 (Azat Khuzhin).
  • Correção do vazamento do descritor de arquivo (fd) do pipe para async_socket_for_remote. #19153 (Azat Khuzhin).
  • Corrige a leitura infinita de um arquivo no formato ORC (introduzido em #10580). Corrige #19095. #19134 (Nikolai Kochetov).
  • Corrige um problema no escritor de dados do MergeTree que pode resultar em marcas com tamanho maior que a granularidade fixa. Corrige #18913. #19123 (alesapin).
  • Corrige um bug na inicialização quando o ClickHouse não conseguia ler o codec de compressão de LowCardinality(Nullable(...)) e lançava a exceção Attempt to read after EOF. Corrige #18340. #19101 (alesapin).
  • Simplifica a implementação de tupleHammingDistance. Adiciona suporte a tuplas de qualquer comprimento, desde que tenham o mesmo tamanho. Corrige #19029. #19084 (Nikolai Kochetov).
  • Certifique-se de que groupUniqArray retorne o tipo correto para um argumento do tipo Enum. Isso fecha #17875. #19019 (alexey-milovidov).
  • Corrige um possível erro Expected single dictionary argument for function ao usar a função ignore com o argumento LowCardinality. Corrige #14275. #19016 (Nikolai Kochetov).
  • Corrigida a inserção da coluna LowCardinality em uma tabela com a engine TinyLog. Corrige #18629. #19010 (Nikolai Kochetov).
  • Corrige um pequeno problema em JOIN: Join tenta materializar colunas constantes, mas, em outras partes, nosso código espera por elas. #18982 (Nikita Mikhaylov).
  • Desative optimize_move_functions_out_of_any, porque a otimização nem sempre está correta. Isso corrige #18051. Isso corrige #18973. #18981 (alexey-milovidov).
  • Corrige uma possível exceção QueryPipeline stream: different number of columns causada pela mesclagem das etapas Expression do plano de consulta. Corrige #18190. #18980 (Nikolai Kochetov).
  • Corrigido um deadlock muito raro durante o desligamento. #18977 (tavplubix).
  • Corrigidas falhas raras quando o servidor ficava sem memória. #18976 (tavplubix).
  • Corrige o comportamento incorreto quando a consulta ALTER TABLE ... DROP PART 'part_name' remove todos os blocos de desduplicação de toda a partição. Corrige #18874. #18969 (alesapin).
  • Corrigido o problema #18894: adicionada uma verificação para evitar uma exceção quando um alias longo de coluna (no estilo ‘table.column’, geralmente gerado automaticamente por ferramentas de BI como o Looker) é igual a um nome de tabela longo. #18968 (Daniel Qin).
  • Corrigido o erro Task was not found in task queue (possível apenas para consultas remotas, com async_socket_for_remote = 1). #18964 (Nikolai Kochetov).
  • Corrige um bug quando uma mutação contendo texto escapado (como ALTER ... UPDATE e = CAST('foo', 'Enum8(\'foo\' = 1')) era serializada incorretamente. Corrige #18878. #18944 (alesapin).
  • ATTACH PARTITION redefinirá as mutações. #18804. #18935 (fastio).
  • Corrige o problema em bitmapOrCardinality que pode levar à desreferenciação de um nullptr. Isso encerra #18911. #18912 (sundyli).
  • Corrigido o erro Attempt to read after eof ao tentar fazer CAST de NULL de Nullable(String) para Nullable(Decimal(P, S)). Agora, a função CAST retorna NULL quando não consegue interpretar um valor decimal a partir de uma string anulável. Corrige #7690. #18718 (Winter Zhang).
  • Corrige problema de conversão de tipo de dados no engine MySQL. #18124 (bo zeng).
  • Corrige a exceção de abort do clickhouse-client ao executar somente select. #19790 (taiyang-li).

Melhoria de Build/Testes/Empacotamento

  • Execução do SQLancer (fuzzer lógico de SQL) no CI. #19006 (Ilya Yatsishin).
  • O Query Fuzzer agora aplica fuzzing mais extensivo aos testes adicionados recentemente. Isso fecha #18916. #19185 (alexey-milovidov).
  • Integração com Big List of Naughty Strings para melhorar o fuzzing. #19480 (alexey-milovidov).
  • Adicionada a execução de testes de integração com MSan. #18974 (alesapin).
  • Corrigidos erros do MemorySanitizer em cyrus-sasl e musl. #19821 (Ilya Yatsishin).
  • A verificação de argumentos insuficientes na função positionCaseInsensitiveUTF8 acionava o AddressSanitizer. #19720 (alexey-milovidov).
  • Removido --project-directory do docker-compose no teste de integração. Corrigida a formatação dos logs do contêiner Docker. #19706 (Ilya Yatsishin).
  • A geração de macros.xml para testes de integração ficou mais fácil. Não há mais logging excessivo do dicttoxml. O projeto dicttoxml está inativo há mais de 5 anos. #19697 (Ilya Yatsishin).
  • Passou a ser possível habilitar ou desabilitar explicitamente o watchdog pela variável de ambiente CLICKHOUSE_WATCHDOG_ENABLE. Por padrão, ele fica habilitado se o servidor não estiver conectado a um terminal. #19522 (alexey-milovidov).
  • Agora é possível compilar o ClickHouse com suporte a Kafka em arm64. #19369 (filimonov).
  • Agora é possível compilar o librdkafka sem SSL. #19337 (filimonov).
  • Restaurada a entrada do Kafka nas builds do FreeBSD. #18924 (Alexandre Snarskii).
  • Corrigida uma possível desreferenciação de ponteiro nulo na table function VALUES. #19357 (alexey-milovidov).
  • Evitados relatórios do UBSan na função arrayElement, em substring e em arraySum. Corrige #19305. Corrige #19287. Isso fecha #19336. #19347 (alexey-milovidov).

Versão do ClickHouse 21.1

Versão do ClickHouse v21.1.3.32-stable, 2021-02-03

correção de bug

  • Correção de falha no índice BloomFilter. Corrige #19757. #19884 (Maksim Kita).
  • Corrige um travamento ao fazer pushdown de predicados em subconsulta UNION DISTINCT. Isso corrige #19855. #19861 (Amos Bird).
  • Corrigida a filtragem para UInt8 maior que 127. #19799 (Anton Popov).
  • Em versões anteriores, argumentos incomuns para a função arrayEnumerateUniq podem provocar falha ou loop infinito. Isso resolve #19787. #19788 (alexey-milovidov).
  • Corrigido estouro de pilha ao usar a comparação exata de tipo aritmético com tipo String. #19773 (tavplubix).
  • Corrige uma falha quando o nome de uma coluna aninhada era usado em WHERE ou PREWHERE. Corrige #19755. #19763 (Nikolai Kochetov).
  • Corrige uma falha de segmentação na função bitmapAndnot. Corrige #19668. #19713 (Maksim Kita).
  • Algumas funções com inteiros grandes podem causar segfault. Inteiros grandes são um recurso experimental. Isso fecha #19667. #19672 (alexey-milovidov).
  • Corrige o resultado incorreto da função neighbor para o argumento LowCardinality. Corrige #10333. #19617 (Nikolai Kochetov).
  • Corrigido o uso do CompressedWriteBuffer após a liberação de memória em Connection, depois da desconexão. #19599 (Azat Khuzhin).
  • A consulta DROP/DETACH TABLE table ON CLUSTER cluster SYNC podia travar; isso foi corrigido. Corrige #19568. #19572 (tavplubix).
  • Correção da expressão id em consultas CREATE DICTIONARY. #19571 (Maksim Kita).
  • Corrigido SIGSEGV ao usar merge_tree_min_rows_for_concurrent_read/merge_tree_min_bytes_for_concurrent_read=0/UINT64_MAX. #19528 (Azat Khuzhin).
  • Era possível ocorrer um estouro de buffer (na leitura de memória) se a função addMonth fosse chamada com argumentos especialmente elaborados. Isso corrige #19441. Isso corrige #19413. #19472 (alexey-milovidov).
  • Era possível fazer a leitura de memória não inicializada nas funções encrypt/decrypt se uma string vazia fosse passada como IV. Isso corrige #19391. #19397 (alexey-milovidov).
  • Corrigido um possível estouro de buffer na biblioteca Uber H3. Veja https://github.com/uber/h3/issues/392. Isso fecha #19219. #19383 (alexey-milovidov).
  • Corrigida a coluna _state de system.parts (LOGICAL_ERROR ao consultar essa coluna, devido à ordem incorreta). #19346 (Azat Khuzhin).
  • Corrigido um possível resultado incorreto ou segfault na agregação quando a visão materializada e sua tabela de destino têm estruturas diferentes. Corrige #18063. #19322 (tavplubix).
  • Corrigido o erro Cannot convert column now64() because it is constant but values of constants are different in source and result. Continuação de #7156. #19316 (Nikolai Kochetov).
  • Corrigido bug em que consultas ALTER e DROP simultâneas podem travar ao processar uma tabela ReplicatedMergeTree. #19237 (alesapin).
  • Corrigido o erro There is no checkpoint ao inserir dados pela interface HTTP usando o formato Template ou CustomSeparated. Corrige #19021. #19072 (tavplubix).
  • Desabilita o constant folding para subconsultas na etapa de análise, quando o resultado não pode ser calculado. #18446 (Azat Khuzhin).
  • A mutação pode travar à espera de uma parte inexistente após MOVE ou REPLACE PARTITION ou, em casos raros, após DETACH ou DROP PARTITION. Isso foi corrigido. #15537 (tavplubix).

Versão do ClickHouse v21.1.2.15-stable 2021-01-18

Mudança incompatível com versões anteriores

  • A configuração input_format_null_as_default fica habilitada por padrão. #17525 (alexey-milovidov).
  • Verifique as restrições de configurações para as configurações de perfil no arquivo de configuração. O servidor não iniciará se users.xml contiver configurações que não atendam às restrições correspondentes. #18486 (tavplubix).
  • Restrinja ALTER MODIFY SETTING para impedir alterações em configurações de armazenamento que afetam as partes de dados (write_final_mark e enable_mixed_granularity_parts). #18306 (Amos Bird).
  • Defina insert_quorum_parallel como 1 por padrão. É significativamente mais conveniente de usar do que quorum inserts “sequenciais”. Mas, se você depende de consistência sequencial, deve voltar a configuração para zero. #17567 (alexey-milovidov).
  • Remova a função sumburConsistentHash. Isso encerra #18120. #18656 (alexey-milovidov).
  • As aggregate functions timeSeriesGroupSum, timeSeriesGroupRateSum foram removidas porque um amigo meu disse que elas nunca funcionaram. Isso corrige #16869. Se você teve sorte usando essas funções, envie um e-mail para feedback@clickhouse.com. #17423 (alexey-milovidov).
  • Proíba toUnixTimestamp(Date()) (antes, ele apenas retornava a representação UInt16 de Date). #17376 (Azat Khuzhin).
  • Permita o uso de tipos inteiros estendidos (Int128, Int256, UInt256) nas funções avg e avgWeighted. Também permita o uso de tipos diferentes (inteiro, decimal, ponto flutuante) para o valor e o peso na função avgWeighted. Esta é uma mudança incompatível com versões anteriores: agora, as funções avg e avgWeighted sempre retornam Float64 (como documentado). Antes dessa mudança, o tipo de retorno para argumentos Decimal também era Decimal. #15419 (Mike).
  • A expressão toUUID(N) não funciona mais. Substitua por toUUID('00000000-0000-0000-0000-000000000000'). Essa mudança foi motivada pelos resultados pouco óbvios de toUUID(N) quando N não é zero.
  • Certificados SSL com “key usage” incorreto são rejeitados. Em versões anteriores, eles funcionavam. Veja #19262.
  • As referências incl ao arquivo de substitutions (/etc/metrika.xml) foram removidas da configuração padrão (<remote_servers>, <zookeeper>, <macros>, <compression>, <networks>). Se você estava usando o arquivo de substitutions e dependia dessas referências implícitas, deve adicioná-las novamente de forma manual e explícita, incluindo as seções correspondentes com atributos incl="..." antes da atualização. Veja #18740 (alexey-milovidov).

Novo recurso

  • Implementação do protocolo gRPC no ClickHouse. #15111 (Vitaly Baranov).
  • Permite usar vários clusters do ZooKeeper. #17070 (fastio).
  • Implementadas as consultas REPLACE TABLE e CREATE OR REPLACE TABLE. #18521 (tavplubix).
  • Implementa UNION DISTINCT e trata a cláusula UNION sem modificador como UNION DISTINCT por padrão. Adiciona a configuração union_default_mode, que permite tratá-la como UNION ALL ou exigir a especificação explícita do modo. #16338 (flynn).
  • Adicionada a função accurateCastOrNull. Isso encerra #10290. Adicionadas conversões de tipo em expressões x IN (subquery). Isso encerra #10266. #16724 (Maksim Kita).
  • O Dicionário IP oferece suporte nativo aos tipos IPv4 / IPv6. #17571 (vdimir).
  • O Dicionário IP oferece suporte à busca por chave. Resolve #18241. #18480 (vdimir).
  • Adiciona suporte à compressão/descompressão *.zst para importação e exportação de dados. Isso permite usar *.zst na função file() e Content-encoding: zstd no cliente HTTP. Isso fecha #16791 . #17144 (Abi Palagashvili).
  • Adicionadas as funções de agregação mannWitneyUTest, studentTTest e welchTTest. rankCorr foi ligeiramente refatorada. #16883 (Nikita Mikhaylov).
  • Adicionadas as funções countMatches/countMatchesCaseInsensitive. #17459 (Azat Khuzhin).
  • Implementa countSubstrings()/countSubstringsCaseInsensitive()/countSubstringsCaseInsensitiveUTF8() (Conta o número de ocorrências de uma substring). #17347 (Azat Khuzhin).
  • Adicionadas informações sobre bancos de dados, tabelas e colunas usados no system.query_log. Adicionados os campos query_kind e normalized_query_hash. #17726 (Amos Bird).
  • Adiciona a configuração optimize_on_insert. Quando habilitada, ela faz a mesma transformação no bloco de dados inserido com INSERT como se um merge tivesse sido feito nesse bloco (por exemplo, Replacing, Collapsing, Aggregating…). Essa configuração vem habilitada por padrão. Isso pode influenciar o comportamento da visão materializada e do MaterializeMySQL (veja a descrição detalhada). Isso fecha #10683. #16954 (Kruglov Pavel).
  • Autenticação Kerberos para HDFS. #16621 (Ilya Golshtein).
  • Suporte à instrução SHOW SETTINGS para exibir os parâmetros de system.settings. SHOW CHANGED SETTINGS e a cláusula LIKE/ILIKE também são suportados. #18056 (Jianmei Zhang).
  • A função position agora é compatível com a sintaxe POSITION(needle IN haystack) para manter compatibilidade com SQL. Isso fecha #18701. … #18779 (Jianmei Zhang).
  • Agora há uma nova configuração de armazenamento max_partitions_to_read para tabelas da família MergeTree. Ela limita o número máximo de partições que podem ser acessadas em uma consulta. Também foi adicionada a configuração de usuário force_max_partition_limit para impor essa restrição. #18712 (Amos Bird).
  • Adicionada a coluna query_id a system.part_log para partes inseridas. Fecha #10097. #18644 (flynn).
  • Permite CREATE TABLE AS SELECT com especificação de colunas. Exemplo: CREATE TABLE t1 (x String) ENGINE = Memory AS SELECT 1;. #18060 (Maksim Kita).
  • Foram adicionadas as funções de agregação arrayMin, arrayMax, arrayAvg. #18032 (Maksim Kita).
  • Implementada a consulta ATTACH TABLE name FROM 'path/to/data/' (col1 Type1, .... Ela cria uma nova tabela com a estrutura fornecida e associa à tabela os dados do diretório especificado em user_files. #17903 (tavplubix).
  • Adicionado suporte a mutation no StorageMemory. Isso fecha #9117. #15127 (flynn).
  • Suporte para a sintaxe EXISTS DATABASE name. #18458 (Du Chuan).
  • Suporte às funções integradas isIPv4String && isIPv6String, como no MySQL. #18349 (Du Chuan).
  • Adiciona uma nova configuração insert_distributed_one_random_shard = 1 para permitir a inserção em uma tabela distribuída com múltiplos shards sem chave de distribuição. #18294 (Amos Bird).
  • Adiciona as configurações min_compress_block_size e max_compress_block_size a MergeTreeSettings, que têm prioridade sobre as configurações globais e entram em vigor quando definidas. fecha 13890. #17867 (flynn).
  • Adicionado suporte a bitmaps roaring de 64 bits. #17858 (Andy Yang).
  • Sintaxe de OPTIMIZE ... DEDUPLICATE expandida para permitir uma lista explícita (ou implícita com asterisco/transformadores de coluna) de colunas nas quais verificar duplicatas. … #17846 (Vasily Nemkov).
  • Adicionadas as funções toModifiedJulianDay, fromModifiedJulianDay, toModifiedJulianDayOrNull e fromModifiedJulianDayOrNull. Essas funções convertem entre datas do calendário gregoriano proléptico e números do Dia Juliano Modificado. #17750 (PHO).
  • Adicionada a possibilidade de usar uma lista personalizada de TLDs: adicionadas as funções firstSignificantSubdomainCustom, cutToFirstSignificantSubdomainCustom. #17748 (Azat Khuzhin).
  • Adiciona suporte ao protocolo PROXYv1 para encapsular a interface TCP nativa. Permite associar cotas ao endereço IP encaminhado pelo proxy (aplicado ao endereço PROXYv1 e ao X-Forwarded-For da interface HTTP). Isso é útil quando você fornece acesso ao ClickHouse apenas por meio de um proxy confiável (por exemplo, CloudFlare), mas quer contabilizar o uso de recursos dos usuários pelos seus endereços IP originais. Isso corrige #17268. #17707 (alexey-milovidov).
  • Agora, o clickhouse-client permite abrir o EDITOR para editar comandos. Alt-Shift-E. #17665 (Amos Bird).
  • Adicionada a função encodeXMLComponent para escapar caracteres ao inserir uma string em um nó de texto ou atributo XML. #17659 (nauta).
  • Introduz a sintaxe DETACH TABLE/VIEW ... PERMANENTLY, de modo que, após a reinicialização, a tabela não volte a aparecer automaticamente (somente mediante solicitação explícita). A tabela ainda pode ser reanexada usando a sintaxe curta ATTACH TABLE. Implementa #5555. Corrige #13850. #17642 (filimonov).
  • Adiciona métricas assíncronas para a quantidade total de linhas, bytes e partes em tabelas MergeTree. Isso corrige #11714. #17639 (flynn).
  • Adicionadas as configurações limit e offset para paginação fora do SQL: #16176 Elas são úteis para criar APIs. Essas duas configurações afetarão a consulta SELECT como se tivessem sido adicionadas assim: select * from (your_original_select_query) t limit xxx offset xxx;. #17633 (hexiaoting).
  • Adiciona um novo combinador de agregação: -SimpleState para criar tipos SimpleAggregateFunction por meio de consulta. Isso é útil para definir MaterializedView com engine AggregatingMergeTree e também beneficiará as projeções. #16853 (Amos Bird).
  • Adicionado o parâmetro queries-file ao clickhouse-client e ao clickhouse-local. #15930 (Maksim Kita).
  • Adicionado o parâmetro query para clickhouse-benchmark. #17832 (Maksim Kita).
  • EXPLAIN AST agora oferece suporte a consultas além de SELECT. #18136 (taiyang-li).

Funcionalidade Experimental

  • Adicionadas funções para cálculo de minHash e simHash de n-grams de texto e shingles. Elas se destinam à busca de semiduplicatas. Também foram adicionadas as funções bitHammingDistance e tupleHammingDistance. #7649 (flynn).
  • Adicionado o novo tipo de dado Map. Veja #1841. A primeira versão do Map oferece suporte apenas a String como tipo de chave e de valor. #15806 (hexiaoting).
  • Implementado um parser SQL alternativo, baseado no runtime do ANTLR4 e gerado a partir da gramática EBNF. #11298 (Ivan).

Melhoria de desempenho

  • Nova implementação de Dicionário IP com menor consumo de memória, desempenho aprimorado em alguns casos e bugs corrigidos. #16804 (vdimir).
  • Formatação paralela para exportação de dados. #11617 (Nikita Mikhaylov).
  • Integração com LDAP: Adicionado o parâmetro verification_cooldown à configuração de conexão do servidor LDAP para permitir o armazenamento em cache de tentativas de “bind” bem-sucedidas por um período configurável. #15988 (Denis Glazachev).
  • Adicionada a opção --no-system-table ao clickhouse-local para executá-lo sem tabelas de sistema. Isso evita a inicialização de DateLUT, que pode levar um tempo perceptível (dezenas de milissegundos) na inicialização. #18899 (alexey-milovidov).
  • Substituído PODArray por PODArrayWithStackMemory em AggregateFunctionWindowFunnelData para melhorar o desempenho da função windowFunnel. #18817 (flynn).
  • Não enviar blocos vazios para shards em INSERT síncrono na tabela Distributed. Isso encerra #14571. #18775 (alexey-milovidov).
  • Leitura do StorageMemory otimizada. #18052 (Maksim Kita).
  • Uso do algoritmo Dragonbox para conversão de float para string em vez de ryu. Isso melhora significativamente o desempenho da conversão de float para string. #17831 (Maksim Kita).
  • Implementação de IPv6CIDRToRange acelerada. #17569 (vdimir).
  • Adicionada a configuração remerge_sort_lowered_memory_bytes_ratio (se o uso de memória após o remerge não for reduzido nessa proporção, o remerge será desativado). #17539 (Azat Khuzhin).
  • Melhora no desempenho do AggregatingMergeTree com SimpleAggregateFunction(String) na PK. #17109 (Azat Khuzhin).
  • Agora, o combinador -If foi desvirtualizado, e count foi vetorizado corretamente. Isso se refere a este PR. #17043 (Amos Bird).
  • Corrige o desempenho da leitura de tabelas Merge que abrangem um grande número de tabelas MergeTree. Corrige #7748. #16988 (Anton Popov).
  • Melhoria no desempenho da função repeat. #16937 (satanson).
  • Pequena melhora no desempenho da análise de números de ponto flutuante. #16809 (Maksim Kita).
  • Adicionada a possibilidade de ignorar partições já mescladas para OPTIMIZE TABLE ... FINAL. #15939 (Kruglov Pavel).
  • Integração com fast_float from Daniel Lemire para fazer o parse de números de ponto flutuante. #16787 (Maksim Kita). Não está habilitado, porque o desempenho ainda é inferior ao do parser aproximado de float no ClickHouse.
  • Corrigido max_distributed_connections (afeta prefer_localhost_replica = 1 e max_threads != max_distributed_connections). #17848 (Azat Khuzhin).
  • Escolha adaptativa entre upload de uma única parte e upload em múltiplas partes ao enviar dados para o S3. O upload de uma única parte é controlado por uma nova configuração max_single_part_upload_size. #17934 (Pavel Kovalenko).
  • Suporte a tarefas assíncronas no PipelineExecutor. Suporte inicial a sockets assíncronos para consultas remotas. #17868 (Nikolai Kochetov).
  • Permite usar a otimização optimize_move_to_prewhere com partes compactas quando os tamanhos das colunas são desconhecidos. #17330 (Anton Popov).

Melhoria

  • Evita deadlock ao executar INSERT SELECT na própria tabela quando ela usa os motores de tabela TinyLog ou Log. Isso fecha #6802. Isso fecha #18691. Isso fecha #16812. Isso fecha #14570. #15260 (alexey-milovidov).
  • Suporte à sintaxe SHOW CREATE VIEW name, como no MySQL. #18095 (Du Chuan).
  • Todas as consultas do tipo Decimal * Float ou vice-versa são permitidas, incluindo as agregadas (por exemplo, SELECT sum(decimal_field * 1.1) ou SELECT dec_col * float_col); o tipo do resultado é Float32 ou Float64. #18145 (Mike).
  • Interface Web mínima aprimorada: adicionar histórico; adicionar suporte a compartilhamento; evitar condição de corrida entre diferentes solicitações; adicionar indicadores de solicitação em andamento e de prontidão; adicionar favicon; detectar Ctrl+Enter se a área de texto não estiver em foco. #17293 #17770 (alexey-milovidov).
  • clickhouse-server não enviava a solicitação close ao servidor ZooKeeper. #16837 (alesapin).
  • Evita o encerramento anormal do servidor em caso de limites de memória muito baixos (max_memory_usage = 1 / max_untracked_memory = 1). #17453 (Azat Khuzhin).
  • Corrige o resultado não determinístico da função windowFunnel no caso de eventos diferentes com o mesmo timestamp. #18884 (Fuwang Hu).
  • Docker: Defina explicitamente o uid / gid do usuário e do grupo clickhouse com os valores fixos (101) nas imagens Docker do clickhouse-server. #19096 (filimonov).
  • INSERTs assíncronos em tabelas Distributed: duas novas configurações (por analogia com a família MergeTree) foram adicionadas: - fsync_after_insert - Executa fsync a cada inserção. Isso reduz o desempenho das inserções. - fsync_directories - Executa fsync no diretório temporário (usado apenas para INSERTs assíncronos) após todas as operações (gravações, renomeações etc.). #18864 (Azat Khuzhin).
  • O comando SYSTEM KILL passou a funcionar no Docker. Isso resolve #18847. #18848 (alexey-milovidov).
  • Expande macros no caminho do zk ao executar FETCH PARTITION. #18839 (fastio).
  • Aplique ALTER TABLE <replicated_table> ON CLUSTER MODIFY SETTING ... a todas as réplicas, porque esses comandos ALTER não são replicados. #18789 (Amos Bird).
  • Permitir que o transformador de coluna EXCEPT aceite uma string como padrão de expressão regular. Isso resolve #18685 . #18699 (Amos Bird).
  • Corrigido o SimpleAggregateFunction no SummingMergeTree. Agora, ele funciona como AggregateFunction. Em versões anteriores, os valores eram somados independentemente da função de agregação. Isso corrige #18564 . #8052. #18637 (Amos Bird). Outra correção no uso de SimpleAggregateFunction no SummingMergeTree. Isso corrige #18676 . #18677 (Amos Bird).
  • Corrigido erro de asserção no allocator no caso em que o último argumento da função bar é NaN. Agora uma exceção simples do ClickHouse é lançada. Isso corrige #17876. #18520 (Nikita Mikhaylov).
  • Corrigido um problema de usabilidade: falta de quebra de linha após a mensagem de exceção em algumas ferramentas. #18444 (alexey-milovidov).
  • Adicionada a capacidade de modificar o tipo das colunas da chave primária e da chave de partição de LowCardinality(Type) para Type e vice-versa. Também foi adicionada a capacidade de modificar o tipo da coluna da chave primária de EnumX para IntX. Corrige #5604. #18362 (alesapin).
  • Implementado o acesso a campos de untuple. #18133. #18309 (hexiaoting).
  • Permite fazer o parse de campos Array de CSV quando ele é representado como uma String contendo um array serializado como CSV aninhado. Exemplo: "[""Hello"", ""world"", ""42"""" TV""]" será interpretado como ['Hello', 'world', '42" TV']. Permite fazer o parse de array em CSV em uma string sem chaves delimitadoras. Exemplo: "'Hello', 'world', '42"" TV'" será interpretado como ['Hello', 'world', '42" TV']. #18271 (alexey-milovidov).
  • Melhorado o cálculo adaptativo de granularidade para partes wide da MergeTree. #18223 (alesapin).
  • Agora, o clickhouse install pode funcionar no Mac. O problema era que não existe procfs nessa plataforma. #18201 (Nikita Mikhaylov).
  • Melhores dicas sobre a sintaxe da consulta SHOW .... #18183 (Du Chuan).
  • Suporte a agregações de Array arrayMin, arrayMax, arraySum, arrayAvg para Int128, Int256, UInt256. #18147 (Maksim Kita).
  • Adicionado disk às configurações de armazenamento de Set e Join. #18112 (Grigory Pervakov).
  • Controle de acesso: agora, a função de tabela merge() exige que o usuário atual tenha o privilégio SELECT em cada tabela da qual obtém dados. Este PR corrige #16964. #18104 #17983 (Vitaly Baranov).
  • As tabelas temporárias agora ficam visíveis nas tabelas do sistema system.tables e system.columns apenas na sessão em que foram criadas. O banco de dados interno _temporary_and_external_tables agora fica oculto nessas tabelas do sistema; em vez disso, as tabelas temporárias são exibidas como tabelas com banco de dados vazio e com a flag is_temporary definida. #18014 (Vitaly Baranov).
  • Corrigido o problema de renderização do clickhouse-client quando o tamanho da janela do terminal é alterado. #18009 (Amos Bird).
  • Reduz a verbosidade do log dos eventos quando o cliente fecha a conexão, de Warning para Information. #18005 (filimonov).
  • Remoção forçada de arquivos de metadados vazios ou inválidos do sistema de arquivos no DiskS3. S3 é um recurso experimental. #17935 (Pavel Kovalenko).
  • Controle de acesso: allow_introspection_functions=0 proíbe o uso de funções de introspecção, mas não impede mais a concessão de privilégios para elas (quem receber o privilégio precisará definir allow_introspection_functions=1 para si mesmo a fim de poder usá-lo). Da mesma forma, allow_ddl=0 proíbe o uso de comandos DDL, mas não impede mais a concessão de privilégios para eles. #17908 (Vitaly Baranov).
  • Melhoria de usabilidade: sugestões de nomes de colunas. #17112. #17857 (fastio).
  • Adicionadas informações de diagnóstico quando duas tabelas Merge tentam ler os dados uma da outra. #17854 (徐炘).
  • Permite substituir o valor de timeout na execução de scripts usando a imagem Docker do ClickHouse. #17818 (Guillaume Tassery).
  • Verificação da gramática da definição do engine das tabelas de log do sistema para evitar alguns erros de configuração. Observe que essa verificação gramatical não é semântica, o que significa que erros como colunas inexistentes / funções em expressões não serão detectados até que a tabela seja criada. #17739 (Du Chuan).
  • Removido o lançamento de exceção na inicialização da tabela RabbitMQ caso não houvesse conexão (a reconexão será feita em segundo plano). #17709 (Kseniia Sumarokova).
  • Não ignore os limites de memória do servidor durante o flush do Buffer. #17646 (Azat Khuzhin).
  • Alterado para a versão corrigida do RocksDB (do ClickHouse-Extras) para corrigir o erro de use-after-free. #17643 (Nikita Mikhaylov).
  • Adicionado um offset à mensagem de exceção para o parsing paralelo. Isso corrige #17457. #17641 (Nikita Mikhaylov).
  • Não lançar o erro “Too many parts” no meio da consulta INSERT. #17566 (alexey-milovidov).
  • Permite o uso de parâmetros de consulta na instrução UPDATE da consulta ALTER. Corrige #10976. #17563 (alexey-milovidov).
  • Ofuscador de consultas: evitar o uso de algumas palavras-chave de SQL como nomes de identificadores. #17526 (alexey-milovidov).
  • Exporta o registro máximo atual de DDL executado pelo DDLWorker por meio da métrica do servidor. Isso é útil para verificar se o DDLWorker travou em algum ponto. #17464 (Amos Bird).
  • Exporte métricas assíncronas de todas as threads atuais de todos os servidores. Isso é útil para identificar problemas como este. #17463 (Amos Bird).
  • Inclui colunas dinâmicas, como MATERIALIZED / ALIAS, em consultas com curinga quando as configurações asterisk_include_materialized_columns e asterisk_include_alias_columns estão ativadas. #17462 (Ken Chen).
  • Permite especificar TTL para remover registros antigos das tabelas de log do sistema, usando o atributo <ttl> em config.xml. #17438 (Du Chuan).
  • Agora, as consultas que chegam ao servidor por meio dos protocolos MySQL e PostgreSQL têm tipos de interface distintos (que podem ser vistos na coluna interface da tabela system.query_log): 4 para MySQL e 5 para PostgreSQL, em vez do 1, usado anteriormente e que agora é usado apenas para o protocolo nativo. #17437 (Vitaly Baranov).
  • Corrigido o parsing da cláusula SETTINGS na consulta INSERT ... SELECT ... SETTINGS. #17414 (Azat Khuzhin).
  • Contabiliza corretamente o uso de memória no RadixSort. #17412 (Nikita Mikhaylov).
  • Adicionada uma verificação de eof em receiveHello no servidor para evitar a exceção Attempt to read after eof. #17365 (Kruglov Pavel).
  • Evita um possível stack overflow na conversão de bigint. Inteiros grandes são experimentais. #17269 (flynn).
  • Agora, os índices set funcionarão com GLOBAL IN. Isso corrige #17232, #5576. #17253 (Amos Bird).
  • Adicionado limite para redirecionamentos HTTP em solicitações ao armazenamento S3 (s3_max_redirects). #17220 (ianton-ru).
  • Quando o combinador -OrNull é combinado com os combinadores -If, -Merge, -MergeState e -State, devemos colocar -OrNull antes. #16935 (flynn).
  • Suporte a proxy HTTP e à configuração de endpoint S3 com HTTPS. #16861 (Pavel Kovalenko).
  • Adicionada autenticação adequada usando variáveis de ambiente, ~/.aws e AssumeRole para o cliente S3. #16856 (Vladimir Chebotarev).
  • Adiciona mais spans do OpenTelemetry. Adiciona um exemplo de como exportar os dados dos spans para o Zipkin. #16535 (Alexander Kuzmenkov).
  • Dicionários de cache: callbacks e locks foram completamente eliminados para sua aquisição. As chaves não são divididas em “não encontradas” e “expiradas”, mas armazenadas no mesmo map durante a consulta. #14958 (Nikita Mikhaylov).
  • Correção de fsync_part_directory/fsync_after_insert/in_memory_parts_insert_sync, que nunca funcionou (funcionalidade experimental). #18845 (Azat Khuzhin).
  • Permite usar a engine Atomic para o banco de dados aninhado da engine MaterializeMySQL. #14849 (tavplubix).

correção de bug

  • Corrige o problema em que o servidor pode deixar de aceitar conexões em casos muito raros. #17542 (Amos Bird, alexey-milovidov).
  • Corrige a análise de índices de funções binárias com argumento constante, o que leva a resultados incorretos de consulta. Isso corrige #18364. #18373 (Amos Bird).
  • Corrige uma possível análise incorreta de índice quando os tipos na comparação do índice são diferentes. Isso corrige #17122. #17145 (Amos Bird).
  • Desabilitada a escrita com AIO durante merges, porque isso pode levar a casos extremamente raros de corrupção de dados nas colunas de chave primária durante o merge. #18481 (alesapin).
  • Restritas as mesclagens de partes wide para partes compact. No caso de mesclagem vertical, isso levava a uma parte de resultado corrompida. #18381 (Anton Popov).
  • Corrige um possível resultado incompleto da consulta ao ler de MergeTree* em caso de backoff de leitura (mensagem <Debug> MergeTreeReadPool: Will lower number of threads nos logs). Introduzido em #16423. Corrige #18137. #18216 (Nikolai Kochetov).
  • Corrige bug de uso de memória após liberação na biblioteca rocksdb. #18862 (sundyli).
  • Corrige a leitura infinita de arquivo no formato ORC (introduzida em #10580). Corrige #19095. #19134 (Nikolai Kochetov).
  • Corrige um bug no mecanismo de gravação de dados do MergeTree que pode fazer com que as marcas tenham tamanho maior que o tamanho fixo da granularidade. Corrige #18913. #19123 (alesapin).
  • Corrige um erro de inicialização quando o ClickHouse não conseguia ler o codec de compressão de LowCardinality(Nullable(...)) e gerava a exceção Attempt to read after EOF. Corrige #18340. #19101 (alesapin).
  • Restringe as consultas MODIFY TTL para tabelas MergeTree criadas com a sintaxe antiga. Antes, a consulta era concluída com sucesso, mas, na prática, não surtia efeito. #19064 (Anton Popov).
  • Certifique-se de que groupUniqArray retorne o tipo correto para um argumento do tipo Enum. Isso fecha #17875. #19019 (alexey-milovidov).
  • Corrige o possível erro Expected single dictionary argument for function ao usar a função ignore com o argumento LowCardinality. Corrige #14275. #19016 (Nikolai Kochetov).
  • Corrige a inserção da coluna LowCardinality em uma tabela com o mecanismo TinyLog. Corrige #18629. #19010 (Nikolai Kochetov).
  • Join tenta materializar colunas const, mas nosso código as espera em outros lugares. #18982 (Nikita Mikhaylov).
  • Desativado optimize_move_functions_out_of_any porque a otimização nem sempre é correta. Isso encerra #18051. Isso encerra #18973. #18981 (alexey-milovidov).
  • Corrige uma possível exceção QueryPipeline stream: different number of columns causada pela mesclagem das etapas Expression do plano de consulta. Corrige #18190. #18980 (Nikolai Kochetov).
  • Corrigido um deadlock raríssimo durante o encerramento. #18977 (tavplubix).
  • Corrige o comportamento incorreto em que a consulta ALTER TABLE ... DROP PART 'part_name' remove todos os blocos de desduplicação da partição inteira. Corrige #18874. #18969 (alesapin).
  • ATTACH PARTITION deve redefinir a mutação. #18804. #18935 (fastio).
  • Corrige o problema com bitmapOrCardinality que pode levar ao desreferenciamento de nullptr. Fecha #18911. #18912 (sundyli).
  • Corrige um possível travamento durante o encerramento no clickhouse-local. Isso corrige #18891. #18893 (alexey-milovidov).
  • As consultas para bancos de dados externos (MySQL, ODBC, JDBC) eram reescritas incorretamente se houvesse uma expressão no formato x IN table. Isso corrige #9756. #18876 (alexey-milovidov).
  • Correção do combinador *If com função unária e tipos Nullable. #18806 (Azat Khuzhin).
  • Corrige o problema em que INSERTs distribuídos assíncronos podem ser rejeitados pelo servidor se a configuração network_compression_method estiver definida globalmente para um valor diferente do padrão. Isso corrige #18741. #18776 (alexey-milovidov).
  • Corrigido o erro Attempt to read after eof ao tentar fazer CAST de NULL de Nullable(String) para Nullable(Decimal(P, S)). Agora, a função CAST retorna NULL quando não consegue interpretar um valor decimal de uma string Nullable. Corrige #7690. #18718 (Winter Zhang).
  • Corrigido um pequeno problema no logging. #18717 (sundyli).
  • Corrigida a remoção de partes vazias em tabelas ReplicatedMergeTree criadas com a sintaxe antiga. Corrige #18582. #18614 (Anton Popov).
  • Corrige um bug anterior em casos de overflow de data com valores diferentes. Limita estritamente o valor de Date a “2106-02-07” e converte datas > “2106-02-07” para o valor 0. #18565 (hexiaoting).
  • Adiciona suporte ao tipo de dado FixedString para replicação a partir do MySQL. A replicação a partir do MySQL é um recurso experimental. Esta correção resolve #18450 e também #6556. #18553 (awesomeleo).
  • Corrige o possível erro Pipeline stuck ao usar ORDER BY após subconsulta com RIGHT ou FULL JOIN. #18550 (Nikolai Kochetov).
  • Corrigido um bug que podia fazer com que consultas ALTER ficassem travadas após o encerramento da mutação correspondente. Detectado pelo thread fuzzer. #18518 (alesapin).
  • Suporte adequado a 12AM na função parseDateTimeBestEffort. Isso corrige #18402. #18449 (vladimir-golovchenko).
  • Corrigido o erro value is too short ao executar funções toType(...) (toDate, toUInt32 etc.) com argumento do tipo Nullable(String). Agora, essas funções retornam NULL em caso de erro de parsing, em vez de lançar uma exceção. Corrige #7673. #18445 (tavplubix).
  • Corrigido o comportamento inesperado de SHOW TABLES. #18431 (fastio).
  • Correção - O combinador SimpleState gera tipos de argumento e de retorno incompatíveis. #18404 (Amos Bird).
  • Corrige uma possível condição de corrida no uso concorrente de tabelas Set ou Join e em consultas a system.tables. #18385 (alexey-milovidov).
  • Corrigido o preenchimento da tabela system.settings_profile_elements. Este PR corrige o problema #18231. #18379 (Vitaly Baranov).
  • Corrige possíveis travamentos em funções de agregação com o combinador Distinct ao usar agregação em dois níveis. Corrige #17682. #18365 (Anton Popov).
  • Corrigido o problema em que o processo clickhouse-odbc-bridge fica inacessível ao servidor em máquinas com pilha dupla IPv4/IPv6; Corrigido o problema em que atualizações de dicionários ODBC são realizadas com consultas malformadas e/ou fazem o processo odbc-bridge travar; Possivelmente fecha #14489. #18278 (Denis Glazachev).
  • Controle de acesso: SELECT count() FROM table agora pode ser executado se o usuário tiver acesso a pelo menos uma coluna da tabela. Este PR corrige #10639. #18233 (Vitaly Baranov).
  • Controle de acesso: SELECT JOIN agora exige o privilégio SELECT em cada uma das tabelas do join. Este PR corrige #17654. #18232 (Vitaly Baranov).
  • Corrige a comparação de chaves entre os tipos Enum e Int. Isso corrige #17989. #18214 (Amos Bird).
  • Replicação a partir do MySQL (recurso experimental). Corrige #18186 Corrige #16372 Corrige o problema de conversão de chave única no engine de banco de dados MaterializeMySQL. #18211 (Winter Zhang).
  • Corrigida inconsistência em consultas com WITH FILL e WITH TIES #17466. #18188 (hexiaoting).
  • Corrige a inserção de uma linha com valor padrão em caso de erro de parsing na última coluna. Corrige #17712. #18182 (Jianmei Zhang).
  • Corrigido o erro Unknown setting profile ao tentar definir um perfil de configurações. #18167 (tavplubix).
  • Corrige um erro em que a consulta MODIFY COLUMN ... REMOVE TTL na verdade não remove o TTL da coluna. #18130 (alesapin).
  • Corrigido std::out_of_range: basic_string no parsing da URL do S3. #18059 (Vladimir Chebotarev).
  • Corrige a comparação entre DateTime64 e Date. Corrige #13804 e #11222. … #18050 (Vasily Nemkov).
  • Replicação a partir do MySQL (recurso experimental): Corrige #15187 Corrige #17912 o suporte à conversão de índice de prefixo do MySQL para MaterializeMySQL. #17944 (Winter Zhang).
  • Quando a rotação dos logs do servidor era configurada usando o parâmetro logger.size com um valor numérico maior que 2^32, os logs não eram rotacionados corretamente. Isso foi corrigido. #17905 (Alexander Kuzmenkov).
  • A otimização trivial de consultas estava produzindo resultados incorretos se a consulta contivesse ARRAY JOIN (ou seja, a consulta na verdade não é trivial). #17887 (sundyli).
  • Corrige um possível segfault na função agregada topK. Isso fecha #17404. #17845 (Maksim Kita).
  • WAL (recurso experimental): Não restaure partes a partir do WAL se in_memory_parts_enable_wal estiver desabilitado. #17802 (detailyang).
  • A mensagem de exceção sobre o tamanho máximo da tabela permitido para remoção era exibida incorretamente. #17764 (alexey-milovidov).
  • Corrigida uma possível falha de segmentação quando não há espaço suficiente ao inserir na tabela Distributed. #17737 (tavplubix).
  • Corrigido um problema em que o ClickHouse não conseguia restabelecer a conexão com servidores MySQL. #17681 (Alexander Kazakov).
  • Windows: Corrigido o erro Function not implemented ao executar a consulta RENAME em um banco de dados Atomic com o ClickHouse em execução no Windows Subsystem for Linux. Corrige #17661. #17664 (tavplubix).
  • Pode ser determinado incorretamente se o cluster é replicado circularmente (de forma cruzada) ou não ao executar a consulta ON CLUSTER, devido a uma condição de corrida quando pool_size > 1. Isso foi corrigido. #17640 (tavplubix).
  • Corrige a tabela system.stack_trace vazia quando o servidor está em execução em modo daemon. #17630 (Amos Bird).
  • A exceção fmt::v7::format_error pode ser registrada em log em segundo plano para tabelas MergeTree. Isso corrige #17613. #17615 (alexey-milovidov).
  • Quando o clickhouse-client era usado no modo interativo com consultas de várias linhas, o comentário de uma linha era estendido por engano até o fim da consulta. Isso corrige #13654. #17565 (alexey-milovidov).
  • Corrige o travamento da consulta ALTER quando a mutação correspondente foi cancelada em uma réplica diferente. Corrige #16953. #17499 (alesapin).
  • Corrige um problema na contabilização de memória quando o tamanho do cache de marcas era subestimado pelo ClickHouse. Isso pode acontecer quando há muitos arquivos minúsculos com marcas. #17496 (alesapin).
  • Corrige ORDER BY quando a configuração optimize_redundant_functions_in_order_by está habilitada. #17471 (Anton Popov).
  • Corrige duplicatas após DISTINCT, que podiam ocorrer devido a uma otimização incorreta. Corrige #17294. #17296 (li chengxiang). #17439 (Nikolai Kochetov).
  • Corrigido o alto uso de CPU nas tarefas em segundo plano de tabelas *MergeTree. #17416 (tavplubix).
  • Corrige uma possível falha ao ler dados de uma tabela JOIN com tipos LowCardinality. Corrige #17228. #17397 (Nikolai Kochetov).
  • Replicação a partir do MySQL (recurso experimental): Corrige #16835, tentando corrigir a incompatibilidade de cabeçalho na instrução SHOW do MySQL. #17366 (Winter Zhang).
  • Corrigidas funções não determinísticas no otimizador de predicados. Isso corrige #17244. #17273 (Winter Zhang).
  • Corrige um possível erro Unexpected packet Data received from client em consultas distribuídas com LIMIT. #17254 (Azat Khuzhin).
  • Corrige a invalidação do índice Set quando há colunas constantes na subconsulta. Isso corrige #17246. #17249 (Amos Bird).
  • clickhouse-copier: Correção para tabelas sem partição #15235. #17248 (Qi Chen).
  • Corrigidas possíveis falhas em mutações para partes armazenadas em disco S3 (funcionalidade experimental). #17227 (Pavel Kovalenko).
  • Correção de bug na função fuzzBits, issue relacionada: #16980. #17051 (hexiaoting).
  • Corrigido optimize_distributed_group_by_sharding_key para consulta com apenas OFFSET. #16996 (Azat Khuzhin).
  • Corrige consultas em tabelas Merge sobre tabelas Distributed com JOINs. #16993 (Azat Khuzhin).
  • Corrige a otimização de ORDER BY com funções monotônicas. Corrige #16107. #16956 (Anton Popov).
  • Corrigida a comparação incorreta entre tipos DateTime64 com escalas diferentes. Corrige #16655#16952 (Vasily Nemkov).
  • Corrige a otimização de group by quando a configuração optimize_aggregators_of_group_by_keys está habilitada e há junções. Corrige #12604. #16951 (Anton Popov).
  • Pequena correção na consulta SHOW ACCESS. #16866 (tavplubix).
  • Corrige o comportamento quando a configuração optimize_trivial_count_query está habilitada com predicado de partição. #16767 (Azat Khuzhin).
  • Retorna o número de linhas afetadas em consultas INSERT via protocolo wire do MySQL. Anteriormente, o ClickHouse sempre retornava 0; isso foi corrigido. Corrige #16605. #16715 (Winter Zhang).
  • Corrige o comportamento inconsistente causado por select_sequential_consistency em consultas otimizadas de contagem trivial e em tabelas do sistema. #16309 (Hao Chen).
  • Retornar erro quando o transformador de coluna REPLACE operar sobre uma coluna inexistente. #16183 (hexiaoting).
  • Gera uma exceção no caso de uma expressão ON de join não equi em RIGH|FULL JOIN. #15162 (Artem Zuikov).

melhoria de Build/Testes/Empacotamento

  • Adiciona uma verificação simples de integridade para o binário do ClickHouse. Isso permite detectar corrupção causada por falhas de hardware (degradação de bits na mídia de armazenamento ou inversão de bits na RAM). #18811 (alexey-milovidov).
  • Altere OpenSSL para BoringSSL. Isso ajuda a evitar problemas com sanitizers. Isso corrige #12490. Isso corrige #17502. Isso corrige #12952. #18129 (alexey-milovidov).
  • Simplificado o script de init Sys/V, que não estava funcionando no Ubuntu 12.04 ou em versões anteriores. #17428 (alexey-milovidov).
  • Diversas melhorias no script ./clickhouse install. #17421 (alexey-milovidov).
  • Agora o ClickHouse pode se passar por um ZooKeeper falso. Atualmente, a implementação de armazenamento é apenas uma tabela hash em memória, e o servidor oferece suporte parcial ao protocolo ZooKeeper. #16877 (alesapin).
  • Corrigida a remoção de watches na dead list no TestKeeperStorage (um mock para ZooKeeper). #18065 (alesapin).
  • Adicionar o comando SYSTEM SUSPEND para injeção de falhas. Ele pode ser usado para facilitar testes de failover. Isso fecha #15979. #18850 (alexey-milovidov).
  • Gerar ID de build quando o ClickHouse é vinculado com lld. Verificou-se que o lld não o gera por padrão na minha máquina. O ID de build é usado para relatórios de falhas e introspecção. #18808 (alexey-milovidov).
  • Corrigidos erros do shellcheck no Style check. #18566 (Ilya Yatsishin).
  • Atualização das informações de fusos horários para 2020e. #18531 (alesapin).
  • Corrigidos avisos do codespell. Verificações de estilo divididas em partes separadas. Atualizada a imagem Docker das verificações de estilo. #18463 (Ilya Yatsishin).
  • Verificação automatizada de marcadores de conflito remanescentes na documentação. #18332 (alexey-milovidov).
  • Habilitar o Thread Fuzzer para a verificação instável dos testes stateless. #18299 (alesapin).
  • Não use a função strerror, que não é thread-safe. #18204 (alexey-milovidov).
  • Atualiza a action de workflow anchore/scan-action@main (foi movida de master para main). #18192 (Stig Bakken).
  • Agora, o clickhouse-test faz DROP/CREATE de bancos de dados com tempo limite. #18098 (alesapin).
  • Adicionado suporte experimental ao framework Pytest para testes sem estado. #17902 (Ivan).
  • Agora usamos a versão mais recente do daemon do Docker nos testes de integração. #17671 (alesapin).
  • Enviar informações sobre a build oficial, memória, CPU e espaço livre em disco para o Sentry, se ele estiver habilitado. O Sentry é um recurso opcional, ativado por adesão, para ajudar os desenvolvedores do ClickHouse. Isso fecha #17279. #17543 (alexey-milovidov).
  • Havia uma variável não inicializada no código do clickhouse-copier. #17363 (Nikita Mikhaylov).
  • Corrigido um relatório do MSan de #17309. #17344 (Nikita Mikhaylov).
  • Correção para o problema com IPv6 na biblioteca Arrow Flight. Consulte os comentários para mais detalhes. #16664 (Zhanna).
  • Adiciona uma biblioteca que substitui algumas funções de libc por traps que encerram o processo. #16366 (alexey-milovidov).
  • Fornece diagnósticos nos logs do servidor em caso de stack overflow e envia a mensagem de erro para o clickhouse-client. Isso encerra #14840. #16346 (alexey-milovidov).
  • Agora já podemos executar quase todos os testes funcionais sem estado em paralelo. #15236 (alesapin).
  • Corrige a corrupção na descompressão snappy do librdkafka (era um problema apenas em builds com gcc10, mas os builds oficiais já usam clang, então pelo menos as versões oficiais recentes não são afetadas). #18053 (Azat Khuzhin).
  • Se o servidor for encerrado pelo OOM killer, registrar uma mensagem no log. #13516 (alexey-milovidov).
  • PODArray: Evita a chamada de memcpy com os argumentos (nullptr, 0) (corrige o relatório do UBSan). Isso corrige #18525. #18526 (alexey-milovidov).
  • Pequena melhoria na concatenação dos caminhos do ZooKeeper dentro do DDLWorker. #17767 (Bharat Nallan).
  • Permite recarregar os símbolos a partir do arquivo de depuração. Este PR também corrige um problema de build-id. #17637 (Amos Bird).
Última modificação em 10 de junho de 2026