5分鐘教你搞定DLI SDK
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
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.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?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