Pular para o conteúdo principal
O ClickHouse permite enviar ao servidor os dados necessários para o processamento de uma consulta, junto com uma consulta SELECT. Esses dados são colocados em uma tabela temporária (consulte a seção “Tabelas temporárias”) e podem ser usados na consulta (por exemplo, em operadores IN). Por exemplo, se você tiver um arquivo de texto com identificadores importantes de usuários, poderá enviá-lo ao servidor junto com uma consulta que faz filtragem com base nessa lista. Se você precisar executar mais de uma consulta com um grande volume de dados externos, não use esse recurso. É melhor carregar os dados no DB com antecedência. Os dados externos podem ser carregados usando o cliente de linha de comando (no modo não interativo) ou a interface HTTP. No cliente de linha de comando, você pode especificar uma seção de parâmetros no formato
--external --file=... [--name=...] [--format=...] [--types=...|--structure=...]
Você pode ter várias seções como esta, de acordo com o número de tabelas que estão sendo transmitidas. –external – Marca o início de uma cláusula. –file – Caminho para o arquivo com o dump da tabela, ou -, que se refere à stdin. Só é possível recuperar uma única tabela da stdin. Os parâmetros a seguir são opcionais: –name– Nome da tabela. Se omitido, _data é usado. –format – Formato dos dados no arquivo. Se omitido, TabSeparated é usado. Um dos parâmetros a seguir é obrigatório:–types – Uma lista de tipos de coluna separados por vírgula. Por exemplo: UInt64,String. As colunas serão nomeadas como _1, _2, … –structure– A estrutura da tabela no formatoUserID UInt64, URL String. Define os nomes e os tipos das colunas. Os arquivos especificados em ‘file’ serão processados no formato especificado em ‘format’, usando os tipos de dados especificados em ‘types’ ou ‘structure’. A tabela será enviada ao servidor e ficará acessível nele como uma tabela temporária com o nome definido em ‘name’. Exemplos:
$ 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
Ao usar a interface HTTP, os dados externos são enviados no formato multipart/form-data. Cada tabela é transmitida como um arquivo separado. O nome da tabela é obtido a partir do nome do arquivo. Os parâmetros name_format, name_types e name_structure são passados para query_string, em que name é o nome da tabela à qual esses parâmetros correspondem. O significado dos parâmetros é o mesmo de quando se usa o cliente de linha de comando. Exemplo:
$ 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
No processamento distribuído de consultas, as tabelas temporárias são enviadas a todos os servidores remotos.
Última modificação em 10 de junho de 2026