ClickHouse(17)ClickHouse集成JDBC表引擎详细解析

打印 上一主题 下一主题

主题 559|帖子 559|积分 1677

目录

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(datasource_uri, external_database, external_table)
复制代码
引擎参数

  • datasource_uri — 外部DBMS的URI或名字.
    URI格式: jdbc:://:/?user=&password=.
    MySQL示例: jdbc:mysql://localhost:3306/?user=root&password=root.
  • external_database — 外部DBMS的数据库名.
  • external_table — external_database中的外部表名或类似select * from table1 where column1=1的查询语句.
用法示例

通过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. └────────┴──────────────┴───────┴────────────────┘
复制代码
  1. INSERT INTO jdbc_table(`int_id`, `float`)
  2. SELECT toInt32(number), toFloat32(number * 1.0)
  3. FROM system.numbers
复制代码
JDBC表函数

clickhouse除了支持建表集成jdbc数据源之外,还支持通过表函数,也就是返回一个表的函数,来临时集成查询一张表的数据。它与建表集成一样,需要clickhouse-jdbc-bridge程序才能运行。它支持可空类型(基于查询的远程表的DDL)。
示例
  1. SELECT * FROM jdbc('jdbc:mysql://localhost:3306/?user=root&password=root', 'schema', 'table')
复制代码
  1. SELECT * FROM jdbc('mysql://localhost:3306/?user=root&password=root', 'select * from schema.table')
复制代码
  1. SELECT * FROM jdbc('mysql-dev?p1=233', 'num Int32', 'select toInt32OrZero(''{{p1}}'') as num')
复制代码
  1. SELECT *
  2. FROM jdbc('mysql-dev?p1=233', 'num Int32', 'select toInt32OrZero(''{{p1}}'') as num')
复制代码
  1. SELECT a.datasource AS server1, b.datasource AS server2, b.name AS db
  2. FROM jdbc('mysql-dev?datasource_column', 'show databases') a
  3. INNER JOIN jdbc('self?datasource_column', 'show databases') b ON a.Database = b.name
复制代码
资料分享

ClickHouse经典中文文档分享
参考文章


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

知者何南

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表