Saltar al contenido principal
Permite a ClickHouse conectarse a bases de datos externas mediante ODBC. 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.

Crear una tabla

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. 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 los valores a los tipos de datos de ClickHouse.
  • La configuración 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.

Ejemplo de uso

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.
$ sudo mysql
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.
$ 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.
$ isql -v mysqlconn
+-------------------------+
| Connected!                            |
|                                       |
...
Tabla en MySQL:
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:
CREATE TABLE odbc_t
(
    `int_id` Int32,
    `float_nullable` Nullable(Float32)
)
ENGINE = ODBC('DSN=mysqlconn', 'test', 'test')
SELECT * FROM odbc_t
┌─int_id─┬─float_nullable─┐
│      1 │           ᴺᵁᴸᴸ │
└────────┴────────────────┘

Véase también

Última modificación el 10 de junio de 2026