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_preserve_path
true, o caminho completo do objeto de origem é acrescentado a after_processing_move_prefix ao mover um arquivo processado com sucesso, para que a estrutura de diretórios de origem no bucket seja preservada no destino. Se false, apenas o nome do arquivo é usado, e a estrutura de diretórios de origem é achatada.
Valores possíveis:
true/false.
false.
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 não negativo.
10.
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_queue_log
system.s3queue_log.
Valor padrão: 1.
polling_min_timeout_ms
- Inteiro positivo.
1000.
polling_max_timeout_ms
- Inteiro positivo.
600000.
polling_backoff_ms
- Inteiro positivo.
30000.
tracked_files_limit
- Inteiro positivo.
1000.
tracked_file_ttl_sec
- Inteiro positivo.
0.
cleanup_interval_min_ms
60000.
cleanup_interval_max_ms
60000.
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
use_persistent_processing_nodes = 0 continua usando esses nós, e a introspecção de configurações, incluindo SHOW CREATE TABLE, informa 1, independentemente do valor fornecido.
persistent_processing_node_ttl_seconds
Ordered, que pode permanecer ativo por mais tempo do que um único nó de processamento, portanto o valor também deve levar isso em consideração.
Valor padrão: 21600 (6 horas).
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 motor 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 motor e os insira em uma tabela criada anteriormente.
MATERIALIZED VIEW é associada ao motor, 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 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 é evitado por nós de processamento persistentes, disponíveis desde a versão 25.8 e que agora são sempre usados (consulteuse_persistent_processing_nodes). - 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. -
Linhas perdidas em caso de perda de energia no nível do dispositivo do nó do ClickHouse. Um arquivo consumido é registrado como processado no Keeper (e seu objeto de origem é removido quando
after_processing = 'delete') assim que o insert é concluído, mas as linhas inseridas só se tornam duráveis quando a parte de destino é sincronizada com fsync, o que não ocorre de forma síncrona por padrão (fsync_after_insert = 0). O Keeper é sincronizado à força e geralmente é executado em um nó separado, portanto sobrevive à perda de energia desse nó. Se o nó perder energia depois que o arquivo for confirmado como processado, mas antes que a parte de destino seja sincronizada com fsync, o arquivo não será relido na reinicialização e suas linhas serão perdidas (irrecuperáveis comafter_processing = 'delete'). Um simples encerramento forçado do processo não expõe isso, pois o cache de páginas sobrevive a ele. Para o caminho de consumo recomendado com visão materializada (o arquivo só é confirmado depois que todo o pipeline de insert é concluído), definirfsync_after_insert = 1(efsync_part_directory = 1) na tabelaMergeTreede destino torna a parte inserida durável antes que o arquivo seja confirmado como processado, o que reduz substancialmente essa janela. Isso não se aplica aINSERT ... SELECTdireto comcommit_on_select = 1, em que o arquivo é confirmado ao final da leitura, antes que o sink de destino finalize sua última parte.
Introspecção
system.s3queue_metadata_cache e system.s3_queue_metadata e a tabela persistente system.s3queue_log.
- Use
system.s3queue_metadata_cachepara inspecionar o cache em memória do estado de processamento por arquivo (quais arquivos estão sendo processados no momento, foram processados ou falharam) no servidor local. - Use
system.s3_queue_metadatapara inspecionar diretamente o estado armazenado no Keeper: o número de nósprocessed,processingefailedpor objeto de metadados e, quando necessário, seus conteúdos. Isso é útil quando o cache em memória ainda não reflete o Keeper ou para consultar o estado compartilhado no cluster. - Use
system.s3queue_logpara o histórico persistente de arquivosprocessedefailed.
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.s3_queue_metadata. Esta tabela não é persistente e lê o estado diretamente do Keeper: o número de nósprocessed,processingefailedpor objeto de metadados e, sob demanda, seus conteúdos.
processed_nodes, processing_nodes, failed_nodes e processed_path emitem solicitações ao Keeper e são buscadas somente quando a coluna correspondente é selecionada; portanto, selecionar apenas os contadores *_nodes_count evita tráfego adicional com o Keeper.
system.s3_queue_metadata.
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: