FileLog движок
Этот движок позволяет обрабатывать файлы журналов приложений в виде потока записей.
FileLog позволяет вам:
- Подписываться на файлы журналов.
- Обрабатывать новые записи по мере их добавления в подписанные файлы журналов.
Создание таблицы
Аргументы движка:
path_to_logs– Путь к файлам журналов, на которые нужно подписаться. Это может быть путь к директории с файлами журналов или к одному файлу журнала. Обратите внимание, что ClickHouse позволяет использовать только пути внутри директорииuser_files.format_name- Формат записи. Обратите внимание, что FileLog обрабатывает каждую строку в файле как отдельную запись, и не все форматы данных подходят для этого.
Дополнительные параметры:
poll_timeout_ms- Тайм-аут для одного опроса из файла журнала. По умолчанию: stream_poll_timeout_ms.poll_max_batch_size— Максимальное количество записей, которые могут быть опрошены за один раз. По умолчанию: max_block_size.max_block_size— Максимальный размер партии (в записях) для опроса. По умолчанию: max_insert_block_size.max_threads- Максимальное количество потоков для парсинга файлов, по умолчанию 0, что означает, что количество будет max(1, physical_cpu_cores / 4).poll_directory_watch_events_backoff_init- Начальное значение ожидания для потока наблюдения за директорией. По умолчанию:500.poll_directory_watch_events_backoff_max- Максимальное значение ожидания для потока наблюдения за директорией. По умолчанию:32000.poll_directory_watch_events_backoff_factor- Скорость отката, по умолчанию экспоненциальная. По умолчанию:2.handle_error_mode— Способ обработки ошибок для движка FileLog. Возможные значения: default (исключение будет выброшено, если не удалось разобрать сообщение), stream (сообщение об исключении и необработанное сообщение будут сохранены в виртуальных колонках_errorи_raw_message).
Описание
Доставленные записи отслеживаются автоматически, поэтому каждая запись в файле журнала учитывается только один раз.
SELECT не особенно полезен для чтения записей (за исключением отладки), поскольку каждая запись может быть прочитана только один раз. Более практично создавать потоки в реальном времени, используя материализованные представления. Для этого:
- Используйте движок для создания таблицы FileLog и рассматривайте ее как поток данных.
- Создайте таблицу с желаемой структурой.
- Создайте материализованное представление, которое преобразует данные из движка и помещает их в ранее созданную таблицу.
Когда MATERIALIZED VIEW подключается к движку, он начинает собирать данные в фоновом режиме. Это позволяет вам постоянно получать записи из файлов журналов и преобразовывать их в необходимый формат с помощью SELECT.
Одна таблица FileLog может иметь столько материализованных представлений, сколько вы хотите, они не читают данные напрямую из таблицы, а получают новые записи (пакетами), таким образом вы можете записывать в несколько таблиц с разным уровнем детализации (с группировкой - агрегацией и без).
Пример:
Чтобы прекратить получение данных потоков или изменить логику преобразования, отсоедините материализованное представление:
Если вы хотите изменить целевую таблицу с помощью ALTER, мы рекомендуем отключить материализованное представление, чтобы избежать несоответствий между целевой таблицей и данными из представления.
Виртуальные колонки
_filename- Имя файла журнала. Тип данных:LowCardinality(String)._offset- Смещение в файле журнала. Тип данных:UInt64.
Дополнительные виртуальные колонки при handle_error_mode='stream':
_raw_record- Необработанная запись, которую не удалось успешно разобрать. Тип данных:Nullable(String)._error- Сообщение об исключении, возникшем во время неудачного разбора. Тип данных:Nullable(String).
Примечание: виртуальные колонки _raw_record и _error заполняются только в случае возникновения исключения во время разбора, они всегда равны NULL, когда сообщение было успешно разобрано.