一、支持引擎类型
·SuperSQL 引擎
·标准 Spark 引擎
·标准 Presto 引擎
注意:说明:
注意:presto 引擎已下线,仅供存量用户使用。
二、环境准备
·依赖:JDK 1.8
·JDBC 下载:点击下载 JDBC 驱动
三、连接 DLC
1. 加载 DLC JDBC 驱动。
Connection cnct = DriverManager.getConnection(url, secretId, secretKey);
四、URL 格式
jdbc:dlc:dlc.tencentcloudapi.com?task_type=SQLTask&database_name=abc&datasource_connection_name=DataLakeCatalog®ion=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 引擎填写:SQLTaskSparkSQL 引擎或者 标准引擎 SQL 资源组 填写:SparkSQLTaskSpark 作业引擎或者 标准引擎批作业填写: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 |
| Token | 否 | (选填)腾讯云账号临时 token,通过临时密钥登陆场景使用。 |
| result_type | 否 | 默认为 Service。如果你对获取结果的速度有更高要求,可以设置为 COSService:通过 DLC 接口获取结果COS:通过 COS 客户端获取结果(标准引擎 Presto 不支持) |
| 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®ion=<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®ion=<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. 查询数据。