Saltar al contenido principal
ClickHouse permite enviar a un servidor los datos necesarios para procesar una consulta, junto con una consulta SELECT. Estos datos se colocan en una tabla temporal (consulte la sección “Tablas temporales”) y pueden usarse en la consulta (por ejemplo, en operadores IN). Por ejemplo, si tiene un archivo de texto con identificadores de usuario importantes, puede cargarlo en el servidor junto con una consulta que filtre según esa lista. Si necesita ejecutar más de una consulta con un gran volumen de datos externos, no use esta funcionalidad. Es mejor cargar los datos en la DB con antelación. Los datos externos pueden cargarse mediante el cliente de línea de comandos (en modo no interactivo) o mediante la interfaz HTTP. En el cliente de línea de comandos, puede especificar una sección de parámetros con el formato
--external --file=... [--name=...] [--format=...] [--types=...|--structure=...]
Puede haber varias secciones como esta, según la cantidad de tablas que se estén transmitiendo. –external – Marca el inicio de una cláusula. –file – Ruta al archivo con el volcado de la tabla, o -, que hace referencia a stdin. Solo se puede leer una tabla desde stdin. Los siguientes parámetros son opcionales: –name– Nombre de la tabla. Si se omite, se usa _data. –format – Formato de los datos en el archivo. Si se omite, se usa TabSeparated. Se requiere uno de los siguientes parámetros:–types – Una lista de tipos de columna separados por comas. Por ejemplo: UInt64,String. Las columnas se llamarán _1, _2, … –structure– La estructura de la tabla en el formatoUserID UInt64, URL String. Define los nombres y tipos de las columnas. Los archivos especificados en ‘file’ se analizarán con el formato especificado en ‘format’, usando los tipos de datos especificados en ‘types’ o ‘structure’. La tabla se cargará en el servidor y allí estará disponible como tabla temporal con el nombre indicado en ‘name’. Ejemplos:
$ echo -ne "1\n2\n3\n" | clickhouse-client --query="SELECT count() FROM test.visits WHERE TraficSourceID IN _data" --external --file=- --types=Int8
849897
$ cat /etc/passwd | sed 's/:/\t/g' | clickhouse-client --query="SELECT shell, count() AS c FROM passwd GROUP BY shell ORDER BY c DESC" --external --file=- --name=passwd --structure='login String, unused String, uid UInt16, gid UInt16, comment String, home String, shell String'
/bin/sh 20
/bin/false      5
/bin/bash       4
/usr/sbin/nologin       1
/bin/sync       1
Al usar la interfaz HTTP, los datos externos se envían en formato multipart/form-data. Cada tabla se transmite como un archivo independiente. El nombre de la tabla se toma del nombre del archivo. A query_string se le pasan los parámetros name_format, name_types y name_structure, donde name es el nombre de la tabla a la que corresponden estos parámetros. El significado de estos parámetros es el mismo que al usar el cliente de línea de comandos. Ejemplo:
$ cat /etc/passwd | sed 's/:/\t/g' > passwd.tsv

$ curl -F 'passwd=@passwd.tsv;' 'http://localhost:8123/?query=SELECT+shell,+count()+AS+c+FROM+passwd+GROUP+BY+shell+ORDER+BY+c+DESC&passwd_structure=login+String,+unused+String,+uid+UInt16,+gid+UInt16,+comment+String,+home+String,+shell+String'
/bin/sh 20
/bin/false      5
/bin/bash       4
/usr/sbin/nologin       1
/bin/sync       1
En el procesamiento distribuido de consultas, las tablas temporales se envían a todos los servidores remotos.
Última modificación el 10 de junio de 2026