使用 JDBC 查询

Lakehouse JDBC 驱动由轻量 artifact

clickzetta-jdbc
clickzetta-jdbc
提供,完整 SDK
clickzetta-java
clickzetta-java
也包含同一 JDBC 模块。你可以通过标准 JDBC API 执行查询、DML、DDL,也可以在需要时获取最近一次执行的 Lakehouse 作业 ID。

概述

JDBC 适合 Java 应用查询 Lakehouse、集成连接池或执行低频小批量写入。如果要持续高频写入事件流,优先使用 实时写入数据;如果要批量导入大量历史数据,优先使用 批量写入数据(Bulkload)

安装

<dependency> <groupId>com.clickzetta</groupId> <artifactId>clickzetta-jdbc</artifactId> <version>${clickzetta-jdbc.version}</version> </dependency>

只使用

DriverManager
DriverManager
、连接池或 ORM 时推荐该依赖。如果还需要
ClickZettaClient
ClickZettaClient
、Realtime 或 Bulkload,使用包含 JDBC 模块的
clickzetta-java
clickzetta-java
,不要同时引入两个 artifact。

驱动类名:

com.clickzetta.client.jdbc.ClickZettaDriver

JDBC URL

JDBC URL 格式如下:

jdbc:clickzetta://<instance_name>.<region_id>.api.clickzetta.com/<workspace_name>?<connection_params>

常用参数:

参数说明
username
username
登录用户名;也可以通过
DriverManager.getConnection(url, username, password)
DriverManager.getConnection(url, username, password)
传入
password
password
登录密码;也可以通过
DriverManager.getConnection(url, username, password)
DriverManager.getConnection(url, username, password)
传入
schema
schema
默认 SCHEMA
virtualCluster
virtualCluster
默认计算集群
use_http=true
use_http=true
使用 HTTP 协议;通常仅在 Private Link 等特殊网络场景使用
use_oss_internal_endpoint=true
use_oss_internal_endpoint=true
阿里云场景下查询结果下载优先使用 OSS 内网 Endpoint

示例:

jdbc:clickzetta://demo.cn-shanghai-alicloud.api.clickzetta.com/quick_start?schema=public&virtualCluster=default_ap

创建连接

通过 DriverManager 创建

import java.sql.Connection; import java.sql.DriverManager; public class JdbcConnectionDemo { public static void main(String[] args) throws Exception { String jdbcUrl = args[0]; String username = args[1]; String password = args[2]; Class.forName("com.clickzetta.client.jdbc.ClickZettaDriver"); try (Connection connection = DriverManager.getConnection(jdbcUrl, username, password)) { System.out.println("Connected to Lakehouse."); } } }

通过 ClickZettaClient 创建

此方式仅适用于完整 SDK

clickzetta-java
clickzetta-java
;轻量的
clickzetta-jdbc
clickzetta-jdbc
不提供
ClickZettaClient
ClickZettaClient

import com.clickzetta.client.ClickZettaClient; import java.sql.Connection; public class ClientJdbcConnectionDemo { public static void main(String[] args) throws Exception { ClickZettaClient client = ClickZettaClient.newBuilder() .url(args[0]) .username(args[1]) .password(args[2]) .build(); try (Connection connection = client.getJdbcConnection()) { System.out.println("Connected to Lakehouse."); } finally { client.close(); } } }

查询数据

import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.Statement; public class QueryDemo { public static void main(String[] args) throws Exception { String jdbcUrl = args[0]; String username = args[1]; String password = args[2]; try (Connection connection = DriverManager.getConnection(jdbcUrl, username, password); Statement statement = connection.createStatement(); ResultSet resultSet = statement.executeQuery("SELECT 1 AS id, 'lakehouse' AS name")) { if (resultSet.next()) { System.out.println("id=" + resultSet.getInt("id") + " name=" + resultSet.getString("name")); } } } }

执行 DML

import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; public class InsertDemo { public static void main(String[] args) throws Exception { String jdbcUrl = args[0]; String username = args[1]; String password = args[2]; String sql = "INSERT INTO public.doc_java_sdk_events (event_id, user_id) VALUES (?, ?)"; try (Connection connection = DriverManager.getConnection(jdbcUrl, username, password); PreparedStatement statement = connection.prepareStatement(sql)) { statement.setString(1, "event_001"); statement.setInt(2, 10001); statement.execute(); } } }

获取作业 ID

JDBC 驱动提供

CZStatement
CZStatement
扩展类。每次执行 SQL 后,可以通过
getJobId()
getJobId()
获取最近一次提交的作业 ID。

import com.clickzetta.client.jdbc.core.CZStatement; import java.sql.Connection; import java.sql.DriverManager; public class JobIdDemo { public static void main(String[] args) throws Exception { String jdbcUrl = args[0]; String username = args[1]; String password = args[2]; try (Connection connection = DriverManager.getConnection(jdbcUrl, username, password); CZStatement statement = (CZStatement) connection.createStatement()) { statement.execute("SELECT 1"); String jobId = statement.getJobId(); System.out.println("jobId=" + jobId); } } }

相关文档

联系我们
预约咨询
微信咨询
电话咨询
邮件咨询