JDBC

允许CH通过 JDBC 连接到外部数据库。

要实现JDBC连接,CH需要使用以后台进程运行的程序 clickhouse-jdbc-bridge

该引擎支持 Nullable 数据类型。

建表

  1. CREATE TABLE [IF NOT EXISTS] [db.]table_name
  2. (
  3. columns list...
  4. )
  5. ENGINE = JDBC(dbms_uri, external_database, external_table)

引擎参数

  • dbms_uri — 外部DBMS的uri.

    格式: jdbc:<driver_name>://<host_name>:<port>/?user=<username>&password=<password>.
    MySQL示例: jdbc:mysql://localhost:3306/?user=root&password=root.

  • external_database — 外部DBMS的数据库名.

  • external_tableexternal_database中的外部表名.

用法示例

通过mysql控制台客户端来创建表

Creating a table in MySQL server by connecting directly with it’s console client:

  1. mysql> CREATE TABLE `test`.`test` (
  2. -> `int_id` INT NOT NULL AUTO_INCREMENT,
  3. -> `int_nullable` INT NULL DEFAULT NULL,
  4. -> `float` FLOAT NOT NULL,
  5. -> `float_nullable` FLOAT NULL DEFAULT NULL,
  6. -> PRIMARY KEY (`int_id`));
  7. Query OK, 0 rows affected (0,09 sec)
  8. mysql> insert into test (`int_id`, `float`) VALUES (1,2);
  9. Query OK, 1 row affected (0,00 sec)
  10. mysql> select * from test;
  11. +------+----------+-----+----------+
  12. | int_id | int_nullable | float | float_nullable |
  13. +------+----------+-----+----------+
  14. | 1 | NULL | 2 | NULL |
  15. +------+----------+-----+----------+
  16. 1 row in set (0,00 sec)

在CH服务端创建表,并从中查询数据:

  1. CREATE TABLE jdbc_table
  2. (
  3. `int_id` Int32,
  4. `int_nullable` Nullable(Int32),
  5. `float` Float32,
  6. `float_nullable` Nullable(Float32)
  7. )
  8. ENGINE JDBC('jdbc:mysql://localhost:3306/?user=root&password=root', 'test', 'test')
  1. SELECT *
  2. FROM jdbc_table
  1. ┌─int_id─┬─int_nullable─┬─float─┬─float_nullable─┐
  2. 1 ᴺᵁᴸᴸ 2 ᴺᵁᴸᴸ
  3. └────────┴──────────────┴───────┴────────────────┘

参见

原始文档