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_preserve_path
true, la ruta completa del objeto de origen se añade a after_processing_move_prefix al mover un archivo procesado correctamente, de modo que se conserve en el destino la estructura de directorios de origen dentro del bucket. Si es false, solo se usa el nombre del archivo y la estructura de directorios de origen se aplana.
Valores posibles:
true/false.
false.
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 no negativo.
10.
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_queue_log
system.s3queue_log.
Valor predeterminado: 1.
polling_min_timeout_ms
- Entero positivo.
1000.
polling_max_timeout_ms
- Entero positivo.
600000.
polling_backoff_ms
- Entero positivo.
30000.
tracked_files_limit
- Entero positivo.
1000.
tracked_file_ttl_sec
- Entero positivo.
0.
cleanup_interval_min_ms
60000.
cleanup_interval_max_ms
60000.
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
use_persistent_processing_nodes = 0 sigue usándolos, y la introspección de configuración, incluido SHOW CREATE TABLE, muestra 1 independientemente del valor proporcionado.
persistent_processing_node_ttl_seconds
Ordered, que puede mantenerse durante más tiempo que un único nodo de procesamiento, por lo que el valor también debe tener esto en cuenta.
Valor predeterminado: 21600 (6 horas).
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 se evita mediante nodos de procesamiento persistentes, disponibles desde la versión 25.8 y que ahora siempre se utilizan (consulteuse_persistent_processing_nodes). - 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. -
Pérdida de filas en caso de corte de alimentación a nivel de dispositivo en el nodo de ClickHouse. Un archivo consumido se registra como procesado en Keeper (y su objeto de origen se elimina cuando
after_processing = 'delete') en cuanto finaliza la inserción, pero las filas insertadas solo son duraderas una vez que se ha ejecutado fsync en la parte de destino, lo cual no ocurre de forma síncrona de manera predeterminada (fsync_after_insert = 0). Keeper se sincroniza forzosamente y normalmente se ejecuta en un nodo independiente, por lo que sobrevive a la pérdida de alimentación de este nodo. Si el nodo pierde alimentación después de que el archivo se confirme como procesado, pero antes de que se ejecute fsync en la parte de destino, el archivo no se vuelve a leer al reiniciar y sus filas se pierden (no se pueden recuperar conafter_processing = 'delete'). La finalización normal de un proceso no expone este problema, porque la caché de páginas sobrevive. Para la ruta de consumo recomendada mediante vistas materializadas (el archivo se confirma solo después de que finalice toda la canalización de inserción), establecerfsync_after_insert = 1(yfsync_part_directory = 1) en la tablaMergeTreede destino garantiza la durabilidad de la parte insertada antes de que el archivo se confirme como procesado, lo que reduce considerablemente esta ventana. Esto no se aplica aINSERT ... SELECTdirecto concommit_on_select = 1, donde el archivo se confirma al final de la lectura antes de que el destino finalice su última parte.
Introspección
system.s3queue_metadata_cache y system.s3_queue_metadata, y la tabla persistente system.s3queue_log.
- Use
system.s3queue_metadata_cachepara inspeccionar la caché en memoria del estado de procesamiento de cada archivo (qué archivos se están procesando actualmente y cuáles se han procesado o han fallado) en el servidor local. - Use
system.s3_queue_metadatapara inspeccionar directamente el estado almacenado en Keeper: el número de nodosprocessed,processingyfailedpor objeto de metadatos y, bajo demanda, su contenido. Esto resulta útil cuando la caché en memoria aún no refleja Keeper o para consultar el estado compartido en todo el clúster. - Use
system.s3queue_logpara consultar el historial persistente de archivosprocessedyfailed.
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.s3_queue_metadata. Esta tabla no es persistente y lee el estado directamente de Keeper: el número de nodosprocessed,processingyfailedpor objeto de metadatos y, bajo demanda, su contenido.
processed_nodes, processing_nodes, failed_nodes y processed_path emiten solicitudes a Keeper y solo se recuperan cuando se selecciona la columna correspondiente, por lo que seleccionar únicamente los contadores *_nodes_count evita el tráfico adicional a Keeper.
system.s3_queue_metadata.
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: