Описание
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-последовательностей такие же, как и для:
format_template_rowпри использованииformat_template_row_format.format_template_resultsetпри использованииformat_template_resultset_format.
Пример использования
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: в суффиксе будут игнорироваться.
Все разделители во входных данных должны в точности совпадать с разделителями в указанных строках формата.
Встроенная спецификация
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