> ## Documentation Index
> Fetch the complete documentation index at: https://private-7c7dfe99-mintlify-3a82795f.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

> La función de tabla `remote` permite acceder a servidores remotos directamente, es decir, sin necesidad de crear una tabla distribuida. La función de tabla `remoteSecure` es lo mismo que `remote`, pero a través de una conexión segura.

# remote, remoteSecure

La función de tabla `remote` permite acceder a servidores remotos directamente, es decir, sin necesidad de crear una tabla [Distributed](/es/reference/engines/table-engines/special/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`.

<div id="syntax">
  ## Sintaxis
</div>

```sql theme={null}
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 [,..]])
```

<div id="parameters">
  ## Parámetros
</div>

| 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`.<br /><br />    `host` se puede especificar como nombre de servidor o como dirección IPv4 o IPv6. Las direcciones IPv6 deben especificarse entre `[]`.<br /><br />    `port` es el puerto TCP del servidor remoto. Si se omite, se usa [tcp\_port](/es/reference/settings/server-settings/settings#tcp_port) del archivo de configuración del servidor para la table function `remote` (9000 de forma predeterminada) y [tcp\_port\_secure](/es/reference/settings/server-settings/settings#tcp_port_secure) para la table function `remoteSecure` (9440 de forma predeterminada).<br /><br />    En las direcciones IPv6, el puerto es obligatorio.<br /><br />    Si solo se especifica el parámetro `addresses_expr`, `db` y `table` usarán `system.one` de forma predeterminada.<br /><br />    Tipo: [String](/es/reference/data-types/string). |
| `db`             | Nombre de la base de datos. Tipo: [String](/es/reference/data-types/string).                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             |
| `table`          | Nombre de la tabla. Tipo: [String](/es/reference/data-types/string).                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     |
| `user`           | Nombre de usuario. Si no se especifica, se usa `default`. Tipo: [String](/es/reference/data-types/string).                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               |
| `password`       | Contraseña del usuario. Si no se especifica, se usa una contraseña vacía. Tipo: [String](/es/reference/data-types/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](/es/reference/data-types/int-uint).                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 |

Los argumentos también pueden pasarse mediante [colecciones con nombre](/es/concepts/features/configuration/server-config/named-collections).

<div id="returned-value">
  ## Valor devuelto
</div>

Una tabla ubicada en un servidor remoto.

<div id="usage">
  ## Uso
</div>

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.

<div id="addresses">
  ### Direcciones
</div>

```text theme={null}
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:

```text theme={null}
example01-01-1,example01-02-1
```

<div id="examples">
  ## Ejemplos
</div>

<div id="selecting-data-from-a-remote-server">
  ### Selección de datos de un servidor remoto:
</div>

```sql theme={null}
SELECT * FROM remote('127.0.0.1', db.remote_engine_table) LIMIT 3;
```

O usando [colecciones con nombre](/es/concepts/features/configuration/server-config/named-collections):

```sql theme={null}
CREATE NAMED COLLECTION creds AS
        host = '127.0.0.1',
        database = 'db';
SELECT * FROM remote(creds, table='remote_engine_table') LIMIT 3;
```

<div id="inserting-data-into-a-table-on-a-remote-server">
  ### Inserción de datos en una tabla de un servidor remoto:
</div>

```sql theme={null}
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;
```

<div id="migration-of-tables-from-one-system-to-another">
  ### Migración de tablas de un sistema a otro:
</div>

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

<div id="on-the-source-clickhouse-system-the-system-that-currently-hosts-the-data">
  #### En el sistema ClickHouse de origen (el sistema que actualmente hospeda los datos)
</div>

* Verifique la base de datos de origen y el nombre de la tabla (`imdb.actors`)

  ```sql theme={null}
  show databases
  ```

  ```sql theme={null}
  show tables in imdb
  ```

* Obtenga la sentencia CREATE TABLE del origen:

```sql theme={null}
  SELECT create_table_query
  FROM system.tables
  WHERE database = 'imdb' AND table = 'actors'
```

Respuesta

```sql theme={null}
  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);
```

<div id="on-the-destination-clickhouse-system">
  #### En el sistema ClickHouse de destino
</div>

* Cree la base de datos de destino:

  ```sql theme={null}
  CREATE DATABASE imdb
  ```

* Usando la sentencia CREATE TABLE del origen, cree la tabla de destino:

  ```sql theme={null}
  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);
  ```

<div id="back-on-the-source-deployment">
  #### De vuelta en la implementación de origen
</div>

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.

```sql theme={null}
INSERT INTO FUNCTION
remoteSecure('remote.clickhouse.cloud:9440', 'imdb.actors', 'USER', 'PASSWORD')
SELECT * from imdb.actors
```

<div id="globs-in-addresses">
  ## Globbing
</div>

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](/es/reference/settings/session-settings#load_balancing).
La cantidad de direcciones generadas está limitada por la configuración [table\_function\_remote\_max\_addresses](/es/reference/settings/session-settings#table_function_remote_max_addresses).
