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
SELECTdireto para Kafka/RabbitMQ/FileLog. Isso pode ser habilitado definindostream_like_engine_allow_direct_select. OSELECTdireto não será permitido mesmo se estiver habilitado por configuração, caso haja uma visão materializada anexada. Para Kafka e RabbitMQ, oSELECTdireto, se permitido, não fará commit das mensagens por padrão. Para habilitar commits comSELECTdireto, o usuário deve usar a configuração no nível de armazenamentokafka{rabbitmq}_commit_on_select=1(padrão0). #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_representationeoutput_format_tsv_null_representationparaformat_csv_null_representationeformat_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-keepertem todos os recursos implementados. - Suporte ao tipo de dado
Bool. #31072 (kevin wan). - Suporte a
PARTITION BYnos armazenamentos File, URL e HDFS, bem como com a função de tabelaINSERT INTO. Fecha #30273. #30690 (Kseniia Sumarokova). - Adicionado
CONSTRAINT ... ASSUME ...(sem verificação duranteINSERT). 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
INTERVALna cláusulaSTEPdo modificadorWITH 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
Identifierpara 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,JSONCompactEachRoweJSONCompactStringsEachRow, remoção de duplicação de código e adição de uma interface base para formatos com os sufixos-WithNamese-WithNamesAndTypes. Adicionados os formatosCSVWithNamesAndTypes,TSVRawWithNames,TSVRawWithNamesAndTypes,JSONCompactEachRowWIthNames,JSONCompactStringsEachRowWIthNames,RowBinaryWithNames. Suporte a parsing paralelo para os formatosTSVWithNamesAndTypes,TSVRaw(WithNames/WIthNamesAndTypes),CSVWithNamesAndTypes,JSONCompactEachRow(WithNames/WIthNamesAndTypes)eJSONCompactStringsEachRow(WithNames/WIthNamesAndTypes). Suporte a mapeamento de colunas e verificação de tipos para o formatoRowBinaryWithNamesAndTypes. Adicionada a configuraçãoinput_format_with_types_use_header, que especifica se os tipos gravados no formato<format_name>WIthNamesAndTypesdevem corresponder à estrutura da tabela. Adicionada a configuraçãoinput_format_csv_empty_as_default, usada no formato CSV em vez deinput_format_defaults_for_omitted_fields(porque essa configuração não deve controlarcsv_empty_as_default). Corrigido o uso da configuraçãoinput_format_defaults_for_omitted_fields(ela estava sendo usada apenas comocsv_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 formatoTSVRaw, tornando esse formato totalmente compatível com inserções em TSV. Corrigida a inserção de NULLs emLowCardinality(Nullable)quandoinput_format_null_as_defaultestá habilitada (antes, valores padrão eram inseridos em vez de NULLs reais). Corrigida a desserialização de strings nos formatosJSONStringsEachRow/JSONCompactStringsEachRow(as strings eram parseadas apenas até o primeiro ‘\n’ ou ‘\t’). Adicionada a capacidade de usar a regra de escapingRawno input format Template. Adicionadas informações de diagnóstico para o input format JSONCompactEachRow(WithNames/WIthNamesAndTypes). Corrigido um bug no parsing paralelo de formatos-WithNamesquando a configuraçãomin_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 formatCustomSeparated. Adicionados os formatosCustomSeparatedWithNames/WithNamesAndTypes, semelhantes aTSVWithNames/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,exponentialTimeDecayedCounteexponentialTimeDecayedAvg, que são mais eficientes do queexponentialMovingAveragepara 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 = 1com semântica de CROSS JOIN. Isso encerra #25578. #25894 (Vladimir C). - Adiciona o combinador Map para o tipo
Map. - Renomeia o antigosum-, min-, max- Mapde arrays mapeados parasum-, min-, max- MappedArrays. #24539 (Ildus Kurbangaliev). - Permite tentar novamente leituras via HTTP. Fecha #29696. #29894 (Kseniia Sumarokova).
Recurso experimental
WINDOW VIEWpara 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/hdfsParquet,ORCeArrow(controlado pela configuraçãoinput_format_allow_seeks, habilitada por padrão). Também adiciona a configuraçãoremote_read_min_bytes_for_seekpara 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
JSONEachRowWithProgressePrettyCompactMonoBlock. #31489 (Kruglov Pavel). - Acelera
countem colunas Nullable. #31806 (Raúl Marín). - Acelera as funções agregadas
avgesumCount. #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
GraphiteMergeTreepara métricas simples/com tags (campo opcionalrule_type). #25122 (Michail Safronov). - Remove solicitações excessivas de
DESC TABLEpararemote()(no caso deremote('127.1', system.one)(ou seja, identificador como db.table em vez de string), havia uma solicitação excessiva deDESC TABLE). #32019 (Azat Khuzhin). - Otimiza a função
tupleElementpara ler subcoluna com a configuraçãooptimize_functions_to_subcolumnshabilitada. #31261 (Anton Popov). - Otimiza a função
mapContainspara ler a subcolunakeycom a configuraçãooptimize_functions_to_subcolumnshabilitada. #31218 (Anton Popov). - Adiciona as configurações
merge_tree_min_rows_for_concurrent_read_for_remote_filesystememerge_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 COLUMNno estilo do PostgreSQL. #32003 (SuperDJY). - Adicionado suporte ao
update_fieldparaRangeHashedDictionaryeComplexKeyRangeHashedDictionary. #32185 (Maksim Kita). - As funções
murmurHash3_128esipHash128agora aceitam uma quantidade arbitrária de argumentos. Isso corrige #28774. #28965 (小路). - Adiciona suporte a expressão padrão para o armazenamento
HDFSe 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ídaJSONEachRow. #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-keeperse 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
JSONEachRowseoutput_format_json_array_of_rowsestiver habilitado. #32112 (Frank Chen). - Permite interpretar
+antes de valoresFloat32/Float64. #32079 (Kruglov Pavel). - Permite que o usuário configure o parâmetro
hdfs_replicationparaDiskHDFSeStorageHDFS. Fecha #32039. #32049 (leosunli). - Adicionados ao log de spans do OpenTelemetry os campos
exceptioneexception_codedo 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
LowCardinalitydeInt256. #31832 (alexey-milovidov). - Recriar as tabelas
system.*_logem 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.xmlnã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
Replicatedao expandir macros nos argumentos deReplicatedMergeTree, 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, comallow_experimental_projection_optimizationativada, a projeção virtualmin/max/countpode ser usada junto com colunas da chave de partição. #31474 (Amos Bird). - Adicionado suporte ao
--pagernoclickhouse-local. #31457 (Azat Khuzhin). - Corrigida a espera pelo editor durante a edição interativa de consultas (
waitpid()retorna -1 emSIGWINCH, eEDITOReclickhouse-local/clickhouse-clientfuncionam 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_timeoutehttp_receive_timeoutforam alterados de 1800 (30 minutos) para 180 (3 minutos). #31450 (tavplubix). MaterializedMySQLagora oferece suporte a consultas DDLCREATE TABLE ... LIKE .... #31410 (Stig Bakken).- Retornar uma consulta CREATE artificial ao executar
show create tableem tabelas do sistema. #31391 (SuperDJY). - Anteriormente, o progresso era exibido apenas para a função de tabela
numbers. Agora, ele também é exibido paranumbers_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çõesmerge_tree_clear_old_temporary_directories_interval_secondsemerge_tree_clear_old_parts_interval_secondsforam 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_utilizationnoclickhouse-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 EXISTSna consultaRENAME 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
--verboseno modo interativo do clickhouse-local e permitido o logging em arquivo. #30881 (Kseniia Sumarokova). - Adicionados os comandos
\l,\de\caoclickhouse-client, como no MySQL e no PostgreSQL. #30876 (Pavel Medvedev). - Para clickhouse-local ou clickhouse-client: se houver a opção
--interactivecom--queryou--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_stringno 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
Buffercom o tipoMap. Corrige #30546. #31742 (Anton Popov). - Corrigida a leitura de tabelas
MergeTreecomuse_uncompressed_cachehabilitado. #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_sethabilitada). #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
avgWeightedcom argumentoDecimal. Corrige #32053. #32303 (tavplubix). - O servidor pode não iniciar e exibir o erro
Cannot attach 1 tables due to cyclic dependenciesse a tabelaDictionaryapontar 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 escapeQuoted. #32190 (Kruglov Pavel). - Dicionários XML: identificadores usados na consulta CREATE TABLE podem ser qualificados com
default_databasedurante 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_leaderestiver 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
CASTdeNullablecomcast_keep_nullable(antes, havia o erroPARAMETER_OUT_OF_BOUND, por exemplo, emtoUInt32OrDefault(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 emptyao desanexar a parte. #32063 (tavplubix). MaterializedMySQL(funcionalidade experimental): Corrige a interpretação incorreta de dadosDECIMALdo 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_PARTpode 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 ouDate[Time]. Corrige #31485. #31887 (tavplubix). - Corrigidas as funções
emptyenotEmptycom argumentos do tipoUUID. Corrige #31819. #31883 (Anton Popov). - Altere o caminho da configuração de
keeper_server.session_timeout_msparakeeper_server.coordination_settings.session_timeout_msao construir umKeeperTCPHandler. O mesmo vale paraoperation_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
dictGetcom 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 herena execução da consultaON CLUSTERcaso o nome do cluster especificado seja o nome de um banco de dadosReplicated. #31723 (tavplubix). - Corrigida exceção em alguns usos da função
decryptem 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_numeinput_format_allow_errors_rationão funcionavam ao analisar tipos de domínio, comoIPv4; isso foi corrigido. Corrige #31686. #31697 (tavplubix). - Corrigida a exceção de ponteiro nulo em
MATERIALIZE COLUMN. #31679 (Nikolai Kochetov). - A consulta
RENAME TABLEapresentava comportamento incorreto ao tentar renomear um dicionário DDL no banco de dadosOrdinary; isso foi corrigido. #31638 (tavplubix). - Implemente a função de agregação
sparkbarcomo 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_bytesaté que o bug nessa otimização seja corrigido. Veja #31009). Remova a opção redundantepartial_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
nullptrno provedor de credenciais STS para S3. #31409 (Vladimir Chebotarev). - Removida a função
notLikeda 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
Mergecom 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
formatRowcom 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 checknos casos de ATTACH PARTITION … FROM e MOVE PARTITION … #30995 (Amr Alaa). - Corrige alguns casos extremos com os operadores
INTERSECTeEXCEPT. 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-cexz,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_pathejsonnas funções SQL/JSON (para ficar consistente com o padrão). Fecha #30449. #30474 (Kseniia Sumarokova). - Remove a configuração de tabela
write_final_markdoMergeTree. Ela passará a ser sempretrue. #30455 (Kseniia Sumarokova). Nenhuma ação é necessária; todas as tabelas são compatíveis com a nova versão. - A função
bayesABfoi 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 codecZSTDpor padrão, em vez da compactação de bloco LZ4 personalizada do ClickHouse. Esse comportamento pode ser desativado com a configuração de coordinationcompress_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
INSERTassíncrono permite acumular os dados inseridos e armazená-los em um único lote em segundo plano. No cliente, ele pode ser habilitado definindoasync_insertpara consultasINSERTcom dados embutidos na consulta ou em um buffer separado (por exemplo, para consultasINSERTvia protocolo HTTP). Sewait_for_async_insertfor verdadeiro (padrão), o cliente aguardará até que os dados sejam gravados na tabela. No servidor, isso é controlado pelas configuraçõesasync_insert_threads,async_insert_max_data_sizeeasync_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 consultasINSERTindividuais 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 executarclickhouse-localpara 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 declickhouse-clienteclickhouse-localtambé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 viewsSCHEMATA,TABLES,VIEWSeCOLUMNS, correspondentes às tabelas no banco de dadossystem. 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 OUTFILEeFROM 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çãongramspara 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 mecanismoKafkaouRabbitMQ, 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 entradaCapnProto. #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
MD4eSHA384. 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_ageno arquivo de configuração com um valor positivo. #29516 (凌涛). - Suporte ao armazenamento OBS da Huawei. Fecha #24294. #29511 (kevin wan).
- Nova função
mapContainsKeyLikepara retornar o map cuja chave corresponde a uma expressão regular simples. #29471 (凌涛). Nova funçãomapExtractKeyLikepara 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 queoutput_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çãodescribe_include_subcolumns). #28905 (Anton Popov). Executable,ExecutablePooladicionaram a opçãosend_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_v1engramoferecem 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 idCom a tabela acima, a consultaselect * from map_tokebf where map['K']='V'ignorará o grânulo que não contém a chaveA. Claro que quantas linhas serão ignoradas depende dagranularitye daindex_granularityque 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
FixedStringeString. 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
webes3funcionem mais rápido que o EBS em determinadas condições. #29205 (Kseniia Sumarokova). Enquanto isso, o tipo de discoweb(dataset estático hospedado em um servidor web) deixa de ser experimental e passa a ser considerado pronto para produção. - Consultas com
INTO OUTFILEnoclickhouse-clientusarão várias threads. Corrigido o problema de oscilação da barra de progresso ao usarINTO 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 motoresMergeTree). #30111 (alesapin). - Removidas algumas chamadas redundantes de
seekdurante a leitura de blocos compactados na família de motores de tabela MergeTree. #29766 (alesapin). - Permite que a função de tabela
urlprocesse 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_orderhabilitada). #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 NULLpara bancos de dados externos (por exemplo, MySQL). #29463 (Azat Khuzhin). ConverteisNull/isNotNullemIS 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 colunasDecimal. #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
SUMpara 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
StorageMergeTreequando 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_functionsestiver 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 sintaxesCREATE OR REPLACEeCREATE IF NOT EXISTS. #30454 (Maksim Kita). Adicionado suporte aDROP IF EXISTS. ExemploDROP FUNCTION IF EXISTS test_function. #30437 (Maksim Kita). Suporte a lambdas. ExemploCREATE FUNCTION lambda_function AS x -> arrayMap(element -> element * 2, x);. #30435 (Maksim Kita). Suporte a funções SQL definidas pelo usuário noclickhouse-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_bytesasystem.data_skipping_indices. Foram adicionadas as colunassecondary_indices_compressed_bytes,secondary_indices_uncompressed_bytes,secondary_indices_marks_bytesasystem.parts. Fecha #29697. #29896 (Maksim Kita). - Adicionar o alias
tablea system.tables e o aliasdatabasea 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,intDivemodulo. Fecha #22621. #28352 (Kruglov Pavel). - Permite interpretar valores do tipo de dado
Dateem formatos de texto comoYYYYMMDD, além deYYYY-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çãoCREATE 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 TABLEpara tabelas em bancos de dadosMemory. Bancos de dadosMemorysão usados noclickhouse-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_PARTna fila de replicação. #30346 (tavplubix). - Permitir links simbólicos para arquivos no diretório
user_filesna função de tabela file. #30309 (Kseniia Sumarokova). - Corrigida a comparação entre
Date32eDate,DateTime,DateTime64eString. #30219 (liang.huang). - Agora é possível remover a expressão
SAMPLE BYde tabelasMergeTree(ALTER TABLE <table> REMOVE SAMPLE BY). #30180 (Anton Popov). - Agora, o
Keeper(como parte doclickhouse-server) será iniciado de forma assíncrona se conseguir se conectar a algum outro nó. #30170 (alesapin). - Agora, o
clickhouse-clientoferece 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çãostore_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,ParqueteORC. 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) entreDROP TABLEparaDatabaseMemoryeLiveView. 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_queriespara permitir aguardar consultas em execução por até o tempo definido emshutdown_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_probabilitydurante mutate/merge para gerar o perfil de uso de memória durante as mesclagens. #29681 (Azat Khuzhin). - Ofuscador de consultas:
clickhouse-format --obfuscateagora funciona com mais tipos de consultas. #29672 (alexey-milovidov). - Corrigido o problema em que
clickhouse-format --obfuscatenão conseguia processar consultas com Embedded Dictionaries (funçõesregionTo...). #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_backlogpor 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_configseja 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 expiredem mutações com subconsultas aninhadas. Não são permitidas subconsultas em mutações se a tabela for replicada e a configuraçãoallow_nondeterministic_mutationsestiver desabilitada. #29495 (tavplubix). - Aplique alterações de configuração em
max_concurrent_queriesem 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
FREEZEa partes em memória (para backups). #29376 (Mo Xuan). - Encaminhar o
query_idinicial paraclickhouse-benchmark(antes, se você executasse uma consulta remota viaclickhouse-benchmark, as consultas nos shards não eram vinculadas à consulta inicial por meio deinitial_query_id). #29364 (Azat Khuzhin). - Índices de salto
tokenbf_v1engrambf_v1: adicionado suporte ao tipo de dadoArraycom chave do tipoStringouFixedString. #29280 (Maksim Kita). Os índices de saltotokenbf_v1engrambf_v1passaram a oferecer suporte ao tipo de dadoMapcom chave do tipoStringouFixedString. Autor @lingtaolf. #29220 (Maksim Kita). - Função
has: foi adicionado suporte ao tipo de dadoMap. #29267 (Maksim Kita). - Adicionadas as configurações
compress_logspara oclickhouse-keeper, que permitem compactar os logs doclickhouse-keeper(para a máquina de estados replicada) emZSTD. 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 JOINfor 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
LowCardinalityno formato de entrada/saídaORC. #29062 (Kruglov Pavel). - Consultas em
system.distributed_ddl_queuepodem 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 emclickhouse-keeper-converterque pode causar alguma perda de dados ao restaurar a partir dos logs do ZooKeeper (não do snapshot). #29030 (小路). Corrige um bug emclickhouse-keeper-converterque 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 foundpara 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 = 1quando um alias é usado. #28746 (Amos Bird). - Implementa a configuração
detach_not_byte_identical_partsparaReplicatedMergeTree, que desanexa, em vez de remover, partes que não são idênticas byte a byte (apósmerge/mutate). #28708 (Azat Khuzhin). - Implementa a configuração
max_suspicious_broken_parts_bytesparaMergeTree(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
Logem 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
USINGcom 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
AccessControlManagerpara 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,ORCeParquetpara buildsAArch64eDarwin(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
positionCaseInsensitiveUTF8ecountSubstringsCaseInsensitiveUTF8, 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çãooptimize_min_equality_disjunction_chain_length) em consultas distribuídas com a configuraçãolegacy_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 FILLcomTOeFROMdefinidos 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 exibirUnknown auxiliary ZooKeeper namese 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
localBackupfalhe por algum motivo. #30797 (ianton-ru). - Corrigida uma race condition entre
REPLACE/MOVE PARTITIONe o merge em segundo plano emMergeTreenã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/isNullparaIS [NOT] NULL(corrige consultas com algo comoisNotNull(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
preallocatena 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
MergeTreecommax_read_buffer_size = 0(quando o usuário quer dar um tiro no próprio pé) (pode levar às exceçõesCan't adjust last granule,LOGICAL_ERRORou até mesmo à perda de dados). #30192 (Azat Khuzhin). - Corrigido
pread_fake_async/pread_threadpoolcommin_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 connectedem consultas comGLOBAL INeWITH 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
Memoryremovido podia voltar a aparecer após a reinicialização do servidor; isso foi corrigido (#29795). Também foi adicionada a configuraçãoforce_remove_data_recursively_on_dropcomo solução alternativa para o erroDirectory not emptyao remover o banco de dadosOrdinary(porque não é possível remover manualmente os dados remanescentes em um ambiente de nuvem). #30054 (tavplubix). - Corrige travamento de
samplecomtuple(), fecha #30004. #30016 (flynn). - tenta fechar a issue: #29965. #29976 (hexiaoting).
- Corrige uma possível condição de corrida entre
FileCheckereStorageLog/StorageStripeLog. #29959 (Azat Khuzhin). - Corrige uma condição de corrida entre
LogSink::writeMarks()eLogSourceemStorageLog. #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
LowCardinalityduranteGROUP BY(em combinação com tabelasBuffer, pode causar problemas). #29782 (Azat Khuzhin). - Corrige um
GROUP BYincorreto (múltiplas linhas com as mesmas chaves no resultado) no caso de consulta distribuída quando os shards tinham versões mistas<= 21.3e>= 21.4, a chave deGROUP BYtinha várias colunas, todas de tamanho fixo, e a agregação em dois níveis estava ativada (consultegroup_by_two_level_thresholdegroup_by_two_level_threshold_bytes). Corrige #29580. #29735 (Nikolai Kochetov). - Corrigido o comportamento incorreto da configuração
materialized_postgresql_tables_listna 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 MODIFYao usar um identificador de tabela inválido na expressãoDEFAULT, comox.y.z...Corrige #29184. #29573 (alesapin). - Corrigida a desreferenciação de nullptr em
GROUP BY WITH TOTALS HAVING(quando a coluna deHAVINGnã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 destd::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 mismatchem subconsultas com pushdown do predicadoHAVING. Corrige #29010. #29475 (Nikolai Kochetov). - Corrige o erro lógico
Cannot capture columnsnas 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 structureao recriar ou criar novas réplicas deReplicatedMergeTree, 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 deAttempt 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_keysao 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 (
SIGSEGVparaarrayCompact/ILLEGAL_COLUMNparaarrayDifference/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
LowCardinalityna 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 PARTeREPLACE/MOVE PARTITIONque, 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
SELECTcom 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
s2RectAddes2RectContains. #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_tableagora não têm mais efeito. Elas nunca funcionaram bem e foram substituídas pormax_replicated_fetches_network_bandwidth,max_replicated_sends_network_bandwidthebackground_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
Executablee a função de tabelaexecutable. Isso permite processar dados com scripts externos em streaming. #28102 (Maksim Kita) (ruct). - Adicionado o mecanismo de armazenamento
ExecutablePool. Semelhante aoExecutable, 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 degz,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
SETTINGSda consultaCREATEpara tabelass3. Isso fecha #27580. #28037 (Nikita Mikhaylov). - Permite conexão SSL para o mecanismo
RabbitMQ. #28365 (Kseniia Sumarokova). - Adiciona a função
getServerPortpara 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
webpara 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
BACKUPeRESTORE. #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
sumIfecountIf. #28272 (Raúl Marín). - Cria uma projeção virtual para índices
minmax. Agora, quandoallow_experimental_projection_optimizationestiver habilitado, as consultas usarão o índiceminmaxem vez de ler os dados, quando possível. #26286 (Amos Bird). - Introduz duas verificações em
sequenceMatchesequenceCountque 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
hasAllaproveite 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
WHEREparaPREWHERE(otimização controlada pela configuraçãooptimize_move_to_prewhere). #28139 (lthaooo). - Habilita
optimize_distributed_group_by_sharding_keypor 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-clientsobre 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à tabelasystem.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 engineMySQL. #28474 (Azat Khuzhin). - Não permitir a criação de
MaterializedPostgreSQLcom 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 ambienteLIBHDFS3_CONFem 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 agetpeername(2)para esta coluna (já que, toda vez que uma entrada dezookeeper_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 tipoMap(por exemplo, diferentes tipos deInt,StringeFixedString). #28096 (Anton Popov). - Suporte à cláusula
ON CONFLICTao inserir no table engine PostgreSQL ou na table function. Fecha #27727. #28081 (Kseniia Sumarokova). - Reduz as restrições do tipo de dado
Enumpara permitir anexar dados compatíveis. Fecha #26672. #28028 (Dmitry Novik). - Adiciona uma configuração
empty_result_for_aggregation_by_constant_keys_on_empty_setpara 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 consultaALTER/OPTIMZE/TRUNCATE(o padrão é 120 segundos). Sereplication_alter_partitions_syncfor 2 e algumas réplicas permanecerem inativas por mais dereplication_wait_for_inactive_replica_timeoutsegundos, a exceçãoUNFINISHEDserá 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_timeoutpor 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 COLUMTparaNullable(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-clickhousefalha 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 REPLACEcom a cláusulaON CLUSTER. Este PR aprimora a correção #27001. #27983 (Vitaly Baranov). - Permite selecionar com
extremes = 1em uma coluna do tipoLowCardinality(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 emNamedSessionStorageagora 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
bzip2truncado. #28543 (Azat Khuzhin). - Corrige a sobreposição de UUID em
DROP TABLEpara DDLs internos doMaterializedMySQL. O MaterializedMySQL é um recurso experimental. #28533 (Azat Khuzhin). - Corrigido o erro
There is no subcolumnao fazer SELECT em tabelas que têm colunasNestede colunas escalares com ponto no nome e o mesmo prefixo deNested(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 emReplicatedVersionedCollapsingMergeTree. 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-INquando 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 BYe em tabelasMergecom a configuraçãooptimize_read_in_orderhabilitada. #28266 (Anton Popov). - Corrige uma possível leitura de memória não inicializada em consultas com o tipo
Nullable(LowCardinality)e a configuraçãoextremesdefinida 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çãoJSONExtract. 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 noclickhouse-keeperem que o cliente pode receber uma resposta de watch antes da resposta à solicitação. #28197 (alesapin). Corrige um comportamento incorreto noclickhouse-keeperquando watches de lista (getChildren) eram acionados por solicitaçõessetpara nós filhos. #28190 (alesapin). Corrige um caso raro em que alterações nas configurações doclickhouse-keeperpodem levar à perda de logs e ao travamento do servidor. #28360 (alesapin). Corrige um bug noclickhouse-keeperque pode levar à geração infinita de logs quandorotate_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
testpara ambientes de teste. Ele é ainda mais verboso que otracepadrã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.23será exibido em vez de1.230000para 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çãooutput_format_decimal_trailing_zeros. A implementação detoStringe 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
-Mergeao 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 defooState(42)(x)não pode ser finalizado comfooMerge(s)oufooMerge(123)(s); os parâmetros devem ser especificados explicitamente comofooMerge(42)(s)e devem ser iguais. Isso não afeta algumas funções de agregação especiais, comoquantileesequence*, 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_expressionestá definido. #26639 (alexey-milovidov). - Agora, uma subconsulta escalar sempre retorna um resultado
Nullablese seu tipo puder serNullable. Isso é necessário porque, no caso de uma subconsulta vazia, o resultado deve serNull. 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 paraNullable(comoArrayouTuple) 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
isNulleisNotNull. #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 skippingMINMAX, poderá receber o erroData 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_evaluationpara 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,JDBCeCassandra. 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 aSELECT ... 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 tabelasystem.warningspara 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
bzip2para 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 acardinality_limitcom um deslocamento deoffset. #27234 (DHBin). - Adicionada a coluna
default_databaseasystem.users. #27054 (kevin wan). - Suporte a macros
clusternas 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). EXPLAINagora conta com o modoEXPLAIN 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
ReplicatedMergeTreeno armazenamentoHDFS. #25918 (Zhichang Yu). - Permite inserir o tipo Nested como um array de structs nos formatos de entrada
Arrow,ORCeParquet. #25902 (Kruglov Pavel). - Adicionar um novo tipo de dado
Date32(armazena dados como Int32), oferecer suporte ao mesmo intervalo de datas deDateTime64, oferecer suporte ao carregamento dedate32do Parquet paraDate32no ClickHouse, adicionar a nova funçãotoDate32, semelhante atoDate. #25774 (LiuNeng). - Permite que você defina um banco de dados padrão. #25268. #25687 (kevin wan).
- Adiciona um parâmetro opcional ao engine
MongoDBpara 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
MaterializeMySQLparaMaterializedMySQL. #26822 (tavplubix).
Melhoria de desempenho
- Melhora o desempenho de consultas rápidas quando
max_execution_time = 0, reduzindo o número de chamadas de sistemaclock_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_limitpor padrão. #27104 (Azat Khuzhin). - Torna
toTimeZonemonotônico quandotimeZoneé 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
Filefor um arquivo regular, passa a ser possível lê-lo várias vezes. Isso permite que oclickhouse-localleia da stdin várias vezes (com várias consultasSELECTou subconsultas), se a stdin for um arquivo regular, como emclickhouse-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
arrayJoinem 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
_CASTpara uso interno, que não preservará a nulabilidade do tipo, mas o cast não interno a preservará de acordo com a configuraçãocast_keep_nullable. Fecha #12636. #27382 (Kseniia Sumarokova). - Adiciona a configuração
log_formatted_queriespara registrar uma consulta formatada adicional emsystem.query_log. Isso é útil para a análise de consultas normalizadas, porque funções comonormalizeQueryenormalizeQueryKeepNamesnão fazem o parsing/formatação das consultas para obter melhor desempenho. #27380 (Amos Bird). - Adicionadas duas configurações,
max_hyperscan_regexp_lengthemax_hyperscan_regexp_total_length, para evitar o uso de expressões regulares muito grandes em funções relacionadas ao Hyperscan, comomultiMatchAny. #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_kindemsystem.query_logmesmo quando a consulta não consegue ser iniciada. #27182 (Amos Bird). - Adicionadas colunas
replica_is_activeque mapeiam o nome da réplica para o status que indica se a réplica está ativa na tabelasystem.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-keepercria 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). extractAllGroupsHorizontalatualizado - 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
RocksDBpor meio da tabela system.rocksdb. Lê as opções do RocksDB na configuração do ClickHouse (chavesrocksdb...). 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 PROFILEagora 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
mapPopulatesSeriesoferece suporte ao tipoMap. #26663 (Ildus Kurbangaliev). - Corrige o excesso de tentativas (x2) de conexão com
skip_unavailable_shards. #26658 (Azat Khuzhin). - Evita que o
clickhouse-benchmarktrave 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 usandoclickhouse-local. Fecha #22355. #26510 (Maksim Kita). - Definido o tipo de consulta do cliente para handlers de protocolo de compatibilidade com
mysqlepostgresql. #26498 (anneji-dev). - Aplique
LIMITaos shards para consultas comoSELECT * FROM dist ORDER BY key LIMIT 10comdistributed_push_down_limit=1. Evite executar etapas deDistinct/LIMIT BYpara consultas comoSELECT DISTINCT shading_key FROM dist ORDER BY key. Agora,distributed_push_down_limité respeitado pela otimizaçãooptimize_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
Distributedvia CREATE TABLE (ou seja,CREATE TABLE dist (key Int) Engine=Distributed(cluster, db, table) SETTINGS monitor_batch_inserts=1e 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_blockpara ajustar o limite de segurança do volume de dados gerado pela funçãorange. 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_patternpara 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.columnspara as tabelasLogeTinyLog. Isso encerra #9001. #26241 (Nikolay Degterinsky). - Não gerar exceção ao consultar a tabela
system.detached_partsse houver uma configuração de disco personalizada e o diretóriodetachednã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()etoday(). Fecha #25875. Fecha #11333. #26235 (alexey-milovidov). - converte os tipos de dados timestamp e timestamptz para
DateTime64no 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_iopode não funcionar corretamente semax_threadsfor 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
Distributedna consultaREPLACE TABLE. Resolve #24566 - Não substitui (nem cria) a tabela na consulta[CREATE OR] REPLACE TABLE ... AS SELECTse a inserção na nova tabela falhar. Resolve #23175. #25895 (tavplubix). - Adiciona a coluna
viewsa 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çãodrain_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 atributofrom_zk,from_envouincl, 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
LowCardinalityeFixedStringno tipoMap. #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 PARTque pode levar ao erroUnexpected 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
arrayHassão aplicadas a arrays de LowCardinality de Nullable de diferentes tipos não numéricos, comoDateTimeeDateTime64. 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/meminfoquando 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 columnem consultas com amostragem. Introduzido em #24574. Corrige #26522. #27301 (Nikolai Kochetov). - Corrige erros como
Expected ColumnLowCardinality, gotUInt8ouBad cast from type DB::ColumnVector<char8_t> to DB::ColumnLowCardinalityem algumas consultas comLowCardinalityemPREWHERE. 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 = 2comdistributed_push_down_limit = 1ouoptimize_distributed_group_by_sharding_key = 1comLIMIT BYeLIMIT 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_partspodia 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çõesallow_read_expired_keys,max_update_queue_size,update_queue_push_timeout_milliseconds,query_wait_timeout_millisecondsnão eram processadas para dicionários de tipos diferentes decache. #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 colunaDEFAULTfaz referência a outra coluna não materializada sem expressãoDEFAULT. Corrige #26591. #26900 (alesapin). - Corrigido o carregamento das chaves de dicionário no
library-bridgepara a fonte de dicionáriolibrary. #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_microsecondsparaREMOVE_PARTemsystem.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 ROLEpodia 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
chownno 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
RabbitMQcaso sua inicialização não tenha sido iniciada. Fecha #26504. #26529 (Kseniia Sumarokova). - Corrige problemas na consulta
CREATE DICTIONARYse 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_keypara várias colunas (causava resultado incorreto comoptimize_skip_unused_shards=1/allow_nondeterministic_optimize_skip_unused_shards=1e 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_nameda tabelasystem.stack_trace. Isso corrige #24124. #26210 (alexey-milovidov). - Corrige uma possível falha se mais de uma expressão
untuplefor usada. #26179 (alexey-milovidov). - Não gerar exceção em
toStringpara Enum Nullable se o Enum não tiver valor para zero, fecha #25806. #26123 (Vladimir C). - Corrigido o
sequence_idincorreto 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_shardsnã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 erroUnknown column: dummy, there are only columns .). #25824 (Azat Khuzhin). - Corrigidos os erros
Not found column ...eMissing column ...ao selecionar emMaterializeMySQL. Corrige #23708, #24830, #25794. #25822 (tavplubix). - Corrigido
optimize_skip_unused_shards_rewrite_inpara tipos diferentes de UInt64 (pode, eventualmente, selecionar shards incorretos ou gerarCannot infer type of an empty tupleouFunction 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-testoferece 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
Mapnas 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_metricsesystem.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 aoatopno 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
FIRSTao comandoADD INDEXpara 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,UInt256eInt256nas funçõesmapAddemapSubtract. #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 = 1for enviada. #26067 (alexey-milovidov).
Melhorias de desempenho
- Compila funções de agregação. Use a opção
compile_aggregate_expressionspara 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
Mapnas 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/hexa partir dos estados deAggregateFunction. #26094 (zhaoyu). - Suporte a argumentos do tipo
UUIDnas funçõesemptyenotEmpty. UmUUIDé considerado vazio se for composto apenas por zeros (UUID nulo). Fecha #3446. #25974 (zhaoyu). - Adicionado suporte a
SET SQL_SELECT_LIMITno 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 tiverFINAL, a otimizaçãomove_to_prewhereserá habilitada somente seoptimize_move_to_prewhereeoptimize_move_to_prewhere_if_finalestiverem 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 comaggregate_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
Dateinvá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 atributofrom_zk,from_envouincl, 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) eON CLUSTER. Fecha #24035. #25907 (alexey-milovidov). - Suporte para
LowCardinality,DecimaleUUIDnoJSONExtract. Fecha #24606. #25900 (Kseniia Sumarokova). - Converta o arquivo de histórico do formato
readlinepara o formatoreplxx. #25888 (Azat Khuzhin). - Corrige um problema que pode resultar em partes sobrepostas após
DROP PARTou a exclusão em segundo plano de uma parte vazia. #25884 (alesapin). - Melhor tratamento para partes perdidas em tabelas
ReplicatedMergeTree. Corrige inconsistências raras naReplicationQueue. Corrige #10368. #25820 (alesapin). - Permite iniciar o
clickhouse-clientcom 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 BYem conjunto vazio. Fecha #6842. #25786 (Kseniia Sumarokova). - Cancela merges já em execução na partição ao usar
DROP PARTITIONeTRUNCATEnoReplicatedMergeTree. 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 ... DETACHe merges em segundo plano. #25605 (Azat Khuzhin). - Faz com que a métrica
NetworkReceiveElapsedMicrosecondspasse a incluir corretamente o tempo gasto aguardando dados do cliente paraINSERT. Fecha #9958. #25602 (alexey-milovidov). - Adiciona suporte a
TRUNCATE TABLEpara 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
stringcomo string usandoJSONExtract. Isso é para #25414. #25452 (Amos Bird). - Suporte a expressões regulares no argumento
DatabasedeStorageMerge. 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 startfuncionar em sistemas comsystemd, como o CentOS 8. Fecha #14298. Fecha #17799. #25921 (alexey-milovidov).
Correções de bugs
- Corrige o
SET ROLEincorreto em alguns casos. #26707 (Vitaly Baranov). - Corrigida uma possível desreferenciação de
nullptrem 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 DICTIONARYcaso 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_keypara várias colunas (leva a um resultado incorreto comoptimize_skip_unused_shards=1/allow_nondeterministic_optimize_skip_unused_shards=1e várias colunas na expressão da chave de sharding). #26353 (Azat Khuzhin). CASTdeDateparaDateTime(ouDateTime64) não estava usando o fuso horário do tipoDateTime. Isso também pode afetar a comparação entreDateeDateTime. A inferência do tipo comum paraDateeDateTimetambém não estava usando o fuso horário correspondente. Isso afetava os resultados da funçãoife 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_nameda tabelasystem.stack_trace. Corrige #24124. #26210 (alexey-milovidov). - Corrige o
joinGetcom colunasLowCardinality, fecha #25993. #26118 (Vladimir C). - Corrige uma possível queda em
pointInPolygonse a configuraçãovalidate_polygonsestiver 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
abortno 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_idincorreto 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
JSONdo tipoMapcom 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-256para 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_keyde coluna sem função pararemote()(antes,select * from remote('127.1', system.one, dummy)resultava no erroUnknown column: dummy, there are only columns .). #25824 (Azat Khuzhin). - Corrigidos os erros
Not found column ...eMissing column ...ao fazer consultas emMaterializeMySQL. Corrige #23708, #24830, #25794. #25822 (tavplubix). - Corrige
optimize_skip_unused_shards_rewrite_inpara tipos diferentes de UInt64 (pode acabar selecionando shards incorretos ou gerarCannot infer type of an empty tupleouFunction tuple requires at least one argument). #25798 (Azat Khuzhin). - Corrige um bug raro na consulta
DROP PARTem tabelasReplicatedMergeTree, que pode levar à mensagem de erroUnexpected merged part intersecting drop range. #25783 (alesapin). - Corrigido um bug no
TTLcom expressãoGROUP BYque deixava de executar oTTLapó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 joinem alguns casos, fecha #24209. #25618 (Vladimir C). - Corrigido o
ALTER MODIFY COLUMNpara colunas que participam de expressões TTL. #25554 (Anton Popov). - Corrige a asserção em
PREWHEREcom tipo diferente deUInt8, fecha #19589. #25484 (Vladimir C). - Corrige uma falha do msan detectada por fuzzing. Corrige #22517. #26428 (Nikolai Kochetov).
- Atualiza a verificação do comando
chownno entrypoint do Dockerclickhouse-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 comotrueao 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áusulaINpodem 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
Arrayem dicionários. #25119 (Maksim Kita). - Adicionada a função
bitPositionsToArray. Fecha #23792. Autor [Kevin Wan] (@MaxWk). #25394 (Maksim Kita). - Adicionada a função
dateNamepara retornar nomes como ‘Friday’ ou ‘April’. Autor [Daniil Kondratyev] (@dankondr). #25372 (Maksim Kita). - Adicionada a função
toJSONStringpara serializar colunas em suas representações JSON. #25164 (Amos Bird). - Agora,
query_logtem 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 DELETEpara o mecanismo de tabelaJoin. #23260 (foolchi). - Adicionada a função de agregação
quantileBFloat16, bem como as correspondentesquantilesBFloat16emedianBFloat16. É 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 paraflow 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
digestsemelhantes à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 subcolunacol.null. A otimização pode ser habilitada pela configuraçãooptimize_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_filterpode ser usado em expressões com a funçãohasAnye 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_bandwidthemax_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áriodefault):max_replicated_fetches_network_bandwidth_for_serveremax_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-bridgeseparados para os processos de bridge. Definaoom_score_adjpara 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-keeperao binário principalclickhouse. 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 aVIEWusam configurações locais, o que levava a erros se as configurações emCREATE VIEWeSELECTfossem diferentes. A partir de agora,VIEWnão usará essas configurações modificadas, mas você ainda pode passar configurações adicionais na seçãoSETTINGSda consultaCREATE 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 consultaOPTIMIZE FINAL. Corrige #1820. #24496 (alesapin). - Permitir o uso do operador
NOT INna 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
IntervalemLowCardinality. 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çõessequenceMatchesequenceCount. 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
ifcom tiposDecimaleIntem seus ramos. Isso fecha #20549. Isso fecha #10142. #25283 (alexey-milovidov). - Atualiza o prompt no
clickhouse-cliente 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
topLevelDomainpara 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
epollaninhado funcione, isso é necessário paraasync_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
INnesse caso. #24874 (Amos Bird). - Passa a respeitar
max_distributed_connectionsparainsert_distributed_sync(caso contrário, em clusters muito grandes e com inserção síncrona, pode esgotarmax_thread_pool_size). #24754 (Azat Khuzhin). - Evite ocultar erros como
Limit for rows or bytes to read exceededem 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_CACHEfor criado com uma consulta DDL, ele poderá ser criado apenas dentro do diretóriouser_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
Filenoclickhouse-locale da consulta INSERT noclickhouse-clientquando 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 propriedadeallow_to_copy_alias_and_materialized_columnscomo true na configuração da tarefa. Fecha #9177. Fecha [#11007] (https://github.com/ClickHouse/ClickHouse/issues/11007). Fecha #9514. Adicionada a propriedadeallow_to_drop_target_partitionsna configuração da tarefa para remover a partição da tabela original antes de mover as tabelas auxiliares. Fecha #20957. Remove a consultaOPTIMIZE DEDUPLICATE. Esse hack era necessário porqueALTER TABLE MOVE PARTITIONera tentado novamente muitas vezes, e tabelas MergeTree simples não têm desduplicação. Fecha #17966. Grava o progresso no nó do ZooKeeper no caminhotask_path + /statusem formato JSON. Fecha #20955. Suporte a ReplicatedTables sem argumentos. Fecha #24834 .#23518 (Nikita Mikhaylov). - Adicionado
sleepcom backoff entre as tentativas de leitura do S3. #23461 (Vladimir Chebotarev). - Passa a respeitar
insert_allow_materialized_columns(permite colunas materializadas) para INSERT na tabelaDistributed. #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
attndimsfunciona 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 MUTATIONentre diferentes tabelas (corrige o erro inesperadoCancelled 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
userretorne 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 partna fila de replicação durante operações simultâneas dealter 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 REPLICAouSYSTEM SYNC REPLICAnã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
WHEREna otimização de push-down de expressões do plano de consulta (comquery_plan_filter_push_down = 1definido 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
ReplicatedMergeTreepodia 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 typesem consultas comARRAY JOINquando um array é usado na chave primária. Corrige #8247. #25546 (Anton Popov). - Corrige totais incorretos em consultas com
WITH TOTALSeWITH FILL. Corrige #20872. #25539 (Anton Popov). - Corrige uma condição de corrida ao consultar
system.clustersenquanto a configuração do cluster é recarregada simultaneamente. #25737 (Amos Bird). - Corrigido o erro
No such file or directoryao mover uma tabelaDistributedentre bancos de dados. Corrige #24971. #25667 (tavplubix). REPLACE PARTITIONpode 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
Replicatedque, 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 ASTsem 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
nullptrno formatoArrowao usarDecimal256. Adicionado suporte aDecimal256no formatoArrow. #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
REPLACEquando 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
quantileDeterministice em funções semelhantes. Isso fecha #20480. #25313 (alexey-milovidov). - Oferece suporte a
SimpleAggregateFunction(LowCardinality)paraSummingMergeTree. 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 argumentoLowCardinalityfoi usado com IN (esse bug surgiu na versão 21.6). Corrige #25187. #25290 (Nikolai Kochetov). - Corrige o comportamento incorreto de
joinGetOrNullcom 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
SELECTcomFINAL. 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
UUIDna chave de partição. (Não é recomendado usarUUIDna 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
mapContainsque causava o erroempty 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 + 1oub UInt32 MATERIALIZED b. Corrige #24910, #24292. #25059 (alesapin). - Corrige resultado incorreto ao usar uma projeção agregada com uma chave
GROUP BYnão vazia para executar uma consulta comGROUP BYpor 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
NULLno protocolo de compatibilidade do PostgreSQL. Fecha #22622. #24857 (Kseniia Sumarokova). - Corrigido o bug em que a exceção
Mutation was killedpodia 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
uniqXXXXStatesa 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, etotalBytesretorna 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
zstdfoi 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_expressionsvem 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
UUIDnão podem ser comparados com inteiros. Por exemplo, em vez de escreveruuid != 0, digiteuuid != '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 dadoDecimal256. Adiciona suporte a inteiros grandes em dicionários. Adiciona suporte às funçõesgcd/lcmpara inteiros grandes. Adiciona suporte a inteiros grandes em funções condicionais e de busca em array. Adiciona suporte aLowCardinality(UUID). Adiciona suporte a inteiros grandes na função de tabelagenerateRandome noclickhouse-obfuscator. Corrige o erro ao retornarUUIDde subconsultas escalares. Isso corrige #7834. Isso corrige #23936. Isso corrige #4176. Isso corrige #24018. Alteração incompatível com versões anteriores: valores do tipoUUIDnão podem ser comparados com inteiros. Por exemplo, em vez de escreveruuid != 0, escrevauuid != '00000000-0000-0000-0000-000000000000'. #23631 (alexey-milovidov). - Suporte ao tipo de dado
Arraypara inserção e seleção de dados nos formatosArrow,ParqueteORC. #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 aDETACH DICTIONARY PERMANENTLY. Adicionado suporte aEXCHANGE DICTIONARIESpara o engine de banco de dadosAtomic. Adicionado suporte para mover dicionários entre bancos de dados usandoRENAME DICTIONARY. #23436 (Maksim Kita). - Adicionada a função de agregação
uniqThetapara 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_nameemsystem.stack_trace. Isso fecha #23256. #24124 (abel-cheng). - Se
insert_null_as_default= 1, insere valores padrão em vez de NULL nas consultasINSERT ... SELECTeINSERT ... SELECT ... UNION ALL .... Fecha #22832. #23524 (Kseniia Sumarokova). - Adicionado suporte à exibição de progresso no
clickhouse-localcom a opção--progress. #23196 (Egor Savin). - Adiciona suporte à compressão HTTP (determinada pelo cabeçalho HTTP
Content-Encoding) na fonte de dicionáriohttp. 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) à consultaEXPLAIN PLAN. Quando ativada, a saída da consulta será uma única linhaJSON. Recomenda-se usar o formatoTSVRawpara evitar caracteres de escape desnecessários. #23082 (Nikolai Kochetov). - Adicionada a configuração
indexes(booleana, desativada por padrão) à consultaEXPLAIN PIPELINE. Quando ativada, mostra os índices usados, o número de partes e grânulos filtrados para cada índice aplicado. Compatível com tabelasMergeTree*. #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
deltaSumTimestamppara 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
Melhoria de desempenho
- Habilita a configuração
compile_expressionspor 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,counteavgem uma consulta em uma única função agregada. A otimização é controlada pela configuraçãooptimize_fuse_sum_count_avg. Isso é implementado com uma nova função agregadasumCount. Essa função retorna uma tupla com dois campos:sumecount. #21337 (hexiaoting). - Atualiza
zstdpara 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
Buffermelhorado: não adquirir bloqueio para total_bytes/total_rows no engineBuffer. #24066 (Azat Khuzhin). - O suporte à pré-alocação para dicionários hashed/sparse_hashed foi restaurado. #23979 (Azat Khuzhin).
- Habilita
async_socket_for_remotepor 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
regionpara 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
DateTimese ele não for fornecido explicitamente. Por exemplo, se você adicionar um segundo a um valor do tipoDateTimesem fuso horário, ele continuará sendoDateTimesem 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 comSphinxou 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
now64agora 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 foundno desligamento do servidor durante o flush final do mecanismoBuffer). #24068 (Azat Khuzhin). - Fazer flush das tabelas
Bufferantes 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 erroDestination table default.a_data_01870 doesn't exist. Block of data is discardedno log). #24067 (Azat Khuzhin). - Agora
prefer_column_name_to_alias = 1também passará a priorizar os nomes das colunas emgroup by,havingeorder by. Isso corrige #23882. #24022 (Amos Bird). - Adicionado suporte ao
ORDER BY WITH FILLcomDateTime64. #24016 (kevin wan). - Permite usar
DateTime64como coluna de versão noReplacingMergeTree. #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_rateemsystem.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 tabelarabbitmq_queue_consumeestiver definida como1, 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_bytesemsystem.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.tablesnão acessa mais o ZooKeeper. #23793 (Fuwang Hu). - Passa a respeitar
lock_acquire_timeout_for_background_operationsem consultasOPTIMIZE. #23623 (Azat Khuzhin). - Possibilidade de alterar as configurações do disco
S3em tempo de execução com o novo comando SQLSYSTEM RESTART DISK. #23429 (Pavel Kovalenko). - Se o usuário aplicou uma configuração incorreta ao definir por engano
max_distributed_connectionscomo zero, toda consulta a uma tabelaDistributedlanç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, trataremosmax_distributed_connectionsconfigurado incorretamente como zero como o menor valor possível (um). #23348 (Azat Khuzhin). - Desabilitado
min_bytes_to_use_mmap_iopor padrão. #23322 (Azat Khuzhin). - Adiciona suporte à nulabilidade de
LowCardinalitycomjoin_use_nulls, fecha #15101. #23237 (vdimir). - Adicionada a possibilidade de restaurar partes do
MergeTreeno diretóriodetachedpara discoS3. #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_rowseexternal_storage_max_read_rowspara 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
Parquetem tabelasKafka. #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 REPLICAouSYSTEM SYNC REPLICAentrava 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 = 1para corrigir a falha de mutation em tabelasMemory. 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
HDFSse torna inacessível durante a execução da consulta. Fecha #24117. #24191 (Kseniia Sumarokova). - Corrige falha na atualização da coluna
Nestedcom 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 PIPELINEcomSELECT xxx FINALexibia um pipeline incorreto. (hexiaoting). - Corrigido o uso de um valor
DateTimeconstante em vez de uma colunaDateTime64emWHERE. #24100 (Vasily Nemkov). - Corrigida falha em merge JOIN, fecha #24010. #24013 (vdimir).
- Algumas consultas
ALTER PARTITIONpodiam causar os errosPart A intersects previous part BeUnexpected merged part C intersecting drop range Dna fila de replicação. Isso foi corrigido. Corrige #23296. #23997 (tavplubix). - Corrige SIGSEGV em
GROUP BYexterno e na linha de overflow (isto é, consultas comoSELECT 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
CACHEcom duplicatas na origem (o que leva a overflows emDictCacheKeysRequestedMiss). #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 = 2comGROUP BYe 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 usardistributed_group_by_no_merge = 2com funções de janela. Desabilitaoptimize_distributed_group_by_sharding_keypara 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
s3table 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 pipeem consultas comGLOBAL IN/JOINeuse_hedged_requests. Corrige o problema #23431. #23805 (Nikolai Kochetov). - Corrige o problema em que
CLEAR COLUMNnã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
Valuesfor 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
ReplicatedMergeTreedesatualizada. Algumas atualizações de metadados poderiam ser ignoradas pela réplica desatualizada se uma consultaALTERfosse executada durante a indisponibilidade da réplica. #23742 (tavplubix). - Corrige um bug em
JoineWITH TOTALS, fecha #17718. #23549 (vdimir). - Corrige o possível erro
Block structure mismatchem consultas comUNION, 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_inestá 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-tablesexplicitamente. 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úmero9223372036854775808não pode ser representado exatamente como número de ponto flutuante (e9223372036854775808.0é arredondado para9223372036854776000.0). Porém, na versão anterior, a comparação retornava que os números eram iguais, porque, se o número de ponto flutuante9223372036854776000.0fosse convertido de volta para UInt64, o resultado seria9223372036854775808. 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
argMineargMaxpara um único argumentoTuple. 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çãodictGetChildrenretorna todos os filhos na forma de um array de índices. É uma transformação inversa dedictGetHierarchy. A funçãodictGetDescendantsretorna todos os descendentes como sedictGetChildrenfosse aplicada recursivamentelevelvezes. O valor zero delevelequivale a infinito. Melhorado o desempenho das funçõesdictGetHierarchyedictIsIn. Fecha #14656. #22096 (Maksim Kita). - Adicionada a função
dictGetOrNull. Ela funciona comodictGet, mas retornaNullcaso 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 des3em 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 aFETCH PARTITION, mas busca apenas uma parte. #22706 (turbo jason). - Adicionada uma configuração
max_distributed_depthque limita a profundidade de consultas recursivas a tabelasDistributed. Fecha #20229. #21942 (flynn).
Melhoria de desempenho
- Melhorado o desempenho de
intDivcom despacho dinâmico para AVX2. Isso fecha #22314. #23000 (alexey-milovidov). - Melhorado o desempenho da leitura no formato de entrada
ArrowStreampara 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 requeroptimize_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
nanodbcem vez dePoco::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_sizecomo8, 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_sizeemax_array_size. #22521 (Maksim Kita). - Adicionada a nova configuração
non_replicated_deduplication_windowpara a desduplicação de inserções no MergeTree não replicado. #22514 (alesapin). - Atualização dos caminhos para as configurações do modelo
CatBoostno recarregamento de configuração. #22434 (Kruglov Pavel). - Adicionado suporte ao tipo
Decimal256nos Dictionaries.Decimal256é um recurso experimental. Fecha #20979. #22960 (Maksim Kita). async_socket_for_remoteativado 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
unhexinsensível a maiúsculas e minúsculas para compatibilidade com o MySQL. #23229 (alexey-milovidov). - Implementadas as funções
arrayHasAny,arrayHasAll,has,indexOf,countEqualpara o caso genérico em que os tipos dos elementos do array são diferentes. Nas versões anteriores, as funçõesarrayHasAnyearrayHasAllretornavam false, ehas,indexOfecountEquallançavam exceção. Também foi adicionado suporte aDecimale a tipos inteiros grandes nas funçõeshase 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_shardsem 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_securepode ser usada para interação segura entre o cliente e o keeper-server.keeper_server.raft_configuration.securepode 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_threadsnoReplicatedMergeTree. #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).
dateDiffagora funciona com argumentosDateTime64(mesmo para valores fora do intervalo deDateTime) #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-clientcaso o programa anterior tenha deixado resíduos no terminal. Isso fecha #16518. #22634 (alexey-milovidov). - Faz com que a função
roundse 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/simpleJSONHasparavisitParam/visitParamExtract{UInt, Int, Bool, Float, Raw, String}. Corrige #21383. #21519 (fastio). - Adiciona
clickhouse-library-bridgepara 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
ArroweArrowStream. #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_allocatedemsystem.dictionariespara 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 pipeem consultas comGLOBAL IN/JOINquando a configuraçãouse_hedged_requestsestá 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 umunknown packetseja recebido de uma consulta remota (comasync_socket_for_remotehabilitado). 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_hashedcasoupdate_fieldesteja especificado. Fecha #23800. #23824 (Maksim Kita). - Corrigida uma falha quando
PREWHEREe 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
LIKEcom sequências de escape. #23610 (alexey-milovidov). - Corrigido o travamento nos comandos de reinicialização/parada. Fecha #20214. #23552 (filimonov).
- Corrigido o matcher
COLUMNSno 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 comoIncomplete 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
deltaSumproduzia um resultado incorreto após a redefinição do contador. #23437 (Russ Frank). - Corrigido o erro
Cannot unlink filedurante 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_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 existao 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 columnao selecionar emMaterializeMySQLcom 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_nullableestiver 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 existao 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 usaruntuple. Corrige #22290. #22991 (Nikolai Kochetov). - Corrigido o uso de colunas constantes do tipo
Mapcom valores anuláveis. #22939 (Anton Popov). - corrigidos
formatDateTime()emDateTime64e o especificador de formato “%C”; corrigidotoDateTime64()para valores grandes e escala não zero. #22937 (Vasily Nemkov). - Corrigido um travamento ao usar
mannWhitneyUTesterankCorrcom 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
HAVINGno 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çãomapem 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_defaultcomo zero. Era zero nas versões antigas. #22527 (alexey-milovidov). - Corrigido o
CASTincorreto de uma coluna do tipoLowCardinalityno 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_orderestava habilitado e havia muitas partes na tabela. Leve melhora no desempenho da agregação comoptimize_aggregation_in_orderhabilitado. #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
Mergeem consultas comJOINe agregação. Fecha #18368, fecha #22226. #21370 (Vladimir). - Corrigidos conflitos de nomes na otimização de pushdown. Isso causava filtragem incorreta em
WHEREapós FULL JOIN. Fecha #20497. #20622 (Vladimir). - Corrigido um bug muito raro em que uma inserção com quórum com
quorum_parallel=1não era realmente um “quórum” por causa da desduplicação. #18215 (filimonov - reportado, alesapin - corrigido).
Melhoria em compilação/testes/empacotamento
- Executados testes stateless em paralelo no CI. #22300 (alesapin).
- Simplificados os pacotes Debian. Isso corrige #21698. #22976 (alexey-milovidov).
- Adicionado suporte à compilação do ClickHouse no Apple M1. #21639 (changvvb).
- Corrigida a compilação do ClickHouse Keeper para macOS. #22860 (alesapin).
- Corrigidos alguns testes na plataforma AArch64. #22596 (alexey-milovidov).
- Adicionado alinhamento de funções para possivelmente melhorar o desempenho. #21431 (Danila Kutenin).
- Ajustados alguns testes para produzir resultados idênticos em amd64 e aarch64 (qemu). O resultado dependia de um comportamento da CPU específico da implementação. #22590 (alexey-milovidov).
- Permitido profiling de consulta apenas em x86_64. Veja #15174 e #15638. Isso fecha #15638. #22580 (alexey-milovidov).
- Permitida a compilação com xz (lzma) externo usando a opção de CMake
USE_INTERNAL_XZ_LIBRARY=OFF. #22571 (Kfir Itzhak). - Habilitado
openldapempacotado emppc64le#22487 (Kfir Itzhak). - Desabilitadas bibliotecas incompatíveis (geralmente específicas da plataforma) em
ppc64le#22475 (Kfir Itzhak). - Adicionado teste Jepsen no CI para o ClickHouse Keeper. #22373 (alesapin).
- Compilado
jemalloccom suporte a heap profiling. #22834 (nvartolomei). - Evitado UB nos motores
*Logno desbloqueio de rwlock devido a desbloqueio feito por outra thread. #22583 (Azat Khuzhin). - Corrigido UB ao desbloquear o rwlock do TinyLog a partir da mesma thread. #22560 (Azat Khuzhin).
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
toStartOfIntervalFunctionalinhará 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:59e22:00:00..23:59:59. Esse comportamento é mais adequado às necessidades práticas. Fecha #9510. #22060 (alexey-milovidov). AgeePrecisionnas 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
keysna tabelasystem.dictionariesfoi substituída pelas colunaskey.namesekey.types. As colunaskey.names,key.types,attribute.names,attribute.typesda tabelasystem.dictionariesnã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 pastasdetached/antes de buscar os dados de outras réplicas. Como detalhe de implementação, um novo comandoATTACH_PARTfoi 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 ... ATTACHna nova versão, pois os servidores antigos não conseguiriam processar a entradaATTACH_PARTno log replicado.
- As consultas
- 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 elementoremote_url_allow_hostsvazio no arquivo de configuração, remova-o. #20058 (Vladimir Chebotarev).
Novo recurso
- Faixa estendida de
DateTime64para suportar datas do ano de 1925 a 2283. Suporte aprimorado aDateTimeem 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_aliaspara 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çãodictGetChildrenretorna todos os filhos em um array de índices. É a transformação inversa dedictGetHierarchy. A funçãodictGetDescendantsretorna todos os descendentes como sedictGetChildrenfosse aplicada recursivamentelevelvezes. O valor zero delevelé 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 engineDictionary. Fecha #21560. #21910 (Maksim Kita). - Suporte ao tipo
Nullableno atributoPolygonDictionary. #21890 (Maksim Kita). - As funções
dictGet,dictHasusam 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 comodictGet, mas retornaNullcaso a chave não seja encontrada no dicionário. Fecha #22375. #22413 (Maksim Kita). - Adicionada atualização assíncrona aos dicionários
ComplexKeyCache,SSDCacheeSSDComplexKeyCache. Adicionado suporte ao tipoNullablenos dicionáriosCache,ComplexKeyCache,SSDCacheeSSDComplexKeyCache. Adicionado suporte à busca de múltiplos atributos com as funçõesdictGetedictGetOrDefault. Corrige #21517. #20595 (Maksim Kita). - Adiciona suporte à função
dictHasparaRangeHashedDictionary. Corrige #6680. #19816 (Maksim Kita). - Adiciona a função
timezoneOf, que retorna o nome do fuso horário dos tipos de dadosDateTimeouDateTime64. Isso não fecha #9959. Corrige inconsistências nos nomes das funções: adiciona os aliasestimezoneetimeZone, bem comotoTimezoneetoTimeZone, além detimezoneOfetimeZoneOf. #22001 (alexey-milovidov). - Adiciona a nova cláusula opcional
GRANTEESpara os comandosCREATE/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-seGRANTEES 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_countasystem.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 deerrors_countemsystem.clusters. #21480 (Kruglov Pavel). - Adicionar a coluna virtual
_partition_idpara motoresMergeTree*. Permitir o pruning de partições por_partition_id. Adicionar a funçãopartitionID()para calcular o ID da partição como string. #21401 (Amos Bird). - Adiciona a função
isIPAddressInRangepara 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 janelalagInFrame/leadInFrame, que são análogas alag/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
ReplicatedMergeTreecom 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-locale em todos os outros lugares. #21630 (Nikita Mikhaylov). - Suporte a parsing paralelo para os formatos
CSVWithNameseTSVWithNames. 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 codecNONEé, 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 codecNONEé útil em alguns casos: - quando os dados não são compressíveis; - para benchmarks sintéticos. #22145 (alexey-milovidov). GROUP BYmais rápido commax_rows_to_group_bypequeno egroup_by_overflow_mode='any'. #21856 (Nikolai Kochetov).- Otimiza o desempenho de consultas como
SELECT ... FINAL ... WHERE. Agora, em consultas comFINAL, é permitido mover paraPREWHEREcolunas que estão na chave de ordenação. #21830 (foolchi). - Desempenho aprimorado ao substituir
memcpypor 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_orderhabilitada). #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_kindos valoresGrant,RevokeeSystempara as consultas correspondentes emsystem.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
rangecom argumentoUInt256(o suporte a inteiros grandes é experimental). Isso fecha #22157. #22387 (alexey-milovidov). - Adicionar a coluna
current_databaseà tabelasystem.processes. Ela contém o banco de dados atual da consulta. #22365 (Alexander Kuzmenkov). - Adiciona ao
clickhouse-clientrecursos 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 operadorIN, com tuplas sem NULLs no lado direito, por exemploSELECT (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 comoSELECT (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()eVERSION(). Isso corrige #22028. #22042 (Eugene Klimov). - Adicionada a opção
strict_increaseà funçãowindowFunnelpara calcular cada evento apenas uma vez (corrige #21835). #22025 (Vladimir). - Se a chave de partição de uma tabela
MergeTreenão incluir colunasDatenemDateTime, mas incluir exatamente uma colunaDateTime64, exiba seus valores nas colunasmin_timeemax_timedas tabelassystem.partsesystem.parts_columns. Adicione as colunasmin_timeemax_timeà tabelasystem.parts_columns(havia uma inconsistência em relação à tabelasystem.parts). Isso fecha #18244. #22011 (alexey-milovidov). - Suporte adicionado à configuração
replication_alter_partitions_sync=1noclickhouse-copierpara 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
ArrayeMapna 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_versioncomo 2 para habilitar isso. Adicionada a configuraçãodistributed_ddl_output_mode. Modos compatíveis:none,throw(padrão),null_status_on_timeoutenever_throw. Correções e melhorias diversas no engine de banco de dadosReplicated. #21535 (tavplubix). - Se
PODArrayfosse 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/simpleJSONHasparavisitParam/visitParamExtract{UInt, Int, Bool, Float, Raw, String}. Corrige #21383. #21519 (fastio). - Adicionada a configuração
optimize_skip_unused_shards_limitpara limitar o número de valores da chave de sharding deoptimize_skip_unused_shards. #21512 (Azat Khuzhin). - Melhoria no
clickhouse-formatpara 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 formatarASTInsertQuerycom 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 JOINparaINNER JOIN. #20392 (Vladimir). - Não cria partes vazias no INSERT quando a configuração
optimize_on_insertestá habilitada. Corrige #20304. #20387 (Kruglov Pavel). MaterializeMySQL: adiciona índice minmax do tipo skipping para a coluna_version. #20382 (Stig Bakken).- Adicionar a opção
--backslashaoclickhouse-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_ERRORquando tentarmos aplicar uma mutação à parte já coberta. Corrige #22013. #22291 (alesapin).
Correção de bug
- Remova o socket do
epollantes de cancelar o receptor de pacotes emHedgedConnectionspara 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
SELECTtem uma condiçãoWHEREconstante e a tabela de origem possui colunas com nomes formados por dígitos. #22270 (LiuNeng). - Corrigido o cancelamento de consulta com
use_hedged_requests=0easync_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_portnão esteja na configuração. #22132 (Ewout). - Corrige o erro
Invalid number of rows in ChunkemJOINcomTOTALSearrayJoin. 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
OPTIMIZEeALTERem motores de tabelaReplicatedMergeTree. Agora, a consulta não ficará travada quando a tabela tiver sido desanexada ou reiniciada. #22118 (alesapin). - Desativa
async_socket_for_remote/use_hedged_requestspara kernels do Linux com falhas. #22109 (Azat Khuzhin). - Entrypoint do Docker: evitar o
chownde.quandoLOG_PATHestiver vazio. Fecha #22100. #22102 (filimonov). - A função
decryptnão tinha uma verificação do tamanho mínimo dos dados criptografados no modoAEAD. Isso corrige #21897. #22064 (alexey-milovidov). - Em casos raros, a mesclagem no
CollapsingMergeTreepode criar um grânulo comindex_granularity + 1linhas. Por causa disso, a verificação interna adicionada em #18928 (afeta as versões 21.2 e 21.3) pode falhar com o erroIncomplete 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 BYquando 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
WHEREouHAVINGé aplicada antes deGROUP 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
Distinctao 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
ReplicatedMergequando a consultaALTER MODIFY COLUMNnão altera o tipo da colunaDecimalcaso o tamanho dela (32 bits ou 64 bits) não mude. #21728 (alesapin). - Corrigida a possível espera infinita quando
OPTIMIZEeDROPsão executados de forma concorrente emReplicatedMergeTree. #21716 (Azat Khuzhin). - Corrige a função
arrayElementpara o tipoMapao usar argumentos inteiros constantes. #21699 (Anton Popov). - Corrigido SIGSEGV em atributos inexistentes no
ip_triecomaccess_to_key_from_attributes. #21692 (Azat Khuzhin). - O servidor agora só passa a aceitar conexões após a inicialização do
DDLWorkere 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) comasync_socket_for_remote=1. #21643 (Azat Khuzhin). - Corrigido
fsync_part_directorypara merge horizontal. #21642 (Azat Khuzhin). - Remove colunas desconhecidas da tabela do JOIN em
WHEREpara consultas a motores de banco de dados externos (MySQL, PostgreSQL). close #14614, close #19288 (dup), close #19645 (dup). #21640 (Vladimir). std::terminatefoi chamado se houvesse um erro ao gravar dados no S3. #21624 (Vladimir).- Corrige um possível erro
Cannot find columnquandooptimize_skip_unused_shardsestá habilitado e nenhum shard é usado. #21579 (Azat Khuzhin). - Se a consulta tiver uma condição
WHEREconstante e a configuraçãooptimize_skip_unused_shardsestiver 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_numincorreto. 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
AvronoKafka. 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_tablenão funcionava comMATERIALIZED VIEW; isso foi corrigido. Corrige #18943. #20626 (tavplubix). - Corrige conflitos de nomes em
PredicateRewriteVisitor. Isso causava filtragem incorreta na cláusulaWHEREapósFULL 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 emppc64lecom Clang. #22476 (Kfir Itzhak). Corrige a compilação do boost emppc64le. #22474 (Kfir Itzhak). Corrige o erro do CMake relacionado à variável internaCMAKE_ASM_COMPILE_OBJECT, que não estava definida emppc64le. #22469 (Kfir Itzhak). Corrige o problema em que Fedora/RHEL/CentOS não encontravamlibclang_rt.builtinsemppc64le. #22458 (Kfir Itzhak). Habilita a compilação comjemallocemppc64le. #22447 (Kfir Itzhak). Corrige a incorporação da configuração do ClickHouse e do timezone do cctz emppc64le. #22445 (Kfir Itzhak). Corrige a compilação emppc64lee o uso do registrador correto de ponteiro de instrução emppc64le. #22430 (Kfir Itzhak). - Reabilite a biblioteca S3 (AWS) em
aarch64. #22484 (Kfir Itzhak). - Adicione
tzdataaos contêineres do Docker, pois a leitura de formatosORCexige 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-ldfoi alterada para--ld-pathno Clang. #21597 (Ilya Yatsishin). - Atualização de
docker/test/testflows/runner/dockerd-entrypoint.shpara 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
ctimeaozookeeper-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
TTLnos casos em que sua expression é uma função e coincide com a chaveORDER BY. Agora é permitido definir uma aggregation personalizada para colunas de chave primária emTTLcomGROUP BY. Incompatível com versões anteriores: para colunas de chave primária que não estão emGROUP BYe não são definidas explicitamente, agora é aplicada a funçãoanyem vez demaxquando o TTL expira. Além disso, se você usar TTL comWHEREouGROUP 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_existseengine_file_truncate_on_insert. #20620 (M0r64n). - Adicionada a função de agregação
deltaSumpara somar as diferenças entre linhas consecutivas. #20057 (Russ Frank). - Nova coluna
event_time_microsecondsna tabelasystem.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_idpara oferecer suporte à inserção de dados em um shard específico a partir de uma tabela distribuída. #19961 (flynn). - A função
reinterpretAsfoi 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_keypara a origem de Dicionárioexecutable. 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_selectsequery_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çãomax_concurrent_querieslimita o número de consultas executadas simultaneamente relacionadas a essa tabela. A configuraçãomin_marks_to_honor_max_concurrent_queriesdetermina 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
filepara ler arquivos do diretório user_files como String. Isso é diferente da table functionfile. 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 dehedged_connection_timeoutou nenhum dado tenha sido recebido dentro dereceive_data_timeout. A consulta usa a primeira conexão que envia um pacote Progress não vazio (ou um pacote Data, seallow_changing_replica_until_first_data_packet); as outras conexões são canceladas. Consultas commax_parallel_replicas > 1sã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_efficientvem 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 BYcom 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
Memoryem 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
compresspara tabelasMemory. 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 tabelasMemorypodem funcionar mais lentamente queMergeTree: (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/modulopara 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.partsesystem.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 (como1111111111222em vez de1111111111.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 DISTRIBUTEDlivre 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,SSDCacheDictionaryeSSDComplexKeyDictionarypara usarLRUHashMapcomo índice subjacente. #20164 (Maksim Kita). - A configuração
access_managementagora pode ser definida na inicialização ao fornecerCLICKHOUSE_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 tabelasystem.zookeeper. #20105 (小路). - Mostrar os detalhes completos das tabelas
MaterializeMySQLemsystem.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
JSONExtractsolicitando o tipoFloat32, permitir a conversão imprecisa para o tipo de resultado. Por exemplo, o número0.1em 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ãoNullablee NULL para o tipoNullablepara 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
MaterializeMySQLemsystem.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_insertebytes_to_throw_insertpara o engineDistributed). #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::ColumnLowCardinalityao inserir em uma tabela com colunaLowCardinalitya partir do formatoValues. Corrige #21140 #21357 (Nikolai Kochetov). - Corrige um deadlock em mutações
ALTER DELETEpara 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 COLUMNpassarã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_nullse ao fazer JOIN deTOTALSde subconsultas. Isso fecha #19362 e #21137. #21248 (vdimir). - Corrige travamento no
EXPLAINpara consulta comUNION. 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_defaultnã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
DateTime64fora 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 COLUMNcriava 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
-Distinctcom o combinador-Stateem 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
transformnã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_ERRORparajoin_use_nulls=1quando 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
DROPouRENAMEda coluna de versão dos motores de tabela*CollapsingMergeTreeeReplacingMergeTree. #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
MergeTreeque 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 tipoTupleno resultado dos ramos then/else. O tipoTupledeve conterArrayou outro tipo complexo. Corrige #18356. #20133 (alesapin). - O mecanismo de tabela
MongoDBagora só estabelece conexão quando vai ler dados.ATTACH TABLEnã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
fromModifiedJulianDayquando 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 CLUSTERpodia 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
stdoutestderrno 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/gcdnã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 paraOPTIMIZE 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(comselect/inserte suporte a arrays multidimensionais), também como função de tabela. Adicionada a fonte de dicionárioPostgreSQL. Adicionado o mecanismo de banco de dadosPostgreSQL. #18554 (Kseniia Sumarokova). - O tipo de dado
Nestedagora oferece suporte a níveis arbitrários de aninhamento. Foram introduzidas subcolunas para tipos complexos, comosize0emArray,nullemNullablee nomes de elementos deTuple, que podem ser lidas sem precisar ler a coluna inteira. #17310 (Anton Popov). - Adicionado suporte a
NullableemFlatDictionary,HashedDictionary,ComplexKeyHashedDictionary,DirectDictionary,ComplexKeyDirectDictionaryeRangeHashedDictionary. #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
clustere, para as table functionsremoteecluster, suporte à distribuição de dados entre nós com a especificação da sharding key. Fecha #16752. #18264 (flynn). - Adiciona a função
decodeXMLComponentpara decodificar caracteres em XML. Exemplo:SELECT decodeXMLComponent('Hello,"world"!')#17659. #18542 (nauta). - Adicionadas as funções
parseDateTimeBestEffortUSOrZeroeparseDateTimeBestEffortUSOrNull. #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
formatDateTimeoferece suporte ao modificador%Qpara 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 semap.keysinclui 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
argMineargMax. #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 paraIDisk. Isso fecha #19065. #19086 (alexey-milovidov). - Aliases declarados na instrução
WITHagora são usados corretamente na análise de índice. Consultas comoWITH 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 paraoptimize_trivial_count; - considera colunas com alias em GROUP BY/ORDER BY paraoptimize_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()esum(if())como a funçãocountIf()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
Filterdo plano de consulta em um parExpression + Filter. Junto com a otimização de mesclagemExpression + Expression(#17458), isso pode adiar a execução de algumas expressões para depois da etapaFilter. #19253 (Nikolai Kochetov).
Melhoria
SELECT count() FROM tableagora pode ser executado se for possível selecionar apenas uma coluna qualquer datable. Este PR corrige #10639. #18233 (Vitaly Baranov).- Define o conjunto de caracteres como
utf8mb4ao interagir com servidores MySQL remotos. Corrige #19795. #19800 (alexey-milovidov). - A
table functionS3agora suporta o modo de compressãoauto(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
S3usará 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_remoteestiver 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
--reconnectaoclickhouse-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
toIPv6faz o parsing de endereçosIPv4. #19518 (Bharat Nallan). - Adiciona o campo
http_refererasystem.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
IPv4nos formatos Pretty. Eles eram alinhados à direita, e não à esquerda. Isso fecha #19184. #19339 (alexey-milovidov). - Permite alterar
max_server_memory_usagesem 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 exceedao inserir dados com strings muito grandes. Corrige #18690. #18979 (tavplubix). - Imagem Docker: várias melhorias no entrypoint do clickhouse-server. #18954 (filimonov).
- Adicionadas
normalizeQueryKeepNamesenormalizedQueryHashKeepNamespara 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 tabelasLIVE VIEW. #14822 (vzakaznikov). - Restringe consultas
MODIFY TTLpara tabelasMergeTreecriadas 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 tipoTupledo resultado dos ramos then/else. O tipoTupledeve conterArrayou 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
fromModifiedJulianDayquando o tipo do argumento éNullable(T)para qualquer tipo integral diferente de Int32. #19959 (PHO). - A função
greatCircleAngleretornava 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 CLUSTERpodia 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çãoAttempt 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
groupUniqArrayretorne 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 functionao usar a funçãoignorecom o argumentoLowCardinality. Corrige #14275. #19016 (Nikolai Kochetov). - Corrigida a inserção da coluna
LowCardinalityem uma tabela com a engineTinyLog. 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 columnscausada pela mesclagem das etapasExpressiondo 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, comasync_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
bitmapOrCardinalityque pode levar à desreferenciação de um nullptr. Isso encerra #18911. #18912 (sundyli). - Corrigido o erro
Attempt to read after eofao tentar fazerCASTdeNULLdeNullable(String)paraNullable(Decimal(P, S)). Agora, a funçãoCASTretornaNULLquando 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
positionCaseInsensitiveUTF8acionava o AddressSanitizer. #19720 (alexey-milovidov). - Removido
--project-directorydo 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, emsubstringe emarraySum. 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
WHEREouPREWHERE. 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
neighborpara o argumentoLowCardinality. 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 SYNCpodia 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
addMonthfosse 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
ALTEReDROPsimultâneas podem travar ao processar uma tabela ReplicatedMergeTree. #19237 (alesapin). - Corrigido o erro
There is no checkpointao inserir dados pela interface HTTP usando o formatoTemplateouCustomSeparated. 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
MOVEouREPLACE PARTITIONou, em casos raros, apósDETACHouDROP 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_defaultfica 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.xmlcontiver configurações que não atendam às restrições correspondentes. #18486 (tavplubix). - Restrinja
ALTER MODIFY SETTINGpara impedir alterações em configurações de armazenamento que afetam as partes de dados (write_final_markeenable_mixed_granularity_parts). #18306 (Amos Bird). - Defina
insert_quorum_parallelcomo 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,timeSeriesGroupRateSumforam 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çõesavgeavgWeighted. Também permita o uso de tipos diferentes (inteiro, decimal, ponto flutuante) para o valor e o peso na funçãoavgWeighted. Esta é uma mudança incompatível com versões anteriores: agora, as funçõesavgeavgWeightedsempre retornamFloat64(como documentado). Antes dessa mudança, o tipo de retorno para argumentosDecimaltambém eraDecimal. #15419 (Mike). - A expressão
toUUID(N)não funciona mais. Substitua portoUUID('00000000-0000-0000-0000-000000000000'). Essa mudança foi motivada pelos resultados pouco óbvios detoUUID(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
inclao 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 atributosincl="..."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 TABLEeCREATE OR REPLACE TABLE. #18521 (tavplubix). - Implementa
UNION DISTINCTe trata a cláusulaUNIONsem modificador comoUNION DISTINCTpor padrão. Adiciona a configuraçãounion_default_mode, que permite tratá-la comoUNION ALLou 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õesx 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
*.zstpara importação e exportação de dados. Isso permite usar*.zstna funçãofile()eContent-encoding: zstdno cliente HTTP. Isso fecha #16791 . #17144 (Abi Palagashvili). - Adicionadas as funções de agregação
mannWitneyUTest,studentTTestewelchTTest.rankCorrfoi 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_kindenormalized_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 SETTINGSpara exibir os parâmetros de system.settings.SHOW CHANGED SETTINGSe a cláusulaLIKE/ILIKEtambém são suportados. #18056 (Jianmei Zhang). - A função
positionagora é compatível com a sintaxePOSITION(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_readpara 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árioforce_max_partition_limitpara impor essa restrição. #18712 (Amos Bird). - Adicionada a coluna
query_idasystem.part_logpara 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 emuser_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 = 1para 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_sizeemax_compress_block_sizea 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 ... DEDUPLICATEexpandida 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,toModifiedJulianDayOrNullefromModifiedJulianDayOrNull. 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
PROXYv1para encapsular a interface TCP nativa. Permite associar cotas ao endereço IP encaminhado pelo proxy (aplicado ao endereçoPROXYv1e aoX-Forwarded-Forda 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
EDITORpara editar comandos.Alt-Shift-E. #17665 (Amos Bird). - Adicionada a função
encodeXMLComponentpara 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
limiteoffsetpara 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:
-SimpleStatepara criar tiposSimpleAggregateFunctionpor 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-fileaoclickhouse-cliente aoclickhouse-local. #15930 (Maksim Kita). - Adicionado o parâmetro
queryparaclickhouse-benchmark. #17832 (Maksim Kita). EXPLAIN ASTagora oferece suporte a consultas além deSELECT. #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
bitHammingDistanceetupleHammingDistance. #7649 (flynn). - Adicionado o novo tipo de dado
Map. Veja #1841. A primeira versão doMapoferece suporte apenas aStringcomo 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-tableaoclickhouse-localpara executá-lo sem tabelas de sistema. Isso evita a inicialização deDateLUT, que pode levar um tempo perceptível (dezenas de milissegundos) na inicialização. #18899 (alexey-milovidov). - Substituído
PODArrayporPODArrayWithStackMemoryemAggregateFunctionWindowFunnelDatapara melhorar o desempenho da funçãowindowFunnel. #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
IPv6CIDRToRangeacelerada. #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
-Iffoi desvirtualizado, ecountfoi vetorizado corretamente. Isso se refere a este PR. #17043 (Amos Bird). - Corrige o desempenho da leitura de tabelas
Mergeque abrangem um grande número de tabelasMergeTree. 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
floatno ClickHouse. - Corrigido max_distributed_connections (afeta
prefer_localhost_replica = 1emax_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_prewherecom 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
TinyLogouLog. 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 * Floatou vice-versa são permitidas, incluindo as agregadas (por exemplo,SELECT sum(decimal_field * 1.1)ouSELECT 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
closeao 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
windowFunnelno 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 KILLpassou 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 comandosALTERnão são replicados. #18789 (Amos Bird). - Permitir que o transformador de coluna
EXCEPTaceite uma string como padrão de expressão regular. Isso resolve #18685 . #18699 (Amos Bird). - Corrigido o
SimpleAggregateFunctionnoSummingMergeTree. Agora, ele funciona comoAggregateFunction. 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 deSimpleAggregateFunctionnoSummingMergeTree. 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)paraTypee vice-versa. Também foi adicionada a capacidade de modificar o tipo da coluna da chave primária deEnumXparaIntX. 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 installpode funcionar no Mac. O problema era que não existeprocfsnessa plataforma. #18201 (Nikita Mikhaylov). - Melhores dicas sobre a sintaxe da consulta
SHOW .... #18183 (Du Chuan). - Suporte a agregações de Array
arrayMin,arrayMax,arraySum,arrayAvgparaInt128,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égioSELECTem 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.tablesesystem.columnsapenas na sessão em que foram criadas. O banco de dados interno_temporary_and_external_tablesagora 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 flagis_temporarydefinida. #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=0proí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á definirallow_introspection_functions=1para si mesmo a fim de poder usá-lo). Da mesma forma,allow_ddl=0proí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
RabbitMQcaso 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_columnseasterisk_include_alias_columnsestão ativadas. #17462 (Ken Chen). - Permite especificar TTL para remover registros antigos das tabelas de log do sistema, usando o atributo
<ttl>emconfig.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
interfaceda tabelasystem.query_log):4para MySQL e5para PostgreSQL, em vez do1, 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
receiveHellono servidor para evitar a exceçãoAttempt 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
setfuncionarão comGLOBAL 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,-MergeStatee-State, devemos colocar-OrNullantes. #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,
~/.awseAssumeRolepara 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
Atomicpara o banco de dados aninhado da engineMaterializeMySQL. #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 threadsnos 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çãoAttempt to read after EOF. Corrige #18340. #19101 (alesapin). - Restringe as consultas
MODIFY TTLpara tabelasMergeTreecriadas 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
groupUniqArrayretorne 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 functionao usar a funçãoignorecom o argumentoLowCardinality. Corrige #14275. #19016 (Nikolai Kochetov). - Corrige a inserção da coluna
LowCardinalityem uma tabela com o mecanismoTinyLog. 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_anyporque 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 columnscausada pela mesclagem das etapasExpressiondo 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
bitmapOrCardinalityque 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
INSERTsdistribuídos assíncronos podem ser rejeitados pelo servidor se a configuraçãonetwork_compression_methodestiver definida globalmente para um valor diferente do padrão. Isso corrige #18741. #18776 (alexey-milovidov). - Corrigido o erro
Attempt to read after eofao tentar fazerCASTdeNULLdeNullable(String)paraNullable(Decimal(P, S)). Agora, a funçãoCASTretornaNULLquando não consegue interpretar um valor decimal de uma stringNullable. Corrige #7690. #18718 (Winter Zhang). - Corrigido um pequeno problema no logging. #18717 (sundyli).
- Corrigida a remoção de partes vazias em tabelas
ReplicatedMergeTreecriadas 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 stuckao usarORDER BYapós subconsulta comRIGHTouFULLJOIN. #18550 (Nikolai Kochetov). - Corrigido um bug que podia fazer com que consultas
ALTERficassem 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 shortao executar funçõestoType(...)(toDate,toUInt32etc.) com argumento do tipoNullable(String). Agora, essas funções retornamNULLem 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
SetouJoine em consultas asystem.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
Distinctao usar agregação em dois níveis. Corrige #17682. #18365 (Anton Popov). - Corrigido o problema em que o processo
clickhouse-odbc-bridgefica 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 tableagora 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 JOINagora exige o privilégioSELECTem 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 FILLeWITH 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 profileao tentar definir um perfil de configurações. #18167 (tavplubix). - Corrige um erro em que a consulta
MODIFY COLUMN ... REMOVE TTLna verdade não remove o TTL da coluna. #18130 (alesapin). - Corrigido
std::out_of_range: basic_stringno parsing da URL do S3. #18059 (Vladimir Chebotarev). - Corrige a comparação entre
DateTime64eDate. 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.sizecom 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_walestiver 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 implementedao executar a consultaRENAMEem um banco de dadosAtomiccom 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 quandopool_size> 1. Isso foi corrigido. #17640 (tavplubix). - Corrige a tabela
system.stack_tracevazia quando o servidor está em execução em modo daemon. #17630 (Amos Bird). - A exceção
fmt::v7::format_errorpode 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 BYquando a configuraçãooptimize_redundant_functions_in_order_byestá 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
JOINcom tiposLowCardinality. 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 clientem consultas distribuídas comLIMIT. #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_keypara consulta com apenas OFFSET. #16996 (Azat Khuzhin). - Corrige consultas em tabelas
Mergesobre tabelasDistributedcom 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
DateTime64com escalas diferentes. Corrige #16655 … #16952 (Vasily Nemkov). - Corrige a otimização de group by quando a configuração
optimize_aggregators_of_group_by_keysestá 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_queryestá 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_consistencyem consultas otimizadas de contagem trivial e em tabelas do sistema. #16309 (Hao Chen). - Retornar erro quando o transformador de coluna
REPLACEoperar 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
OpenSSLparaBoringSSL. 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 SUSPENDpara 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 olldnã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 demasterparamain). #18192 (Stig Bakken). - Agora, o
clickhouse-testfaz 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
libcpor 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
memcpycom 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).