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

> Permite a ClickHouse conectarse a bases de datos externas mediante ODBC.

# Motor de tabla ODBC

export const CloudNotSupportedBadge = () => {
  return <div className="cloudNotSupportedBadge">
            <div className="cloudNotSupportedIcon">
            <svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
                <path strokeWidth="1.5" d="M6.33366 12.6666L12.3739 12.6667C13.6593 12.6667 14.7073 11.6187 14.7073 10.3334C14.7073 9.04804 13.6593 8.00003 12.3739 8.00003C12.3739 8.00003 12.3337 7.66659 12.0003 7.33325M10.667 5.33322C8.00033 2.33325 4.45395 4.78537 4.14195 6.68203C2.55728 6.7627 1.29395 8.06203 1.29395 9.6667C1.29395 11.3234 2.66699 12.6666 4.00033 12.6666" stroke="currentColor" strokeLinecap="round" strokeLinejoin="round" />
                <path strokeWidth="1.5" d="M2.66699 14L12.0003 4.66663" stroke="currentColor" strokeLinecap="round" strokeLinejoin="round" />
            </svg>

        </div>
            Not supported in ClickHouse Cloud
        </div>;
};

Permite a ClickHouse conectarse a bases de datos externas mediante [ODBC](https://en.wikipedia.org/wiki/Open_Database_Connectivity).

Para implementar conexiones ODBC de forma segura, ClickHouse usa un programa independiente: `clickhouse-odbc-bridge`. Si el controlador ODBC se carga directamente desde `clickhouse-server`, los problemas del controlador pueden provocar fallos en el servidor de ClickHouse. ClickHouse inicia automáticamente `clickhouse-odbc-bridge` cuando es necesario. El programa `clickhouse-odbc-bridge` se instala desde el mismo paquete que `clickhouse-server`.

Este motor admite el tipo de dato [Nullable](/es/reference/data-types/nullable).

<div id="creating-a-table">
  ## Crear una tabla
</div>

```sql theme={null}
CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster]
(
    name1 [type1],
    name2 [type2],
    ...
)
ENGINE = ODBC(datasource, external_database, external_table)
```

Consulta la descripción detallada de la consulta [CREATE TABLE](/es/reference/statements/create/table).

La estructura de la tabla puede diferir de la estructura de la tabla de origen:

* Los nombres de las columnas deben ser los mismos que en la tabla de origen, pero puedes usar solo algunas de ellas y en cualquier orden.
* Los tipos de las columnas pueden diferir de los de la tabla de origen. ClickHouse intenta [convertir](/es/reference/functions/regular-functions/type-conversion-functions#CAST) los valores a los tipos de datos de ClickHouse.
* La configuración [external\_table\_functions\_use\_nulls](/es/reference/settings/session-settings#external_table_functions_use_nulls) define cómo se manejan las columnas Nullable. Valor predeterminado: 1. Si es 0, la función de tabla no crea columnas Nullable e inserta valores predeterminados en lugar de valores null. Esto también se aplica a los valores NULL dentro de arrays.

**Parámetros del motor**

* `datasource` — Nombre de la sección con la configuración de conexión en el archivo `odbc.ini`.
* `external_database` — Nombre de una base de datos en un SGBD externo.
* `external_table` — Nombre de una tabla en `external_database`.

Estos parámetros también se pueden pasar mediante [colecciones con nombre](/es/concepts/features/configuration/server-config/named-collections).

<div id="usage-example">
  ## Ejemplo de uso
</div>

**Obtención de datos de la instalación local de MySQL mediante ODBC**

Este ejemplo se ha probado en Ubuntu Linux 18.04 y MySQL server 5.7.

Asegúrese de que unixODBC y MySQL Connector estén instalados.

De forma predeterminada (si se instala desde paquetes), ClickHouse se inicia con el usuario `clickhouse`. Por lo tanto, debe crear y configurar este usuario en el servidor MySQL.

```bash theme={null}
$ sudo mysql
```

```sql theme={null}
mysql> CREATE USER 'clickhouse'@'localhost' IDENTIFIED BY 'clickhouse';
mysql> GRANT ALL PRIVILEGES ON *.* TO 'clickhouse'@'localhost' WITH GRANT OPTION;
```

A continuación, configura la conexión en `/etc/odbc.ini`.

```bash theme={null}
$ cat /etc/odbc.ini
[mysqlconn]
DRIVER = /usr/local/lib/libmyodbc5w.so
SERVER = 127.0.0.1
PORT = 3306
DATABASE = test
USER = clickhouse
PASSWORD = clickhouse
```

Puede comprobar la conexión con la utilidad `isql` de la instalación de unixODBC.

```bash theme={null}
$ isql -v mysqlconn
+-------------------------+
| Connected!                            |
|                                       |
...
```

Tabla en MySQL:

```text theme={null}
mysql> CREATE DATABASE test;
Query OK, 1 row affected (0,01 sec)

mysql> CREATE TABLE `test`.`test` (
    ->   `int_id` INT NOT NULL AUTO_INCREMENT,
    ->   `int_nullable` INT NULL DEFAULT NULL,
    ->   `float` FLOAT NOT NULL,
    ->   `float_nullable` FLOAT NULL DEFAULT NULL,
    ->   PRIMARY KEY (`int_id`));
Query OK, 0 rows affected (0,09 sec)

mysql> insert into test.test (`int_id`, `float`) VALUES (1,2);
Query OK, 1 row affected (0,00 sec)

mysql> select * from test.test;
+------+----------+-----+----------+
| int_id | int_nullable | float | float_nullable |
+------+----------+-----+----------+
|      1 |         NULL |     2 |           NULL |
+------+----------+-----+----------+
1 row in set (0,00 sec)
```

Tabla en ClickHouse que recupera datos de la tabla de MySQL:

```sql theme={null}
CREATE TABLE odbc_t
(
    `int_id` Int32,
    `float_nullable` Nullable(Float32)
)
ENGINE = ODBC('DSN=mysqlconn', 'test', 'test')
```

```sql theme={null}
SELECT * FROM odbc_t
```

```text theme={null}
┌─int_id─┬─float_nullable─┐
│      1 │           ᴺᵁᴸᴸ │
└────────┴────────────────┘
```

<div id="see-also">
  ## Véase también
</div>

* [Diccionarios ODBC](/es/reference/statements/create/dictionary/sources/odbc)
* [Función de tabla ODBC](/es/reference/functions/table-functions/odbc)
