5分钟教你搞定DLI SDK

网友投稿 706 2022-05-30

1      DLI SDK是什么

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

1.1      如何下载DLI SDK

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

1.2      环境准备

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

1.2.2        操作步骤

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

安装JDK。

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

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

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

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

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

图1 检验配置是否成功

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

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

图2 创建新工程

配置并导入SDKjar包。

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

图3 配置工程路径

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

图4 选择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);

说明:

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 columns = new ArrayList();

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 sortColumns = new ArrayList();

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 columns = new ArrayList();

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

 tables = database.listAllTables(true);

for (Table table : tables) {

System.out.println(table);

}

}

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

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

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

//实例化SQLJob对象,传入执行SQL所需的queue,数据库名,SQL语句

5分钟教你搞定DLI SDK

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 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 jobResultInfos = client.listAllJobs(JobType.DDL);

//通过起始时间和JobType过滤,起始时间的格式为unix时间戳

List jobResultInfos = client.listAllJobs(1502349803729L,1502349821460L,JobType.DDL);

//通过分页过滤

List jobResultInfos = client.listAllJobs(100,1,JobType.DDL);

//分页,起始时间,Job类型

List 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

Java 数据湖探索 DLI API/SDK

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:[Python人工智能] 十八.Keras搭建卷积神经网络及CNN原理详解
下一篇:为什么要阅读代码?怎么阅读k8s源代码?
相关文章