前言 使用到的插件及数据库版本: Postgresql:10.8 ClickHouse:20.9.3.45 Postgresql-JDBC-driver:42.2.5
JDBC表引擎可以对接Mysql、Postgresql、SQLite等数据库,但是JDBC表引擎不能单独完成对接工作,需要依赖clickhouse-jdbc-bridge的查询代理服务,clickhouse-jdbc-bridge是java语言实现的sql代理服务,项目地址为:
https://github.com/ClickHouse/clickhouse-jdbc-bridge
构建clickhouse-jdbc-bridge 可直接根据上一步的地址编译项目,生成clickhouse-jdbc-bridge-1.0.jar的服务jar包
启动clickhouse-jdbc-bridge代理服务
java -jar ./clickhouse-jdbc-bridge-1.0.jar --driver-path lib --listen-host 127.0.0.1参数说明: –driver-path jdbc驱动存放的路径 –listen-host 代理服务绑定的IP及端口(端口默认为9019) 启动后,日志如下:
配置clickhouse全局配置,添加代理服务的访问地址
vi /etc/clickhouse-server/config.xml添加如下配置:
<jdbc_brige> <host>127.0.0.1</host> <port>9019</port> </jdbc_brige>重启ClickHouse-Server
ENGINE = JDBC(‘JDBC:url’, ‘database’, ‘table’)
参数说明: url:jdbc连接串 database:对接的表所在数据库 table:要对接的表
创建一张映射表:
CREATE TABLE nt_order_payment ( `id` Int32, `order_no` String ) ENGINE JDBC('jdbc:postgresql://xxxx:5432/test?user=xxx&password=xxx', '', 'nt_order_payment');建表
执行查询
select count(0) from nt_order_payment;这时候可以去代理服务clickhouse-jdbc-bridge查看日志输出: 日志显示,jdbc表引擎首先会去ping以下代理服务,ping通之后会向代理服务发送查询请求
例子
select id,order_no from jdbc('jdbc:postgresql://xxx:5432/xxx?user=xxx&password=xxx', '', 'nt_order_payment') limit 1;