Template
Ввод | Вывод | Псевдоним |
---|---|---|
✔ | ✔ |
Описание
Для случаев, когда вам требуется больше настроек, чем предлагают другие стандартные форматы,
формат Template
позволяет пользователю указать свою собственную строку формата с заполнителями для значений
и установить правила экранирования для данных.
Он использует следующие настройки:
Настройка | Описание |
---|---|
format_template_row | Указывает путь к файлу, который содержит строки формата для строк. |
format_template_resultset | Указывает путь к файлу, который содержит строки формата для строк |
format_template_rows_between_delimiter | Указывает разделитель между строками, который выводится (или ожидается) после каждой строки, кроме последней (\n по умолчанию) |
format_template_row_format | Указывает строку формата для строк встраиваемым образом. |
format_template_resultset_format | Указывает строку формата результирующего набора встраиваемым образом. |
Некоторые настройки других форматов (например, output_format_json_quote_64bit_integers , когда используется JSON экранирование) |
Настройки и правила экранирования
format_template_row
Настройка format_template_row
указывает путь к файлу, который содержит строки формата для строк со следующим синтаксисом:
Где:
Часть синтаксиса | Описание |
---|---|
delimiter_i | Разделитель между значениями (символ $ можно экранировать как $$ ) |
column_i | Имя или индекс колонки, значения которой нужно выбрать или вставить (если пусто, то колонка будет пропущена) |
serializeAs_i | Правило экранирования для значений колонки. |
Поддерживаются следующие правила экранирования:
Правило экранирования | Описание |
---|---|
CSV , JSON , XML | Похоже на форматы с теми же именами |
Escaped | Похоже на TSV |
Quoted | Похоже на Values |
Raw | Без экранирования, похоже на TSVRaw |
None | Без правила экранирования - см. примечание ниже |
Если правило экранирования пропущено, то будет использовано 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
(при установке крайних значений на 1).max
— это строка с максимальными значениями в форматеformat_template_row
(при установке крайних значений на 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
) для формата шаблона в директорию на всех узлах кластера.
Более того, формат может быть настолько тривиальным, что его не нужно помещать в файл.
Для этих случаев можно использовать format_template_row_format
(для format_template_row
) и format_template_resultset_format
(для format_template_resultset
), чтобы задать строку шаблона непосредственно в запросе,
вместо указания пути к файлу, который ее содержит.
Правила для строк формата и последовательностей экранирования такие же, как и для:
format_template_row
, когда используетсяformat_template_row_format
.format_template_resultset
, когда используетсяformat_template_resultset_format
.
Пример использования
Рассмотрим два примера того, как мы можем использовать формат Template
, сначала для выбора данных, а затем для вставки данных.
Выбор данных
Результат:
Вставка данных
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
.
Посмотрите на это! Мы избавились от необходимости вручную добавлять все эти |
s и -
s, чтобы создать эту таблицу markdown: