MATERIALIZED VIEW é associada ao motor, o motor de tabela S3Queue começa a coletar dados em segundo plano.
Criar tabela
S3Queue são os mesmos aceitos pelo motor de tabela S3. Veja a seção de parâmetros aqui.
Exemplo
Configurações
system.s3_queue_settings. Disponível a partir da versão 24.10.
Nomes das configurações (24.7+)A partir da versão 24.7, as configurações do S3Queue podem ser especificadas com ou sem o prefixo
s3queue_:- Sintaxe moderna (24.7+):
processing_threads_num,tracked_file_ttl_secetc. - Sintaxe legada (todas as versões):
s3queue_processing_threads_num,s3queue_tracked_file_ttl_secetc.
Modo
- unordered — No modo unordered, o conjunto de todos os arquivos já processados é acompanhado por meio de nós persistentes no ZooKeeper.
- ordered — No modo ordered, os arquivos são processados em ordem lexicográfica. Isso significa que, se um arquivo chamado ‘BBB’ foi processado em algum momento e, mais tarde, um arquivo chamado ‘AA’ for adicionado ao bucket, ele será ignorado. Apenas o maior nome (em ordem lexicográfica) do arquivo consumido com sucesso e os nomes dos arquivos que serão tentados novamente após uma tentativa de carregamento malsucedida são armazenados no ZooKeeper.
ordered em versões anteriores à 24.6. A partir da 24.6, não há valor padrão, e a configuração passa a precisar ser especificada manualmente. Para tabelas criadas em versões anteriores, o valor padrão permanecerá Ordered por compatibilidade.
after_processing
- keep.
- delete.
- move.
- tag.
keep.
Move exige configurações adicionais. No caso de uma movimentação dentro do mesmo bucket, um novo prefixo de caminho deve ser fornecido como after_processing_move_prefix.
A movimentação para outro bucket do S3 exige o URI do bucket de destino como after_processing_move_uri, credenciais do S3 como after_processing_move_access_key_id e after_processing_move_secret_access_key.
Exemplo:
after_processing_move_connection_string e o nome do contêiner como after_processing_move_container. Consulte as configurações do AzureQueue.
A marcação exige que a chave e o valor da tag sejam fornecidos como after_processing_tag_key e after_processing_tag_value.
after_processing_retries
- Inteiro não negativo.
10.
after_processing_move_access_key_id
- String.
after_processing_move_prefix
- String.
after_processing_move_secret_access_key
- String.
after_processing_move_uri
- String.
after_processing_tag_key
after_processing='tag'.
Valores possíveis:
- String.
after_processing_tag_value
after_processing='tag'.
Valores possíveis:
- String.
keeper_path
s3queue_default_zookeeper_path, do UUID do banco de dados e do UUID da tabela. Valores absolutos (iniciados com /) são usados como estão, enquanto valores relativos são acrescentados ao prefixo configurado. Macros como {database} ou {uuid} são expandidas antes de o engine se conectar ao ZooKeeper.
Para apontar para um cluster ZooKeeper auxiliar, prefixe o valor com o nome configurado, por exemplo analytics_keeper:/clickhouse/queue/orders. O nome deve existir em <auxiliary_zookeepers>; caso contrário, o engine retorna Unknown auxiliary ZooKeeper name .... A string completa (incluindo o prefixo) é preservada em SHOW CREATE TABLE para que a instrução possa ser replicada literalmente.
Valores possíveis:
- String.
/.
loading_retries
- Inteiro positivo.
0.
processing_threads_num
Unordered.
Valor padrão: número de CPUs ou 16.
parallel_inserts
processing_threads_num gerará um INSERT, portanto ele apenas baixará arquivos e fará o parse usando múltiplas threads.
Mas isso limita o paralelismo, então, para obter melhor throughput, use parallel_inserts=true; isso permitirá inserir dados em paralelo (mas tenha em mente que isso resultará em um número maior de partes de dados geradas para a família MergeTree).
Os
INSERTs serão gerados de acordo com as configurações max_process*_before_commit.false.
enable_logging_to_s3queue_log
system.s3queue_log.
Valor padrão: 0.
polling_min_timeout_ms
- Inteiro positivo.
1000.
polling_max_timeout_ms
- Inteiro positivo.
10000.
polling_backoff_ms
- Inteiro positivo.
0.
tracked_files_limit
- Inteiro positivo.
1000.
tracked_file_ttl_sec
- Inteiro positivo.
0.
cleanup_interval_min_ms
10000.
cleanup_interval_max_ms
30000.
buckets
24.6. Se houver várias réplicas da tabela S3Queue, cada uma usando o mesmo diretório de metadados no Keeper, o valor de buckets precisa ser pelo menos igual ao número de réplicas. Se a configuração processing_threads também for usada, faz sentido aumentar ainda mais o valor da configuração buckets, pois ela define o paralelismo efetivo do processamento da S3Queue.
use_persistent_processing_nodes
persistent_processing_nodes_ttl_seconds
use_persistent_processing_nodes estiver habilitado, haja nós de processamento que não foram removidos. Essa configuração define um período durante o qual esses nós de processamento podem ser removidos com segurança.
Valor padrão: 3600 (1 hora).
Configurações relacionadas ao S3
Acesso ao S3 baseado em função
roleARN poderá ser passado por meio do parâmetro extra_credentials, como mostrado abaixo:
Modo ordenado do S3Queue
S3Queue permite armazenar menos metadados no ZooKeeper, mas tem a limitação de exigir que arquivos adicionados posteriormente tenham nomes alfanumericamente maiores.
O modo ordered do S3Queue, assim como o unordered, oferece suporte à configuração (s3queue_)processing_threads_num (o prefixo s3queue_ é opcional), que permite controlar o número de threads que farão o processamento local dos arquivos S3 no servidor.
No modo ordered sem particionamento, o ClickHouse pode retomar a listagem do S3 a partir da última chave processada para evitar listar novamente todo o histórico do prefixo. No modo ordenado com buckets, o ponto de retomada é escolhido de forma conservadora como a menor chave processada entre todos os buckets para evitar pular arquivos ainda não processados.
Essa otimização de retomada da listagem é usada apenas para filas com S3 em modo ordenado sem particionamento (não para AzureQueue nem quando partitioning_mode está definido).
Além disso, o modo ordered também introduz outra configuração chamada (s3queue_)buckets, que significa “threads lógicas”. Isso significa que, em um cenário distribuído com vários servidores e réplicas da tabela S3Queue, essa configuração define o número de unidades de processamento. Por exemplo, cada thread de processamento em cada réplica S3Queue tentará bloquear um determinado bucket para processamento; cada bucket é atribuído a determinados arquivos por meio do hash do nome do arquivo. Portanto, em um cenário distribuído, é altamente recomendável que a configuração (s3queue_)buckets seja pelo menos igual ao número de réplicas ou maior. Não há problema em ter um número de buckets maior que o número de réplicas. O cenário ideal é que a configuração (s3queue_)buckets seja igual ao produto de number_of_replicas por (s3queue_)processing_threads_num.
A configuração (s3queue_)processing_threads_num não é recomendada para uso antes da versão 24.6.
A configuração (s3queue_)buckets está disponível a partir da versão 24.6.
SELECT no engine de tabela S3Queue
stream_like_engine_allow_direct_select como True.
O engine S3Queue tem uma configuração especial para consultas SELECT: commit_on_select. Defina-a como False para preservar os dados na fila após a leitura, ou como True para removê-los.
Descrição
SELECT não é particularmente útil para importação em streaming (exceto para depuração), porque cada arquivo pode ser importado apenas uma vez. É mais prático criar fluxos em tempo real usando visões materializadas. Para fazer isso:
- Use o mecanismo para criar uma tabela que consuma do caminho especificado no S3 e trate-a como um fluxo de dados.
- Crie uma tabela com a estrutura desejada.
- Crie uma visão materializada que converta os dados do mecanismo e os insira em uma tabela criada anteriormente.
MATERIALIZED VIEW é associada ao mecanismo, ela começa a coletar dados em segundo plano.
Exemplo:
Colunas virtuais
_path— Caminho do arquivo._file— Nome do arquivo._size— Tamanho do arquivo._time— Horário de criação do arquivo.
Curingas em path
path pode especificar vários arquivos usando curingas no estilo do bash. Para que um arquivo seja processado, ele deve existir e corresponder ao padrão completo do path. A listagem de arquivos é determinada durante o SELECT (não no momento do CREATE).
*— Substitui qualquer quantidade de caracteres, exceto/, incluindo a string vazia.**— Substitui qualquer quantidade de caracteres, incluindo/, incluindo a string vazia.?— Substitui qualquer caractere único.{some_string,another_string,yet_another_one}— Substitui qualquer uma das strings'some_string', 'another_string', 'yet_another_one'.{N..M}— Substitui qualquer número no intervalo de N a M, incluindo ambas as extremidades. N e M podem ter zeros à esquerda, por exemplo,000..078.
{} são semelhantes à table function remote.
Limitações
- Linhas duplicadas podem ocorrer em decorrência de:
-
uma exceção ocorrer durante o parsing, no meio do processamento do arquivo, e as tentativas de repetição estiverem habilitadas por meio de
s3queue_loading_retries; -
S3Queueestar configurado em vários servidores apontando para o mesmo caminho no ZooKeeper, e a sessão do Keeper expirar antes que um servidor consiga fazer commit do arquivo processado, o que pode levar outro servidor a assumir o processamento do arquivo, que pode já ter sido processado parcial ou totalmente pelo primeiro servidor; no entanto, isso não é true desde a versão 25.8 seuse_persistent_processing_nodes = 1. - encerramento anormal do servidor.
- Se
S3Queueestiver configurado em vários servidores apontando para o mesmo caminho no ZooKeeper e o modoOrderedfor usado,s3queue_loading_retriesnão funcionará. Isso será corrigido em breve.
Introspecção
system.s3queue_metadata_cache e a tabela persistente system.s3queue_log.
system.s3queue_metadata_cache. Esta tabela não é persistente e mostra o estado em memória doS3Queue: quais arquivos estão sendo processados no momento e quais arquivos já foram processados ou falharam.
system.s3queue_log. Tabela persistente. Contém as mesmas informações quesystem.s3queue_metadata_cache, mas para arquivosprocessedefailed.
system.s3queue_log, defina a configuração no arquivo de configuração do servidor: