快速玩转DLI 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)。
- 点赞
- 收藏
- 关注作者
评论(0)