Saltar al contenido principal
Este motor permite procesar archivos de registro de aplicaciones como un flujo de registros. FileLog le permite:
  • Suscribirse a archivos de registro.
  • Procesar nuevos registros a medida que se añaden a los archivos de registro a los que se haya suscrito.

Crear una tabla

CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster]
(
    name1 [type1] [DEFAULT|MATERIALIZED|ALIAS expr1],
    name2 [type2] [DEFAULT|MATERIALIZED|ALIAS expr2],
    ...
) ENGINE = FileLog('path_to_logs', 'format_name') SETTINGS
    [poll_timeout_ms = 0,]
    [poll_max_batch_size = 0,]
    [max_block_size = 0,]
    [max_threads = 0,]
    [poll_directory_watch_events_backoff_init = 500,]
    [poll_directory_watch_events_backoff_max = 32000,]
    [poll_directory_watch_events_backoff_factor = 2,]
    [handle_error_mode = 'default']
Argumentos del motor:
  • path_to_logs – Ruta de los archivos de registro a los que suscribirse. Puede ser la ruta a un directorio con archivos de registro o a un único archivo de registro. Tenga en cuenta que ClickHouse solo permite rutas dentro del directorio user_files.
  • format_name - Formato del registro. Tenga en cuenta que FileLog procesa cada línea de un archivo como un registro independiente y que no todos los formatos de datos son adecuados para ello.
Parámetros opcionales:
  • poll_timeout_ms - Tiempo de espera para una sola operación de sondeo del archivo de registro. Predeterminado: stream_poll_timeout_ms.
  • poll_max_batch_size — Número máximo de registros que se pueden sondear en una sola operación. Predeterminado: max_block_size.
  • max_block_size — Tamaño máximo del lote (en registros) para el sondeo. Predeterminado: max_insert_block_size.
  • max_threads - Número máximo de hilos para analizar archivos; el valor predeterminado es 0, lo que significa que el número será max(1, physical_cpu_cores / 4).
  • poll_directory_watch_events_backoff_init - Valor de espera inicial para el hilo de supervisión del directorio. Predeterminado: 500.
  • poll_directory_watch_events_backoff_max - Valor de espera máximo para el hilo de supervisión del directorio. Predeterminado: 32000.
  • poll_directory_watch_events_backoff_factor - Velocidad del backoff; de forma predeterminada, es exponencial. Predeterminado: 2.
  • handle_error_mode — Cómo gestionar los errores del motor FileLog. Valores posibles: default (se lanzará una excepción si no se puede analizar un mensaje), stream (el mensaje de excepción y el mensaje sin procesar se guardarán en las columnas virtuales _error y _raw_message).

Descripción

Los registros entregados se controlan automáticamente, de modo que cada registro de un archivo de registro solo se cuenta una vez. SELECT no resulta especialmente útil para leer registros (excepto para depuración), porque cada registro solo puede leerse una vez. Es más práctico crear flujos en tiempo real mediante vistas materializadas. Para ello:
  1. Use el motor para crear una tabla FileLog y considérela un flujo de datos.
  2. Cree una tabla con la estructura deseada.
  3. Cree una vista materializada que convierta los datos del motor y los inserte en una tabla creada previamente.
Cuando la MATERIALIZED VIEW se conecta al motor, comienza a recopilar datos en segundo plano. Esto le permite recibir continuamente registros de archivos de registro y convertirlos al formato requerido mediante SELECT. Una tabla FileLog puede tener tantas vistas materializadas como desee; no leen datos de la tabla directamente, sino que reciben nuevos registros (en bloques). De este modo, puede escribir en varias tablas con distintos niveles de detalle (con agrupación y agregación, y sin ellas). Ejemplo:
  CREATE TABLE logs (
    timestamp UInt64,
    level String,
    message String
  ) ENGINE = FileLog('user_files/my_app/app.log', 'JSONEachRow');

  CREATE TABLE daily (
    day Date,
    level String,
    total UInt64
  ) ENGINE = SummingMergeTree(day, (day, level), 8192);

  CREATE MATERIALIZED VIEW consumer TO daily
    AS SELECT toDate(toDateTime(timestamp)) AS day, level, count() AS total
    FROM queue GROUP BY day, level;

  SELECT level, sum(total) FROM daily GROUP BY level;
Para dejar de recibir datos de los streams o cambiar la lógica de conversión, desvincula la vista materializada:
  DETACH TABLE consumer;
  ATTACH TABLE consumer;
Si desea cambiar la tabla de destino con ALTER, le recomendamos deshabilitar la vista materializada para evitar discrepancias entre la tabla de destino y los datos de la vista.

Columnas virtuales

  • _filename - Nombre del archivo de registro. Tipo de dato: LowCardinality(String).
  • _offset - Desplazamiento en el archivo de registro. Tipo de dato: UInt64.
Columnas virtuales adicionales cuando handle_error_mode='stream':
  • _raw_record - Registro sin procesar que no pudo analizarse correctamente. Tipo de dato: Nullable(String).
  • _error - Mensaje de excepción que se produjo durante un análisis fallido. Tipo de dato: Nullable(String).
Nota: las columnas virtuales _raw_record y _error solo se rellenan en caso de excepción durante el análisis; siempre son NULL cuando el mensaje se analiza correctamente.
Última modificación el 10 de junio de 2026