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 cuando el destino es una db/table ordinaria. Cuando el destino es en sí mismo una función de tabla (por ejemplo, remote('127.0.0.1', numbers(10))), la tabla es de solo lectura: no hay ninguna tabla remota en la que insertar, por lo que INSERT se rechaza con una excepción NOT_IMPLEMENTED.
Sintaxis
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 | Descripción |
|---|---|
addresses_expr |
Una 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 función de tabla remote (9000 de forma predeterminada) y tcp_port_secure para la función de tabla 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. |
db |
Nombre de la base de datos. Tipo: String. |
table |
Nombre de la tabla. Tipo: String. |
user |
Nombre de usuario. Si no se especifica, se usa default. Tipo: String. |
password |
Contraseña del usuario. Si no se especifica, se usa una contraseña vacía. Tipo: String. |
sharding_key |
Clave 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. |
SETTINGS name = value, ... |
Configuraciones de la tabla Distributed creada por la función, por ejemplo skip_unavailable_shards. Opcional. Una configuración especificada en la consulta tiene prioridad sobre ella. Esta cláusula solo se acepta dentro de la función de tabla; los motores de tabla Remote y RemoteSecure aceptan las mismas configuraciones después de la definición del motor; consulte motores Remote y RemoteSecure. |
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.
Los mismos parámetros pueden usarse con los motores de tabla Remote y RemoteSecure para crear una tabla persistente en lugar de una tabla ad hoc; consulte motores Remote y RemoteSecure. La única diferencia es la cláusula SETTINGS: los motores la incluyen después de la definición del motor, ENGINE = Remote(...) SETTINGS skip_unavailable_shards = 1, no entre los argumentos.
Direcciones
example01-01-1
example01-01-1:9440
example01-01-1:9000
localhost
127.0.0.1
[::]:9440
[::]:9000
[2a02:6b8:0:1111::11]:9000Se 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-1Ejemplos
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 databasesshow 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.actorsGlobbing
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 alternativasa,boc. El patrón se sustituye poraen la dirección del primer segmento, porben la dirección del segundo segmento, y así sucesivamente. Por ejemplo,example0{1,2}-1genera las direccionesexample01-1yexample02-1.{N..M}- Un rango de números. Este patrón genera direcciones de segmentos con índices crecientes desdeNhastaM(incluido). Por ejemplo,example0{1..2}-1generaexample01-1yexample02-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}-1generaexample01-1,example02-1yexample03-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éplicasexample01-1yexample01-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.