Skip to main content

Описание

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

Настройки и правила экранирования

format_template_row

Параметр format_template_row задает путь к файлу, содержащему строки формата для строк в следующем синтаксисе:
Где: Поддерживаются следующие правила экранирования:
Если правило экранирования не указано, используется None. XML подходит только для вывода.
Рассмотрим пример. Пусть задана следующая строка формата:
Следующие значения будут выводиться (при использовании SELECT) или ожидаться (при использовании INPUT) между разделителями Search phrase:, , count:, , ad price: $ и ;, соответствующими столбцам:
  • s (с правилом экранирования Quoted)
  • c (с правилом экранирования Escaped)
  • p (с правилом экранирования JSON)
Например:
  • При выполнении INSERT строка ниже соответствует ожидаемому шаблону, и из неё будут считаны значения bathroom interior design, 2166, $3 в столбцы Search phrase, count, ad price.
  • При выполнении SELECT строка ниже будет выведена, если значения bathroom interior design, 2166, $3 уже хранятся в таблице в столбцах Search phrase, count, ad price.

format_template_rows_between_delimiter

Параметр format_template_rows_between_delimiter задает разделитель между строками, который выводится (или ожидается) после каждой строки, кроме последней (\n по умолчанию)

format_template_resultset

Настройка format_template_resultset задаёт путь к файлу, содержащему строку формата для результирующего набора. Строка формата для результирующего набора имеет тот же синтаксис, что и строка формата для строк. Она позволяет задать префикс, суффикс и способ вывода дополнительной информации, а вместо имён столбцов содержит следующие плейсхолдеры:
  • data — строки с данными в формате format_template_row, разделённые format_template_rows_between_delimiter. Этот плейсхолдер должен быть первым в строке формата.
  • totals — строка с итоговыми значениями в формате format_template_row (при использовании WITH TOTALS).
  • min — строка с минимальными значениями в формате format_template_row (когда extremes установлено в 1).
  • max — строка с максимальными значениями в формате format_template_row (когда extremes установлено в 1).
  • rows — общее количество строк на выходе.
  • rows_before_limit — минимальное количество строк, которое было бы без LIMIT. Выводится только если запрос содержит LIMIT. Если запрос содержит GROUP BY, rows_before_limit_at_least — это точное количество строк, которое было бы без LIMIT.
  • time — время выполнения запроса в секундах.
  • rows_read — количество прочитанных строк.
  • bytes_read — количество прочитанных байтов (в несжатом виде).
Для плейсхолдеров data, totals, min и max правило экранирования указывать нельзя (или нужно явно указать None). Для остальных плейсхолдеров можно указать любое правило экранирования.
Если настройка format_template_resultset — пустая строка, в качестве значения по умолчанию используется ${data}.
Формат запросов вставки позволяет пропускать некоторые столбцы или поля при наличии префикса или суффикса (см. пример).

Встроенная спецификация

Зачастую развернуть конфигурации формата (задаваемые через format_template_row, format_template_resultset) для формата Template в каталоге на всех узлах кластера затруднительно или невозможно. Кроме того, формат может быть настолько простым, что его не нужно помещать в файл. В таких случаях format_template_row_format (для format_template_row) и format_template_resultset_format (для format_template_resultset) можно использовать, чтобы задать строку шаблона непосредственно в запросе, а не в виде пути к файлу, в котором она находится.
Правила для строк формата и escape-последовательностей такие же, как и для:

Пример использования

Рассмотрим два примера использования формата Template: сначала для выборки данных, а затем для их вставки.

Выборка данных

Query
/some/path/resultset.format
/some/path/row.format
Response

Вставка данных

/some/path/resultset.format
/some/path/row.format
PageViews, UserID, Duration и Sign внутри плейсхолдеров — это имена столбцов в таблице. Значения после Useless field в строках и после \nTotal rows: в суффиксе будут игнорироваться. Все разделители во входных данных должны в точности совпадать с разделителями в указанных строках формата.

Встроенная спецификация

Устали вручную оформлять таблицы в Markdown? В этом примере мы рассмотрим, как с помощью формата Template и настроек встроенной спецификации решить простую задачу: выполнить SELECT имён некоторых форматов ClickHouse из таблицы system.formats и вывести их в виде таблицы Markdown. Это легко сделать с помощью формата Template и настроек format_template_row_format и format_template_resultset_format. В предыдущих примерах мы задавали строки формата для результирующего набора и строк в отдельных файлах, а пути к этим файлам указывали с помощью настроек format_template_resultset и format_template_row соответственно. Здесь мы зададим их встроенно, потому что наш шаблон очень простой и состоит лишь из нескольких символов | и -, формирующих таблицу Markdown. Строку шаблона для результирующего набора мы укажем с помощью настройки format_template_resultset_format. Чтобы добавить заголовок таблицы, мы поместили |ClickHouse Formats|\n|---|\n перед ${data}. Для строк мы используем настройку format_template_row_format, задавая строку шаблона |`{0:XML}`|. Формат Template подставит наши строки в указанном формате в плейсхолдер ${data}. В этом примере у нас только один столбец, но при необходимости можно добавить и другие, включив в строку шаблона строки {1:XML}, {2:XML} и т. д. и выбрав подходящее правило экранирования. В этом примере мы используем правило экранирования XML.
Query
Только посмотрите! Нам не пришлось вручную добавлять все эти | и -, чтобы создать эту таблицу в Markdown:
Response
Последнее изменение 23 июля 2026 г.