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]:9000Vá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-1Exemplos
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 databasesshow 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.actorsGlobbing
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 alternativasa,bouc. O padrão é substituído porano endereço do primeiro shard, porbno endereço do segundo shard e assim por diante. Por exemplo,example0{1,2}-1gera os endereçosexample01-1eexample02-1.{N..M}- Um intervalo de números. Esse padrão gera endereços de shard com índices crescentes deNatéM(inclusive). Por exemplo,example0{1..2}-1geraexample01-1eexample02-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}-1geraexample01-1,example02-1eexample03-1.{a|b}- Qualquer número de variantes separadas por|. O padrão especifica réplicas. Por exemplo,example01-{1|2}gera as réplicasexample01-1eexample01-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.