Apache kylin WEB界面操作说明

一、题记

Apache kylin 提供了一个非常好用的 Web 界面,通过 web 界面可以将 hive 表里面的数据同步到 kylin 中。基于 Hive 表构建 model(模型)、cube(多维立方体)。通过配置 Mandatory Dimensions(必要维度)、Hierarchy Dimensions(层级维度)、Joint Dimensions(联合维度)减少 Cube 的数据量。

二、使用web操作页面

1、访问 & 登陆
Apache kylin WEB界面操作说明_第1张图片
默认账号:ADMIN 密码:KYLIN

2、Kylin 中可用的 Hive 表

虽然 Kylin 使用 SQL 作为查询接口并利用 Hive 元数据,Kylin 不会让用户查询所有的 hive 表,因为到目前为止它是一个预构建 OLAP (MOLAP) 系统。为了使表在 Kylin 中可用,使用 “Sync” 方法能够方便地从 Hive 中同步表。
Apache kylin WEB界面操作说明_第2张图片
3、Kylin OLAP Cube

Kylin 的 OLAP Cube 是从星型模式的 Hive 表中获取的预计算数据集,这是供用户探索、管理所有 cube 的网页管理页面。由菜单栏进入 Model 页面,系统中所有可用的 cube 将被列出。

Apache kylin WEB界面操作说明_第3张图片
4、在网页上编写和运行 SQL

Kylin 的网页版为用户提供了一个简单的查询工具来运行 SQL 以探索现存的 cube,验证结果并探索使用下一章中的 Pivot analysis 与可视化的结果集。

Apache kylin WEB界面操作说明_第4张图片
5、模型 (model) 构建

kyin 目前只支持星型模型,雪花性模型可以通过预关联成 hive 宽表的方式转换成星型模型。

三、JAVA应用

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 org.apache.commons.codec.binary.Base64;  



/**
 * 
 * http://kylin.apache.org/docs15/
 *
 */
public class KylinHttpUtils {
	
	private static String encoding;
	private static final String baseURL = "http://127.0.0.1:7070/kylin/api";
	public static String login(String user,String passwd){
		String method = "POST";
		String para = "/user/authentication";
		byte[] key = (user+":"+passwd).getBytes();
		encoding = Base64.encodeBase64String(key);
        return  excute(para,method,null);
	}

	
	public static String listQueryableTables(String projectName){
		String method = "GET";
		String para = "/tables_and_columns?project="+projectName;
		return  excute(para,method,null);
		
	}
	
	
	/**
	 * 
	 * @param offset required int Offset used by pagination
	 * @param limit required int Cubes per page.
	 * @param cubeName optional string Keyword for cube names. To find cubes whose name contains this keyword.
	 * @param projectName optional string Project name.
	 * @return
	 */
	public static String listCubes(int offset,
								   int limit,
								   String cubeName,
								   String projectName ){
		String method = "GET";
		String para = "/cubes?offset="+offset
							+"&limit="+limit
							+"&cubeName="+cubeName
							+"&projectName="+projectName;
		return excute(para,method,null); 
	}
	
	/**
	 * 
	 * @param cubeName  Cube name.
	 * @return
	 */
	public static String getCubeDes(String cubeName){
		String method = "GET";
		String para = "/cube_desc/"+cubeName;
		return excute(para,method,null); 
		
	}
	
	
	/**
	 * 
	 * @param cubeName
	 * @return
	 */
	public static String getCube(String cubeName){
		String method = "GET";
		String para = "/cubes/"+cubeName;
		return excute(para,method,null); 
		
	}
	
	
	
	/**
	 * 
	 * @param modelName Data model name, by default it should be the same with cube name.
	 * @return
	 */
	public static String getDataModel(String modelName){
		String method = "GET";
		String para = "/model/"+modelName;
		return excute(para,method,null);  
		
	}

	/**
	 *  
	 * @param cubeName cubeName Cube name.
	 * @return
	 */
	public static String enableCube(String cubeName){
		
		String method = "PUT";
		String para = "/cubes/"+cubeName+"/enable";
		return excute(para,method,null); 
		
	}
	
	/**
	 * 
	 * @param cubeName Cube name.
	 * @return
	 */
	public static String disableCube(String cubeName){
		String method = "PUT";
		String para = "/cubes/"+cubeName+"/disable";
		return excute(para,method,null); 
		
	}
	
	/**
	 *  
	 * @param cubeName Cube name.
	 * @return
	 */
	public static String purgeCube(String cubeName){
		String method = "PUT";
		String para = "/cubes/"+cubeName+"/purge";
		return excute(para,method,null); 
		
	}
	
	
	/**
	 *  
	 * @param jobId Job id
	 * @return
	 */
	public static String resumeJob(String jobId){
		String method = "PUT";
		String para = "/jobs/"+jobId+"/resume";
		return excute(para,method,null); 
		
	}
	
	
	/**
	 * startTime - required long Start timestamp of data to build, e.g. 1388563200000 for 2014-1-1
	 * endTime - required long End timestamp of data to build
	 * buildType - required string Supported build type: ¡®BUILD¡¯, ¡®MERGE¡¯, ¡®REFRESH¡¯
	 * @param cubeName  Cube name.
	 * @return
	 */
	public static String buildCube(String cubeName,String body){
		String method = "PUT";
		String para = "/cubes/"+cubeName+"/rebuild";
		return excute(para,method,body); 
	}
	
	
	/**
	 * 
	 * @param jobId  Job id.
	 * @return
	 */
	public static String discardJob(String jobId){
		String method = "PUT";
		String para = "/jobs/"+jobId+"/cancel";
		return excute(para,method,null); 
		
	}
	
	/**
	 * 
	 * @param jobId  Job id.
	 * @return
	 */
	public static String getJobStatus(String jobId){
		String method = "GET";
		String para = "/jobs/"+jobId;
		return excute(para,method,null); 
		
	}
	
	/**
	 * 
	 * @param jobId Job id.
	 * @param stepId  Step id; the step id is composed by jobId with step sequence id; 
	 * for example, the jobId is ¡°fb479e54-837f-49a2-b457-651fc50be110¡±, its 3rd step id 
	 * is ¡°fb479e54-837f-49a2-b457-651fc50be110-3¡±,
	 * @return
	 */
	public static String getJobStepOutput(String jobId,String stepId){
		String method = "GET";
		String para = "/"+jobId+"/steps/"+stepId+"/output";
		return excute(para,method,null); 
	}
	
	/**
	 * 
	 * @param tableName table name to find.
	 * @return
	 */
	public static String getHiveTable(String tableName){
		String method = "GET";
		String para = "/tables/"+tableName;
		return excute(para,method,null); 
	}
	
	/**
	 * 
	 * @param tableName  table name to find.
	 * @return
	 */
	public static String getHiveTableInfo(String tableName){
		String method = "GET";
		String para = "/tables/"+tableName+"/exd-map";
		return excute(para,method,null); 
	}
	

	/**
	 * 
	 * @param projectName will list all tables in the project.
	 * @param extOptional boolean set true to get extend info of table.
	 * @return
	 */
	public static String getHiveTables(String projectName,boolean extOptional){
		String method = "GET";
		String para = "/tables?project="+projectName+"&ext="+extOptional;
		return excute(para,method,null); 
	}
	
	
	/**
	 * 
	 * @param tables  table names you want to load from hive, separated with comma.
	 * @param project the project which the tables will be loaded into.
	 * @return
	 */
	public static String loadHiveTables(String tables,String project){
		String method = "POST";
		String para = "/tables/"+tables+"/"+project;
		return excute(para,method,null); 
	}
	
	/**
	 * 
	 * @param type ¡®METADATA¡¯ or ¡®CUBE¡¯
	 * @param name  Cache key, e.g the cube name.
	 * @param action ¡®create¡¯, ¡®update¡¯ or ¡®drop¡¯
	 * @return
	 */
	public static String wipeCache(String type,String name,String action){
		String method = "POST";
		String para = "/cache/"+type+"/"+name+"/"+action;
		return excute(para,method,null); 
	}
	
	
	public static String query(String body){
		String  method = "POST";
		String para = "/query";
		return excute(para,method,body);
	}
	
	
	
	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);
            String value = "Basic " + encoding;
            connection.setRequestProperty("Authorization", value);
            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)); 
            String line;
            while ((line = in.readLine()) != null) {
            	out.append(line);
            }
            in.close();
            connection.disconnect();
        } catch(Exception e) {
            e.printStackTrace();
        }
		return out.toString();
	}
}


public static void main(String[] args){
		String output ; 
		KylinHttpBasic.login("ADMIN","KYLIN");	
		String body = "{\"sql\":\"select * from FACT_\",\"offset\":0,\"limit\":50000,\"acceptPartial\":false,\"project\":\"my_kylin\"}";	
		output = KylinHttpBasic.query(body);	
		System.out.println(output);
		
	}

你可能感兴趣的:(JAVA开发)