将 ClickHouse 连接到外部数据源与 JDBC
使用 JDBC 需要 ClickHouse JDBC 桥接,因此您需要在本地机器上使用 clickhouse-local
将数据从您的数据库流式传输到 ClickHouse Cloud。请访问 Migrate 部分文档中 使用 clickhouse-local 页面以获取详细信息。
概述: 结合 jdbc 表函数 或 JDBC 表引擎,ClickHouse 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
的值中,您需要根据正在运行的 MySQL 实例替换<host>
和<port>
的适当值,例如"jdbc:mysql://localhost:3306"
- 您需要用您的 MySQL 凭据替换
<username>
和<password>
,如果不使用密码,可以删除上面配置文件中的"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 桥接。否则,JDBC 桥接需要在每个预计通过桥接访问外部数据源的 ClickHouse 实例上本地安装。
为了外部安装 ClickHouse JDBC 桥接,我们将执行以下步骤:
-
按照本指南第 1 节所述的步骤在专用主机上安装、配置和运行 ClickHouse JDBC 桥接。
-
在每个 ClickHouse 主机上,我们将以下配置块添加到 ClickHouse 服务器配置(根据您选择的配置格式,使用 XML 或 YAML 版本):
- XML
- YAML
- 您需要将
JDBC-Bridge-Host
替换为专用 ClickHouse JDBC 桥接主机的主机名或 IP 地址。 - 我们指定了默认的 ClickHouse JDBC 桥接端口
9019
,如果您使用其他端口,则必须相应调整上面的配置。