MATERIALIZED VIEW al motor, el motor de tabla S3Queue comienza a recopilar datos en segundo plano.
CREATE table
S3Queue son los mismos que admite el motor de tabla S3. Consulte la sección de parámetros aquí.
Ejemplo
Configuración
system.s3_queue_settings. Disponible a partir de la versión 24.10.
Nombres de configuración (24.7+)A partir de la versión 24.7, la configuración de S3Queue puede especificarse con o sin el prefijo
s3queue_:- Sintaxis moderna (24.7+):
processing_threads_num,tracked_file_ttl_sec, etc. - Sintaxis heredada (todas las versiones):
s3queue_processing_threads_num,s3queue_tracked_file_ttl_sec, etc.
Modo
- unordered — En el modo no ordenado, el conjunto de todos los archivos ya procesados se registra mediante nodos persistentes en ZooKeeper.
- ordered — En el modo ordenado, los archivos se procesan en orden lexicográfico. Esto significa que, si en algún momento se procesó un archivo llamado ‘BBB’ y más tarde se agrega al bucket un archivo llamado ‘AA’, este se ignorará. En ZooKeeper solo se almacenan el nombre máximo (en sentido lexicográfico) del archivo consumido correctamente y los nombres de los archivos que se volverán a intentar tras un intento de carga fallido.
ordered en las versiones anteriores a la 24.6. A partir de la 24.6, no hay valor predeterminado; la configuración pasa a ser obligatoria y debe especificarse manualmente. En las tablas creadas en versiones anteriores, el valor predeterminado seguirá siendo Ordered por compatibilidad.
after_processing
- keep.
- delete.
- move.
- tag.
keep.
move requiere configuración adicional. En caso de moverlo dentro del mismo bucket, se debe proporcionar un nuevo prefijo de ruta como after_processing_move_prefix.
Para moverlo a otro bucket de S3, se requiere el URI del bucket de destino como after_processing_move_uri y las credenciales de S3 como after_processing_move_access_key_id y after_processing_move_secret_access_key.
Ejemplo:
after_processing_move_connection_string y el nombre del contenedor como after_processing_move_container. Consulte la configuración de AzureQueue.
El etiquetado requiere la clave y el valor de la etiqueta, proporcionados como after_processing_tag_key y after_processing_tag_value.
after_processing_retries
- Entero no 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'.
Posibles valores:
- String.
after_processing_tag_value
after_processing='tag'.
Valores posibles:
- String.
keeper_path
s3queue_default_zookeeper_path, el UUID de la base de datos y el UUID de la tabla. Los valores absolutos (que empiezan por /) se usan tal como se proporcionan, mientras que los valores relativos se agregan al prefijo configurado. Las macros como {database} o {uuid} se expanden antes de que el motor se conecte a ZooKeeper.
Para apuntar a un clúster de ZooKeeper auxiliar, anteponga al valor el nombre configurado, por ejemplo analytics_keeper:/clickhouse/queue/orders. El nombre debe existir en <auxiliary_zookeepers>; de lo contrario, el motor informa Unknown auxiliary ZooKeeper name .... La cadena completa (incluido el prefijo) se conserva en SHOW CREATE TABLE para que la instrucción pueda replicarse literalmente.
Posibles valores:
- String.
/.
loading_retries
- Entero positivo.
0.
processing_threads_num
Unordered.
Valor predeterminado: número de CPU o 16.
parallel_inserts
processing_threads_num generará un INSERT, por lo que solo descargará archivos y los analizará en varios hilos.
Pero esto limita el paralelismo, así que, para obtener un mayor rendimiento, use parallel_inserts=true; esto permitirá insertar datos en paralelo (pero tenga en cuenta que dará lugar a un mayor número de partes de datos generadas para la familia MergeTree).
Los
INSERT se generarán de acuerdo con la configuración de max_process*_before_commit.false.
enable_logging_to_s3queue_log
system.s3queue_log.
Valor predeterminado: 0.
polling_min_timeout_ms
- Entero positivo.
1000.
polling_max_timeout_ms
- Entero positivo.
10000.
polling_backoff_ms
- Entero positivo.
0.
tracked_files_limit
- Entero positivo.
1000.
tracked_file_ttl_sec
- Entero positivo.
0.
cleanup_interval_min_ms
10000.
cleanup_interval_max_ms
30000.
buckets
24.6. Si hay varias réplicas de la tabla S3Queue y cada una trabaja con el mismo directorio de metadatos en Keeper, el valor de buckets debe ser como mínimo igual al número de réplicas. Si también se usa la configuración processing_threads, conviene aumentar aún más el valor de la configuración buckets, ya que define el paralelismo real del procesamiento de S3Queue.
use_persistent_processing_nodes
persistent_processing_nodes_ttl_seconds
use_persistent_processing_nodes está habilitado, queden nodos de procesamiento sin eliminar. Esta configuración define un período de tiempo durante el cual estos nodos de procesamiento pueden eliminarse de forma segura.
Valor predeterminado: 3600 (1 hora).
Ajustes relacionados con S3
Acceso basado en roles de S3
roleARN mediante el parámetro extra_credentials, como se muestra a continuación:
Modo ordenado de S3Queue
S3Queue permite almacenar menos metadatos en ZooKeeper, pero tiene la limitación de que los archivos añadidos más tarde deben tener nombres alfanuméricamente mayores.
El modo ordered de S3Queue, al igual que unordered, admite la configuración (s3queue_)processing_threads_num (el prefijo s3queue_ es opcional), que permite controlar el número de hilos que procesarán localmente en el server los archivos de S3.
Para el modo ordered sin particionado, ClickHouse puede reanudar el listado de S3 desde la última clave procesada para evitar volver a listar todo el historial del prefijo. En el modo ordenado con buckets, el punto de reanudación se elige de forma conservadora como la menor clave procesada entre todos los buckets para evitar omitir archivos sin procesar.
Esta optimización de reanudación del listado se usa solo para colas respaldadas por S3 en modo ordenado sin particionado (no para AzureQueue ni cuando se establece partitioning_mode).
Además, el modo ordered también introduce otra configuración llamada (s3queue_)buckets, que significa “hilos lógicos”. Esto significa que, en un escenario distribuido con varios servers que tienen réplicas de la table S3Queue, esta configuración define el número de unidades de procesamiento. Por ejemplo, cada hilo de procesamiento en cada réplica de S3Queue intentará bloquear un bucket determinado para procesarlo; cada bucket se asigna a ciertos archivos mediante el hash del nombre del archivo. Por lo tanto, en un escenario distribuido se recomienda encarecidamente que la configuración (s3queue_)buckets sea al menos igual al número de réplicas, o mayor. No hay inconveniente en que el número de buckets sea mayor que el número de réplicas. El escenario más óptimo sería que la configuración (s3queue_)buckets fuera igual al producto de number_of_replicas y (s3queue_)processing_threads_num.
No se recomienda usar la configuración (s3queue_)processing_threads_num antes de la versión 24.6.
La configuración (s3queue_)buckets está disponible a partir de la versión 24.6.
SELECT en el motor de tabla S3Queue
stream_like_engine_allow_direct_select en True.
El motor S3Queue tiene un ajuste especial para las consultas SELECT: commit_on_select. Establécelo en False para conservar los datos en la cola después de leerlos, o en True para eliminarlos.
Descripción
SELECT no es especialmente útil para la importación en streaming (excepto para depuración), porque cada archivo solo puede importarse una vez. Es más práctico crear procesos en tiempo real usando vistas materializadas. Para ello:
- Use el motor para crear una tabla que consuma desde la ruta especificada en S3 y trátela como un flujo de datos.
- Cree una tabla con la estructura deseada.
- Cree una vista materializada que convierta los datos del motor y los inserte en una tabla creada previamente.
MATERIALIZED VIEW se conecta al motor, empieza a recopilar datos en segundo plano.
Ejemplo:
Columnas virtuales
_path— Ruta del archivo._file— Nombre del archivo._size— Tamaño del archivo._time— Hora de creación del archivo.
Comodines en la ruta
path puede especificar varios archivos usando comodines similares a los de bash. Para que un archivo se procese, debe existir y coincidir con el patrón completo de la ruta. La lista de archivos se determina durante SELECT (no en el momento de CREATE).
*— Sustituye cualquier cantidad de caracteres, excepto/, incluida la cadena vacía.**— Sustituye cualquier cantidad de caracteres, incluido/, incluida la cadena vacía.?— Sustituye cualquier carácter individual.{some_string,another_string,yet_another_one}— Sustituye cualquiera de las cadenas'some_string', 'another_string', 'yet_another_one'.{N..M}— Sustituye cualquier número dentro del rango de N a M, incluidos ambos extremos. N y M pueden tener ceros a la izquierda; por ejemplo,000..078.
{} son similares a la función de tabla remote.
Limitaciones
- Las filas duplicadas pueden producirse como resultado de:
-
una excepción durante el análisis sintáctico en mitad del procesamiento del archivo y que los reintentos estén habilitados mediante
s3queue_loading_retries; -
que
S3Queueesté configurado en varios servidores que apunten a la misma ruta en ZooKeeper y que la sesión de Keeper expire antes de que uno de los servidores consiga confirmar el archivo procesado, lo que podría hacer que otro servidor asuma el procesamiento del archivo, que podría haber sido procesado parcial o totalmente por el primer servidor; sin embargo, esto ya no ocurre a partir de la versión 25.8 siuse_persistent_processing_nodes = 1. - terminación anómala del servidor.
- Si
S3Queueestá configurado en varios servidores que apuntan a la misma ruta en ZooKeeper y se usa el modoOrdered,s3queue_loading_retriesno funcionará. Esto se corregirá pronto.
Introspección
system.s3queue_metadata_cache y la tabla persistente system.s3queue_log.
system.s3queue_metadata_cache. Esta tabla no es persistente y muestra el estado en memoria deS3Queue: qué archivos se están procesando actualmente y cuáles ya se procesaron o fallaron.
system.s3queue_log. Tabla persistente. Contiene la misma información quesystem.s3queue_metadata_cache, pero para los archivosprocessedyfailed.
system.s3queue_log, defina su configuración en el archivo de configuración del servidor: