> ## Documentation Index
> Fetch the complete documentation index at: https://clickhouse.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

> El puente JDBC de ClickHouse permite a ClickHouse acceder a datos de cualquier fuente de datos externa para la que haya disponible un controlador JDBC

# Conectar ClickHouse con fuentes de datos externas mediante JDBC

export const Image = ({img, alt, size = "lg"}) => {
  const normalizedSize = ["sm", "md", "lg"].includes(size) ? size : "lg";
  return <div className={`ch-image-${normalizedSize}`}>
      <Frame>
        <img src={img} alt={alt} />
      </Frame>
    </div>;
};

<Warning>
  clickhouse-jdbc-bridge contiene código experimental y ya no tiene soporte. Puede contener vulnerabilidades de confiabilidad y seguridad. Úselo bajo su propia responsabilidad.
</Warning>

<Note>
  Para usar JDBC se requiere ClickHouse JDBC Bridge, por lo que deberá usar `clickhouse-local` en una máquina local para transmitir los datos desde su base de datos a ClickHouse Cloud. Visite la página [**Uso de clickhouse-local**](/docs/es/get-started/migrate/other-methods/clickhouse-local-etl) en la sección **Migrate** de la documentación para obtener más detalles.
</Note>

**Descripción general:** <a href="https://github.com/ClickHouse/clickhouse-jdbc-bridge" target="_blank">ClickHouse JDBC Bridge</a>, en combinación con la [función de tabla jdbc](/docs/es/reference/functions/table-functions/jdbc) o el [motor de tabla JDBC](/docs/es/reference/engines/table-engines/integrations/jdbc) o el [motor de integración](/docs/es/reference/engines/table-engines/integrations/index), permite a ClickHouse acceder a datos desde cualquier fuente de datos externa para la que haya un <a href="https://en.wikipedia.org/wiki/JDBC_driver" target="_blank">controlador JDBC</a> disponible:

<Image img="https://mintcdn.com/private-7c7dfe99/dZZG_-B0EzCG8L4V/images/integrations/data-ingestion/dbms/jdbc-01.webp?fit=max&auto=format&n=dZZG_-B0EzCG8L4V&q=85&s=8c8ce1ebfc70dc985a24ae2eee2fe80f" size="lg" alt="Diagrama de arquitectura de ClickHouse JDBC Bridge" background="white" width="4098" height="1024" data-path="images/integrations/data-ingestion/dbms/jdbc-01.webp" />

Esto resulta útil cuando no hay disponible ningún [motor de integración](/docs/es/reference/engines/table-engines/integrations), función de tabla o diccionario externo nativo para la fuente de datos externa, pero sí existe un controlador JDBC para esa fuente de datos.

Puede usar ClickHouse JDBC Bridge tanto para lecturas como para escrituras. También puede usarlo en paralelo con múltiples fuentes de datos externas; por ejemplo, puede ejecutar consultas distribuidas en ClickHouse sobre múltiples fuentes de datos externas e internas en tiempo real.

En esta lección le mostraremos lo fácil que es instalar, configurar y ejecutar ClickHouse JDBC Bridge para conectar ClickHouse con una fuente de datos externa. Usaremos MySQL como fuente de datos externa para esta lección.

¡Empecemos!

<Info>
  **Requisitos previos**

  Tiene acceso a una máquina que cuenta con:

  1. un shell de Unix y acceso a internet
  2. <a href="https://www.gnu.org/software/wget/" target="_blank">wget</a> instalado
  3. una versión actual de **Java** (p. ej., <a href="https://openjdk.java.net" target="_blank">OpenJDK</a> versión >= 17) instalada
  4. una versión actual de **MySQL** (p. ej., <a href="https://www.mysql.com" target="_blank">MySQL</a> versión >=8) instalada y en ejecución
  5. una versión actual de **ClickHouse** [instalada](/docs/es/get-started/setup/install) y en ejecución
</Info>

<div id="install-the-clickhouse-jdbc-bridge-locally">
  ## Instale ClickHouse JDBC Bridge localmente
</div>

La forma más sencilla de usar ClickHouse JDBC Bridge es instalarlo y ejecutarlo en el mismo host en el que también se ejecuta ClickHouse:<Image img="https://mintcdn.com/private-7c7dfe99/dZZG_-B0EzCG8L4V/images/integrations/data-ingestion/dbms/jdbc-02.webp?fit=max&auto=format&n=dZZG_-B0EzCG8L4V&q=85&s=9364c1999d98f229274346065ceb63bb" size="lg" alt="Diagrama de implementación local de ClickHouse JDBC Bridge" background="white" width="4098" height="1084" data-path="images/integrations/data-ingestion/dbms/jdbc-02.webp" />

Comencemos por conectarnos a la shell de Unix en la máquina donde se ejecuta ClickHouse y crear una carpeta local en la que más adelante instalaremos ClickHouse JDBC Bridge (puede ponerle el nombre que quiera y ubicarla donde prefiera):

```bash theme={null}
mkdir ~/clickhouse-jdbc-bridge
```

Ahora descargamos la <a href="https://github.com/ClickHouse/clickhouse-jdbc-bridge/releases/" target="_blank">versión más reciente</a> de ClickHouse JDBC Bridge en esa carpeta:

```bash theme={null}
cd ~/clickhouse-jdbc-bridge
wget https://github.com/ClickHouse/clickhouse-jdbc-bridge/releases/download/v2.0.7/clickhouse-jdbc-bridge-2.0.7-shaded.jar
```

Para poder conectarnos a MySQL, vamos a crear una fuente de datos con nombre:

```bash theme={null}
 cd ~/clickhouse-jdbc-bridge
 mkdir -p config/datasources
 touch config/datasources/mysql8.json
```

Ahora puede copiar y pegar la siguiente configuración en el archivo `~/clickhouse-jdbc-bridge/config/datasources/mysql8.json`:

```json theme={null}
 {
   "mysql8": {
   "driverUrls": [
     "https://repo1.maven.org/maven2/mysql/mysql-connector-java/8.0.28/mysql-connector-java-8.0.28.jar"
   ],
   "jdbcUrl": "jdbc:mysql://<host>:<port>",
   "username": "<username>",
   "password": "<password>"
   }
 }
```

<Note>
  en el archivo de configuración anterior

  * puedes usar cualquier nombre para el origen de datos; nosotros usamos `mysql8`
  * en el valor de `jdbcUrl`, debes sustituir `<host>` y `<port>` por los valores correspondientes de tu instancia de MySQL en ejecución; por ejemplo, `"jdbc:mysql://localhost:3306"`
  * debes sustituir `<username>` y `<password>` por tus credenciales de MySQL; si no usas contraseña, puedes eliminar la línea `"password": "<password>"` del archivo de configuración anterior
  * en el valor de `driverUrls`, solo especificamos una URL desde la que se puede descargar la <a href="https://repo1.maven.org/maven2/mysql/mysql-connector-java/" target="_blank">versión actual</a> del controlador JDBC de MySQL. Eso es todo lo que hay que hacer, y ClickHouse JDBC Bridge descargará automáticamente ese controlador JDBC (en un directorio específico del sistema operativo).
</Note>

<br />

Ahora ya estamos listos para iniciar ClickHouse JDBC Bridge:

```bash theme={null}
 cd ~/clickhouse-jdbc-bridge
 java -jar clickhouse-jdbc-bridge-2.0.7-shaded.jar
```

<Note>
  Iniciamos ClickHouse JDBC Bridge en modo de primer plano. Para detener Bridge, puede volver a poner en primer plano la ventana de shell de Unix anterior y pulsar `CTRL+C`.
</Note>

<div id="use-the-jdbc-connection-from-within-clickhouse">
  ## Usar la conexión JDBC desde ClickHouse
</div>

Ahora ClickHouse puede acceder a los datos de MySQL mediante la [función de tabla jdbc](/docs/es/reference/functions/table-functions/jdbc) o el [motor de tabla JDBC](/docs/es/reference/engines/table-engines/integrations/jdbc).

La forma más sencilla de ejecutar los siguientes ejemplos es copiarlos y pegarlos en [`clickhouse-client`](/docs/es/concepts/features/interfaces/cli) o en la [UI de Play](/docs/es/concepts/features/interfaces/http).

* Función de tabla jdbc:

```sql theme={null}
 SELECT * FROM jdbc('mysql8', 'mydatabase', 'mytable');
```

<Note>
  Como primer parámetro de la función de tabla JDBC, usamos el nombre de la fuente de datos con nombre que configuramos anteriormente.
</Note>

* Motor de tabla JDBC:

```sql theme={null}
 CREATE TABLE mytable (
      <column> <column_type>,
      ...
 )
 ENGINE = JDBC('mysql8', 'mydatabase', 'mytable');

 SELECT * FROM mytable;
```

<Note>
  Como primer parámetro de la cláusula del engine `jdbc`, usamos el nombre de la fuente de datos con nombre que configuramos anteriormente

  El esquema de la tabla del engine JDBC de ClickHouse y el esquema de la tabla MySQL conectada deben coincidir; por ejemplo, los nombres y el orden de las columnas deben ser los mismos, y los tipos de datos de las columnas deben ser compatibles
</Note>

<div id="install-the-clickhouse-jdbc-bridge-externally">
  ## Instalar ClickHouse JDBC Bridge externamente
</div>

Para un clúster distribuido de ClickHouse (un clúster con más de un host de ClickHouse), tiene sentido instalar y ejecutar ClickHouse JDBC Bridge externamente en su propio host:

<Image img="https://mintcdn.com/private-7c7dfe99/dZZG_-B0EzCG8L4V/images/integrations/data-ingestion/dbms/jdbc-03.webp?fit=max&auto=format&n=dZZG_-B0EzCG8L4V&q=85&s=41da834be9976ffa52a09c078e9c4c76" size="lg" alt="Diagrama de implementación externa de ClickHouse JDBC Bridge" background="white" width="4098" height="2356" data-path="images/integrations/data-ingestion/dbms/jdbc-03.webp" />

Esto tiene la ventaja de que cada host de ClickHouse puede acceder a ClickHouse JDBC Bridge. De lo contrario, ClickHouse JDBC Bridge tendría que instalarse localmente en cada instancia de ClickHouse que necesite acceder a fuentes de datos externas a través del Bridge.

Para instalar ClickHouse JDBC Bridge externamente, siga estos pasos:

1. Instale, configure y ejecute ClickHouse JDBC Bridge en un host dedicado siguiendo los pasos descritos en la sección 1 de esta guía.

2. En cada host de ClickHouse, añada el siguiente bloque de configuración a la <a href="/docs/es/concepts/features/configuration/server-config/configuration-files" target="_blank">configuración del servidor de ClickHouse</a> (según el formato de configuración que haya elegido, use la versión XML o YAML):

<Tabs>
  <Tab title="XML">
    ```xml theme={null}
    <jdbc_bridge>
       <host>JDBC-Bridge-Host</host>
       <port>9019</port>
    </jdbc_bridge>
    ```
  </Tab>

  <Tab title="YAML">
    ```yaml theme={null}
    jdbc_bridge:
        host: JDBC-Bridge-Host
        port: 9019
    ```
  </Tab>
</Tabs>

<Note>
  * debe reemplazar `JDBC-Bridge-Host` por el hostname o la dirección IP del host dedicado de ClickHouse JDBC Bridge
  * hemos especificado el puerto predeterminado de ClickHouse JDBC Bridge, `9019`; si está usando un puerto diferente para JDBC Bridge, debe adaptar la configuración anterior en consecuencia
</Note>

[//]: # "## 4. Información adicional"

[//]: #

[//]: # "TODO: "

[//]: # "- mencionar que para jdbc table function es más eficiente (no hacer dos consultas cada vez) especificar también el schema como parámetro"

[//]: #

[//]: # "- mencionar consulta ad hoc vs consulta de tabla, consulta guardada, consulta con nombre"

[//]: #

[//]: # "- mencionar insert into "
