您可以通过开源的 ClickHouse JDBC 驱动程序连接到 ByteHouse 云数仓版,连接后进行库表操作、数据写入查询等。本文为您介绍ClickHouse JDBC驱动连接ByteHouse 云数仓版的主要操作流程和操作要点。
驱动 | 已验证版本/注意事项 |
---|---|
ClickHouse JDBC基础驱动 | 0.4.2,驱动下载链接 |
Java | 已验证版本:OpenJDK 11 |
Maven
<!-- https://mvnrepository.com/artifact/com.clickhouse/clickhouse-jdbc --> <dependency> <groupId>com.clickhouse</groupId> <artifactId>clickhouse-jdbc</artifactId> <version>0.4.2</version> </dependency>
Gradle
// https://mvnrepository.com/artifact/com.clickhouse/clickhouse-jdbc implementation 'com.clickhouse:clickhouse-jdbc:0.4.2'
驱动安装后,进入以下class:com. click house.jd bc.click House Driver
配置ByteHouse连接参数。
在URL中指定ByteHouse的连接参数。
jdbc:clickhouse://tenant-{TENANT_ID}-{REGION}-public.bytehouse.volces.com:8123/{DATABASE}?user=bytehouse&password={API_KEY}&ssl=true&compress=0
在properties中设置ByteHouse连接参数。
String url = jdbc:clickhouse://tenant-{TENANT_ID}-{REGION}-public.bytehouse.volces.com:8123/{DATABASE}; Properties properties = new Properties(); properties.setProperty("user", bytehouse); properties.setProperty("password", {API_KEY}); properties.setProperty("ssl", "true"); properties.setProperty("compress", "0"); return new ClickHouseDriver().connect(url, properties);
参数 | 配置说明 | |
---|---|---|
url参数 | {TENANT_ID} | 火山引擎主账号UID。 |
{REGION} | ByteHouse的地域。 | |
{DATABASE} | ByteHouse数据库名称。 | |
Properties参数 | user & password | 登录ByteHouse数据库的用户名和密码。
|
ssl | 开启安全协议SSL。 注意 ByteHouse 需要加密认证,从而保护数据安全,因此您需打开SSL。 |
(可选)配置连接ByteHouse后使用的计算组。
如果您有多个计算组,希望后续查询ByteHouse数据时使用指定计算组,或者希望设置其他指定参数,您可以在custom_http_params
中进行设置。
properties.setProperty("custom_http_params", "virtual_warehouse=vw-{AccountID}-{VW_Name}");
执行基本的SQL查询:
Statement statement = connection.createStatement(); // Create database statement.execute("CREATE DATABASE IF NOT EXISTS test_db"); // Create table statement.execute("CREATE TABLE test_db.test_table (id Int32) " + "ENGINE = CnchMergeTree() ORDER BY tuple()"); // Insert data statement.execute("INSERT INTO test_db.test_table VALUES (1), (2), (3)");
使用PreparedStatement进行参数化查询/批量数据写入
PreparedStatement preparedStatement = connection.prepareStatement( "INSERT INTO test_db.test_table VALUES (?)"); preparedStatement.setInt(1, 4); preparedStatement.addBatch(); preparedStatement.executeBatch();
检索和处理查询结果:
ResultSet resultSet = statement.executeQuery("SELECT * FROM test_db.test_table"); while (resultSet.next()) { int value = resultSet.getInt(1); // Process the data }
这是一个展示核心功能的完整示例:
package com.bytedance.bytehouse; import com.clickhouse.jdbc.ClickHouseDriver; import java.sql.*; import java.util.Properties; public class ClickHouseExample { public static void main(String[] args) { String jdbcUrl = "jdbc:clickhouse://tenant-{TENANT_ID}-{REGION}-public.bytehouse.volces.com:8123/{DATABASE}"; Properties properties = new Properties(); properties.setProperty("user", bytehouse); properties.setProperty("password", {API_KEY}); properties.setProperty("ssl", "true"); properties.setProperty("compress", "0"); properties.setProperty("custom_http_params", "virtual_warehouse=vw-{AccountID}-{VW_Name}"); try (Connection connection = new ClickHouseDriver().connect(jdbcUrl, properties); Statement statement = connection.createStatement()) { // Create database and table statement.execute("CREATE DATABASE IF NOT EXISTS test_db"); statement.execute("CREATE TABLE test_db.test_table (id Int32) " + "ENGINE = CnchMergeTree() ORDER BY tuple()"); // Insert data using simple statement statement.execute("INSERT INTO test_db.test_table VALUES (1), (2), (3)"); // Insert data using prepared statement try (PreparedStatement preparedStatement = connection.prepareStatement("INSERT INTO test_db.test_table VALUES (?)")) { preparedStatement.setInt(1, 4); preparedStatement.addBatch(); preparedStatement.executeBatch(); } // Query and process results try (ResultSet resultSet = statement.executeQuery("SELECT * FROM test_db.test_table")) { while (resultSet.next()) { System.out.println("Value: " + resultSet.getInt(1)); } } } catch (SQLException e) { System.err.println("Error: " + e.getMessage()); } } }