Skip to main content

Descripción

Para los casos en que necesite más opciones de personalización de las que ofrecen otros formatos estándar, el formato Template permite al usuario especificar su propia cadena de formato personalizada con marcadores de posición para los valores y definir reglas de escape para los datos. Utiliza los siguientes ajustes:

Configuración y reglas de escape

format_template_row

La configuración format_template_row especifica la ruta del archivo que contiene cadenas de formato para las filas, con la siguiente sintaxis:
Donde: Se admiten las siguientes reglas de escape:
Si se omite una regla de escape, se usará None. XML es adecuado solo para la salida.
Veamos un ejemplo. Dada la siguiente cadena de formato:
Se imprimirán (si se usa SELECT) o se esperarán (si se usa INPUT) los siguientes valores, entre los delimitadores de columna Search phrase:, , count:, , ad price: $ y ;, respectivamente:
  • s (con la regla de escape Quoted)
  • c (con la regla de escape Escaped)
  • p (con la regla de escape JSON)
Por ejemplo:
  • Si se hace INSERT, la línea de abajo coincide con la plantilla esperada y leería los valores bathroom interior design, 2166, $3 en las columnas Search phrase, count, ad price.
  • Si se hace SELECT, la línea de abajo es la salida, suponiendo que los valores bathroom interior design, 2166, $3 ya están almacenados en una tabla en las columnas Search phrase, count, ad price.

format_template_rows_between_delimiter

La configuración format_template_rows_between_delimiter especifica el delimitador entre filas, que se imprime (o se espera) después de cada fila, excepto la última (\n de forma predeterminada)

format_template_resultset

La configuración format_template_resultset especifica la ruta del archivo que contiene una cadena de formato para el conjunto de resultados. La cadena de formato del conjunto de resultados tiene la misma sintaxis que una cadena de formato para las filas. Permite especificar un prefijo, un sufijo y una forma de imprimir información adicional, y contiene los siguientes marcadores de posición en lugar de nombres de columna:
  • data son las filas con datos en formato format_template_row, separadas por format_template_rows_between_delimiter. Este marcador de posición debe ser el primero de la cadena de formato.
  • totals es la fila con los valores totales en formato format_template_row (cuando se usa WITH TOTALS).
  • min es la fila con los valores mínimos en formato format_template_row (cuando extremes está establecido en 1).
  • max es la fila con los valores máximos en formato format_template_row (cuando extremes está establecido en 1).
  • rows es el número total de filas de salida.
  • rows_before_limit es el número mínimo de filas que habría habido sin LIMIT. Solo se genera salida si la consulta contiene LIMIT. Si la consulta contiene GROUP BY, rows_before_limit_at_least es el número exacto de filas que habría habido sin LIMIT.
  • time es el tiempo de ejecución de la solicitud en segundos.
  • rows_read es el número de filas leídas.
  • bytes_read es el número de bytes (sin comprimir) leídos.
Los marcadores de posición data, totals, min y max no deben tener una regla de escape especificada (o debe especificarse None explícitamente). Los demás marcadores de posición pueden tener cualquier regla de escape.
Si la configuración format_template_resultset es una cadena vacía, ${data} se usa como valor predeterminado.
En las consultas INSERT, el formato permite omitir algunas columnas o campos si hay un prefijo o un sufijo (consulta el ejemplo).

Especificación en línea

A menudo resulta difícil, o incluso imposible, implementar las configuraciones de formato (definidas por format_template_row, format_template_resultset) para el formato Template en un directorio de todos los nodos de un clúster. Además, el formato puede ser tan simple que no sea necesario colocarlo en un archivo. En estos casos, format_template_row_format (para format_template_row) y format_template_resultset_format (para format_template_resultset) pueden usarse para establecer la cadena de plantilla directamente en la consulta, en lugar de especificarla como la ruta al archivo que la contiene.
Las reglas para las cadenas de formato y las secuencias de escape son las mismas que las de:

Ejemplo de uso

Veamos dos ejemplos de cómo podemos usar el formato Template: primero para seleccionar datos y luego para insertarlos.

Consultar datos

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

Insertar datos

/some/path/resultset.format
/some/path/row.format
PageViews, UserID, Duration y Sign dentro de los marcadores de posición son nombres de columnas de la tabla. Se ignorarán los valores que aparezcan después de Useless field en las filas y después de \nTotal rows: en el sufijo. Todos los delimitadores de los datos de entrada deben coincidir exactamente con los delimitadores de las cadenas de formato especificadas.

Especificación en línea

¿Cansado de dar formato manualmente a tablas de Markdown? En este ejemplo veremos cómo usar el formato Template y la configuración de especificación en línea para realizar una tarea sencilla: hacer SELECT de los nombres de algunos formatos de ClickHouse de la tabla system.formats y darles formato como una tabla de Markdown. Esto se puede lograr fácilmente con el formato Template y la configuración format_template_row_format y format_template_resultset_format. En ejemplos anteriores especificamos las cadenas de formato del conjunto de resultados y de las filas en archivos separados, con las rutas a esos archivos indicadas mediante la configuración format_template_resultset y format_template_row, respectivamente. Aquí lo haremos en línea porque nuestra plantilla es trivial: solo contiene unos pocos | y - para crear la tabla de Markdown. Especificaremos la cadena de plantilla del conjunto de resultados con la configuración format_template_resultset_format. Para crear el encabezado de la tabla, hemos añadido |ClickHouse Formats|\n|---|\n antes de ${data}. Usamos la configuración format_template_row_format para especificar la cadena de plantilla |`{0:XML}`| para nuestras filas. El formato Template insertará nuestras filas con el formato indicado en el marcador ${data}. En este ejemplo solo tenemos una columna, pero si quisiera añadir más, podría hacerlo agregando {1:XML}, {2:XML}… etc. a la cadena de plantilla de fila y eligiendo la regla de escape según corresponda. En este ejemplo hemos optado por la regla de escape XML.
Query
¡Fíjate! Nos hemos ahorrado la molestia de tener que añadir manualmente todos esos | y - para crear esa tabla en markdown:
Response