快速玩转DLI SDK

举报
cwk 发表于 2020/08/10 22:54:00 2020/08/10
【摘要】 数据湖探索软件开发工具包(Data Lake Insight Software Development Kit,简称DLI SDK)对DLI提供的REST API进行封装,客户能够通过SDK快速简便的开发自己的应用,省去了自行封装API的麻烦,很大程度上提高了用户开发效率和减少了开发难度,用户能够使用简单的调用实现一整套业务逻辑,接下来介绍一下如何快速玩转DLI JAVA SDK。 环...

数据湖探索软件开发工具包(Data Lake Insight Software Development Kit,简称DLI SDK)对DLI提供的REST API进行封装,客户能够通过SDK快速简便的开发自己的应用,省去了自行封装API的麻烦,很大程度上提高了用户开发效率和减少了开发难度,用户能够使用简单的调用实现一整套业务逻辑,接下来介绍一下如何快速玩转DLI JAVA SDK

环境准备:1.JAVA开发运行环境JDK,从Oracle官网下载并安装JDK,配置好JAVA环境变量,推荐1.8版本;2.操作系统可选linux或者windows;3.开发工具可使用IDEA或者Eclipse.下面主要介绍使用IDEA工具进行SDK开发。

IDEA先建一个JAVA工程,需要导入DLI SDK依赖包,DLI依赖包在官网(https://uquery-sdk.obs-website.cn-north-1.myhwclouds.com)可以下载,把上述下载的依赖包解压之后获取huaweicloud-dli-sdk-java-{版本号}-jar-with-dependencies.jar包通过IDEA菜单依次点击File -> Project Structure->Modules->Dependencies进行导入,成功导入之后,我们就可以着手写第一个DLI SDK DEMO了。

    DLI SDK有两种认证方式:1.通过AKSK方式,AKSK可以在华为云console页面我的凭证>访问秘钥中获取 2.使用token认证,需要填写用户的账号名(domain name),用户名(user name)和密码,相关信息在我的凭证>API凭证中获取。认证信息初始化分别可以使用以下代码:

 //AKSK认证
DLIInfo info = new DLIInfo(regionName, ak, sk, projectId);
DLIClient dliClient = new DLIClient(AuthenticationMode.AKSK, info);

//TOKEN认证
DLIInfo info = new DLIInfo(regionName, doaminName, userName, password, projectId);
DLIClient dliClient = new DLIClient(AuthenticationMode.TOKEN, info);

 

认证流程过后,我们可以调用相关接口去获取当前一些表的信息,比如客户想获取某个db1下的某张表tb1元数据信息,就可以通过如下实现方式:

public static void main( String[] args ) throws DLIException
{
    DLIInfo info =
new DLIInfo(regionName, ak, sk, projectId);
   
DLIClient dliClient = new DLIClient(AuthenticationMode.TOKEN, info);
   
TableSchema tableInfo =  dliClient.getDatabase(db1).getTable(tb1).getTableDetail();
   
tableInfo.getColumn().forEach( column -> {
        System.
out.println("列名为:" + column.getColumnName());
       
System.out.println("列类型为" + column.getType());
   
});
}

通过tableSchema,我们能够拿到表的列表和类型,也可以获取到分区列和列描述信息等。

      

       大部分客户通过DLI SDK进行提交作业完成业务对接,对于DDL相关作业,我们可以通过SDK直接提交并同步获取作业结果,比如我们如果要实现truncate table逻辑,我们就可以初始化一个DLI JOB,进行SQL作业同步提交,等待执行结果。对于一些异步作业,比如upload接口,需要处理的时间较长,我们需要循环判断作业运行是否完毕,代码如下所示。

 

// 同步作业提交(truncate table)
String truncateSql = "truncate table " + table;
SQLJob sqlJob = new SQLJob(dliClient.getQueue(queueName), database, truncateSql);
sqlJob.submit();
if (sqlJob.getStatus().equals(JobStatus.FINISHED)) {
 System.out.println(“作业执行成功”}
}


//异步作业提交(数据通过upload接口导入DLI)
UploadJob uploadJob = new UploadJob(dliClient.getQueue(queueName), database, table);
Writer writer = uploadJob.createWriter();
Row row = uploadJob.newRow();

// 设置数据
row.setInt(0, 1);
row.setString(1,”test”);
writer.write(row);
writer.flush();
uploadJob.beginCommit();

// 等待作业结束
while (!(uploadJob.getCommitStatus().getName().equalsIgnoreCase(JobStatus.FAILED.getName())
        || uploadJob.getCommitStatus().getName().equalsIgnoreCase(JobStatus.FINISHED.getName()))) {
    sleep(1000);
}
writer.close();

 如果想进一步了解DLI SDK的更多的使用方法,可以继续浏览官方指导文档(https://support.huaweicloud.com/sdkreference-dli/dli_04_0008.html)。

 

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

评论(0

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

全部回复

上滑加载中

设置昵称

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

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

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