跳至主要内容
跳至主要内容

使用 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 作为本教程的外部数据源。

让我们开始吧!

先决条件

您可以使用一台具有以下条件的机器:

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

在本地安装 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 的值中,您需要将 <host><port> 替换为根据您正在运行的 MySQL 实例的适当值,例如 "jdbc:mysql://:3306"
  • 您需要将 <username><password> 替换为您的 MySQL 凭据,如果您不使用密码,可以删除配置文件中 "password": "<password>"
  • driverUrls 的值中,我们只是指定了一个可以下载 当前版本 的 MySQL JDBC 驱动程序的 URL。这就是我们要做的一切,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 桥接器。否则,JDBC 桥接器需要本地安装到每个应该通过桥接器访问外部数据源的 ClickHouse 实例。

为了在外部安装 ClickHouse JDBC 桥接器,我们执行以下步骤

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

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

<jdbc_bridge>
   <host>JDBC-Bridge-Host</host>
   <port>9019</port>
</jdbc_bridge>
注意
  • 您需要将 JDBC-Bridge-Host 替换为专用 ClickHouse JDBC 桥接器主机的 hostname 或 ip 地址
  • 我们指定了默认 ClickHouse JDBC 桥接器端口 9019,如果您为 JDBC 桥接器使用不同的端口,则必须相应地调整上面的配置
    © . This site is unofficial and not affiliated with ClickHouse, Inc.