Skip to content
ClickHouse Docs
ClickHouse DocsClickHouse Docs

remote, remoteSecure

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 quando o destino é um db/table comum. Quando o destino é, por si só, uma função de tabela (por exemplo, remote('127.0.0.1', numbers(10))), a tabela é somente leitura: não há tabela remota na qual inserir e, portanto, INSERT é rejeitado com uma exceção NOT_IMPLEMENTED.

Sintaxe

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

Parâmetros

Argumento Descrição
addresses_expr Um 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.
db Nome do banco de dados. Tipo: String.
table Nome da tabela. Tipo: String.
user Nome de usuário. Se não for especificado, default será usado. Tipo: String.
password Senha do usuário. Se não for especificado, será usada uma senha vazia. Tipo: String.
sharding_key Chave 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.
SETTINGS name = value, ... Configurações da tabela Distributed criada pela função, por exemplo skip_unavailable_shards. Opcional. Uma configuração especificada na consulta tem prioridade sobre ela. Esta cláusula é aceita apenas dentro da função de tabela; os motores de tabela Remote e RemoteSecure aceitam as mesmas configurações após a definição do motor, consulte motores Remote e RemoteSecure.

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.

Os mesmos parâmetros podem ser usados com os motores de tabela Remote e RemoteSecure para criar uma tabela persistente em vez de uma tabela ad hoc; consulte motores Remote e RemoteSecure. A única diferença é a cláusula SETTINGS: os motores a aceitam após a definição do motor, ENGINE = Remote(...) SETTINGS skip_unavailable_shards = 1, e não entre os argumentos.

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.

Navigation