Импорт и экспорт пользовательских текстовых данных с использованием Шаблонов и Регулярных выражений в ClickHouse
Мы часто имеем дело с данными в пользовательских текстовых форматах. Это может быть нестандартный формат, некорректный JSON или поврежденный CSV. Использование стандартных парсеров, таких как CSV или JSON, не всегда работает в таких случаях. Но ClickHouse предлагает нам мощные форматы Шаблонов и Регулярных выражений.
Импорт на основе шаблона
Предположим, мы хотим импортировать данные из следующего файла журнала:
Мы можем использовать формат Template для импорта этих данных. Мы должны определить шаблон строки с заполнителями значений для каждой строки входных данных:
Давайте создадим таблицу, в которую будем импортировать наши данные:
Чтобы импортировать данные с использованием заданного шаблона, мы должны сохранить нашу строку шаблона в файле (row.template в нашем случае):
Мы определяем имя колонки и правило экранирования в формате ${name:escaping}
. Здесь доступны несколько опций, таких как CSV, JSON, Escaped или Quoted, которые реализуют соответствующие правила экранирования.
Теперь мы можем использовать данный файл как аргумент для параметра настроек format_template_row
при импорте данных (обратите внимание, что шаблон и файлы данных не должны иметь дополнительного символа \n
в конце файла):
И мы можем убедиться, что наши данные были загружены в таблицу:
Пропуск пробелов
Рекомендуется использовать TemplateIgnoreSpaces, который позволяет пропускать пробелы между разделителями в шаблоне:
Экспорт данных с использованием шаблонов
Мы также можем экспортировать данные в любой текстовый формат, используя шаблоны. В этом случае мы должны создать два файла:
Шаблон результирующего набора, который определяет макет для всего результирующего набора:
Здесь rows_read
и time
— это системные метрики, доступные для каждого запроса. В то время как data
представляет собой сгенерированные строки (${data}
всегда должен быть первым заполнителем в этом файле), основанный на шаблоне, определенном в файле шаблона строк:
Теперь давайте используем эти шаблоны для экспорта следующего запроса:
Экспорт в HTML файлы
Результаты на основе шаблона также могут быть экспортированы в файлы с использованием оператора INTO OUTFILE
. Давайте сгенерируем HTML файлы на основе заданных результатов и строк форматов:
Экспорт в XML
Формат шаблона может быть использован для генерации всех мыслимых текстовых файлов формата, включая XML. Просто установите соответствующий шаблон и выполните экспорт.
Также рассмотрите возможность использования формата XML для получения стандартных XML результатов, включая метаданные:
Импорт данных на основе регулярных выражений
Формат Regexp охватывает более сложные случаи, когда входные данные необходимо парсить более сложным способом. Давайте разберем наш пример файла error.log, но на этот раз захватим имя файла и протокол, чтобы сохранить их в отдельных колонках. Сначала давайте подготовим новую таблицу для этого:
Теперь мы можем импортировать данные на основе регулярного выражения:
ClickHouse вставит данные из каждой захваченной группы в соответствующую колонку в зависимости от ее порядка. Давайте проверим данные:
По умолчанию ClickHouse выдаст ошибку в случае несовпадения строк. Если вы хотите пропустить несовпадающие строки, включите эту опцию с помощью параметра format_regexp_skip_unmatched:
Другие форматы
ClickHouse поддерживает множество форматов, как текстовых, так и бинарных, чтобы охватить различные сценарии и платформы. Изучите больше форматов и способы работы с ними в следующих статьях:
- Форматы CSV и TSV
- Parquet
- Форматы JSON
- Regex и шаблоны
- Нативные и бинарные форматы
- SQL форматы
Также проверьте clickhouse-local - переносимый полнофункциональный инструмент для работы с локальными/удаленными файлами без необходимости в сервере ClickHouse.