5分钟教你搞定DLI SDK

举报
DataLakeInsight 发表于 2018/06/11 20:28:52 2018/06/11
【摘要】 数据湖探索软件开发工具包(Data Lake Insight Software Development Kit,简称DLI SDK)是对DLI提供的REST API进行的封装,以简化用户的开发工作。用户直接调用DLI SDK提供的接口函数即可实现使用DLI业务能力的目的。

1      DLI SDK是什么

数据湖探索软件开发工具包(Data Lake Insight Software Development Kit,简称DLI SDK)是对DLI提供的REST API进行的封装,以简化用户的开发工作。用户直接调用DLI SDK提供的接口函数即可实现使用DLI业务能力的目的。

1.1      如何下载DLI SDK

用户需注册登录后进入控制台,点击右上角的常用链接,下拉框中选择DLI Client进行下载,下载完成后为一个jar包。

image.png

1.2      环境准备

1.2.1        要准备的开发环境如下:

image.png


1.2.2        
操作步骤

  1. Oracle官网下载并安装JDK1.8版本,配置好JAVA环境变量。

    1. 安装JDK

    2. 配置环境变量,在控制面板选择系统属性,单击环境变量

    3. 选择系统变量,新建 “JAVA_HOME 变量,路径配置为JDK安装路径,例如:“D:\Java\jdk1.8.0_45”

    4. 编辑 “Path 变量,在变量值中增加“%JAVA_HOME%\bin;”

    5. 新建 “CLASSPATH 变量,在变量值中填写       “.;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar”

    6. 检验是否配置成功,运行cmd ,输入 java -version。运行结果,请参见1,显示版本信息,则说明安装和配置成功。

image.png


 图检验配置是否成功             


2.Eclipse官网下载并安装Eclipse IDE for Java Developers最新版本。在Eclipse中配置好JDK


    1. 创建新工程,选择JRE版本,请参见2

                image.png

创建新工程

  1. 配置并导入SDKjar包。

    1. 在工程“JRE System Library”上单击右键,选择“Build Path”>“Configure Build Path”,请参见3               image.png

配置工程路径

   b. 单击“Add External JARs”,选择SDK下载jar包,单击OK

 

    image.png                    

选择SDK jar

1.3      使用SDK

1.       使用DLI SDK工具访问DLI,需要用户初始化DLI客户端。用户可以使用AK/SK(Access Key ID/Secret Access Key)Token两种认证方式初始化客户端,示例代码如下

*AK/SK认证方式样例代码

  String ak = "ak";

  String sk = "sk";

  String regionName = "regionname";

  String projectId = "project_id";

  DLIInfo DLIInfo = new DLIInfo(regionName, ak, sk, projectId);

  DLIClient client = new DLIClient(AuthenticationMode.AKSK, DLIInfo);

说明:

aAK/SK的获取方式请参见《统一身份认证服务用户指南》的如何管理访问密钥章节。

b.项目ID的获取方式请参见《统一身份认证服务用户指南》的如何查看项目ID章节。

c.地区和终端节点,获取DLI对应的regionname.

                 * Token认证方式样例代码

  String domainName = "domainname";
  String userName = "username";
  String password = "password";
  String regionName = "regionname";
  String projectId = "project_id";
  DLIInfo DLIInfo = new DLIInfo(regionName, domainName, userName, password, projectId);
  DLIClient client = new DLIClient(AuthenticationMode.TOKEN, DLIInfo);


 

2.       初始化完成后,我们可以创建队列和数据库/

a.创建和删除队列:

            DLI提供创建队列的接口,您可以使用该接口创建队列。示例代码如下:

private static void createQueue(DLIClient client) throws DLIException {
    //通过调用DLIClient对象的createQueue方法创建队列
    String qName = "queueName";
    int cu = 4;
    ChargingMode mode = ChargingMode.CHARGING_MODE_SQL;
    String description = "test for sdk";
    Queue queue = client.createQueue(qName, cu, mode, description);
    System.out.println("---------- createQueue success ---------");
  }


DLI提供删除队列的接口,您可以使用该接口删除队列。示例代码如下:

  private static void deleteQueue(DLIClient client) throws DLIException {
    //调用DLIClient对象的getQueue(queueName)方法获取queueName这个队列
    Queue queue = client.getQueue(queueName);
    //使用deleteQueue()方法删除queueName队列
    queue.deleteQueue();
}


  b.创建数据库

          您可以使用DLI提供的接口创建数据库,示例代码如下:

  private static Database createDatabase(DLIClient client) throws DLIException {

    //通过调用DLIClient对象的createDatabase方法创建数据库

    Database database = client.createDatabase(dbName);

    System.out.println("create database:" + database);

    return database;

  }

           

             c.创建和查询DLI表和OBS

您可以使用DLI提供的接口创建数据存储在DLI内部的表。示例代码如下:

private static Table createDLITable(Database database) throws DLIException {
    //构造表列集合,通过实例化Column对象构建列
    List<Column> columns = new ArrayList<Column>();
    Column c1 = new Column("c1", DataType.STRING, "desc for c1");
    Column c2 = new Column("c2", DataType.INT, "desc for c2");
    Column c3 = new Column("c3", DataType.DOUBLE, "desc for c3");
    Column c4 = new Column("c4", DataType.BIGINT, "desc for c4");
    Column c5 = new Column("c5", DataType.SHORT, "desc for c5");
    Column c6 = new Column("c6", DataType.LONG, "desc for c6");
    Column c7 = new Column("c7", DataType.SMALLINT, "desc for c7");
    Column c8 = new Column("c8", DataType.BOOLEAN, "desc for c8");
    Column c9 = new Column("c9", DataType.DATE, "desc for c9");
    Column c10 = new Column("c10", DataType.TIMESTAMP, "desc for c10");
    Column c11 = new Column("c11", DataType.DECIMAL, "desc for c11");
    columns.add(c1);
    columns.add(c2);
    columns.add(c3);
    columns.add(c4);
    columns.add(c5);
    columns.add(c6);
    columns.add(c7);
    columns.add(c8);
    columns.add(c9);
    columns.add(c10);
    columns.add(c11);

    List<String> sortColumns = new ArrayList<String>();
    sortColumns.add("c1");

    //通过调用Database对象的createDLITable方法创建DLI表
    Table table = database.createDLITable(DLITblName, "desc for table", columns, sortColumns);
    System.out.println(table);
    return table;
  }


您可以使用DLI提供的接口创建数据存储在OBS的表。示例代码如下:

private static Table createObsTable(Database database) throws DLIException {
    //构造表列集合,通过实例化Column对象构建列
    List<Column> columns = new ArrayList<Column>();
    Column c1 = new Column("c1", DataType.STRING, "desc for c1");
    Column c2 = new Column("c2", DataType.INT, "desc for c2");
    Column c3 = new Column("c3", DataType.DOUBLE, "desc for c3");
    Column c4 = new Column("c4", DataType.BIGINT, "desc for c4");
    Column c5 = new Column("c5", DataType.SHORT, "desc for c5");
    Column c6 = new Column("c6", DataType.LONG, "desc for c6");
    Column c7 = new Column("c7", DataType.SMALLINT, "desc for c7");
    Column c8 = new Column("c8", DataType.BOOLEAN, "desc for c8");
    Column c9 = new Column("c9", DataType.DATE, "desc for c9");
    Column c10 = new Column("c10", DataType.TIMESTAMP, "desc for c10");
    Column c11 = new Column("c11", DataType.DECIMAL, "desc for c11");
    columns.add(c1);
    columns.add(c2);
    columns.add(c3);
    columns.add(c4);
    columns.add(c5);
    columns.add(c6);
    columns.add(c7);
    columns.add(c8);
    columns.add(c9);
    columns.add(c10);
    columns.add(c11);


    CsvFormatInfo formatInfo = new CsvFormatInfo();
    formatInfo.setWithColumnHeader(true);
    formatInfo.setDelimiter(",");
    formatInfo.setQuoteChar("\"");
    formatInfo.setEscapeChar("\\");
    formatInfo.setDateFormat("yyyy/MM/dd");
    formatInfo.setTimestampFormat("yyyy-MM-dd HH:mm:ss");

    //通过调用Database对象的createObsTable方法创建OBS表
    Table table = database.createObsTable(obsTblName, "desc for table",columns, StorageType.DLI_CSV, dataPath, formatInfo);
    System.out.println(table);
    return table;
  }


 

您可以使用DLI提供的接口查询数据库下的所有表。示例代码如下:

  private static void listTables(Database database) throws DLIException {
    //调用Database对象的listAllTables方法查询数据库下的所有表
    List<Table> tables = database.listAllTables(true);
    for (Table table : tables) {
      System.out.println(table);
    }
  }


 

 

3.       执行SQL语句和作业查询

        a.执行SQL语句(提交SQL查询作业)

您可以使用DLI提供的接口执行查询并获取查询结果。示例代码如下:

//实例化SQLJob对象,传入执行SQL所需的queue,数据库名,SQL语句
  private static void runSqlJob(Queue queue, Table obsTable) throws DLIException {

    String sql = "select * from " + obsTable.getTableName();
    String queryResultPath = “s3a://dli/sdk/resultData”;

    SQLJob sqlJob = new SQLJob(queue, obsTable.getDb().getDatabaseName(),sql);

    System.out.println("start submit SQL job...");

    //调用SQLJob对象的submit接口提交查询作业
    sqlJob.submit();

    //调用SQLJob对象的getStatus接口查询作业状态
    JobStatus status = sqlJob.getStatus();

    System.out.println(status);
    System.out.println("start export Result...");

    //调用SQLJob对象的exportResult接口导出查询结果,其中queryResultPath为导出数据的路径
    sqlJob.exportResult(queryResultPath, StorageType.CSV,
      CompressType.GZIP,ExportMode.ERRORIFEXISTS, null);

    System.out.println("Job id: " +  sqlJob.getJobId() + ", Status : " + status.getName());
  }


          b . 通过条件过滤获取作业信息

您可以使用DLI提供的接口查询当前工程下的所有作业信息。示例代码如下:

//返回JobResultInfo List集合
  List<JobResultInfo> jobResultInfos = client.listAllJobs();
  //遍历List集合查看Job信息
  for (JobResultInfo jobResultInfo : jobResultInfos) {
        //job id
        System.out.println(jobResultInfo.getJobId());
        //job 描述信息
        System.out.println(jobResultInfo.getDetail());
        //job 状态
        System.out.println(jobResultInfo.getJobStatus());
        //job 类型
        System.out.println(jobResultInfo.getJobType());
  }
  //通过JobType过滤
  List<JobResultInfo> jobResultInfos = client.listAllJobs(JobType.DDL);
  //通过起始时间和JobType过滤,起始时间的格式为unix时间戳
  List<JobResultInfo> jobResultInfos = client.listAllJobs(1502349803729L,1502349821460L,JobType.DDL);
  //通过分页过滤
  List<JobResultInfo> jobResultInfos = client.listAllJobs(100,1,JobType.DDL);
  //分页,起始时间,Job类型
  List<JobResultInfo> jobResultInfos = client.listAllJobs(100,1,1502349803729L,1502349821460L,JobType.DDL);


 

    4.更详细的SDK使用请参考https://support.huaweicloud.com/devg-uquery/uquery_04_0007.html


Data Lake Insight 官网地址:https://www.huaweicloud.com/product/dli.html

Data Lake Insight 体验地址:http://49.4.0.83:8080/#/main/queryEditor

Data Lake Insight 文档中心:https://support.huaweicloud.com/usermanual-uquery/zh-cn_topic_0068141086.html

Data Lake Insight 论坛地址:https://forum.huaweicloud.com/forum-599-1.html



【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。