Перейти к основному содержанию
Часто приходится работать с данными в произвольных текстовых форматах. Это может быть нестандартный формат, некорректный JSON или повреждённый CSV. Стандартные парсеры, такие как CSV или JSON, подходят не для всех таких случаев. Но в ClickHouse для этого есть мощные форматы Template и Regex.

Импорт по шаблону

Предположим, что мы хотим импортировать данные из следующего файла журнала:
Мы можем использовать формат Template для импорта этих данных. Нужно определить строку шаблона с плейсхолдерами значений для каждой строки входных данных:
Создадим таблицу, в которую импортируем данные:
Чтобы импортировать данные с помощью указанного шаблона, нужно сохранить строку шаблона в файл (row.template в нашем случае):
Мы задаём имя столбца и правило экранирования в формате ${name:escaping}. Здесь доступно несколько вариантов, например CSV, JSON, Escaped или Quoted, для которых используются соответствующие правила экранирования. Теперь мы можем использовать этот файл как аргумент параметра format_template_row при импорте данных (обратите внимание: в конце файлов шаблона и данных не должно быть лишнего символа \n):
И можем убедиться, что данные были загружены в таблицу:

Пропуск пробелов

Можно использовать TemplateIgnoreSpaces, чтобы пропускать пробелы между разделителями в шаблоне:

Экспорт данных с использованием Template

Мы также можем экспортировать данные в любой текстовый формат с помощью Template. В этом случае нужно создать два файла: Шаблон результирующего набора, который задаёт структуру всего результирующего набора:
Здесь rows_read и time — системные метрики, доступные для каждого запроса. При этом data обозначает сгенерированные строки (${data} всегда должен идти первым плейсхолдером в этом файле), сформированные по шаблону, заданному в файле шаблона строки:
Теперь воспользуемся этими Template, чтобы экспортировать следующий запрос:

Экспорт в HTML-файлы

Результаты, сформированные по шаблону, также можно экспортировать в файлы с помощью конструкции INTO OUTFILE. Давайте сгенерируем HTML-файлы на основе заданных форматов resultset и row:

Экспорт в XML

Формат Template можно использовать для создания любых текстовых файлов, включая XML. Просто задайте подходящий шаблон и выполните экспорт. Также можно использовать формат XML, чтобы получить стандартный XML-вывод, включая метаданные:

Импорт данных с помощью регулярных выражений

Формат Regexp подходит для более сложных случаев, когда входные данные нужно разбирать более нетривиальным способом. Разберём наш файл error.log, но на этот раз извлечём имя файла и протокол, чтобы сохранить их в отдельные столбцы. Сначала подготовим для этого новую таблицу:
Теперь мы можем импортировать данные с помощью регулярного выражения:
ClickHouse вставит данные из каждой группы захвата в соответствующий столбец в порядке следования. Проверим данные:
По умолчанию ClickHouse выдаёт ошибку при наличии несовпавших строк. Если вы хотите вместо этого пропускать такие строки, включите параметр format_regexp_skip_unmatched:

Другие форматы

ClickHouse поддерживает множество форматов — как текстовых, так и двоичных — для самых разных сценариев и платформ. Подробнее о форматах и способах работы с ними читайте в следующих статьях: Также обратите внимание на clickhouse-local — это портативный полнофункциональный инструмент для работы с локальными и удалёнными файлами без необходимости запускать сервер ClickHouse.
Последнее изменение 19 июня 2026 г.