跳至主要内容

使用 JDBC 连接 ClickHouse 到外部数据源

注意

使用 JDBC 需要 ClickHouse JDBC 桥接,因此您需要在本地机器上使用 clickhouse-local 将数据从您的数据库流式传输到 ClickHouse Cloud。有关详细信息,请访问文档“迁移”部分中的 使用 clickhouse-local 页面。

概述: ClickHouse JDBC 桥接jdbc 表函数JDBC 表引擎 相结合,允许 ClickHouse 访问任何外部数据源,只要该数据源有可用的 JDBC 驱动程序

ClickHouse JDBC 桥接这在没有可用的外部数据源的原生内置 [集成引擎](/docs/en/engines/table-engines/#integration-engines-integration-engines)、表函数或外部字典,但存在该数据源的 JDBC 驱动程序的情况下非常有用。

您可以将 ClickHouse JDBC 桥接用于读写操作。并且可以同时用于多个外部数据源,例如,您可以在 ClickHouse 上对多个外部和内部数据源实时运行分布式查询。

在本教程中,我们将向您展示安装、配置和运行 ClickHouse JDBC 桥接以将 ClickHouse 连接到外部数据源是多么容易。在本教程中,我们将使用 MySQL 作为外部数据源。

让我们开始吧!

先决条件

您可以访问一台具有以下条件的机器:

  1. Unix shell 和互联网访问
  2. wget 已安装
  3. 已安装当前版本的 Java(例如,OpenJDK 版本 >= 17)
  4. 已安装并运行当前版本的 MySQL(例如,MySQL 版本 >= 8)
  5. 已安装并运行当前版本的 ClickHouse 安装

在本地安装 ClickHouse JDBC 桥接

使用 ClickHouse JDBC 桥接的最简单方法是在 ClickHouse 运行的同一主机上安装并运行它:ClickHouse JDBC 桥接本地

让我们从连接到 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"
  • 您需要使用您的 MySQL 凭据替换 <username><password>,如果您不使用密码,则可以删除上面的配置文件中 "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-clientPlay 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 桥接。

要在外部安装 ClickHouse JDBC 桥接,我们将执行以下步骤。

  1. 我们按照本指南第 1 部分中描述的步骤,在专用主机上安装、配置和运行 ClickHouse JDBC 桥接。

  2. 在每个 ClickHouse 主机上,我们将以下配置块添加到 ClickHouse 服务器配置 中(根据您选择的配置格式,使用 XML 或 YAML 版本)。

<jdbc_bridge>
<host>JDBC-Bridge-Host</host>
<port>9019</port>
</jdbc_bridge>
注意
  • 您需要用专用 ClickHouse JDBC 桥接主机的 hostname 或 IP 地址替换 JDBC-Bridge-Host
  • 我们指定了默认的 ClickHouse JDBC 桥接端口 9019,如果您为 JDBC 桥接使用不同的端口,则必须相应地调整上面的配置。