使用 JDBC 将 ClickHouse 连接到外部数据源
使用 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 桥接器(您可以随意命名文件夹并将其放在您喜欢的任何位置)
mkdir ~/clickhouse-jdbc-bridge
现在我们将 当前版本 的 ClickHouse JDBC 桥接器下载到该文件夹中
cd ~/clickhouse-jdbc-bridge
wget https://github.com/ClickHouse/clickhouse-jdbc-bridge/releases/download/v2.0.7/clickhouse-jdbc-bridge-2.0.7-shaded.jar
为了能够连接到 MySQL,我们正在创建一个命名数据源
cd ~/clickhouse-jdbc-bridge
mkdir -p config/datasources
touch config/datasources/mysql8.json
您现在可以将以下配置复制并粘贴到文件 ~/clickhouse-jdbc-bridge/config/datasources/mysql8.json
中
{
"mysql8": {
"driverUrls": [
"https://repo1.maven.org/maven2/mysql/mysql-connector-java/8.0.28/mysql-connector-java-8.0.28.jar"
],
"jdbcUrl": "jdbc:mysql://<host>:<port>",
"username": "<username>",
"password": "<password>"
}
}
在上面的配置文件中
- 您可以随意为数据源使用任何名称,我们使用了
mysql8
- 在
jdbcUrl
的值中,您需要根据您运行的 MySQL 实例将<host>
和<port>
替换为适当的值,例如"jdbc:mysql://127.0.0.1:3306"
- 您需要将
<username>
和<password>
替换为您的 MySQL 凭据,如果您不使用密码,您可以删除上面配置文件中的"password": "<password>"
行 - 在
driverUrls
的值中,我们只是指定了一个 URL,可以从中下载 当前版本 的 MySQL JDBC 驱动程序。 这就是我们必须做的全部,ClickHouse JDBC 桥接器将自动下载该 JDBC 驱动程序(到特定于操作系统的目录中)。
现在我们准备启动 ClickHouse JDBC 桥接器
cd ~/clickhouse-jdbc-bridge
java -jar clickhouse-jdbc-bridge-2.0.7-shaded.jar
我们在前台模式下启动了 ClickHouse JDBC 桥接器。 为了停止桥接器,您可以将上面的 Unix shell 窗口带到前台并按 CTRL+C
。
从 ClickHouse 内部使用 JDBC 连接
ClickHouse 现在可以通过使用 jdbc 表函数 或 JDBC 表引擎 来访问 MySQL 数据。
执行以下示例的最简单方法是将它们复制并粘贴到 clickhouse-client
或 Play UI 中。
- jdbc 表函数
SELECT * FROM jdbc('mysql8', 'mydatabase', 'mytable');
作为 jdbc 表函数的第一个参数,我们使用上面配置的命名数据源的名称。
- JDBC 表引擎
CREATE TABLE mytable (
<column> <column_type>,
...
)
ENGINE = JDBC('mysql8', 'mydatabase', 'mytable');
SELECT * FROM mytable;
作为 jdbc 引擎子句的第一个参数,我们使用上面配置的命名数据源的名称
ClickHouse JDBC 引擎表的架构和连接的 MySQL 表的架构必须对齐,例如,列名和顺序必须相同,并且列数据类型必须兼容
在外部安装 ClickHouse JDBC 桥接器
对于分布式 ClickHouse 集群(具有多个 ClickHouse 主机的集群),在自己的主机上外部安装和运行 ClickHouse JDBC 桥接器是有意义的

这样做的好处是每个 ClickHouse 主机都可以访问 JDBC 桥接器。 否则,对于每个应该通过桥接器访问外部数据源的 ClickHouse 实例,都需要在本地安装 JDBC 桥接器。
为了在外部安装 ClickHouse JDBC 桥接器,我们执行以下步骤
-
我们按照本指南第 1 节中描述的步骤,在专用主机上安装、配置和运行 ClickHouse JDBC 桥接器。
-
在每个 ClickHouse 主机上,我们将以下配置块添加到 ClickHouse 服务器配置 中(根据您选择的配置格式,使用 XML 或 YAML 版本)
- XML
- YAML
<jdbc_bridge>
<host>JDBC-Bridge-Host</host>
<port>9019</port>
</jdbc_bridge>
jdbc_bridge:
host: JDBC-Bridge-Host
port: 9019
- 您需要将
JDBC-Bridge-Host
替换为专用 ClickHouse JDBC 桥接器主机的主机名或 IP 地址 - 我们指定了默认的 ClickHouse JDBC 桥接器端口
9019
,如果您为 JDBC 桥接器使用不同的端口,则必须相应地调整上面的配置