Saltar al contenido principal
La función de tabla remote permite acceder a servidores remotos directamente, es decir, sin necesidad de crear una tabla Distributed. La función de tabla remoteSecure es lo mismo que remote, pero a través de una conexión segura. Ambas funciones pueden usarse en consultas SELECT e INSERT.

Sintaxis

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

ArgumentoDescripción
addresses_exprUna dirección de servidor remoto o una expresión que genere varias direcciones de servidores remotos. Formato: host o host:port.

host se puede especificar como nombre de servidor o como dirección IPv4 o IPv6. Las direcciones IPv6 deben especificarse entre [].

port es el puerto TCP del servidor remoto. Si se omite, se usa tcp_port del archivo de configuración del servidor para la table function remote (9000 de forma predeterminada) y tcp_port_secure para la table function remoteSecure (9440 de forma predeterminada).

En las direcciones IPv6, el puerto es obligatorio.

Si solo se especifica el parámetro addresses_expr, db y table usarán system.one de forma predeterminada.

Tipo: String.
dbNombre de la base de datos. Tipo: String.
tableNombre de la tabla. Tipo: String.
userNombre de usuario. Si no se especifica, se usa default. Tipo: String.
passwordContraseña del usuario. Si no se especifica, se usa una contraseña vacía. Tipo: String.
sharding_keyClave de segmentación para distribuir datos entre nodos. Por ejemplo: insert into remote('127.0.0.1:9000,127.0.0.2', db, table, 'default', rand()). Tipo: UInt32.
Los argumentos también pueden pasarse mediante colecciones con nombre.

Valor devuelto

Una tabla ubicada en un servidor remoto.

Uso

Como las funciones de tabla remote y remoteSecure restablecen la conexión en cada solicitud, se recomienda usar en su lugar una tabla Distributed. Además, si se configuran nombres de host, los nombres se resuelven y los errores no se contabilizan al trabajar con varias réplicas. Si va a procesar una gran cantidad de consultas, cree siempre la tabla Distributed con antelación y no use la función de tabla remote. La función de tabla remote puede resultar útil en los siguientes casos:
  • Migración puntual de datos de un sistema a otro
  • Acceso a un servidor específico para comparar datos, depurar y realizar pruebas; es decir, conexiones ad hoc.
  • Consultas entre varios clústeres de ClickHouse con fines de investigación.
  • Solicitudes distribuidas poco frecuentes realizadas manualmente.
  • Solicitudes distribuidas en las que el conjunto de servidores se redefine cada vez.

Direcciones

example01-01-1
example01-01-1:9440
example01-01-1:9000
localhost
127.0.0.1
[::]:9440
[::]:9000
[2a02:6b8:0:1111::11]:9000
Se pueden indicar varias direcciones separadas por comas. En este caso, ClickHouse usará procesamiento distribuido y enviará la consulta a todas las direcciones especificadas (como si fueran segmentos con datos diferentes). Ejemplo:
example01-01-1,example01-02-1

Ejemplos

Selección de datos de un servidor remoto:

SELECT * FROM remote('127.0.0.1', db.remote_engine_table) LIMIT 3;
O usando colecciones con nombre:
CREATE NAMED COLLECTION creds AS
        host = '127.0.0.1',
        database = 'db';
SELECT * FROM remote(creds, table='remote_engine_table') LIMIT 3;

Inserción de datos en una tabla de un 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;

Migración de tablas de un sistema a otro:

Este ejemplo utiliza una tabla de un dataset de ejemplo. La base de datos es imdb y la tabla es actors.

En el sistema ClickHouse de origen (el sistema que actualmente hospeda los datos)

  • Verifique la base de datos de origen y el nombre de la tabla (imdb.actors)
    show databases
    
    show tables in imdb
    
  • Obtenga la sentencia CREATE TABLE del origen:
  SELECT create_table_query
  FROM system.tables
  WHERE database = 'imdb' AND table = 'actors'
Respuesta
  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);

En el sistema ClickHouse de destino

  • Cree la base de datos de destino:
    CREATE DATABASE imdb
    
  • Usando la sentencia CREATE TABLE del origen, cree la tabla de 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 vuelta en la implementación de origen

Inserte datos en la nueva base de datos y la nueva tabla creadas en el sistema remoto. Necesitará el host, el puerto, el nombre de usuario, la contraseña, la base de datos de destino y la tabla de destino.
INSERT INTO FUNCTION
remoteSecure('remote.clickhouse.cloud:9440', 'imdb.actors', 'USER', 'PASSWORD')
SELECT * from imdb.actors

Globbing

Los patrones entre { } se usan para generar un conjunto de segmentos y para especificar réplicas. Si hay varios pares de { }, se genera el producto cartesiano de los conjuntos correspondientes. Se admiten los siguientes tipos de patrones.
  • {a,b,c} - Representa cualquiera de las cadenas alternativas a, b o c. El patrón se sustituye por a en la dirección del primer segmento, por b en la dirección del segundo segmento, y así sucesivamente. Por ejemplo, example0{1,2}-1 genera las direcciones example01-1 y example02-1.
  • {N..M} - Un rango de números. Este patrón genera direcciones de segmentos con índices crecientes desde N hasta M (incluido). Por ejemplo, example0{1..2}-1 genera example01-1 y example02-1.
  • {0n..0m} - Un rango de números con ceros a la izquierda. Este patrón conserva los ceros a la izquierda en los índices. Por ejemplo, example{01..03}-1 genera example01-1, example02-1 y example03-1.
  • {a|b} - Cualquier número de variantes separadas por un |. El patrón especifica réplicas. Por ejemplo, example01-{1|2} genera las réplicas example01-1 y example01-2.
La consulta se enviará a la primera réplica disponible. Sin embargo, para remote, las réplicas se recorren en el orden establecido actualmente en la configuración load_balancing. La cantidad de direcciones generadas está limitada por la configuración table_function_remote_max_addresses.
Última modificación el 10 de junio de 2026