Versão 18.16 do ClickHouse
Versão do ClickHouse 18.16.1, 2018-12-21
Correções de bugs:
- Corrigido um erro que causava problemas na atualização de dicionários com a fonte ODBC. #3825, #3829
- A compilação JIT de funções de agregação agora funciona com colunas LowCardinality. #3838
Melhorias:
- Adicionada a configuração
low_cardinality_allow_in_native_format(habilitada por padrão). Quando desabilitada, as colunas LowCardinality serão convertidas em colunas comuns para consultas SELECT, e colunas comuns passarão a ser esperadas em consultas INSERT. #3879
Melhorias de compilação:
- Correções para builds no macOS e em ARM.
Versão do ClickHouse 18.16.0, 2018-12-14
Novos recursos:
- Expressões
DEFAULTpassam a ser avaliadas para campos ausentes ao carregar dados em formatos de entrada semiestruturados (JSONEachRow,TSKV). O recurso é habilitado pela configuraçãoinsert_sample_with_metadata. #3555 - A consulta
ALTER TABLEagora inclui a açãoMODIFY ORDER BYpara alterar a chave de ordenação ao adicionar ou remover uma coluna da tabela. Isso é útil para tabelas da famíliaMergeTreeque executam tarefas adicionais durante a mesclagem com base nessa chave de ordenação, comoSummingMergeTree,AggregatingMergeTreeetc. #3581 #3755 - Para tabelas da família
MergeTree, agora é possível especificar uma chave de ordenação (ORDER BY) e um índice (PRIMARY KEY) diferentes. A chave de ordenação pode ser maior que o índice. #3581 - Adicionadas a table function
hdfse a table engineHDFSpara importar e exportar dados para o HDFS. chenxing-xc - Adicionadas funções para trabalhar com base64:
base64Encode,base64Decode,tryBase64Decode. Alexander Krasheninnikov - Agora é possível usar um parâmetro para configurar a precisão da aggregate function
uniqCombined(selecionar o número de células HyperLogLog). #3406 - Adicionada a tabela
system.contributors, que contém os nomes de todos que fizeram commits no ClickHouse. #3452 - Adicionada a possibilidade de omitir a partição na consulta
ALTER TABLE ... FREEZEpara fazer backup de todas as partições de uma só vez. #3514 - Adicionadas as funções
dictGetedictGetOrDefault, que não exigem a especificação do tipo do valor de retorno. O tipo é determinado automaticamente pela descrição do Dicionário. Amos Bird - Agora é possível especificar comentários para uma coluna na descrição da tabela e alterá-los usando
ALTER. #3377 - Agora há suporte à leitura em tabelas do tipo
Joincom chaves simples. Amos Bird - Agora é possível especificar as opções
join_use_nulls,max_rows_in_join,max_bytes_in_joinejoin_overflow_modeao criar uma tabela do tipoJoin. Amos Bird - Adicionada a função
joinGet, que permite usar uma tabela do tipoJoincomo um Dicionário. Amos Bird - Adicionadas as colunas
partition_key,sorting_key,primary_keyesampling_keyà tabelasystem.tablespara fornecer informações sobre as chaves da tabela. #3609 - Adicionadas as colunas
is_in_partition_key,is_in_sorting_key,is_in_primary_keyeis_in_sampling_keyà tabelasystem.columns. #3609 - Adicionadas as colunas
min_timeemax_timeà tabelasystem.parts. Essas colunas são preenchidas quando a chave de particionamento é uma expressão composta por colunasDateTime. Emmanuel Donin de Rosière
Correções de bugs:
- Correções e melhorias de desempenho para o tipo de dados
LowCardinality.GROUP BYusandoLowCardinality(Nullable(...)). Obtenção dos valores deextremes. Processamento de funções de ordem superior.LEFT ARRAY JOIN.GROUP BYdistribuído. Funções que retornamArray. Execução deORDER BY. Escrita em tabelasDistributed(nicelulu). Retrocompatibilidade para consultasINSERTde clientes antigos que implementam o protocoloNative. Suporte aLowCardinalityparaJOIN. Desempenho aprimorado ao trabalhar com um único fluxo. #3823 #3803 #3799 #3769 #3744 #3681 #3651 #3649 #3641 #3632 #3568 #3523 #3518 - Corrigido o modo de funcionamento da opção
select_sequential_consistency. Antes, quando essa configuração estava habilitada, às vezes era retornado um resultado incompleto após o início da gravação em uma nova partição. #2863 - Os bancos de dados são especificados corretamente ao executar consultas DDL com
ON CLUSTEReALTER UPDATE/DELETE. #3772 #3460 - Os bancos de dados são especificados corretamente em subconsultas dentro de uma VIEW. #3521
- Corrigido um bug no
PREWHEREcomFINALparaVersionedCollapsingMergeTree. 7167bfd7 - Agora você pode usar
KILL QUERYpara cancelar consultas que ainda não foram iniciadas porque estão aguardando o bloqueio da tabela. #3517 - Corrigidos os cálculos de data e hora quando os relógios eram atrasados à meia-noite (isso acontece no Irã e aconteceu em Moscou de 1981 a 1983). Antes, isso fazia com que a hora fosse ajustada para um dia antes do necessário e também causava formatação incorreta da data e da hora em formato de texto. #3819
- Corrigidos bugs em alguns casos de
VIEWe subconsultas sem especificação do banco de dados. Winter Zhang - Corrigida uma condição de corrida ao ler e excluir simultaneamente uma
MATERIALIZED VIEW, devido à falta de bloqueio daMATERIALIZED VIEWinterna. #3404 #3694 - Foi corrigido o erro
Lock handler cannot be nullptr.#3689 - Corrigido o processamento de consultas quando a opção
compile_expressionsestá habilitada (ela vem habilitada por padrão). Expressões constantes não determinísticas, como a funçãonow, não são mais desdobradas. #3457 - Corrigido um travamento ao especificar um argumento de escala não constante nas funções
toDecimal32/64/128. - Corrigido um erro ao tentar inserir um array com elementos
NULLno formatoValuesem uma coluna do tipoArraysemNullable(seinput_format_values_interpret_expressions= 1). #3487 #3503 - Corrigido o registro contínuo de erros no
DDLWorkerquando o ZooKeeper não estiver disponível. 8f50c620 - Corrigido o tipo de retorno das funções
quantile*para argumentos dos tiposDateeDateTime. #3580 - Corrigida a cláusula
WITHquando ela especifica um alias simples sem expressões. #3570 - Corrigido o processamento de consultas com subconsultas nomeadas e nomes de colunas qualificados quando
enable_optimize_predicate_expressionestá habilitado. Winter Zhang - Corrigido o erro
Attempt to attach to nullptr thread groupao usar visões materializadas. Marek Vavruša - Corrigida uma falha ao passar certos argumentos inválidos para a função
arrayReverse. 73e3a7b6 - Corrigido o overflow de buffer na função
extractURLParameter. Melhorado o desempenho. Adicionado o processamento correto de strings que contêm bytes nulos. 141e9799 - Corrigido estouro de buffer nas funções
lowerUTF8eupperUTF8. Removida a possibilidade de executar essas funções com argumentos do tipoFixedString. #3662 - Foi corrigida uma rara condição de corrida ao excluir tabelas
MergeTree. #3680 - Corrigida uma condição de corrida ao ler tabelas
Buffere executar simultaneamenteALTERouDROPnas tabelas de destino. #3719 - Corrigida uma falha de segmentação caso o limite
max_temporary_non_const_columnsfosse excedido. #3788
Melhorias:
- O servidor não grava os arquivos de configuração processados no diretório
/etc/clickhouse-server/. Em vez disso, ele os salva no diretóriopreprocessed_configs, dentro depath. Isso significa que o diretório/etc/clickhouse-server/não concede acesso de gravação ao usuárioclickhouse, o que melhora a segurança. #2443 - A opção
min_merge_bytes_to_use_direct_ioé configurada como 10 GiB por padrão. Um merge que forma partes grandes de tabelas da família MergeTree será executado no modoO_DIRECT, o que evita a remoção excessiva do cache de páginas. #3504 - Inicialização mais rápida do servidor quando há um número muito grande de tabelas. #3398
- Adicionado um pool de conexões e o
Keep-AliveHTTP para as conexões entre réplicas. #3594 - Se a sintaxe da consulta for inválida, o código
400 Bad Requestserá retornado pela interfaceHTTP(anteriormente, era retornado500). 31bc680a - A opção
join_default_strictnessestá definida comoALLpor padrão, para fins de compatibilidade. 120e2cbe - Removido o envio de logs para
stderrpela bibliotecare2em caso de expressões regulares inválidas ou complexas. #3723 - Adicionado ao mecanismo de tabela
Kafka: verificações de assinaturas antes do início da leitura do Kafka; a configuração kafka_max_block_size da tabela. Marek Vavruša - As funções
cityHash64,farmHash64,metroHash64,sipHash64,halfMD5,murmurHash2_32,murmurHash2_64,murmurHash3_32emurmurHash3_64agora funcionam com qualquer número de argumentos e com argumentos na forma de tuplas. #3451 #3519 - A função
arrayReverseagora funciona com qualquer tipo de array. 73e3a7b6 - Adicionado um parâmetro opcional: o tamanho do slot da função
timeSlots. Kirill Shvakov - Para
FULLeRIGHT JOIN, a configuraçãomax_block_sizeé usada para um fluxo de dados não combinados da tabela à direita. Amos Bird - Adicionado o parâmetro de linha de comando
--secureemclickhouse-benchmarkeclickhouse-performance-testpara habilitar TLS. #3688 #3690 - Conversão de tipo em que a estrutura de uma tabela do tipo
Buffernão corresponde à estrutura da tabela de destino. Vitaly Baranov - Adicionada a opção
tcp_keep_alive_timeoutpara habilitar o envio de pacotes keep-alive após um período de inatividade especificado. #3441 - Removidas as aspas desnecessárias dos valores da chave de partição na tabela
system.partsquando ela consiste em uma única coluna. #3652 - A função de módulo é compatível com os tipos de dados
DateeDateTime. #3385 - Foram adicionados sinônimos para as funções
POWER,LN,LCASE,UCASE,REPLACE,LOCATE,SUBSTReMID. #3774 #3763 Alguns nomes de funções não diferenciam maiúsculas de minúsculas, para manter a compatibilidade com o padrão SQL. Foi adicionado o açúcar sintáticoSUBSTRING(expr FROM start FOR length)para manter a compatibilidade com SQL. #3804 - Foi adicionada a capacidade de usar
mlocknas páginas de memória correspondentes ao código executável doclickhouse-serverpara evitar que ele seja removido da memória. Esse recurso fica desabilitado por padrão. #3553 - Desempenho aprimorado na leitura com
O_DIRECT(com a opçãomin_bytes_to_use_direct_ioativada). #3405 - Melhorado o desempenho da função
dictGet...OrDefaultpara um argumento de chave constante e um argumento de valor padrão não constante. Amos Bird - A função
firstSignificantSubdomainagora processa os domíniosgov,mileedu. Igor Hatarist Melhoria de desempenho. #3628 - Possibilidade de especificar variáveis de ambiente personalizadas para iniciar o
clickhouse-serverusando o scriptSYS-V init.d, definindoCLICKHOUSE_PROGRAM_ENVem/etc/default/clickhouse. Pavlo Bashynskyi - Código de retorno corrigido no script de inicialização do clickhouse-server. #3516
- A tabela
system.metricsagora tem a métricaVersionInteger, esystem.build_optionspassou a incluir a linhaVERSION_INTEGER, que contém a forma numérica da versão do ClickHouse, como18016000. #3644 - Removida a possibilidade de comparar o tipo
Datecom um número, para evitar possíveis erros comodate = 2018-12-17, em que as aspas em torno da data são omitidas por engano. #3687 - Corrigido o comportamento de funções com estado, como
rowNumberInAllBlocks. Antes, elas retornavam um resultado com um número a mais por começarem durante a análise da consulta. Amos Bird - Se não for possível excluir o arquivo
force_restore_data, uma mensagem de erro será exibida. Amos Bird
Melhorias de compilação:
- Biblioteca
jemallocatualizada, corrigindo um possível vazamento de memória. Amos Bird - O profiling com
jemallocé habilitado por padrão em builds de depuração. 2cc82f5c - Adicionada a capacidade de executar testes de integração quando apenas o
Dockerestá instalado no sistema. #3650 - Adicionado o teste fuzz para expressões em consultas SELECT. #3442
- Adicionado um teste de estresse para commits, que executa testes funcionais em paralelo e em ordem aleatória para detectar mais condições de corrida. #3438
- Aprimorado o método de inicialização do clickhouse-server em uma imagem Docker. Elghazal Ahmed
- Para uma imagem Docker, foi adicionado suporte à inicialização de bancos de dados usando arquivos no diretório
/docker-entrypoint-initdb.d. Konstantin Lebedev - Correções para builds em ARM. #3709
Alterações incompatíveis com versões anteriores:
- Foi removida a possibilidade de comparar o tipo
Datecom um número. Em vez detoDate('2018-12-18') = 17883, você deve usar a conversão explícita de tipo= toDate(17883)#3687
Versão do ClickHouse 18.14
Versão 18.14.19 do ClickHouse, 2018-12-19
Correções de bugs:
- Corrigido um erro que causava problemas ao atualizar dicionários com a fonte ODBC. #3825, #3829
- Os bancos de dados são especificados corretamente ao executar consultas DDL
ON CLUSTER. #3460 - Corrigido um segfault quando o limite
max_temporary_non_const_columnsera excedido. #3788
Melhorias de compilação:
- Correções nas compilações para ARM.
Versão 18.14.18 do ClickHouse, 2018-12-04
Correções de bugs:
- Corrigido um erro na função
dictGet...para dicionários do tiporange, quando um dos argumentos é constante e o outro não. #3751 - Corrigido um erro que fazia com que as mensagens
netlink: '...': attribute type 1 has an invalid lengthfossem exibidas no log do kernel do Linux, o que ocorria apenas em versões mais recentes do kernel. #3749 - Corrigido um segfault na função
emptypara argumento do tipoFixedString. Daniel, Dao Quang Minh - Corrigida a alocação excessiva de memória ao usar um valor alto da configuração
max_query_size(um fragmento de memória demax_query_sizebytes era pré-alocado de uma só vez). #3720
Alterações de compilação:
- Corrigido o build com as bibliotecas LLVM/Clang versão 7 dos pacotes do SO (essas bibliotecas são usadas para compilação de consultas em tempo de execução). #3582
Versão do ClickHouse 18.14.17, 2018-11-30
Correções de bugs:
- Corrigidos casos em que o processo do ODBC bridge não era encerrado junto com o processo principal do servidor. #3642
- Corrigida a inserção síncrona na tabela
Distributedcom uma lista de colunas diferente da lista de colunas da tabela remota. #3673 - Corrigida uma rara condição de corrida que pode causar uma falha ao remover uma tabela MergeTree. #3643
- Corrigido um deadlock de consulta quando a criação da thread da consulta falha com o erro
Resource temporarily unavailable. #3643 - Corrigida a análise da cláusula
ENGINEquando a sintaxeCREATE AS tableera usada e a cláusulaENGINEera especificada antes deAS table(o erro fazia com que aENGINEespecificada fosse ignorada). #3692
Versão 18.14.15 do ClickHouse, 2018-11-21
Correções de bugs:
- O tamanho do fragmento de memória foi superestimado durante a desserialização da coluna do tipo
Array(String), o que levava a erros de “Memory limit exceeded”. O problema surgiu na versão 18.12.13. #3589
Versão do ClickHouse 18.14.14, 2018-11-20
Correções de bugs:
- Corrigidas consultas
ON CLUSTERquando o cluster está configurado para ser seguro (flag<secure>). #3599
Alterações de compilação:
- Problemas corrigidos (llvm-7 do sistema, macOS) #3582
Versão do ClickHouse 18.14.13, 2018-11-08
Correções de bugs:
- Corrigido o erro
Block structure mismatch in MergingSorted stream. #3162 - Corrigidas as consultas
ON CLUSTERquando conexões seguras estavam ativadas na configuração do cluster (a flag<secure>). #3465 - Corrigido um erro em consultas que usavam
SAMPLE,PREWHEREe colunas de alias. #3543 - Corrigido um erro raro de
unknown compression methodquando a configuraçãomin_bytes_to_use_direct_ioestava ativada. 3544
Melhorias de desempenho:
- Corrigida a regressão de desempenho em consultas com
GROUP BYde colunas do tipo UInt16 ou Date ao serem executadas em processadores AMD EPYC. Igor Lapko - Corrigida a regressão de desempenho em consultas que processam strings longas. #3530
Melhorias de compilação:
Versão do ClickHouse 18.14.12, 2018-11-02
Correções de bugs:
- Corrigida uma falha ao fazer join entre duas subconsultas sem nome. #3505
- Corrigida a geração de consultas incorretas (com uma cláusula
WHEREvazia) ao consultar bancos de dados externos. hotid - Corrigido o uso de um valor de tempo limite incorreto em dicionários ODBC. Marek Vavruša
Versão 18.14.11 do ClickHouse, 2018-10-29
Correções de bugs:
- Corrigido o erro
Block structure mismatch in UNION stream: different number of columnsem consultas com LIMIT. #2156 - Corrigidos erros durante a mesclagem de dados em tabelas que contêm arrays dentro de estruturas Nested. #3397
- Corrigidos resultados incorretos de consultas caso a configuração
merge_tree_uniform_read_distributionesteja desabilitada (ela é habilitada por padrão). #3429 - Corrigido um erro ao inserir em uma tabela distribuída no formato Native. #3411
Versão do ClickHouse 18.14.10, 2018-10-23
- A configuração
compile_expressions(compilação JIT de expressões) está desabilitada por padrão. #3410 - A configuração
enable_optimize_predicate_expressionestá desabilitada por padrão.
Versão 18.14.9 do ClickHouse, 2018-10-16
Novos recursos:
- O modificador
WITH CUBEparaGROUP BY(a sintaxe alternativaGROUP BY CUBE(...)também está disponível). #3172 - Adicionada a função
formatDateTime. Alexandr Krasheninnikov - Adicionados o mecanismo de tabela
JDBCe a função de tabelajdbc(requer a instalação do clickhouse-jdbc-bridge). Alexandr Krasheninnikov - Adicionadas funções para trabalhar com o número da semana ISO:
toISOWeek,toISOYear,toStartOfISOYearetoDayOfYear. #3146 - Agora é possível usar colunas
Nullableem tabelasMySQLeODBC. #3362 - Estruturas de dados aninhadas podem ser lidas como objetos aninhados no formato
JSONEachRow. Adicionada a configuraçãoinput_format_import_nested_json. Veloman Yunkan - O processamento paralelo está disponível para muitas
MATERIALIZED VIEWs ao inserir dados. Veja a configuraçãoparallel_view_processing. Marek Vavruša - Adicionada a consulta
SYSTEM FLUSH LOGS(gravação forçada de logs em tabelas de sistema, comoquery_log) #3321 - Agora é possível usar as macros predefinidas
databaseetableao declarar tabelasReplicated. #3251 - Adicionada a capacidade de ler valores do tipo
Decimalem notação de engenharia (indicando potências de dez). #3153
Recursos experimentais:
- Otimização da cláusula
GROUP BYparatipos de dados LowCardinality.#3138 - Cálculo otimizado de expressões para
tipos de dados LowCardinality.#3200
Melhorias:
- Uso de memória significativamente reduzido para consultas com
ORDER BYeLIMIT. Consulte a configuraçãomax_bytes_before_remerge_sort. #3205 - Na ausência de
JOIN(LEFT,INNER, …), assume-seINNER JOIN. #3147 - Asteriscos qualificados passam a funcionar corretamente em consultas com
JOIN. Winter Zhang - O engine de tabela
ODBCescolhe corretamente o método de delimitar identificadores no dialeto SQL de um banco de dados remoto. Alexandr Krasheninnikov - A configuração
compile_expressions(compilação JIT de expressões) vem ativada por padrão. - Correção do comportamento para
DROP DATABASE/TABLE IF EXISTSeCREATE DATABASE/TABLE IF NOT EXISTSexecutados simultaneamente. Anteriormente, uma consultaCREATE DATABASE ... IF NOT EXISTSpodia retornar a mensagem de erro “File … already exists”, e as consultasCREATE TABLE ... IF NOT EXISTSeDROP TABLE IF EXISTSpodiam retornarTable ... is creating or attaching right now. #3101 - Expressões
LIKEeINcom o lado direito constante são enviadas ao servidor remoto ao consultar tabelas MySQL ou ODBC. #3182 - Comparações com expressões constantes em uma cláusula WHERE são enviadas ao servidor remoto ao consultar tabelas MySQL e ODBC. Antes, apenas comparações com constantes eram enviadas. #3182
- Cálculo correto da largura da linha no terminal para os formatos
Pretty, incluindo strings com hieróglifos. Amos Bird. ON CLUSTERpode ser especificado em consultasALTER UPDATE.- Desempenho aprimorado na leitura de dados no formato
JSONEachRow. #3332 - Foram adicionados sinônimos para as funções
LENGTHeCHARACTER_LENGTH, por compatibilidade. A funçãoCONCATnão diferencia mais letras maiúsculas de minúsculas. #3306 - Adicionado o sinônimo
TIMESTAMPpara o tipoDateTime. #3390 - Há sempre um espaço reservado para query_id nos logs do servidor, mesmo que a linha de log não esteja relacionada a uma consulta. Isso facilita o processamento dos logs de texto do servidor com ferramentas de terceiros.
- O consumo de memória por uma consulta é registrado quando ultrapassa o próximo número inteiro de gigabytes. #3205
- Adicionado um modo de compatibilidade para casos em que a biblioteca cliente que usa o protocolo Native envia, por engano, menos colunas do que o servidor espera para a consulta INSERT. Esse cenário era possível ao usar a biblioteca clickhouse-cpp. Anteriormente, esse cenário fazia o servidor travar. #3171
- Em uma expressão
WHEREdefinida pelo usuário noclickhouse-copier, agora é possível usar um aliaspartition_key(para filtragem adicional por partição da tabela de origem). Isso é útil se o esquema de particionamento mudar durante a cópia, mas apenas levemente. #3166 - O funcionamento do mecanismo
Kafkafoi movido para um pool de threads em segundo plano para reduzir automaticamente a velocidade de leitura de dados sob alta carga. Marek Vavruša. - Suporte à leitura de valores
TupleeNestedde estruturas comostructnoformato Cap'n'Proto. Marek Vavruša - A lista de domínios de topo da função
firstSignificantSubdomainagora inclui o domíniobiz. decaseal - Na configuração de dicionários externos,
null_valueé interpretado como o valor padrão do tipo de dados. #3330 - Suporte às funções
intDiveintDivOrZeroparaDecimal. b48402e8 - Suporte aos tipos
Date,DateTime,UUIDeDecimalcomo chave da função de agregaçãosumMap. #3281 - Suporte ao tipo de dados
Decimalem dicionários externos. #3324 - Suporte ao tipo de dados
Decimalem tabelasSummingMergeTree. #3348 - Adicionadas especializações para
UUIDemif. #3366 - Foi reduzido o número de chamadas de sistema
openecloseao ler de umatabela MergeTree. #3283 - Uma consulta
TRUNCATE TABLEpode ser executada em qualquer réplica (a consulta é encaminhada para a réplica líder). Kirill Shvakov
Correções de bugs:
- Foi corrigido um problema nas tabelas
Dictionaryde dicionáriosrange_hashed. Esse erro ocorreu na versão 18.12.17. #1702 - Foi corrigido um erro ao carregar dicionários
range_hashed(mensagemUnsupported type Nullable (...)). Esse erro ocorria na versão 18.12.17. #3362 - Corrigidos erros na função
pointInPolygondevido ao acúmulo de cálculos imprecisos em polígonos com um grande número de vértices muito próximos entre si. #3331 #3341 - Se, após a mesclagem das partes de dados, a soma de verificação da parte resultante diferir do resultado da mesma mesclagem em outra réplica, o resultado da mesclagem será excluído e a parte de dados será baixada da outra réplica (esse é o comportamento correto). Porém, após o download da parte de dados, não era possível adicioná-la ao conjunto de trabalho devido a um erro informando que a parte já existia (porque a parte de dados foi excluída com certo atraso após a mesclagem). Isso levava a tentativas cíclicas de baixar os mesmos dados. #3194
- Corrigido um erro no cálculo do consumo total de memória pelas consultas (devido a esse cálculo incorreto, a configuração
max_memory_usage_for_all_queriesfuncionava incorretamente e a métricaMemoryTrackingapresentava um valor incorreto). Esse erro ocorreu na versão 18.12.13. Marek Vavruša - Corrigido o funcionamento de
CREATE TABLE ... ON CLUSTER ... AS SELECT ...Esse erro ocorreu na versão 18.12.13. #3247 - Corrigida a preparação desnecessária de estruturas de dados para
JOINs no servidor que inicia a consulta, caso oJOINseja executado apenas em servidores remotos. #3340 - Corrigidos bugs no engine
Kafka: deadlocks após exceções ao iniciar a leitura de dados e bloqueios ao concluir Marek Vavruša. - Para tabelas
Kafka, o parâmetro opcionalschemanão foi informado (o esquema do formatoCap'n'Proto). Vojtech Splichal - Se o conjunto de servidores do ZooKeeper tiver servidores que aceitam a conexão, mas a fecham imediatamente em vez de responder ao handshake, o ClickHouse passa a se conectar a outro servidor. Antes, isso gerava o erro
Cannot read all data. Bytes read: 0. Bytes expected: 4.e o servidor não conseguia iniciar. 8218cf3a - Se o conjunto de servidores ZooKeeper incluir servidores para os quais a consulta DNS retorna erro, esses servidores serão ignorados. 17b8e209
- Corrigida a conversão de tipo entre
DateeDateTimeao inserir dados no formatoVALUES(seinput_format_values_interpret_expressions = 1). Antes, a conversão era feita entre o valor numérico da quantidade de dias desde a epoch Unix e o Unix timestamp, o que levava a resultados inesperados. #3229 - Corrigida a conversão entre tipos de
Decimale números inteiros. #3211 - Corrigidos erros na configuração
enable_optimize_predicate_expression. Winter Zhang - Corrigido um erro de parsing no formato CSV com números de ponto flutuante quando é usado um separador CSV diferente do padrão, como
;#3155 - Corrigida a função
arrayCumSumNonNegative(ela não acumula valores negativos quando o acumulador é menor que zero). Aleksey Studnev - Corrigida a forma como as tabelas
Mergefuncionam sobre tabelasDistributedao usarPREWHERE. #3165 - Correções de erros na consulta
ALTER UPDATE. - Corrigidos erros na função de tabela
odbcintroduzidos na versão 18.12. #3197 - Corrigido o funcionamento de funções de agregação com combinadores
StateArray. #3188 - Corrigido um travamento ao dividir um valor
Decimalpor zero. 69dd6609 - Corrigida a saída de tipos em operações que usam
Decimale argumentos inteiros. #3224 - Corrigida a falha de segmentação ao executar
GROUP BYemDecimal128. 3359ba06 - A configuração
log_query_threads(registro de informações sobre cada thread da execução de consultas) agora só tem efeito se a opçãolog_queries(registro de informações sobre consultas) estiver definida como 1. Como a opçãolog_query_threadsvem habilitada por padrão, as informações sobre threads eram registradas mesmo quando o registro de consultas estava desabilitado. #3241 - Corrigido um erro na execução distribuída da função de agregação quantiles (a mensagem de erro
Not found column quantile...). 292a8855 - Corrigido o problema de compatibilidade ao trabalhar, ao mesmo tempo, com um cluster de servidores na versão 18.12.17 e servidores mais antigos. Para consultas distribuídas com chaves de GROUP BY de comprimento fixo e variável, se houvesse uma grande quantidade de dados para agregar, os dados retornados nem sempre eram totalmente agregados (duas linhas diferentes continham as mesmas chaves de agregação). #3254
- Corrigido o tratamento de substituições em
clickhouse-performance-testquando a consulta contém apenas parte das substituições declaradas no teste. #3263 - Corrigido um erro ao usar
FINALcomPREWHERE. #3298 - Corrigido um erro ao usar
PREWHEREsobre colunas que foram adicionadas duranteALTER. #3298 - Adicionada uma verificação para a ausência de
arrayJoinem expressõesDEFAULTeMATERIALIZED. Anteriormente,arrayJoincausava um erro ao inserir dados. #3337 - Foi adicionada uma verificação da ausência de
arrayJoinem uma cláusulaPREWHERE. Antes, isso causava mensagens comoSize ... does not matchouUnknown compression methodao executar consultas. #3357 - Corrigido um segfault que podia ocorrer, em casos raros, após uma otimização que substituía sequências de AND em avaliações de igualdade pela expressão IN correspondente. liuyimin-bytedance
- Pequenas correções no
clickhouse-benchmark: anteriormente, as informações do cliente não eram enviadas ao servidor; agora, o número de consultas executadas é calculado com mais precisão durante o encerramento e ao limitar o número de iterações. #3351 #3352
Alterações incompatíveis com versões anteriores:
- A opção
allow_experimental_decimal_typefoi removida. O tipo de dadoDecimalestá disponível por padrão. #3329
Versão 18.12 do ClickHouse
Versão 18.12.17 do ClickHouse, 2018-09-16
Novos recursos:
invalidate_query(a capacidade de especificar uma consulta para verificar se um dicionário externo precisa ser atualizado) foi implementado para a origemclickhouse. #3126- Foi adicionada a capacidade de usar os tipos de dados
UInt*,Int*eDateTime(junto com o tipoDate) como chave de dicionário externorange_hashedque define os limites dos intervalos. Agora,NULLpode ser usado para designar um intervalo aberto. Vasily Nemkov - O tipo
Decimalagora oferece suporte às funções de agregaçãovar*estddev*. #3129 - O tipo
Decimalagora oferece suporte a funções matemáticas (exp,sinetc.). #3129 - A tabela
system.part_logagora tem a colunapartition_id. #3089
Correções de bugs:
Mergeagora funciona corretamente em tabelasDistributed. Winter Zhang- Foi corrigida uma incompatibilidade (dependência desnecessária da versão da
glibc) que impossibilitava executar o ClickHouse noUbuntu Precisee em versões anteriores. A incompatibilidade surgiu na versão 18.12.13. #3130 - Foram corrigidos erros na configuração
enable_optimize_predicate_expression. Winter Zhang - Foi corrigido um pequeno problema de retrocompatibilidade que ocorria ao trabalhar com um cluster de réplicas em versões anteriores à 18.12.13 e, ao mesmo tempo, criar uma nova réplica de uma tabela em um servidor com uma versão mais recente (exibido na mensagem
Can not clone replica, because the ... updated to new ClickHouse version, o que faz sentido, mas não deveria acontecer). #3122
Alterações incompatíveis com versões anteriores:
- A opção
enable_optimize_predicate_expressionvem ativada por padrão (o que é bastante otimista). Se ocorrerem erros na análise da consulta relacionados à busca pelos nomes das colunas, definaenable_optimize_predicate_expressioncomo 0. Winter Zhang
Versão 18.12.14 do ClickHouse, 2018-09-13
Novos recursos:
- Adicionado suporte a consultas
ALTER UPDATE. #3035 - Adicionada a opção
allow_ddl, que restringe o acesso do usuário a consultas DDL. #3104 - Adicionada a opção
min_merge_bytes_to_use_direct_iopara motoresMergeTree, que permite definir um limite para o tamanho total do merge (quando esse limite é excedido, os arquivos das partes de dados serão processados usando O_DIRECT). #3117 - A tabela de sistema
system.mergesagora contém a colunapartition_id. #3099
Melhorias
- Se uma parte de dados permanecer inalterada durante uma mutação, ela não será baixada pelas réplicas. #3103
- O preenchimento automático está disponível para nomes de configurações ao usar o
clickhouse-client. #3106
Correções de bugs:
- Adicionada uma verificação dos tamanhos dos arrays que são elementos de campos do tipo
Nesteddurante a inserção. #3118 - Corrigido um erro ao atualizar dicionários externos com a fonte ODBC e armazenamento
hashed. Esse erro ocorreu na versão 18.12.13. - Corrigida uma falha ao criar uma tabela temporária a partir de uma consulta com uma condição
IN. Winter Zhang - Corrigido um erro em funções de agregação para arrays que podem conter elementos
NULL. Winter Zhang
Versão 18.12.13 do ClickHouse, 2018-09-10
Novos recursos:
- Foi adicionado o tipo de dado
DECIMAL(digits, scale)(Decimal32(scale),Decimal64(scale),Decimal128(scale)). Para habilitá-lo, use a configuraçãoallow_experimental_decimal_type. #2846 #2970 #3008 #3047 - Novo modificador
WITH ROLLUPparaGROUP BY(sintaxe alternativa:GROUP BY ROLLUP(...)). #2948 - Em consultas com JOIN, o caractere asterisco é expandido para uma lista de colunas de todas as tabelas, em conformidade com o padrão SQL. Você pode restaurar o comportamento anterior definindo
asterisk_left_columns_onlycomo 1 no nível de configuração do usuário. Winter Zhang - Adicionado suporte a JOIN com funções de tabela. Winter Zhang
- Autocompletar ao pressionar Tab no clickhouse-client. Sergey Shcherbin
- Ctrl+C no clickhouse-client limpa a consulta digitada. #2877
- Adicionada a configuração
join_default_strictness(valores:",'any','all'). Isso permite que você não precise especificarANYouALLparaJOIN. #2982 - Cada linha do log do servidor relacionada ao processamento de consultas exibe o ID da consulta. #2482
- Agora você pode obter logs de execução de consultas no clickhouse-client (use a opção
send_logs_level). Com o processamento distribuído de consultas, os logs de todos os servidores são propagados em cascata. #2482 - As tabelas
system.query_logesystem.processes(SHOW PROCESSLIST) agora contêm informações sobre todas as configurações alteradas quando você executa uma consulta (a estrutura aninhada dos dados deSettings). Adicionada a configuraçãolog_query_settings. #2482 - As tabelas
system.query_logesystem.processesagora exibem informações sobre o número de threads que participam da execução da consulta (consulte a colunathread_numbers). #2482 - Adicionados contadores
ProfileEventsque medem o tempo gasto na leitura e gravação pela rede e na leitura e gravação em disco, o número de erros de rede e o tempo de espera quando a largura de banda da rede é limitada. #2482 - Adicionados os contadores
ProfileEvents, que contêm métricas do sistema provenientes de rusage (você pode usá-los para obter informações sobre o uso de CPU em userspace e no kernel, falhas de página e trocas de contexto), bem como métricas de taskstats (use-as para obter informações sobre tempo de espera de E/S, tempo de espera de CPU e a quantidade de dados lidos e gravados, tanto com quanto sem page cache). #2482 - Os contadores
ProfileEventssão aplicados globalmente, a cada consulta e a cada thread de execução da consulta, o que permite analisar em detalhes o consumo de recursos por consulta. #2482 - Adicionada a tabela
system.query_thread_log, que contém informações sobre cada thread de execução de consultas. Adicionada a configuraçãolog_query_threads. #2482 - As tabelas
system.metricsesystem.eventsagora contam com documentação integrada. #3016 - Foi adicionada a função
arrayEnumerateDense. Amos Bird - Foram adicionadas as funções
arrayCumSumNonNegativeearrayDifference. Aleksey Studnev - Adicionada a função de agregação
retention. Sundy Li - Agora você pode somar (mesclar) estados de funções de agregação usando o operador de adição e multiplicar os estados de funções de agregação por uma constante não negativa. #3062 #3034
- As tabelas da família MergeTree agora possuem a coluna virtual
_partition_id. #3089
Recursos experimentais:
- Adicionado o tipo de dado
LowCardinality(T). Esse tipo de dado cria automaticamente um dicionário local de valores e permite processar os dados sem precisar desempacotar o dicionário. #2830 - Foi adicionado um cache de funções compiladas por JIT e um contador do número de usos antes da compilação. Para compilar expressões com JIT, habilite a configuração
compile_expressions. #2990 #3077
Melhorias:
- Corrigido o problema de acúmulo ilimitado do log de replicação quando há réplicas abandonadas. Adicionado um modo de recuperação eficaz para réplicas com grande defasagem.
- Melhoria no desempenho do
GROUP BYcom vários campos de agregação quando um deles é do tipo String e os outros têm tamanho fixo. - Melhor desempenho ao usar
PREWHEREe na transferência implícita de expressões paraPREWHERE. - Melhor desempenho no parsing de formatos de texto (
CSV,TSV). Amos Bird #2980 - Melhorado o desempenho na leitura de strings e arrays em formatos binários. Amos Bird
- Melhor desempenho e menor consumo de memória para consultas a
system.tablesesystem.columnsquando há um número muito grande de tabelas em um único servidor. #2953 - Corrigido um problema de desempenho no caso de um grande volume de consultas que resultam em erro (a função
_dl_addrfica visível noperf top, mas o servidor não está usando muita CPU). #2938 - As condições são convertidas para a View (quando
enable_optimize_predicate_expressionestá ativado). Winter Zhang - Melhorias na funcionalidade do tipo de dado
UUID. #3074 #2985 - O tipo de dados
UUIDtem suporte nos dicionários The-Alchemist. #2822 - A função
visitParamExtractRawfunciona corretamente com estruturas aninhadas. Winter Zhang - Quando a configuração
input_format_skip_unknown_fieldsestá ativada, os campos de objeto no formatoJSONEachRowsão ignorados corretamente. BlahGeek - Em uma expressão
CASEcom condições, agora é possível omitirELSE, o que equivale aELSE NULL. #2920 - Agora é possível configurar o timeout da operação ao trabalhar com o ZooKeeper. urykhy
- Você pode especificar o offset de
LIMIT n, mcomoLIMIT n OFFSET m. #2840 - Você pode usar a sintaxe
SELECT TOP ncomo alternativa aoLIMIT. #2840 - Aumentado o tamanho da fila para gravação nas tabelas do sistema, para que o erro
SystemLog parameter queue is fullocorra com menos frequência. - A função de agregação
windowFunnelagora oferece suporte a eventos que satisfazem várias condições. Amos Bird - Colunas duplicadas podem ser usadas em uma cláusula
USINGdeJOIN. #3006 - Os formatos
Prettyagora têm um limite de largura para o alinhamento das colunas. Use a configuraçãooutput_format_pretty_max_column_pad_width. Se um valor for mais largo, ele ainda será exibido por completo, mas as outras células da tabela não ficarão largas demais. #3003 - A função de tabela
odbcagora permite especificar o nome do banco de dados/esquema. Amos Bird - Adicionada a possibilidade de usar o nome de usuário especificado no arquivo de configuração do
clickhouse-client. Vladimir Kozbin - O contador
ZooKeeperExceptionsfoi desmembrado em três contadores:ZooKeeperUserExceptions,ZooKeeperHardwareExceptionseZooKeeperOtherExceptions. - Consultas
ALTER DELETEfuncionam com visões materializadas. - Foi adicionada uma randomização à execução periódica da thread de limpeza de tabelas
ReplicatedMergeTree, a fim de evitar picos periódicos de carga quando há um número muito grande de tabelasReplicatedMergeTree. - Suporte às consultas
ATTACH TABLE ... ON CLUSTER. #3025
Correções de bugs:
- Corrigido um problema com tabelas
Dictionary(que geram a exceçãoSize of offsets does not match size of columnouUnknown compression method). Esse erro surgiu na versão 18.10.3. #2913 - Corrigido um bug ao mesclar tabelas
CollapsingMergeTreequando uma das partes de dados está vazia (essas partes são formadas durante a mesclagem ouALTER DELETEse todos os dados tiverem sido excluídos), e o algoritmoverticalera usado na mesclagem. #3049 - Corrigida uma condição de corrida ao executar
DROPouTRUNCATEem tabelasMemorysimultaneamente a umSELECT, o que podia levar a falhas do servidor. Esse bug foi introduzido na versão 1.1.54388. #3038 - Corrigida a possibilidade de perda de dados ao inserir em tabelas
Replicatedcaso fosse retornado o erroSession is expired(a perda de dados pode ser detectada pela métricaReplicatedDataLoss). Esse erro ocorreu na versão 1.1.54378. #2939 #2949 #2964 - Corrigida uma falha de segmentação em
JOIN ... ON. #3000 - Corrigido o erro na busca por nomes de colunas quando a expressão
WHEREconsiste apenas em um nome de coluna qualificado, comoWHERE table.column. #2994 - Corrigido o erro “Coluna não encontrada” que ocorria ao executar consultas distribuídas quando uma única coluna contendo uma expressão IN com uma subconsulta era solicitada de um servidor remoto. #3087
- Corrigido o erro
Block structure mismatch in UNION stream: different number of columnsque ocorria em consultas distribuídas quando um dos shards era local e o outro não, e a otimização para mover paraPREWHEREera acionada. #2226 #3037 #3055 #3065 #3073 #3090 #3093 - Corrigida a função
pointInPolygonem determinados casos de polígonos não convexos. #2910 - Corrigido o resultado incorreto na comparação de
nancom inteiros. #3024 - Corrigido um erro na biblioteca
zlib-ngque, em casos raros, poderia causar um segfault. #2854 - Corrigido um vazamento de memória ao inserir em uma tabela com colunas
AggregateFunction, quando o estado da função de agregação não é simples (aloca memória separadamente) e quando uma única solicitação de inserção resulta em vários blocos pequenos. #3084 - Corrigida uma condição de corrida ao criar e excluir simultaneamente uma mesma tabela
BufferouMergeTree. - Corrigida a possibilidade de ocorrer um segfault ao comparar tuplas formadas por determinados tipos não triviais, como tuplas. #2989
- Corrigida a possibilidade de ocorrer um segfault ao executar certas consultas
ON CLUSTER. Winter Zhang - Corrigido um erro na função
arrayDistinctpara elementosNullableem arrays. #2845 #2937 - A opção
enable_optimize_predicate_expressionagora oferece suporte correto a casos comSELECT *. Winter Zhang - Corrigida a falha de segmentação ao reinicializar a sessão do ZooKeeper. #2917
- Corrigido um possível bloqueio ao usar o ZooKeeper.
- Corrigido o código incorreto para adicionar estruturas de dados aninhadas em um
SummingMergeTree. - Ao alocar memória para os estados de funções de agregação, o alinhamento é devidamente considerado, o que possibilita o uso de operações que exigem alinhamento na implementação desses estados. chenxing-xc
Correção de segurança:
- Uso seguro de fontes de dados ODBC. A interação com drivers ODBC usa um processo
clickhouse-odbc-bridgeseparado. Erros em drivers ODBC de terceiros não causam mais problemas de estabilidade no servidor nem vulnerabilidades. #2828 #2879 #2886 #2893 #2921 - Corrigida a validação incorreta do caminho do arquivo na função de tabela
catBoostPool. #2894 - O conteúdo das tabelas de sistema (
tables,databases,parts,columns,parts_columns,merges,mutations,replicasereplication_queue) é filtrado de acordo com o acesso a bancos de dados configurado para o usuário (allow_databases). Winter Zhang
Alterações incompatíveis com versões anteriores:
- Em consultas com JOIN, o asterisco se expande para uma lista de colunas em todas as tabelas, em conformidade com o padrão SQL. Você pode restaurar o comportamento anterior definindo
asterisk_left_columns_onlycomo 1 na configuração do usuário.
Alterações de compilação:
- A maioria dos testes de integração agora pode ser executada a cada commit.
- As verificações de estilo de código também podem ser executadas a cada commit.
- A implementação de
memcpyé escolhida corretamente ao compilar no CentOS7/Fedora. Etienne Champetier - Ao usar o clang para compilar, alguns avisos de
-Weverythingforam adicionados, além dos habituais-Wall-Wextra -Werror. #2957 - A depuração da compilação usa a opção de depuração do
jemalloc. - A interface da biblioteca para interação com o ZooKeeper é declarada como abstrata. #2950
Versão 18.10 do ClickHouse
Versão do ClickHouse 18.10.3, 2018-08-13
Novos recursos:
- HTTPS pode ser usado para replicação. #2760
- Foram adicionadas as funções
murmurHash2_64,murmurHash3_32,murmurHash3_64emurmurHash3_128, além da já existentemurmurHash2_32. #2791 - Suporte a tipos Nullable no driver ODBC do ClickHouse (formato de saída
ODBCDriver2). #2834 - Suporte a
UUIDnas colunas de chave.
Melhorias:
- Clusters podem ser removidos sem reiniciar o servidor quando são excluídos dos arquivos de configuração. #2777
- Dicionários externos podem ser removidos sem reiniciar o servidor quando são removidos dos arquivos de configuração. #2779
- Adicionado suporte a
SETTINGSpara o motor de tabelaKafka. Alexander Marshalov - Melhorias no tipo de dados
UUID(ainda não concluídas). #2618 - Suporte a partes vazias após as mesclagens nos motores
SummingMergeTree,CollapsingMergeTreeeVersionedCollapsingMergeTree. #2815 - Registros antigos de mutações concluídas são excluídos (
ALTER DELETE). #2784 - Adicionada a tabela
system.merge_tree_settings. Kirill Shvakov - A tabela
system.tablesagora tem colunas de dependência:dependencies_databaseedependencies_table. Winter Zhang - Adicionada a opção de configuração
max_partition_size_to_drop. #2782 - Adicionada a opção
output_format_json_escape_forward_slashes. Alexander Bocharov - Adicionada a configuração
max_fetch_partition_retries_count. #2831 - Adicionada a configuração
prefer_localhost_replicapara desativar a preferência por uma réplica local e acessar uma réplica local sem interação entre processos. #2832 - A função de agregação
quantileExactretornananno caso de agregação sobre um conjunto vazio deFloat32ouFloat64. Sundy Li
Correções de bugs:
- Removido o escape desnecessário dos parâmetros da string de conexão do ODBC, o que impossibilitava estabelecer uma conexão. Esse erro ocorreu na versão 18.6.0.
- Corrigida a lógica de processamento dos comandos
REPLACE PARTITIONna fila de replicação. Se houver dois comandosREPLACEpara a mesma partição, a lógica incorreta pode fazer com que um deles permaneça na fila de replicação e não seja executado. #2814 - Corrigido um bug de merge quando todas as partes de dados estavam vazias (partes formadas por um merge ou por
ALTER DELETE, caso todos os dados tenham sido excluídos). Esse bug apareceu na versão 18.1.0. #2930 - Corrigido um erro em operações concorrentes de
SetouJoin. Amos Bird - Corrigido o erro
Block structure mismatch in UNION stream: different number of columns, que ocorria em consultasUNION ALLdentro de uma subconsulta se uma das consultasSELECTcontivesse nomes de coluna duplicados. Winter Zhang - Corrigido um vazamento de memória caso ocorresse uma exceção ao se conectar a um servidor MySQL.
- Corrigido o código de resposta incorreto do clickhouse-client em caso de erro na consulta.
- Corrigido o comportamento incorreto de visões materializadas com DISTINCT. #2795
Alterações incompatíveis com versões anteriores
- Removido o suporte a consultas CHECK TABLE para tabelas distribuídas.
Alterações de compilação:
- O allocator foi substituído:
jemallocagora é usado no lugar detcmalloc. Em alguns cenários, isso aumenta a velocidade em até 20%. No entanto, há queries que ficaram até 20% mais lentas. O consumo de memória foi reduzido em aproximadamente 10% em alguns cenários, com maior estabilidade. Em cargas altamente concorrentes, o uso de CPU em userspace e no sistema apresenta apenas um leve aumento. #2773 - Uso de libressl de um submódulo. #1983 #2807
- Uso de unixodbc de um submódulo. #2789
- Uso de mariadb-connector-c de um submódulo. #2785
- Foram adicionados ao repositório arquivos de teste funcional que dependem da disponibilidade de dados de teste (por enquanto, sem os próprios dados de teste).
Versão do ClickHouse 18.6
Versão do ClickHouse 18.6.0, 2018-08-02
Novos recursos:
- Adicionado suporte a expressões ON na sintaxe
JOIN ON:JOIN ON Expr([table.]column ...) = Expr([table.]column, ...) [AND Expr([table.]column, ...) = Expr([table.]column, ...) ...]A expressão deve ser uma cadeia de igualdades unidas pelo operador AND. Cada lado da igualdade pode ser uma expressão arbitrária sobre as colunas de uma das tabelas. Também há suporte ao uso de nomes de colunas totalmente qualificados (table.name,database.table.name,table_alias.name,subquery_alias.name) para a tabela da direita. #2742 - O HTTPS pode ser habilitado para a replicação. #2760
Melhorias:
- O servidor passa o nível de patch da sua versão para o cliente. As informações sobre esse nível de patch estão em
system.processesequery_log. #2646
Versão do ClickHouse 18.5
Versão do ClickHouse 18.5.1, 2018-07-31
Novos recursos:
- Adicionada a função de hash
murmurHash2_32#2756.
Melhorias:
- Agora você pode usar o atributo
from_env#2741 para definir valores em arquivos de configuração a partir de variáveis de ambiente. - Adicionadas versões que não diferenciam maiúsculas de minúsculas das funções
coalesce,ifNullenullIf#2752.
Correções de bugs:
- Corrigido um possível erro ao iniciar uma réplica #2759.
Versão 18.4 do ClickHouse
Versão 18.4.0 do ClickHouse, 2018-07-28
Novos recursos:
- Adicionadas as tabelas de sistema:
formats,data_type_families,aggregate_function_combinators,table_functions,table_engines,collations#2721. - Adicionada a capacidade de usar uma função de tabela no lugar de uma tabela como argumento de uma
remoteoucluster table function#2708. - Suporte à autenticação
HTTP Basicno protocolo de replicação #2727. - A função
hasagora permite buscar um valor numérico em um array de valoresEnumMaxim Khrisanfov. - Suporte à adição de separadores de mensagem arbitrários ao ler do
KafkaAmos Bird.
Melhorias:
- A consulta
ALTER TABLE t DELETE WHEREnão reescreve as partes de dados que não foram afetadas pela condiçãoWHERE#2694. - A opção
use_minimalistic_checksums_in_zookeeperpara tabelasReplicatedMergeTreevem ativada por padrão. Essa configuração foi adicionada na versão 1.1.54378, em 2018-04-16. Versões anteriores à versão 1.1.54378 não podem mais ser instaladas. - Suporte para executar consultas
KILLeOPTIMIZEcom a cláusulaON CLUSTERWinter Zhang.
Correções de bugs:
- Corrigido o erro
Column ... is not under an aggregate function and not in GROUP BYem agregações com uma expressão IN. Esse bug surgiu na versão 18.1.0. (bbdd780b) - Corrigido um bug na função de agregação
windowFunnelWinter Zhang. - Corrigido um bug na função de agregação
anyHeavy(a2101df2) - Corrigida uma falha do servidor ao usar a função de agregação
countArray().
Alterações incompatíveis com versões anteriores:
- Os parâmetros do engine
Kafkaforam alterados deKafka(kafka_broker_list, kafka_topic_list, kafka_group_name, kafka_format[, kafka_schema, kafka_num_consumers])paraKafka(kafka_broker_list, kafka_topic_list, kafka_group_name, kafka_format[, kafka_row_delimiter, kafka_schema, kafka_num_consumers]). Se as suas tabelas usam os parâmetroskafka_schemaoukafka_num_consumers, você precisa editar manualmente os arquivos de metadadospath/metadata/database/table.sqle adicionar o parâmetrokafka_row_delimitercom o valor''.
Versão 18.1 do ClickHouse
Versão 18.1.0 do ClickHouse, 2018-07-23
Novos recursos:
- Suporte à consulta
ALTER TABLE t DELETE WHEREpara tabelas MergeTree não replicadas (#2634). - Suporte a tipos arbitrários para a família de funções de agregação
uniq*(#2010). - Suporte a tipos arbitrários em operadores de comparação (#2026).
- O arquivo
users.xmlpermite definir uma máscara de sub-rede no formato10.0.0.1/255.255.255.0. Isso é necessário para usar máscaras em redes IPv6 com zeros no meio (#2637). - Adicionada a função
arrayDistinct(#2670). - O mecanismo SummingMergeTree agora pode trabalhar com colunas do tipo AggregateFunction (Constantin S. Pan).
Melhorias:
- O esquema de numeração das versões foi alterado. Agora, a primeira parte contém o ano de lançamento (d.C., fuso horário de Moscou, menos 2000), a segunda parte contém o número de mudanças principais (aumenta na maioria das versões), e a terceira parte é a versão de patch. As versões continuam sendo retrocompatíveis, salvo indicação em contrário no changelog.
- Conversões mais rápidas de números de ponto flutuante para string (Amos Bird).
- Se algumas linhas forem ignoradas durante uma inserção devido a erros de parsing (isso é possível com as configurações
input_allow_errors_numeinput_allow_errors_ratiohabilitadas), o número de linhas ignoradas agora é gravado no log do servidor (Leonardo Cecchi).
Correções de bugs:
- Corrigido o comando TRUNCATE para tabelas temporárias (Amos Bird).
- Corrigido um deadlock raro na biblioteca cliente do ZooKeeper que ocorria quando havia um erro de rede durante a leitura da resposta (c315200).
- Corrigido um erro ao fazer CAST para tipos Nullable (#1322).
- Corrigido o resultado incorreto da função
maxIntersection()quando os limites dos intervalos coincidiam (Michael Furmur). - Corrigida a transformação incorreta da sequência de expressões OR em um argumento de função (chenxing-xc).
- Corrigida a degradação de desempenho em consultas que contêm expressões
IN (subquery)dentro de outra subconsulta (#2571). - Corrigida a incompatibilidade entre servidores com versões diferentes em consultas distribuídas que usam uma função
CASTescrita sem letras maiúsculas (fe8c4d6). - Adicionadas as aspas ausentes nos identificadores em consultas a um SGBD externo (#2635).
Alterações incompatíveis com versões anteriores:
- Não é possível converter uma string que contém o número zero em DateTime. Exemplo:
SELECT toDateTime('0'). Esse também é o motivo deDateTime DEFAULT '0'não funcionar em tabelas, assim como<null_value>0</null_value>em dicionários. Solução: substitua0por0000-00-00 00:00:00.
Versão 1.1 do ClickHouse
Versão do ClickHouse 1.1.54394, 2018-07-12
Novos Recursos:
- Adicionada a função de agregação
histogram(Mikhail Surin). - Agora,
OPTIMIZE TABLE ... FINALpode ser usado sem especificar as partições paraReplicatedMergeTree(Amos Bird).
Correções de bugs:
- Foi corrigido um problema de timeout muito curto para sockets (um segundo) de leitura e gravação ao enviar e baixar dados replicados, o que impossibilitava baixar partes maiores quando havia carga na rede ou no disco (isso resultava em tentativas cíclicas de baixar partes). Esse erro ocorreu na versão 1.1.54388.
- Foram corrigidos problemas ao usar
chrootno ZooKeeper ao inserir blocos de dados duplicados na tabela. - A função
hasagora funciona corretamente para um array com elementos Nullable (#2115). - A tabela
system.tablesagora funciona corretamente quando usada em consultas distribuídas. As colunasmetadata_modification_timeeengine_fullagora são não virtuais. Foi corrigido um erro que ocorria quando apenas essas colunas eram consultadas na tabela. - Foi corrigido o funcionamento de uma tabela
TinyLogvazia após a inserção de um bloco de dados vazio (#2563). - A tabela
system.zookeeperfunciona quando o valor do nó no ZooKeeper é NULL.
Versão do ClickHouse 1.1.54390, 2018-07-06
Novos recursos:
- As consultas podem ser enviadas no formato
multipart/form-data(no campoquery), o que é útil quando dados externos também são enviados para o processamento da consulta (Olga Hvostikova). - Foi adicionada a possibilidade de ativar ou desativar o processamento de aspas simples e duplas ao ler dados no formato CSV. Você pode configurar isso nas settings
format_csv_allow_single_quoteseformat_csv_allow_double_quotes(Amos Bird). - Agora,
OPTIMIZE TABLE ... FINALpode ser usado sem especificar a partição para variantes não replicadas deMergeTree(Amos Bird).
Melhorias:
- Melhor desempenho, menor consumo de memória e rastreamento correto do consumo de memória ao usar o operador IN quando um índice da tabela podia ser usado (#2584).
- Removida a verificação redundante de checksums ao adicionar uma parte de dados. Isso é importante quando há um grande número de réplicas, porque, nesses casos, o número total de verificações era igual a N^2.
- Adicionado suporte a argumentos
Array(Tuple(...))na funçãoarrayEnumerateUniq(#2573). - Adicionado suporte a
Nullablena funçãorunningDifference(#2594). - Melhorado o desempenho da análise de consulta quando há um número muito grande de expressões (#2572).
- Seleção mais rápida de partes de dados para mesclagem em tabelas
ReplicatedMergeTree. Recuperação mais rápida da sessão do ZooKeeper (#2597). - O arquivo
format_version.txtde tabelasMergeTreeé recriado se estiver ausente, o que é útil se o ClickHouse for iniciado após a cópia da estrutura de diretórios sem os arquivos (Ciprian Hacman).
Correções de bugs:
- Corrigido um bug ao trabalhar com o ZooKeeper que podia tornar impossível recuperar a sessão e os estados
readonlydas tabelas antes de reiniciar o servidor. - Corrigido um bug ao trabalhar com o ZooKeeper que podia fazer com que nós antigos não fossem excluídos se a sessão fosse interrompida.
- Corrigido um erro na função
quantileTDigestpara argumentos Float (esse bug foi introduzido na versão 1.1.54388) (Mikhail Surin). - Corrigido um bug no índice de tabelas MergeTree se a coluna da chave primária estiver dentro da função de conversão entre tipos inteiros com e sem sinal do mesmo tamanho (#2603).
- Corrigido um segfault se
macrosforem usados, mas não estiverem no arquivo de configuração (#2570). - Corrigida a mudança para o banco de dados padrão ao reconectar o cliente (#2583).
- Corrigido um bug que ocorria quando a configuração
use_index_for_in_with_subqueriesestava desabilitada.
Correção de segurança:
- Não é mais possível enviar arquivos ao se conectar ao MySQL (
LOAD DATA LOCAL INFILE).
Versão do ClickHouse 1.1.54388, 2018-06-28
Novos recursos:
- Suporte à consulta
ALTER TABLE t DELETE WHEREpara tabelas replicadas. Foi adicionada a tabelasystem.mutationspara acompanhar o progresso desse tipo de consulta. - Suporte à consulta
ALTER TABLE t [REPLACE|ATTACH] PARTITIONpara tabelas *MergeTree. - Suporte à consulta
TRUNCATE TABLE(Winter Zhang) - Várias novas consultas
SYSTEMpara tabelas replicadas (RESTART REPLICAS,SYNC REPLICA,[STOP|START] [MERGES|FETCHES|SENDS REPLICATED|REPLICATION QUEUES]). - Adicionada a capacidade de gravar em uma tabela com o engine MySQL e a função de tabela correspondente (sundy-li).
- Adicionadas a função de tabela
url()e o motor de tabelaURL(Alexander Sapin). - Adicionada a função de agregação
windowFunnel(sundy-li). - Novas funções
startsWitheendsWithpara strings (Vadim Plakhtinsky). - A função de tabela
numbers()agora permite especificar o deslocamento (Winter Zhang). - A senha do
clickhouse-clientagora pode ser inserida interativamente. - Os logs do servidor agora podem ser enviados ao syslog (Alexander Krasheninnikov).
- Suporte a logging em dicionários com uma origem de biblioteca compartilhada (Alexander Sapin).
- Suporte a delimitadores CSV personalizados (Ivan Zhukov)
- Adicionada a configuração
date_time_input_format. Se essa configuração for alterada para'best_effort', os valores DateTime serão lidos em uma ampla variedade de formatos. - Adicionado o utilitário
clickhouse-obfuscatorpara ofuscação de dados. Exemplo de uso: publicar dados usados em testes de desempenho.
Recursos experimentais:
- Adicionada a capacidade de calcular os argumentos de
andapenas quando necessário (Anastasia Tsarkova) - A compilação JIT para código nativo agora está disponível para algumas expressões (pyos).
Correções de bugs:
- Duplicatas não aparecem mais em consultas com
DISTINCTeORDER BY. - Consultas com
ARRAY JOINearrayFilternão retornam mais resultados incorretos. - Corrigido um erro ao ler uma coluna de array de uma estrutura Nested (#2066).
- Corrigido um erro ao analisar consultas com uma cláusula HAVING como
HAVING tuple IN (...). - Corrigido um erro ao analisar consultas com aliases recursivos.
- Corrigido um erro ao ler dados de ReplacingMergeTree com uma condição em PREWHERE que filtra todas as linhas (#2525).
- As configurações de perfil do usuário não eram aplicadas ao usar sessões na interface HTTP.
- Corrigida a forma como as configurações são aplicadas a partir dos parâmetros da linha de comando no clickhouse-local.
- A biblioteca cliente do ZooKeeper agora usa o timeout de sessão recebido do servidor.
- Corrigido um bug na biblioteca cliente do ZooKeeper quando o cliente aguardava a resposta do servidor por mais tempo do que o timeout.
- Corrigido o pruning de partes para consultas com condições nas colunas da chave de partição (#2342).
- Merges agora são possíveis após
CLEAR COLUMN IN PARTITION(#2315). - O mapeamento de tipos na função de tabela ODBC foi corrigido (sundy-li).
- As comparações de tipos foram corrigidas para
DateTimecom e sem fuso horário (Alexander Bocharov). - Corrigidos o parsing sintático e a formatação do operador
CAST. - Corrigida a inserção em uma visão materializada para o motor de tabela Distributed (Babacar Diassé).
- Corrigida uma race condition ao gravar dados do mecanismo
Kafkaem visões materializadas (Yangkuan Liu). - Corrigido SSRF na função de tabela remote().
- Corrigido o comportamento de saída do
clickhouse-clientno modo multilinha (#2510).
Melhorias:
- As tarefas em segundo plano em tabelas replicadas agora são executadas em um pool de threads, em vez de threads separadas (Silviu Caragea).
- Desempenho da compressão LZ4 aprimorado.
- Análise mais rápida para consultas com um grande número de JOINs e subconsultas.
- O cache de DNS agora é atualizado automaticamente quando há muitos erros de rede.
- As inserções em tabelas não ocorrem mais se não for possível inserir em uma das visões materializadas porque ela tem partes demais.
- Corrigida a discrepância nos contadores de eventos
Query,SelectQueryeInsertQuery. - Expressões como
tuple IN (SELECT tuple)são permitidas se os tipos de tupla corresponderem. - Um servidor com tabelas replicadas pode iniciar mesmo que o ZooKeeper não esteja configurado.
- Ao calcular o número de núcleos de CPU disponíveis, os limites de cgroups agora são levados em consideração (Atri Sharma).
- Adicionado
chownpara diretórios de configuração no arquivo de configuração do systemd (Mikhail Shiryaev).
Alterações de compilação:
- O compilador gcc8 agora pode ser usado para compilações.
- Foi adicionada a possibilidade de compilar o llvm a partir do submódulo.
- A versão da biblioteca librdkafka foi atualizada para v0.11.4.
- Foi adicionada a possibilidade de usar a biblioteca libcpuid do sistema. A versão da biblioteca foi atualizada para 0.4.0.
- Foi corrigida a compilação com a biblioteca vectorclass (Babacar Diassé).
- O Cmake agora gera arquivos para ninja por padrão (como ao usar
-G Ninja). - Foi adicionada a possibilidade de usar a biblioteca libtinfo em vez da libtermcap (Georgy Kondratiev).
- Foi corrigido um conflito de arquivo de cabeçalho no Fedora Rawhide (#2520).
Alterações incompatíveis com versões anteriores:
- O escape foi removido dos formatos
VerticalePretty*, e o formatoVerticalRawfoi excluído. - Se servidores com a versão 1.1.54388 (ou mais recente) e servidores com uma versão mais antiga forem usados simultaneamente em uma consulta distribuída, e a consulta contiver a expressão
cast(x, 'Type')sem a palavra-chaveASe sem a palavracastem maiúsculas, será gerada uma exceção com uma mensagem comoNot found column cast(0, 'UInt8') in block. Solução: atualize os servidores em todo o cluster.
Versão do ClickHouse 1.1.54385, 2018-06-01
Correções de bugs:
- Corrigido um erro que, em alguns casos, podia bloquear as operações do ZooKeeper.
Lançamento 1.1.54383 do ClickHouse, 2018-05-22
Correções de bugs:
- Corrigida uma lentidão na fila de replicação quando uma tabela tem muitas réplicas.
Lançamento do ClickHouse 1.1.54381, 2018-05-14
Correções de bugs:
- Corrigido um vazamento de nós no ZooKeeper quando o ClickHouse perde a conexão com o servidor do ZooKeeper.
Lançamento do ClickHouse 1.1.54380, 2018-04-21
Novos recursos:
- Adicionada a função de tabela
file(path, format, structure). Exemplo de leitura de bytes de/dev/urandom:ln -s /dev/urandom /var/lib/clickhouse/user_files/random``clickhouse-client -q "SELECT * FROM file('random', 'RowBinary', 'd UInt8') LIMIT 10".
Melhorias:
- Subconsultas podem ser colocadas entre parênteses
()para melhorar a legibilidade da consulta. Por exemplo:(SELECT 1) UNION ALL (SELECT 1). - Consultas
SELECTsimples da tabelasystem.processesnão entram no limite demax_concurrent_queries.
Correções de bugs:
- Corrigido o comportamento incorreto do operador
INao selecionar emMATERIALIZED VIEW. - Corrigida a filtragem incorreta pelo índice de partição em expressões como
partition_key_column IN (...). - Corrigida a impossibilidade de executar a consulta
OPTIMIZEem uma réplica que não é líder seREANAMEtiver sido executado na tabela. - Corrigido o erro de autorização ao executar consultas
OPTIMIZEouALTERem uma réplica que não é líder. - Corrigido o travamento de
KILL QUERY. - Corrigido um erro na biblioteca cliente do ZooKeeper que levava à perda de watches, ao travamento da fila de DDL distribuído e à lentidão na fila de replicação se um prefixo
chrootnão vazio fosse usado na configuração do ZooKeeper.
Alterações incompatíveis com versões anteriores:
- Foi removido o suporte a expressões como
(a, b) IN (SELECT (a, b))(você pode usar a expressão equivalente(a, b) IN (SELECT a, b)). Em versões anteriores, essas expressões levavam a uma filtragemWHEREindeterminada ou causavam erros.
Lançamento do ClickHouse 1.1.54378, 2018-04-16
Novos recursos:
- O nível de logging pode ser alterado sem reiniciar o servidor.
- Adicionada a consulta
SHOW CREATE DATABASE. - O
query_idpode ser informado aoclickhouse-client(elBroom). - Nova configuração:
max_network_bandwidth_for_all_users. - Adicionado suporte a
ALTER TABLE ... PARTITION ...paraMATERIALIZED VIEW. - Adicionadas informações sobre o tamanho das partes de dados em formato não compactado na tabela de sistema.
- Suporte à criptografia entre servidores para tabelas distribuídas (
<secure>1</secure>na configuração da réplica em<remote_servers>). - Configuração no nível da tabela para a família
ReplicatedMergeTree, a fim de minimizar a quantidade de dados armazenados no ZooKeeper:use_minimalistic_checksums_in_zookeeper = 1 - Configuração do prompt do
clickhouse-client. Por padrão, os nomes dos servidores agora são exibidos no prompt. O nome de exibição do servidor pode ser alterado. Ele também é enviado no cabeçalho HTTPX-ClickHouse-Display-Name(Kirill Shvakov). - É possível especificar vários
topicsseparados por vírgula para o motorKafka(Tobias Adamson) - Quando uma consulta é interrompida por
KILL QUERYoureplace_running_query, o cliente recebe a exceçãoQuery was canceledem vez de um resultado incompleto.
Melhorias:
- As consultas
ALTER TABLE ... DROP/DETACH PARTITIONsão executadas no início da fila de replicação. SELECT ... FINALeOPTIMIZE ... FINALpodem ser usados mesmo quando a tabela tem apenas uma parte de dados.- A tabela
query_logé recriada automaticamente se tiver sido excluída manualmente (Kirill Shvakov). - A função
lengthUTF8é executada mais rapidamente (zhang2014). - Melhor desempenho das inserções síncronas em tabelas
Distributed(insert_distributed_sync = 1) quando há um número muito grande de shards. - O servidor aceita as configurações
send_timeoutereceive_timeoutdo cliente e as aplica ao se conectar a ele (elas são aplicadas em ordem inversa: osend_timeoutdo socket do servidor é definido com o valor dereceive_timeoutrecebido do cliente, e vice-versa). - Recuperação de falhas mais robusta para inserção assíncrona em tabelas
Distributed. - O tipo de retorno da função
countEqualmudou deUInt32paraUInt64(谢磊).
Correções de bugs:
- Corrigido um erro no
INquando o lado esquerdo da expressão éNullable. - Agora são retornados resultados corretos ao usar tuplas com
INquando alguns componentes da tupla estão no índice da tabela. - O limite
max_execution_timeagora funciona corretamente com consultas distribuídas. - Corrigidos erros no cálculo do tamanho de colunas compostas na tabela
system.columns. - Corrigido um erro ao criar uma tabela temporária
CREATE TEMPORARY TABLE IF NOT EXISTS. - Corrigidos erros no
StorageKafka(##2075) - Corrigidas falhas do servidor causadas por argumentos inválidos em determinadas funções agregadas.
- Corrigido o erro que impedia a consulta
DETACH DATABASEde interromper tarefas em segundo plano de tabelasReplicatedMergeTree. - A ocorrência do estado
Too many partspassou a ser menos provável ao inserir em visões materializadas agregadas (##2084). - Corrigido o tratamento recursivo das substituições na configuração, caso uma substituição precise ser seguida por outra no mesmo nível.
- Corrigida a sintaxe no arquivo de metadados ao criar uma
VIEWque usa uma consulta comUNION ALL. SummingMergeTreeagora funciona corretamente para a soma de estruturas de dados aninhadas com uma chave composta.- Corrigida a possibilidade de uma condição de corrida na escolha do líder para tabelas
ReplicatedMergeTree.
Alterações na compilação:
- A compilação agora oferece suporte a
ninjaem vez demakee usaninjapor padrão para compilar releases. - Pacotes renomeados:
clickhouse-server-baseparaclickhouse-common-static;clickhouse-server-commonparaclickhouse-server;clickhouse-common-dbgparaclickhouse-common-static-dbg. Para instalar, useclickhouse-server clickhouse-client. Os pacotes com os nomes antigos ainda estarão disponíveis nos repositórios para manter a compatibilidade com versões anteriores.
Alterações incompatíveis com versões anteriores:
- Foi removida a interpretação especial de uma expressão
INquando um array é especificado no lado esquerdo. Antes, a expressãoarr IN (set)era interpretada como “pelo menos um elemento dearrpertence aoset”. Para obter o mesmo comportamento na nova versão, escrevaarrayExists(x -> x IN (set), arr). - Foi desabilitado o uso incorreto da opção de socket
SO_REUSEPORT, que estava incorretamente habilitada por padrão na biblioteca Poco. Observe que, no Linux, não há mais motivo para especificar simultaneamente os endereços::e0.0.0.0para escuta — use apenas::, que permite escutar conexões por IPv4 e IPv6 (com as configurações padrão do kernel). Você também pode voltar ao comportamento das versões anteriores especificando<listen_reuse_port>1</listen_reuse_port>na configuração.
Lançamento do ClickHouse 1.1.54370, 2018-03-16
Novos recursos:
- Adicionada a tabela
system.macrose a atualização automática das macros quando o arquivo de configuração é alterado. - Adicionada a consulta
SYSTEM RELOAD CONFIG. - Adicionada a função de agregação
maxIntersections(left_col, right_col), que retorna o número máximo de intervalos[left; right]que se sobrepõem simultaneamente. A funçãomaxIntersectionsPosition(left, right)retorna o início do intervalo de sobreposição máxima. (Michael Furmur).
Melhorias:
- Ao inserir dados em uma tabela
Replicated, são feitas menos solicitações aoZooKeeper(e a maioria dos erros no nível do usuário desapareceu do log doZooKeeper). - Foi adicionada a capacidade de criar aliases para conjuntos de dados. Exemplo:
WITH (1, 2, 3) AS set SELECT number IN set FROM system.numbers LIMIT 10.
Correções de bugs:
- Corrigido o erro
Illegal PREWHEREao ler de tabelas Merge para tabelasDistributed. - Adicionadas correções que permitem iniciar o clickhouse-server em contêineres Docker somente com IPv4.
- Corrigida uma condição de corrida ao ler da tabela de sistema
system.parts_columns. - Removido o buffer duplo durante uma inserção síncrona em uma tabela
Distributed, o que poderia fazer a conexão expirar por timeout. - Corrigido um bug que causava esperas excessivamente longas por uma réplica indisponível antes de iniciar uma consulta
SELECT. - Corrigidas datas incorretas na tabela
system.parts. - Corrigido um bug que tornava impossível inserir dados em uma tabela
Replicatedsechrootnão estivesse vazio na configuração do clusterZooKeeper. - Corrigido o algoritmo de mesclagem vertical para uma tabela com
ORDER BYvazio. - Restaurada a capacidade de usar dicionários em consultas a tabelas remotas, mesmo que esses dicionários não estejam presentes no servidor solicitante. Essa funcionalidade foi perdida na versão 1.1.54362.
- Restaurado o comportamento de consultas como
SELECT * FROM remote('server2', default.table) WHERE col IN (SELECT col2 FROM default.table)quando o lado direito deINdeve usar umadefault.tableremota em vez de uma local. Esse comportamento estava quebrado na versão 1.1.54358. - Removido o logging desnecessário no nível de erro de
Not found column ... in block.
Lançamento do ClickHouse 1.1.54362, 2018-03-11
Novos recursos:
- A agregação sem
GROUP BYpara um conjunto vazio (comoSELECT count(*) FROM table WHERE 0) agora retorna um resultado com uma linha contendo valores NULL para as funções de agregação, em conformidade com o padrão SQL. Para restaurar o comportamento anterior (retornar um resultado vazio), definaempty_result_for_aggregation_by_empty_setcomo 1. - Adicionada a conversão de tipo para
UNION ALL. Aliases diferentes são permitidos nas posições deSELECTemUNION ALL, em conformidade com o padrão SQL. - Expressões arbitrárias são aceitas em cláusulas
LIMIT BY. Antes, só era possível usar colunas resultantes deSELECT. - Um índice de tabelas
MergeTreeé utilizado quandoINé aplicado a uma tupla de expressões das colunas da chave primária. Exemplo:WHERE (UserID, EventDate) IN ((123, '2000-01-01'), ...)(Anastasiya Tsarkova). - Adicionada a ferramenta
clickhouse-copierpara copiar entre clusters e redistribuir dados entre shards (beta). - Adicionadas funções de hash consistente:
yandexConsistentHash,jumpConsistentHash,sumburConsistentHash. Elas podem ser usadas como chave de sharding para reduzir a quantidade de tráfego de rede durante re-shardings subsequentes. - Funções adicionadas:
arrayAny,arrayAll,hasAny,hasAll,arrayIntersect,arrayResize. - Adicionada a função
arrayCumSum(Javi Santana). - Adicionadas as funções
parseDateTimeBestEffort,parseDateTimeBestEffortOrZeroeparseDateTimeBestEffortOrNullpara ler um DateTime a partir de uma string contendo texto em uma grande variedade de formatos possíveis. - Os dados podem ser parcialmente recarregados a partir de dicionários externos durante a atualização (carregando apenas os registros em que o valor do campo especificado é maior do que no download anterior) (Arsen Hakobyan).
- Foi adicionada a função de tabela
cluster. Exemplo:cluster(cluster_name, db, table). A função de tabelaremotepode aceitar o nome do cluster como primeiro argumento, se ele for especificado como um identificador. - As funções de tabela
remoteeclusterpodem ser usadas em consultasINSERT. - Adicionadas as colunas virtuais
create_table_queryeengine_fullà tabelasystem.tables. A colunametadata_modification_timeé virtual. - Foram adicionadas as colunas
data_pathemetadata_pathàs tabelassystem.tablesesystem.databases, e a colunapathàs tabelassystem.partsesystem.parts_columns. - Acrescentadas informações adicionais sobre mesclagens na tabela
system.part_log. - Qualquer chave de particionamento pode ser usada para a tabela
system.query_log(Kirill Shvakov). - A consulta
SHOW TABLESagora também exibe tabelas temporárias. Tabelas temporárias e a colunais_temporaryforam adicionadas asystem.tables(zhang2014). - Adicionadas as instruções
DROP TEMPORARY TABLEeEXISTS TEMPORARY TABLE(zhang2014). - Suporte a
SHOW CREATE TABLEpara tabelas temporárias (zhang2014). - Adicionado o parâmetro de configuração
system_profilepara as configurações usadas pelos processos internos. - Suporte ao carregamento de
object_idcomo atributo em dicionáriosMongoDB(Pavel Litvinenko). - Leitura de
nullcomo valor padrão durante o carregamento de dados para um dicionário externo com a fonteMongoDB(Pavel Litvinenko). - Leitura de valores
DateTimeno formatoValuesa partir de timestamp Unix, sem aspas simples. - O failover é suportado nas funções de tabela
remotenos casos em que algumas das réplicas não têm a tabela solicitada. - As configurações podem ser sobrescritas pela linha de comando ao executar
clickhouse-server. Exemplo:clickhouse-server -- --logger.level=information. - Implementada a função
emptypara um argumentoFixedString: a função retorna 1 se a string for composta inteiramente por bytes nulos (zhang2014). - Adicionado o parâmetro de configuração
listen_trypara escutar em pelo menos um dos endereços sem encerrar, caso não seja possível escutar em alguns deles (útil para sistemas com suporte a IPv4 ou IPv6 desativado). - Adicionado o engine de tabela
VersionedCollapsingMergeTree. - Suporte a linhas e a tipos numéricos arbitrários na fonte de dicionário
library. - Tabelas
MergeTreepodem ser usadas sem chave primária (é necessário especificarORDER BY tuple()). - Um tipo
Nullablepode ser convertido comCASTpara um tipo nãoNullablese o argumento não forNULL. RENAME TABLEpode ser aplicado aVIEW.- Adicionada a função
throwIf. - Adicionada a opção
odbc_default_field_size, que permite aumentar o tamanho máximo do valor carregado a partir de uma fonte ODBC (por padrão, 1024). - A tabela
system.processeseSHOW PROCESSLISTagora contam com as colunasis_cancelledepeak_memory_usage.
Melhorias:
- Limites e cotas sobre o resultado não são mais aplicados aos dados intermediários de consultas
INSERT SELECTnem de subconsultasSELECT. - Menos acionamentos falsos de
force_restore_dataao verificar o status de tabelasReplicatedna inicialização do servidor. - Adicionada a opção
allow_distributed_ddl. - Funções não determinísticas não são permitidas em expressões de chaves de tabelas
MergeTree. - Arquivos com substituições dos diretórios
config.dsão carregados em ordem alfabética. - Melhorado o desempenho da função
arrayElementno caso de um Array multidimensional constante com um array vazio como um dos elementos. Exemplo:[[1], []][x]. - O servidor agora inicia mais rapidamente ao usar arquivos de configuração com substituições muito grandes (por exemplo, listas muito grandes de redes IP).
- Ao executar uma consulta, funções de tabela com valor são executadas uma vez. Antes, as funções de tabela com valor
remoteemysqlexecutavam a mesma consulta duas vezes para obter a estrutura da tabela de um servidor remoto. - O gerador de documentação
MkDocspassou a ser usado. - Ao tentar excluir uma coluna de tabela da qual dependem expressões
DEFAULT/MATERIALIZEDde outras colunas, uma exceção é gerada (zhang2014). - Adicionada a capacidade de interpretar uma linha vazia em formatos de texto como o número 0 para tipos de dados
Float. Essa funcionalidade já estava disponível antes, mas foi perdida na versão 1.1.54342. - Valores
Enumpodem ser usados emmin,max,sume algumas outras funções. Nesses casos, são usados os valores numéricos correspondentes. Essa funcionalidade já estava disponível antes, mas foi perdida na versão 1.1.54337. - Adicionado
max_expanded_ast_elementspara restringir o tamanho da AST após a expansão recursiva de aliases.
Correções de bugs:
- Corrigidos os casos em que colunas desnecessárias eram removidas de subconsultas por engano, ou não eram removidas de subconsultas com
UNION ALL. - Corrigido um bug nas merges de tabelas
ReplacingMergeTree. - Corrigidas inserções síncronas em tabelas
Distributed(insert_distributed_sync = 1). - Corrigido um segfault em determinados usos de
FULLeRIGHT JOINcom colunas duplicadas em subconsultas. - Corrigido um segfault em determinados usos de
replace_running_queryeKILL QUERY. - Corrigida a ordem das colunas
sourceelast_exceptionna tabelasystem.dictionaries. - Corrigido um bug em que a consulta
DROP DATABASEnão excluía o arquivo de metadados. - Corrigida a consulta
DROP DATABASEpara bancos de dadosDictionary. - Corrigida a baixa precisão das funções
uniqHLL12euniqCombinedpara cardinalidades superiores a 100 milhões de itens (Alex Bocharov). - Corrigido o cálculo dos valores padrão implícitos quando necessário para calcular simultaneamente expressões padrão explícitas em consultas
INSERT(zhang2014). - Corrigido um caso raro em que uma consulta a uma tabela
MergeTreenão conseguia ser concluída (chenxing-xc). - Corrigida uma falha que ocorria ao executar uma consulta
CHECKem tabelasDistributedse todos os shards fossem locais (chenxing.xc). - Corrigida uma pequena regressão de desempenho em funções que usam expressões regulares.
- Corrigida uma regressão de desempenho ao criar arrays multidimensionais a partir de expressões complexas.
- Corrigido um bug que podia fazer com que uma seção
FORMATextra aparecesse em um arquivo.sqlde metadados. - Corrigido um bug que fazia com que o limite
max_table_size_to_dropfosse aplicado ao tentar excluir umaMATERIALIZED VIEWque referencia uma tabela explicitamente especificada. - Corrigida a incompatibilidade com clientes antigos (às vezes, clientes antigos recebiam dados com o tipo
DateTime('timezone'), que eles não entendem). - Corrigido um bug ao ler elementos de coluna
Nestedde estruturas adicionadas comALTER, mas que estão vazias nas partições antigas, quando as condições dessas colunas eram movidas paraPREWHERE. - Corrigido um bug ao filtrar tabelas por colunas virtuais
_tableem consultas a tabelasMerge. - Corrigido um bug ao usar colunas
ALIASem tabelasDistributed. - Corrigido um bug que impossibilitava a compilação dinâmica de consultas com funções agregadas da família
quantile. - Corrigida uma condição de corrida no pipeline de execução de consultas que ocorria em casos muito raros ao usar tabelas
Mergecom um grande número de tabelas e ao usar subconsultasGLOBAL. - Corrigida uma falha ao passar arrays de tamanhos diferentes para uma função
arrayReduceao usar funções agregadas com vários argumentos. - Proibido o uso de consultas com
UNION ALLem umaMATERIALIZED VIEW. - Corrigido um erro durante a inicialização da tabela de sistema
part_logquando o servidor é iniciado (por padrão,part_logestá desabilitada).
Alterações incompatíveis com versões anteriores:
- A opção
distributed_ddl_allow_replicated_alterfoi removida. Esse comportamento é habilitado por padrão. - A configuração
strict_insert_defaultsfoi removida. Se você estava usando essa funcionalidade, escreva parafeedback@clickhouse.com. - O motor
UnsortedMergeTreefoi removido.
Lançamento do ClickHouse 1.1.54343, 2018-02-05
- Adicionado suporte a macros para definir nomes de cluster em consultas de DDL distribuído e nos construtores de tabelas Distributed:
CREATE TABLE distr ON CLUSTER '{cluster}' (...) ENGINE = Distributed('{cluster}', 'db', 'table'). - Agora, consultas como
SELECT ... FROM table WHERE expr IN (subquery)são processadas com o índicetable. - Melhorado o tratamento de duplicatas ao inserir em tabelas Replicated, para que elas não deixem mais lenta a execução da fila de replicação.
Lançamento do ClickHouse 1.1.54342, 2018-01-22
- Corrigida uma regressão em 1.1.54337: se o usuário padrão tiver acesso somente leitura, o servidor se recusa a iniciar com a mensagem
Cannot create database in readonly mode. - Corrigida uma regressão em 1.1.54337: em sistemas com systemd, os logs são sempre gravados no syslog, independentemente da configuração; o script de watchdog ainda usa init.d.
- Corrigida uma regressão em 1.1.54337: configuração padrão incorreta na imagem Docker.
- Corrigido o comportamento não determinístico do GraphiteMergeTree (isso pode ser visto nas mensagens de log
Data after merge is not byte-identical to the data on another replicas). - Corrigido um bug que pode levar a merges inconsistentes após a consulta OPTIMIZE em tabelas Replicated (isso pode ser visto nas mensagens de log
Part ... intersects the previous part). - As tabelas Buffer agora funcionam corretamente quando há colunas MATERIALIZED na tabela de destino (por zhang2014).
- Corrigido um bug na implementação de NULL.
Lançamento do ClickHouse 1.1.54337, 2018-01-18
Novos recursos:
- Adicionado suporte ao armazenamento de arrays multidimensionais e tuplas (tipo de dado
Tuple) em tabelas. - Suporte a funções de tabela para consultas
DESCRIBEeINSERT. Adicionado suporte a subconsultas emDESCRIBE. Exemplos:DESC TABLE remote('host', default.hits);DESC TABLE (SELECT 1);INSERT INTO TABLE FUNCTION remote('host', default.hits). Suporte aINSERT INTO TABLE, além deINSERT INTO. - Suporte aprimorado a fusos horários. O tipo de dado
DateTimepode ser anotado com o fuso horário usado na análise e formatação em formatos de texto. Exemplo:DateTime('Asia/Istanbul'). Quando fusos horários são especificados em funções para argumentosDateTime, o tipo de retorno acompanhará o fuso horário, e o valor será exibido como esperado. - Adicionadas as funções
toTimeZone,timeDiff,toQuarter,toRelativeQuarterNum. As funçõestoRelativeHour/Minute/Secondpodem receber um valor do tipoDatecomo argumento. O nome da funçãonowdiferencia maiúsculas de minúsculas. - Adicionada a função
toStartOfFifteenMinutes(Kirill Shvakov). - Adicionada a ferramenta
clickhouse formatpara formatação de consultas. - Adicionado o parâmetro de configuração
format_schema_path(Marek Vavruša). Ele é usado para especificar um esquema no formatoCap'n Proto. Os arquivos de esquema podem ficar apenas no diretório especificado. - Adicionado suporte a substituições de configuração (
incleconf.d) para a configuração de dicionários externos e modelos (Pavel Yakunin). - Adicionada uma coluna com documentação para a tabela
system.settings(Kirill Shvakov). - Adicionada a tabela
system.parts_columnscom informações sobre os tamanhos das colunas em cada parte de dados de tabelasMergeTree. - Adicionada a tabela
system.modelscom informações sobre modelos de machine learningCatBoostcarregados. - Adicionadas as funções de tabela
mysqleodbce os respectivos motores de tabelaMySQLeODBCpara acessar bancos de dados remotos. Essa funcionalidade está em estágio beta. - Adicionada a possibilidade de passar um argumento do tipo
AggregateFunctionpara a função de agregaçãogroupArray(assim, você pode criar um array de estados de alguma função de agregação). - Removidas as restrições sobre várias combinações de combinadores de funções de agregação. Por exemplo, você pode usar as funções de agregação
avgForEachIfeavgIfForEach, que têm comportamentos diferentes. - O combinador de função de agregação
-ForEachfoi estendido para o caso de funções de agregação com múltiplos argumentos. - Adicionado suporte a funções de agregação com argumentos
Nullable, mesmo nos casos em que a função retorna um resultado nãoNullable(adicionado com a contribuição de Silviu Caragea). Exemplo:groupArray,groupUniqArray,topK. - Adicionado o parâmetro
max_client_network_bandwidthparaclickhouse-client(Kirill Shvakov). - Usuários com a configuração
readonly = 2têm permissão para trabalhar com tabelas TEMPORARY (CREATE, DROP, INSERT…) (Kirill Shvakov). - Adicionado suporte ao uso de múltiplos consumidores com o motor
Kafka. Opções de configuração estendidas paraKafka(Marek Vavruša). - Adicionadas as funções
intExp3eintExp4. - Adicionada a função de agregação
sumKahan. - Adicionadas as funções to * Number* OrNull, em que * Number* é um tipo numérico.
- Adicionado suporte a cláusulas
WITHem uma consultaINSERT SELECT(autor: zhang2014). - Adicionadas as configurações:
http_connection_timeout,http_send_timeout,http_receive_timeout. Em particular, essas configurações são usadas para baixar partes de dados para replicação. Alterá-las permite um failover mais rápido se a rede estiver sobrecarregada. - Adicionado suporte a
ALTERpara tabelas do tipoNull(Anastasiya Tsarkova). - A função
reinterpretAsStringfoi estendida para todos os tipos de dados armazenados de forma contígua na memória. - Adicionada a opção
--silentpara a ferramentaclickhouse-local. Ela suprime a impressão das informações de execução da consulta em stderr. - Adicionado suporte à leitura de valores do tipo
Datea partir de texto em um formato no qual o mês e/ou o dia do mês é especificado com um único dígito em vez de dois dígitos (Amos Bird).
Otimizações de desempenho:
- Melhorado o desempenho das funções de agregação
min,max,any,anyLast,anyHeavy,argMin,argMaxcom argumentos do tipo string. - Melhorado o desempenho das funções
isInfinite,isFinite,isNaN,roundToExp2. - Melhorado o desempenho da análise e da formatação de valores dos tipos
DateeDateTimeem formato de texto. - Melhorado o desempenho e a precisão da análise de números de ponto flutuante.
- Reduzido o uso de memória para
JOINno caso em que as partes esquerda e direita têm colunas com nomes idênticos que não estão contidas emUSING. - Melhorado o desempenho das funções de agregação
varSamp,varPop,stddevSamp,stddevPop,covarSamp,covarPop,corrao reduzir a estabilidade computacional. As funções antigas estão disponíveis com os nomesvarSampStable,varPopStable,stddevSampStable,stddevPopStable,covarSampStable,covarPopStable,corrStable.
Correções de bugs:
- Corrigida a desduplicação de dados após a execução de uma consulta
DROPouDETACH PARTITION. Na versão anterior, remover uma partição e inserir os mesmos dados novamente não funcionava porque os blocos inseridos eram considerados duplicados. - Corrigido um bug que podia levar à interpretação incorreta da cláusula
WHEREem consultasCREATE MATERIALIZED VIEWcomPOPULATE. - Corrigido um bug no uso do parâmetro
root_pathna configuraçãozookeeper_servers. - Corrigidos resultados inesperados ao passar o argumento
DateparatoStartOfDay. - Corrigidas as funções
addMonthsesubtractMonths, bem como a aritmética deINTERVAL n MONTHnos casos em que o resultado caía no ano anterior. - Adicionado o suporte que faltava ao tipo de dado
UUIDparaDISTINCT,JOINe a função de agregaçãouniq, além de dicionários externos (Evgeniy Ivanov). O suporte aUUIDainda está incompleto. - Corrigido o comportamento de
SummingMergeTreenos casos em que as linhas somavam zero. - Várias correções para o motor
Kafka(Marek Vavruša). - Corrigido o comportamento incorreto do motor de tabela
Join(Amos Bird). - Corrigido o comportamento incorreto do allocator no FreeBSD e no OS X.
- A função
extractAllagora oferece suporte a correspondências vazias. - Corrigido um erro que impedia o uso de
libresslem vez deopenssl. - Corrigida a consulta
CREATE TABLE AS SELECTa partir de tabelas temporárias. - Corrigida a falta de atomicidade na atualização da fila de replicação. Isso podia fazer com que as réplicas ficassem fora de sincronia até a reinicialização do servidor.
- Corrigido um possível overflow em
gcd,lcmemodulo(operador%) (Maks Skorokhod). - Arquivos
-preprocessedagora são criados após a alteração deumask(umaskpode ser alterado na configuração). - Corrigido um bug na verificação em segundo plano de partes (
MergeTreePartChecker) ao usar uma chave de partição personalizada. - Corrigido o parsing de tuplas (valores do tipo de dado
Tuple) em formatos de texto. - Melhoradas as mensagens de erro sobre tipos incompatíveis passados para
multiIf,arraye algumas outras funções. - O suporte a tipos
Nullablefoi reformulado. Foram corrigidos bugs que podiam levar a uma falha do servidor. Também foram corrigidos quase todos os outros bugs relacionados ao suporte aNULL: conversões incorretas de tipo em INSERT SELECT, suporte insuficiente a Nullable em HAVING e PREWHERE, modojoin_use_nulls, tipos Nullable como argumentos do operadorOR, etc. - Corrigidos vários bugs relacionados à semântica interna dos tipos de dados. Exemplos: soma desnecessária de campos do tipo
EnumemSummingMergeTree; alinhamento de tiposEnumem formatosPretty, etc. - Verificações mais rigorosas das combinações permitidas de colunas compostas.
- Corrigido o overflow ao especificar um parâmetro muito grande para o tipo de dado
FixedString. - Corrigido um bug na função de agregação
topKem um caso genérico. - Adicionada a verificação que faltava da igualdade dos tamanhos de arrays nos argumentos de variantes n-árias de funções de agregação com o combinador
-Array. - Corrigido um bug em
--pagerparaclickhouse-client(author: ks1322). - Corrigida a precisão da função
exp10. - Corrigido o comportamento da função
visitParamExtractpara ficar mais alinhado com a documentação. - Corrigida a falha ao especificar tipos de dados incorretos.
- Corrigido o comportamento de
DISTINCTno caso em que todas as colunas são constantes. - Corrigida a formatação de consultas no caso de uso da função
tupleElementcom uma expressão constante complexa como índice do elemento da tupla. - Corrigido um bug em tabelas
Dictionarypara dicionáriosrange_hashed. - Corrigido um bug que levava a linhas em excesso no resultado de
FULLeRIGHT JOIN(Amos Bird). - Corrigida uma falha do servidor ao criar e remover arquivos temporários em diretórios
config.ddurante a recarga da configuração. - Corrigida a consulta
SYSTEM DROP DNS CACHE: o cache era descarregado, mas os endereços dos nós do cluster não eram atualizados. - Corrigido o comportamento de
MATERIALIZED VIEWapós executarDETACH TABLEna tabela subjacente à visão (Marek Vavruša).
Melhorias na compilação:
- A ferramenta
pbuilderé usada nas compilações. O processo de compilação é quase totalmente independente do ambiente da máquina de compilação. - Uma única compilação é usada para diferentes versões de sistema operacional. Os pacotes e binários passaram a ser compatíveis com uma ampla variedade de sistemas Linux.
- Adicionado o pacote
clickhouse-test. Ele pode ser usado para executar testes funcionais. - O tarball do código-fonte agora pode ser publicado no repositório. Ele pode ser usado para reproduzir a compilação sem usar o GitHub.
- Adicionada integração limitada com o Travis CI. Devido aos limites de tempo de compilação no Travis, apenas a compilação de depuração é testada, e apenas um subconjunto limitado de testes é executado.
- Adicionado suporte a
Cap'n'Protona compilação padrão. - Alterado o formato das fontes da documentação de
Restricted TextparaMarkdown. - Adicionado suporte a
systemd(Vladimir Smirnov). Ele fica desativado por padrão devido à incompatibilidade com algumas imagens de sistema operacional e pode ser ativado manualmente. - Para geração dinâmica de código,
clangelldsão incorporados ao binárioclickhouse. Eles também podem ser invocados comoclickhouse clangeclickhouse lld. - Removido o uso de extensões GNU no código. Habilitada a opção
-Wextra. Ao compilar comclang, o padrão élibc++em vez delibstdc++. - As bibliotecas
clickhouse_parserseclickhouse_common_ioforam extraídas para acelerar a compilação de várias ferramentas.
Alterações incompatíveis com versões anteriores:
- O formato das marcas em tabelas do tipo
Logque contêm colunasNullablefoi alterado de maneira incompatível com versões anteriores. Se você tiver essas tabelas, deverá convertê-las para o tipoTinyLogantes de iniciar a nova versão do servidor. Para fazer isso, substituaENGINE = LogporENGINE = TinyLogno arquivo.sqlcorrespondente no diretóriometadata. Se a sua tabela não tiver colunasNullableou se o tipo da sua tabela não forLog, não é necessário fazer nada. - A configuração
experimental_allow_extended_storage_definition_syntaxfoi removida. Agora esse recurso vem habilitado por padrão. - A função
runningIncomefoi renomeada pararunningDifferenceStartingWithFirstvaluepara evitar confusão. - A sintaxe
FROM ARRAY JOIN arrfoi removida quando ARRAY JOIN é especificado diretamente após FROM, sem tabela (Amos Bird). - O formato
BlockTabSeparated, que era usado exclusivamente para fins de demonstração, foi removido. - O formato de estado das funções de agregação
varSamp,varPop,stddevSamp,stddevPop,covarSamp,covarPop,corrfoi alterado. Se você tiver estados armazenados dessas funções de agregação em tabelas (usando o tipo de dadosAggregateFunctionou visões materializadas com os estados correspondentes), escreva para feedback@clickhouse.com. - Nas versões anteriores do servidor, havia um recurso não documentado: se uma função de agregação depende de parâmetros, ainda era possível especificá-la sem parâmetros no tipo de dados
AggregateFunction. Exemplo:AggregateFunction(quantiles, UInt64)em vez deAggregateFunction(quantiles(0.5, 0.9), UInt64). Esse recurso foi perdido. Embora não fosse documentado, planejamos oferecer suporte a ele novamente em versões futuras. - Tipos de dados Enum não podem ser usados em funções de agregação min/max. Essa capacidade será restaurada na próxima versão.
Observe o seguinte ao atualizar:
- Ao fazer uma atualização gradual em um cluster, no momento em que algumas das réplicas estiverem executando a versão antiga do ClickHouse e outras estiverem executando a nova versão, a replicação será temporariamente interrompida e a mensagem
unknown parameter 'shard'aparecerá no log. A replicação continuará depois que todas as réplicas do cluster forem atualizadas. - Se versões diferentes do ClickHouse estiverem sendo executadas nos servidores do cluster, é possível que consultas distribuídas que usam as seguintes funções produzam resultados incorretos:
varSamp,varPop,stddevSamp,stddevPop,covarSamp,covarPop,corr. Você deve atualizar todos os nós do cluster.