如何通过代理配置Apache Druid访问PostgreSQL与ClickHouse数据库
方案可行性说明
Apache Druid支持直接通过SQL查询PostgreSQL和ClickHouse外部数据源,无需额外代理,方案完全可行。以下是具体配置与查询方法:
一、前置准备
- 确保Druid集群加载
druid-jdbc-storage扩展,在common.runtime.properties中添加:
druid.extensions.loadList=["druid-jdbc-storage", ...]
- 将对应数据库的JDBC驱动包放入Druid的
lib目录:- PostgreSQL驱动:
postgresql-<对应版本>.jar - ClickHouse驱动:
clickhouse-jdbc-<对应版本>.jar(推荐官方JDBC驱动)
- PostgreSQL驱动:
- 重启Druid集群使配置生效。
二、查询PostgreSQL数据源
方式1:提前创建外部表
CREATE EXTERNAL TABLE postgres_external ( id VARCHAR, value DOUBLE, event_time TIMESTAMP ) STORED BY 'org.apache.druid.sql.calcite.JdbcStorage' WITH ( 'driverClassName' = 'org.postgresql.Driver', 'url' = 'jdbc:postgresql://<PostgreSQL主机>:<端口>/<数据库名>', 'user' = '<用户名>', 'password' = '<密码>', 'table' = '<目标表名>' ); -- 执行查询 SELECT id, sum(value) FROM postgres_external WHERE event_time > CURRENT_TIMESTAMP - INTERVAL '1 day' GROUP BY id;
方式2:直接临时查询
无需提前建表,直接嵌套查询逻辑:
SELECT id, avg(value) FROM EXTERNAL( 'driverClassName' = 'org.postgresql.Driver', 'url' = 'jdbc:postgresql://<PostgreSQL主机>:<端口>/<数据库名>', 'user' = '<用户名>', 'password' = '<密码>', 'query' = 'SELECT id, value FROM <目标表名> WHERE event_time >= $1' ) AS t(id VARCHAR, value DOUBLE) GROUP BY id;
三、查询ClickHouse数据源
配置逻辑与PostgreSQL一致,仅替换JDBC相关参数:
CREATE EXTERNAL TABLE clickhouse_external ( user_id INT, page_views INT, log_date DATE ) STORED BY 'org.apache.druid.sql.calcite.JdbcStorage' WITH ( 'driverClassName' = 'com.clickhouse.jdbc.ClickHouseDriver', 'url' = 'jdbc:clickhouse://<ClickHouse主机>:<端口>/<数据库名>', 'user' = '<用户名>', 'password' = '<密码>', 'table' = '<目标表名>' ); -- 查询示例 SELECT user_id, sum(page_views) FROM clickhouse_external WHERE log_date = '2024-05-20' GROUP BY user_id;
四、整合失败排查点
如果之前尝试失败,可从以下方向检查:
- 确认JDBC驱动版本与数据库版本兼容,且已正确放置到Druid的
lib目录 - 检查Druid节点与PostgreSQL/ClickHouse的网络连通性,确保目标端口开放
- 验证数据库账号权限:需具备目标表的查询权限
- 确认
common.runtime.properties中已正确添加druid-jdbc-storage扩展
五、关于S3备选方案
如果外部JDBC查询无法满足性能或场景需求,Druid也支持将PostgreSQL/ClickHouse的数据批量导入Druid存储,或直接查询S3上的Parquet、CSV等格式数据。但直接查询外部数据库的方案更适合需要实时访问源数据、避免数据冗余的场景。
内容的提问来源于stack exchange,提问作者Codezero
相关产品推荐
相关产品推荐

