Pular para o conteúdo principal
A função de tabela remote permite acessar servidores remotos dinamicamente, ou seja, sem criar uma tabela Distributed. A função de tabela remoteSecure é igual à remote, mas por meio de uma conexão segura. Ambas as funções podem ser usadas em consultas SELECT e INSERT.

Sintaxe

remote(addresses_expr, [db, table, user [, password], sharding_key])
remote(addresses_expr, [db.table, user [, password], sharding_key])
remote(named_collection[, option=value [,..]])
remoteSecure(addresses_expr, [db, table, user [, password], sharding_key])
remoteSecure(addresses_expr, [db.table, user [, password], sharding_key])
remoteSecure(named_collection[, option=value [,..]])

Parâmetros

ArgumentoDescrição
addresses_exprUm endereço de servidor remoto ou uma expressão que gera vários endereços de servidores remotos. Formato: host ou host:port.

O host pode ser especificado como um nome de servidor ou como um endereço IPv4 ou IPv6. Um endereço IPv6 deve ser especificado entre [].

A port é a porta TCP no servidor remoto. Se a porta for omitida, será usado tcp_port do arquivo de configuração do servidor para a função de tabela remote (por padrão, 9000) e tcp_port_secure para a função de tabela remoteSecure (por padrão, 9440).

Para endereços IPv6, a porta é obrigatória.

Se apenas o parâmetro addresses_expr for especificado, db e table usarão system.one por padrão.

Tipo: String.
dbNome do banco de dados. Tipo: String.
tableNome da tabela. Tipo: String.
userNome de usuário. Se não for especificado, default será usado. Tipo: String.
passwordSenha do usuário. Se não for especificado, será usada uma senha vazia. Tipo: String.
sharding_keyChave de sharding para dar suporte à distribuição de dados entre nós. Por exemplo: insert into remote('127.0.0.1:9000,127.0.0.2', db, table, 'default', rand()). Tipo: UInt32.
Os argumentos também podem ser passados por meio de coleções nomeadas.

Valor retornado

Uma tabela localizada em um servidor remoto.

Uso

Como as funções de tabela remote e remoteSecure restabelecem a conexão a cada solicitação, recomenda-se usar uma tabela Distributed em vez delas. Além disso, se os hostnames estiverem definidos, os nomes serão resolvidos, e os erros não serão contabilizados ao trabalhar com várias réplicas. Ao processar um grande número de consultas, sempre crie a tabela Distributed com antecedência e não use a função de tabela remote. A função de tabela remote pode ser útil nos seguintes casos:
  • Migração pontual de dados de um sistema para outro
  • Acesso a um servidor específico para comparação de dados, depuração e testes, ou seja, conexões ad hoc.
  • Consultas entre vários clusters do ClickHouse para fins de pesquisa.
  • Solicitações distribuídas pouco frequentes feitas manualmente.
  • Solicitações distribuídas em que o conjunto de servidores é redefinido a cada vez.

Endereços

example01-01-1
example01-01-1:9440
example01-01-1:9000
localhost
127.0.0.1
[::]:9440
[::]:9000
[2a02:6b8:0:1111::11]:9000
Vários endereços podem ser informados separados por vírgulas. Nesse caso, o ClickHouse usará processamento distribuído e enviará a consulta para todos os endereços especificados (como shards com dados diferentes). Exemplo:
example01-01-1,example01-02-1

Exemplos

Selecionando dados de um servidor remoto:

SELECT * FROM remote('127.0.0.1', db.remote_engine_table) LIMIT 3;
Ou usando coleções nomeadas:
CREATE NAMED COLLECTION creds AS
        host = '127.0.0.1',
        database = 'db';
SELECT * FROM remote(creds, table='remote_engine_table') LIMIT 3;

Inserindo dados em uma tabela em um servidor remoto:

CREATE TABLE remote_table (name String, value UInt32) ENGINE=Memory;
INSERT INTO FUNCTION remote('127.0.0.1', currentDatabase(), 'remote_table') VALUES ('test', 42);
SELECT * FROM remote_table;

Migração de tabelas de um sistema para outro:

Este exemplo usa uma tabela de um conjunto de dados de amostra. O banco de dados é imdb, e a tabela é actors.

No sistema ClickHouse de origem (o sistema que hospeda os dados atualmente)

  • Verifique o banco de dados de origem e o nome da tabela (imdb.actors)
    show databases
    
    show tables in imdb
    
  • Obtenha a instrução CREATE TABLE na origem:
  SELECT create_table_query
  FROM system.tables
  WHERE database = 'imdb' AND table = 'actors'
Resposta
  CREATE TABLE imdb.actors (`id` UInt32,
                            `first_name` String,
                            `last_name` String,
                            `gender` FixedString(1))
                  ENGINE = MergeTree
                  ORDER BY (id, first_name, last_name, gender);

No sistema de destino do ClickHouse

  • Crie o banco de dados de destino:
    CREATE DATABASE imdb
    
  • Usando a instrução CREATE TABLE da origem, crie a tabela no destino:
    CREATE TABLE imdb.actors (`id` UInt32,
                              `first_name` String,
                              `last_name` String,
                              `gender` FixedString(1))
                    ENGINE = MergeTree
                    ORDER BY (id, first_name, last_name, gender);
    

De volta à implantação de origem

Insira dados no novo banco de dados e na nova tabela criados no sistema remoto. Você precisará do host, da porta, do nome de usuário, da senha, do banco de dados de destino e da tabela de destino.
INSERT INTO FUNCTION
remoteSecure('remote.clickhouse.cloud:9440', 'imdb.actors', 'USER', 'PASSWORD')
SELECT * from imdb.actors

Globbing

Padrões em { } são usados para gerar um conjunto de shards e para especificar réplicas. Se houver vários pares de { }, o produto cartesiano dos conjuntos correspondentes será gerado. Os seguintes tipos de padrão são suportados.
  • {a,b,c} - Representa qualquer uma das strings alternativas a, b ou c. O padrão é substituído por a no endereço do primeiro shard, por b no endereço do segundo shard e assim por diante. Por exemplo, example0{1,2}-1 gera os endereços example01-1 e example02-1.
  • {N..M} - Um intervalo de números. Esse padrão gera endereços de shard com índices crescentes de N até M (inclusive). Por exemplo, example0{1..2}-1 gera example01-1 e example02-1.
  • {0n..0m} - Um intervalo de números com zeros à esquerda. Esse padrão preserva os zeros à esquerda nos índices. Por exemplo, example{01..03}-1 gera example01-1, example02-1 e example03-1.
  • {a|b} - Qualquer número de variantes separadas por |. O padrão especifica réplicas. Por exemplo, example01-{1|2} gera as réplicas example01-1 e example01-2.
A consulta será enviada para a primeira réplica saudável. No entanto, para remote, as réplicas são iteradas na ordem atualmente definida na configuração load_balancing. O número de endereços gerados é limitado pela configuração table_function_remote_max_addresses.
Última modificação em 10 de junho de 2026