tencent cloud

文档反馈

DLC JDBC 访问

最后更新时间:2024-08-07 17:36:31

    环境准备

    依赖:JDK 1.8

    连接 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 临时目录,请确保该目录有读写权限,数据读取完成会自动删除。

    执行查询

    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. 查询数据
    
    联系我们

    联系我们,为您的业务提供专属服务。

    技术支持

    如果你想寻求进一步的帮助,通过工单与我们进行联络。我们提供7x24的工单服务。

    7x24 电话支持