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

# Migración entre ClickHouse autogestionado y ClickHouse Cloud con remoteSecure

> Página que describe cómo migrar entre ClickHouse autogestionado y ClickHouse Cloud

export const Image = ({img, alt, size}) => {
  return <Frame>
      <img src={img} alt={alt} />
    </Frame>;
};

<Image img="https://mintcdn.com/private-7c7dfe99-mintlify-1d264819/gmPhtGOLgAlGcviR/images/integrations/migration/self-managed-01.png?fit=max&auto=format&n=gmPhtGOLgAlGcviR&q=85&s=8840b25d93518fadf987d57ea700a16b" size="lg" alt="Migración de ClickHouse autogestionado" width="2048" height="936" data-path="images/integrations/migration/self-managed-01.png" />

Esta guía muestra cómo migrar de un servidor de ClickHouse autogestionado a ClickHouse Cloud, así como cómo migrar entre servicios de ClickHouse Cloud.
La función [`remoteSecure`](/es/reference/functions/table-functions/remote) se utiliza en consultas `SELECT` e `INSERT` para permitir el acceso a servidores remotos de ClickHouse, lo que simplifica la migración de tablas hasta el punto de que basta con escribir una consulta `INSERT INTO` con un `SELECT` incrustado.

<div id="migrating-from-self-managed-clickhouse-to-clickhouse-cloud">
  ## Migración de ClickHouse autogestionado a ClickHouse Cloud
</div>

<Image img="https://mintcdn.com/private-7c7dfe99-mintlify-1d264819/gmPhtGOLgAlGcviR/images/integrations/migration/self-managed-02.png?fit=max&auto=format&n=gmPhtGOLgAlGcviR&q=85&s=91d8708a6742ef8af6964ddcae4f7fcb" size="lg" alt="Migración de ClickHouse autogestionado" width="2048" height="936" data-path="images/integrations/migration/self-managed-02.png" />

Independientemente de si la tabla de origen está segmentada y/o replicada, en ClickHouse Cloud solo necesita crear una tabla de destino (puede omitir el parámetro Engine de esta tabla; `SharedMergeTree` se seleccionará automáticamente como motor de tabla),
y ClickHouse Cloud se encargará automáticamente del escalado vertical y horizontal.
No necesita preocuparse por cómo replicar y segmentar la tabla.

En este ejemplo, el servidor ClickHouse autogestionado es el *origen* y el servicio de ClickHouse Cloud es el *destino*.

<div id="overview">
  ### Descripción general
</div>

El proceso es:

1. Añada un usuario de solo lectura al servicio de origen
2. Duplique la estructura de la tabla de origen en el servicio de destino
3. Extraiga los datos del origen al destino, o envíelos desde el origen, según la conectividad de red del origen
4. Elimine el servidor de origen de la lista de acceso IP del destino (si corresponde)
5. Elimine el usuario de solo lectura del servicio de origen

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

Este ejemplo muestra cómo migrar una tabla desde un servidor de ClickHouse autogestionado a ClickHouse Cloud.

<Info>
  **Compatibilidad**

  Si observas diferencias de comportamiento entre tu implementación autogestionada de ClickHouse y tu servicio de ClickHouse Cloud,
  puede deberse al [ajuste de compatibilidad](/es/reference/settings/session-settings#compatibility).
  En Cloud, la compatibilidad se establece al crear un servicio y no cambia a nivel de servicio, para garantizar que los clientes obtengan un comportamiento coherente incluso cuando el servicio se actualiza.
  Si deseas cambiar la compatibilidad, puedes solicitarlo a través de [soporte](https://clickhouse.com/support/program).
</Info>

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

* Añada un usuario de solo lectura con permiso para leer la tabla de origen (`db.table` en este ejemplo)

```sql theme={null}
CREATE USER exporter
IDENTIFIED WITH SHA256_PASSWORD BY 'password-here'
SETTINGS readonly = 1;
```

```sql theme={null}
GRANT SELECT ON db.table TO exporter;
```

* Copie la definición de la tabla

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

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

* Cree la base de datos de destino:

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

* Use la sentencia CREATE TABLE del origen para crear el destino.

<Tip>
  Cambie el ENGINE a ReplicatedMergeTree sin ningún parámetro al ejecutar la sentencia CREATE. ClickHouse Cloud siempre replica las tablas y proporciona los parámetros correctos. No obstante, mantenga las cláusulas `ORDER BY`, `PRIMARY KEY`, `PARTITION BY`, `SAMPLE BY`, `TTL` y `SETTINGS`.
</Tip>

```sql theme={null}
CREATE TABLE db.table ...
```

* Usa la función `remoteSecure` para extraer los datos del origen autogestionado

<Image img="https://mintcdn.com/private-7c7dfe99-mintlify-1d264819/gmPhtGOLgAlGcviR/images/integrations/migration/self-managed-03.png?fit=max&auto=format&n=gmPhtGOLgAlGcviR&q=85&s=04c9a4e0e9bf6ef4a4c792d37910f623" size="lg" alt="Migración de ClickHouse autogestionado" width="2048" height="936" data-path="images/integrations/migration/self-managed-03.png" />

```sql theme={null}
INSERT INTO db.table SELECT * FROM
remoteSecure('source-hostname', db, table, 'exporter', 'password-here')
```

<Note>
  Si no se puede acceder al sistema de origen desde redes externas, puede enviar los datos en lugar de extraerlos, ya que la función `remoteSecure` funciona tanto para consultas como para inserciones. Consulte la siguiente opción.
</Note>

* Use la función `remoteSecure` para enviar los datos al servicio de ClickHouse Cloud

<Image img="https://mintcdn.com/private-7c7dfe99-mintlify-1d264819/gmPhtGOLgAlGcviR/images/integrations/migration/self-managed-04.png?fit=max&auto=format&n=gmPhtGOLgAlGcviR&q=85&s=3459520f2b0109228ee05e2b875d6ca0" size="lg" alt="Migración de ClickHouse autogestionado" width="2048" height="936" data-path="images/integrations/migration/self-managed-04.png" />

<Tip>
  **Agregue el sistema remoto a la lista de acceso IP de su servicio de ClickHouse Cloud**

  Para que la función `remoteSecure` pueda conectarse a su servicio de ClickHouse Cloud, la dirección IP del sistema remoto debe estar permitida en la lista de acceso IP. Expanda **Administrar su lista de acceso IP** debajo de este consejo para obtener más información.
</Tip>

<Accordion title="Gestiona tu IP Access List">
  En la lista de servicios de ClickHouse Cloud, elige el servicio con el que vas a trabajar y ve a **Settings**. Si la IP Access List no incluye la dirección IP o el rango de direcciones del sistema remoto que necesita conectarse a tu servicio de ClickHouse Cloud, puedes solucionarlo con **Add IPs**:

  <Image size="md" img="https://mintcdn.com/private-7c7dfe99-mintlify-1d264819/MHkdUZsOmvf4n9sx/images/_snippets/ip-allow-list-check-list.png?fit=max&auto=format&n=MHkdUZsOmvf4n9sx&q=85&s=f0d2d4e75f0420af4e61c6f4cb09bdea" alt="Comprueba si el servicio permite tráfico desde tu dirección IP en la IP Access List" border width="3840" height="2042" data-path="images/_snippets/ip-allow-list-check-list.png" />

  Agrega la dirección IP concreta o el rango de direcciones que deben conectarse a tu servicio de ClickHouse Cloud. Ajusta el formulario según sea necesario y luego haz clic en **Save**.

  <Image size="md" img="https://mintcdn.com/private-7c7dfe99-mintlify-1d264819/MHkdUZsOmvf4n9sx/images/_snippets/ip-allow-list-add-current-ip.png?fit=max&auto=format&n=MHkdUZsOmvf4n9sx&q=85&s=2fd85335d0e29b4f0b3e90886cb0aa35" alt="Agrega tu dirección IP actual a la IP Access List en ClickHouse Cloud" border width="1188" height="796" data-path="images/_snippets/ip-allow-list-add-current-ip.png" />
</Accordion>

```sql theme={null}
INSERT INTO FUNCTION
remoteSecure('HOSTNAME.clickhouse.cloud:9440', 'db.table',
'default', 'PASS') SELECT * FROM db.table
```

<div id="migrating-between-clickhouse-cloud-services">
  ## Migración entre servicios de ClickHouse Cloud
</div>

<Image img="https://mintcdn.com/private-7c7dfe99-mintlify-1d264819/gmPhtGOLgAlGcviR/images/integrations/migration/self-managed-05.png?fit=max&auto=format&n=gmPhtGOLgAlGcviR&q=85&s=4ef79a993812de4420380fc5250e7751" size="lg" alt="Migración de ClickHouse autogestionado" width="2048" height="356" data-path="images/integrations/migration/self-managed-05.png" />

Algunos casos de uso para migrar datos entre servicios de ClickHouse Cloud:

* Migrar datos desde una copia de seguridad restaurada
* Copiar datos de un servicio de desarrollo a un servicio de staging (o de staging a producción)

En este ejemplo hay dos servicios de ClickHouse Cloud, a los que nos referiremos como *origen* y *destino*. Los datos se extraerán del origen al destino. Aunque también podría usar push si lo prefiere, aquí se muestra pull porque utiliza un usuario de solo lectura.

<Image img="https://mintcdn.com/private-7c7dfe99-mintlify-1d264819/gmPhtGOLgAlGcviR/images/integrations/migration/self-managed-06.png?fit=max&auto=format&n=gmPhtGOLgAlGcviR&q=85&s=afefb28eb1cfe8333df0b3d8ba0e1257" size="lg" alt="Migración de ClickHouse autogestionado" width="2048" height="356" data-path="images/integrations/migration/self-managed-06.png" />

La migración consta de varios pasos:

1. Identifique un servicio de ClickHouse Cloud como *origen* y el otro como *destino*
2. Añada un usuario de solo lectura al servicio de origen
3. Duplique la estructura de la tabla de origen en el servicio de destino
4. Permita temporalmente el acceso por IP al servicio de origen
5. Copie los datos del origen al destino
6. Restablezca la lista de acceso IP en el destino
7. Elimine el usuario de solo lectura del servicio de origen

<div id="add-a-read-only-user-to-the-source-service">
  #### Añade un usuario de solo lectura al servicio de origen
</div>

* Añade un usuario de solo lectura que pueda leer la tabla de origen (`db.table` en este ejemplo)

  ```sql theme={null}
  CREATE USER exporter
  IDENTIFIED WITH SHA256_PASSWORD BY 'password-here'
  SETTINGS readonly = 1;
  ```

  ```sql theme={null}
  GRANT SELECT ON db.table TO exporter;
  ```

* Copia la definición de la tabla
  ```sql theme={null}
  select create_table_query
  from system.tables
  where database = 'db' and table = 'table'
  ```

<div id="duplicate-the-table-structure-on-the-destination-service">
  #### Duplicar la estructura de la tabla en el servicio de destino
</div>

En el destino, cree la base de datos si todavía no existe:

* Cree la base de datos de destino:
  ```sql theme={null}
  CREATE DATABASE db
  ```

* Usando la sentencia CREATE TABLE del origen, cree la tabla en el destino.

  En el destino, cree la tabla usando la salida de `select create_table_query...` del origen:

  ```sql theme={null}
  CREATE TABLE db.table ...
  ```

<div id="allow-remote-access-to-the-source-service">
  #### Permita el acceso remoto al servicio de origen
</div>

Para poder transferir datos del origen al destino, el servicio de origen debe permitir las conexiones. Desactive temporalmente la funcionalidad "lista de acceso IP" en el servicio de origen.

<Tip>
  Si va a seguir usando el servicio de origen de ClickHouse Cloud, exporte la lista de acceso IP existente a un archivo JSON antes de pasar a permitir el acceso desde cualquier lugar; así podrá volver a importar la lista de acceso después de migrar los datos.
</Tip>

Modifique la lista de acceso permitida y permita temporalmente el acceso desde **Anywhere**. Consulte la documentación de [lista de acceso IP](/es/products/cloud/guides/security/connectivity/setting-ip-filters) para obtener más información.

<div id="copy-the-data-from-source-to-destination">
  #### Copie los datos del servicio de origen al servicio de destino
</div>

* Use la función `remoteSecure` para extraer los datos del servicio de ClickHouse Cloud de origen
  Conéctese al servicio de destino. Ejecute este comando en el servicio de ClickHouse Cloud de destino:

  ```sql theme={null}
  INSERT INTO db.table SELECT * FROM
  remoteSecure('source-hostname', db, table, 'exporter', 'password-here')
  ```

* Verifique los datos en el servicio de destino

<div id="re-establish-the-ip-access-list-on-the-source">
  #### Restablecer la lista de acceso IP en el origen
</div>

Si exportó antes la lista de acceso, puede volver a importarla con **Share**; de lo contrario, vuelva a añadir sus direcciones IP a la lista de acceso.

<div id="remove-the-read-only-exporter-user">
  #### Eliminar el usuario `exporter` de solo lectura
</div>

```sql theme={null}
DROP USER exporter
```

* Cambie la lista de acceso IP del servicio para restringir el acceso
