DLC JDBC 访问

最近更新时间:2024-05-11 14:37:41

我的收藏

环境准备

依赖:JDK 1.8
JDBC 下载:点击下载 JDBC 驱动

连接 DLC

1. 加载 DLC JDBC 驱动。
Class.forName("com.tencent.cloud.dlc.jdbc.DlcDriver");
2. 通过 DriverManager 创建 Connection。
Connection cnct = DriverManager.getConnection(url, secretId, secretKey);

url 格式

jdbc:dlc:<dlc_endpoint>?task_type=SQLTask&database_name=abc&datasource_connection_name=DataLakeCatalog&region=ap-nanjing&data_engine_name=spark-cu&result_type=COS&read_type=Stream
JDBC 链接串参数说明:
参数
必填
说明
dlc_endpoint
DLC 服务的 Endpoint,固定为 dlc.tencentcloudapi.com
datasource_connection_name
数据源连接名称,对应 DLC 的数据目录
task_type
任务类型。
Presto 引擎填写:SQLTask
SparkSQL 引擎填写:SparkSQLTask
Spark 作业引擎填写:BatchSQLTask
database_name
数据库名称
region
地域,目前 DLC 服务支持 ap-nanjing, ap-beijing, ap-guangzhou,ap-shanghai, ap-chengdu,ap-chongqing, na-siliconvalley, ap-singapore, ap-hongkong
data_engine_name
数据引擎名称
secretId
腾讯云 API 密钥管理中的 SecretId
secretKey
腾讯云 API 密钥管理中的 Secretkey
result_type
默认为 Service。如果您对获取结果的速度有更高要求,可以使用设置为 COS。
Service:通过 DLC 接口获取结果
COS:通过 COS 客户端获取结果
read_type
Stream:流式从 COS 获取结果
DownloadSingle:单个文件下载到本地获取结果
默认值为 Stream. 只有当 result_type 为 COS,该值才有意义。
下载文件位置为 /tmp 临时目录,请确保该目录有读写权限,数据读取完成会自动删除。
resource_group_name
标准 Spark引擎资源组名称

执行查询

Statement stmt = cnct.createStatement();ResultSet rset = stmt.executeQuery("SELECT * FROM dlc");
while (rset.next())
{// process the results
}
rset.close();
stmt.close();
conn.close();
}
rset.close();
stmt.close();
conn.close();

语法支持

目前 JDBC 可以使用的语法与 DLC 标准语法保持一致。

实例代码

库表操作

import java.sql.*;
public class MetaTest {
public static void main(String[] args) throws SQLException {
try {
Class.forName("com.tencent.cloud.dlc.jdbc.DlcDriver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
return;
}
Connection connection = DriverManager.getConnection(
"jdbc:dlc:<dlc_endpoint>?task_type=<task_type>&database_name=<database_name>&datasource_connection_name=DataLakeCatalog&region=<region>&data_engine_name=<data_engine_name>&result_type=<result_type>",
"<secret_id>",
"secret_key");
Statement statement = connection.createStatement();
String dbName = "dlc_db1";
String createDatabaseSql = String.format("CREATE DATABASE IF NOT EXISTS %s", dbName);
statement.execute(createDatabaseSql);
String tableName = "dlc_t1";
String wholeTableName = String.format("%s.%s", dbName, tableName);
String createTableSql =
String.format(
"CREATE EXTERNAL TABLE %s ( "
+ " id string , "
+ " name string , "
+ " status string , "
+ " type string ) "
+ "ROW FORMAT SERDE "
+ " 'org.apache.hadoop.hive.ql.io.orc.OrcSerde' "
+ "STORED AS INPUTFORMAT "
+ " 'org.apache.hadoop.hive.ql.io.orc.OrcInputFormat' "
+ "OUTPUTFORMAT "
+ " 'org.apache.hadoop.hive.ql.io.orc.OrcOutputFormat' "
+ "LOCATION\\\\n"
+ " 'cosn://<bucket_name>/<path>' ",
wholeTableName);
statement.execute(createTableSql);
// get meta data
DatabaseMetaData metaData = connection.getMetaData();
System.out.println("product = " + metaData.getDatabaseProductName());
System.out.println("jdbc version = "
+ metaData.getDriverMajorVersion() + ", "
+ metaData.getDriverMinorVersion());
ResultSet tables = metaData.getTables(null, dbName, tableName, null);
while (tables.next()) {
String name = tables.getString("TABLE_NAME");
System.out.println("table: " + name);
ResultSet columns = metaData.getColumns(null, dbName, name, null);
while (columns.next()) {
System.out.println(
columns.getString("COLUMN_NAME") + "\\\\t" +
columns.getString("TYPE_NAME") + "\\\\t" +
columns.getInt("DATA_TYPE"));
}
columns.close();
}
tables.close();
statement.close();
connection.close();
}
}


数据查询

import java.sql.*;
public class DataTest {
public static void main(String[] args) throws SQLException {
try {
Class.forName("com.tencent.cloud.dlc.jdbc.DlcDriver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
return;
}
Connection connection = DriverManager.getConnection(
"jdbc:dlc:<dlc_endpoint>?task_type=<task_type>&database_name=<database_name>&datasource_connection_name=DataLakeCatalog&region=<region>&data_engine_name=<data_engine_name>&result_type=<result_type>",
"<secret_id>",
"secret_key");
Statement statement = connection.createStatement();
String sql = "select * from dlc_test";
statement.execute(sql);
ResultSet rs = statement.getResultSet();
while (rs.next()) {
System.out.println(rs.getInt(1) + ":" + rs.getString(2));
}
rs.close();
statement.close();
connection.close();
}
}


数据库客户端

您可以将 DLC 的 JDBC 驱动包加载到 SQL 客户端,连接到 DLC 服务进行查询。

前置条件

1. 已开通数据湖计算 Data Lake Compute 服务。
2. 已下载上文中的 JDBC 驱动包。
3. 已下载并安装 SQL Workbench/J

操作步骤

1. 通过 JDBC 驱动包创建 DLC Driver。


2. 连接 DLC,填入如下参数,单击 test,测试通过后,完成与 DLC 的连接。
Name:连接名称,用于标识与 DLC 的连接。
Username:对应于腾讯云用户的 secret_id。
Password:对应于腾讯云用户的 secret_key。
URL:用于连接 DLC 的 URL,格式和上文中通过 jdbc 创建连接的 URL 一致。


3. 查看库表信息


4. 查询数据