转 :http://www.cnblogs.com/dreamfactory/p/5588203.html
KylinRest 上面这位大神已经写的差不多了,我只是补充一下。
获取API数据的前提需要登录:
这是官网的描述:
public static String login(String user,String passwd){
String method = "POST";
String para = "/user/authentication";
byte[] key = (user+":"+passwd).getBytes();
encoding = new sun.misc.BASE64Encoder().encode(key);
return excute(para,method,null);
}
这是实现的部分代码
还有在调用“POST” 和“PUT”加参数的时候需要转义。
例如:
public static String query(String body){
String method = "POST";
String para = "/query";
return excute(para,method,body);
}
public static void main(String[] args) throws Exception {
String login = login("ADMIN","KYLIN");
System.out.println(login);
String str = "{\"sql\":\"select * from dim_usertype\",\"offset\":0,\"limit\":5,\"acceptPartial\":false,\"project\":\"HiveTest\"}";
String query = query(str);
}
构建BUILD:
获取CUBE的UUID及其JOB的UUID和执行日期:
获取到就可以获取UUID和时间
package hdpTest;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.io.IOException;
import java.io.PrintWriter;
import java.net.URLConnection;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import java.util.Map;
import net.sf.json.*;
public class KylinRestTest2 {
private static String encoding;
private static final String baseURL = "http://10.6.105.159:7070/kylin/api";
public static String login(String user,String passwd){
String method = "POST";
String para = "/user/authentication";
byte[] key = (user+":"+passwd).getBytes();
encoding = new sun.misc.BASE64Encoder().encode(key);
return excute(para,method,null);
}
public static String getCube(String cubeName){
String method = "GET";
String para = "/cubes?cubeName="+cubeName;
return excute(para,method,null);
}
public static void buildCube() throws Exception{
login("ADMIN","KYLIN");
String cube = getCube("cube_user");
JSONObject jsoncube = JSONObject.fromObject(cube.substring(1, cube.length()-1));
String cubeuuid = (String) jsoncube.get("uuid");
System.out.println("CUBE的UUID="+cubeuuid);
JSONArray cubesegment = (JSONArray) jsoncube.get("segments");
for(int i=0;i<cubesegment.size();i++){
System.out.println("JOB的UUID="+JSONObject.fromObject(cubesegment.get(i)).get("uuid"));
String[] s = JSONObject.fromObject(cubesegment.get(i)).get("name").toString().split("_");
System.out.println("JOB开始时间="+s[0]);
System.out.println("JOB结束时间="+s[0]);
}
}
public static void main(String[] args) throws Exception {
buildCube();
}
public static long dateToStamp(String s) throws Exception{
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date = simpleDateFormat.parse(s);
long ts = date.getTime();
return ts;
}
private static String excute(String para,String method,String body){
StringBuilder out = new StringBuilder();
try {
URL url = new URL(baseURL+para);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod(method);
connection.setDoOutput(true);
connection.setRequestProperty ("Authorization", "Basic " + encoding);
connection.setRequestProperty("Content-Type","application/json");
if(body !=null){
byte[] outputInBytes = body.getBytes("UTF-8");
OutputStream os = connection.getOutputStream();
os.write(outputInBytes);
os.close();
}
InputStream content = (InputStream)connection.getInputStream();
BufferedReader in = new BufferedReader (new InputStreamReader (content,"UTF-8"));
String line;
while ((line = in.readLine()) != null) {
out.append(line);
}
in.close();
connection.disconnect();
} catch(Exception e) {
e.printStackTrace();
}
return out.toString();
}
}
CUBE进行BUILD:
package hdpTest;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.io.IOException;
import java.io.PrintWriter;
import java.net.URLConnection;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import java.util.Map;
import net.sf.json.*;
public class KylinRestTest2 {
private static String encoding;
private static final String baseURL = "http://10.6.105.159:7070/kylin/api";
public static String login(String user,String passwd){
String method = "POST";
String para = "/user/authentication";
byte[] key = (user+":"+passwd).getBytes();
encoding = new sun.misc.BASE64Encoder().encode(key);
return excute(para,method,null);
}
public static String buildCube(String cubeName,String body){
String method = "PUT";
String para = "/cubes/"+cubeName+"/rebuild";
return excute(para,method,body);
}
public static void main(String[] args) throws Exception {
String starttime = "2017-10-31 23:55:00";
String endtime = "2017-11-02 00:00:00";
String strbuild = "{\"startTime\":\""+dateToStamp(starttime)
+"\",\"endTime\":\""+dateToStamp(endtime)+"\",\"buildType\":\"BUILD\"}";
buildCube("cube_user",strbuild);
}
public static long dateToStamp(String s) throws Exception{
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date = simpleDateFormat.parse(s);
long ts = date.getTime();
return ts/1000;
}
private static String excute(String para,String method,String body){
StringBuilder out = new StringBuilder();
try {
URL url = new URL(baseURL+para);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod(method);
connection.setDoOutput(true);
connection.setRequestProperty ("Authorization", "Basic " + encoding);
connection.setRequestProperty("Content-Type","application/json");
if(body !=null){
byte[] outputInBytes = body.getBytes("UTF-8");
OutputStream os = connection.getOutputStream();
os.write(outputInBytes);
os.close();
}
InputStream content = (InputStream)connection.getInputStream();
BufferedReader in = new BufferedReader (new InputStreamReader (content,"UTF-8"));
String line;
while ((line = in.readLine()) != null) {
out.append(line);
}
in.close();
connection.disconnect();
} catch(Exception e) {
e.printStackTrace();
}
return out.toString();
}
}
注意startTime和endTime 他的时间戳是精确到秒,不是毫秒。