You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过代理配置Apache Druid访问PostgreSQL与ClickHouse数据库

方案可行性说明

Apache Druid支持直接通过SQL查询PostgreSQL和ClickHouse外部数据源,无需额外代理,方案完全可行。以下是具体配置与查询方法:

一、前置准备

  1. 确保Druid集群加载druid-jdbc-storage扩展,在common.runtime.properties中添加:
druid.extensions.loadList=["druid-jdbc-storage", ...]
  1. 将对应数据库的JDBC驱动包放入Druid的lib目录:
    • PostgreSQL驱动:postgresql-<对应版本>.jar
    • ClickHouse驱动:clickhouse-jdbc-<对应版本>.jar(推荐官方JDBC驱动)
  2. 重启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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 13:20:11