将 ClickHouse 连接到外部数据源的 JDBC
使用 JDBC 需要 ClickHouse JDBC 桥,因此您需要在本地机器上使用 clickhouse-local
将数据从您的数据库流式传输到 ClickHouse Cloud。请访问文档中 迁移 部分的 使用 clickhouse-local 页面以获取详细信息。
概述: ClickHouse JDBC 桥 结合 jdbc 表函数 或 JDBC 表引擎 使 ClickHouse 能够访问任何外部数据源的数据,只要该数据源可用 JDBC 驱动程序:

当没有可用的原生内置 集成引擎、表函数或外部字典时,这非常方便,但该数据源存在 JDBC 驱动程序。
您可以使用 ClickHouse JDBC 桥进行读取和写入。同时可以并行访问多个外部数据源,例如,您可以在 ClickHouse 上跨多个外部和内部数据源实时运行分布式查询。
在本课中,我们将展示如何轻松安装、配置和运行 ClickHouse JDBC 桥,以便将 ClickHouse 连接到外部数据源。我们将使用 MySQL 作为本课的外部数据源。
让我们开始吧!
在本地安装 ClickHouse JDBC 桥
使用 ClickHouse JDBC 桥的最简单方法是在与 ClickHouse 运行的同一主机上安装和运行它:
我们首先连接到运行 ClickHouse 的机器上的 Unix shell,并创建一个本地文件夹,以便稍后在其中安装 ClickHouse JDBC 桥(您可以随意命名文件夹并放置在您喜欢的位置):
现在我们将 当前版本 的 ClickHouse JDBC 桥下载到该文件夹中:
为了能够连接到 MySQL,我们创建一个命名数据源:
现在您可以将以下配置复制并粘贴到文件 ~/clickhouse-jdbc-bridge/config/datasources/mysql8.json
中:
在上面的配置文件中
- 您可以自由使用任何您喜欢的命名数据源,我们使用了
mysql8
- 在
jdbcUrl
的值中,您需要将<host>
和<port>
替换为根据您运行的 MySQL 实例适当的值,例如"jdbc:mysql://localhost:3306"
- 您需要将
<username>
和<password>
替换为您的 MySQL 凭据,如果您不使用密码,可以删除配置文件中"password": "<password>"
这一行 - 在
driverUrls
的值中,我们只指定了一个 URL,以便从中下载 当前版本 的 MySQL JDBC 驱动程序。就这样,ClickHouse JDBC 桥将自动下载该 JDBC 驱动程序(到操作系统特定目录中)。
现在我们准备启动 ClickHouse JDBC 桥:
我们在前台模式下启动了 ClickHouse JDBC 桥。为了停止桥接,您可以将上面的 Unix shell 窗口带到前台并按 CTRL+C
。
从 ClickHouse 内部使用 JDBC 连接
ClickHouse 现在可以通过使用 jdbc 表函数 或 JDBC 表引擎 来访问 MySQL 数据。
执行以下示例的最简单方法是将它们复制并粘贴到 clickhouse-client
或 Play UI 中。
- jdbc 表函数:
作为 jdbc 表函数的第一个参数,我们使用上面配置的命名数据源的名称。
- JDBC 表引擎:
作为 jdbc 引擎子句的第一个参数,我们使用上面配置的命名数据源的名称。
ClickHouse JDBC 引擎表的架构和连接的 MySQL 表的架构必须对齐,例如,列名和顺序必须相同,并且列的数据类型必须兼容。
外部安装 ClickHouse JDBC 桥
对于分布式 ClickHouse 集群(多个 ClickHouse 主机的集群),在其自己的主机上安装和运行 ClickHouse JDBC 桥是有意义的:

这有一个优势,即每个 ClickHouse 主机都可以访问 JDBC 桥。否则,每个需要通过桥接访问外部数据源的 ClickHouse 实例都需要在本地安装 JDBC 桥。
为了在外部安装 ClickHouse JDBC 桥,我们执行以下步骤:
-
我们在专用主机上安装、配置和运行 ClickHouse JDBC 桥,按照本指南第一部分中描述的步骤进行操作。
-
在每个 ClickHouse 主机上,我们将以下配置块添加到 ClickHouse 服务器配置 中(根据您选择的配置格式,使用 XML 或 YAML 版本):
- XML
- YAML
- 您需要将
JDBC-Bridge-Host
替换为专用 ClickHouse JDBC 桥主机的主机名或 IP 地址 - 我们指定了默认的 ClickHouse JDBC 桥端口
9019
,如果您使用不同的端口,那么您必须相应地调整上面的配置