• Kylin Java RESTful API


      最近在做大数据方面的开发, 学习研究了一段时间的kylin系统, 对于前端开发需要使用 RESTful API ,但是官网并没有提供详细的Java  API. 经过几天的看文档,最终写出了 Java 的API,不敢私藏,特分享与大家.

      1 import java.io.BufferedReader;
      2 import java.io.InputStream;
      3 import java.io.InputStreamReader;
      4 import java.io.OutputStream;
      5 import java.net.HttpURLConnection;
      6 import java.net.URL;
      7 
      8 import org.apache.commons.codec.binary.Base64;  
      9 
     10 
     11 
     12 /**
     13  * 
     14  * @author HennSun  
     15  * www.shareideas.net
     16  * @Reference
     17  * http://kylin.apache.org/docs15/howto/howto_use_restapi.html#authentication
     18  *
     19  */
     20 public class KylinHttpBasic {
     21     
     22     private static String encoding;
     23     private static final String baseURL = "http://10.1.50.123:7070/kylin/api";
     24     public static String login(String user,String passwd){
     25         String method = "POST";
     26         String para = "/user/authentication";
     27         byte[] key = (user+":"+passwd).getBytes();
     28         encoding = new sun.misc.BASE64Encoder().encode(key);
     29         return  excute(para,method,null);
     30     }
     31 
     32     
     33     public static String listQueryableTables(String projectName){
     34          
     35         String method = "GET";
     36         String para = "/tables_and_columns?project="+projectName;
     37         
     38         return  excute(para,method,null);
     39         
     40     }
     41     
     42     
     43     /**
     44      * 
     45      * @param offset required int Offset used by pagination
     46      * @param limit required int Cubes per page.
     47      * @param cubeName optional string Keyword for cube names. To find cubes whose name contains this keyword.
     48      * @param projectName optional string Project name.
     49      * @return
     50      */
     51     public static String listCubes(int offset,
     52                                    int limit,
     53                                    String cubeName,
     54                                    String projectName ){
     55         String method = "GET";
     56         String para = "/cubes?offset="+offset
     57                             +"&limit="+limit
     58                             +"&cubeName="+cubeName
     59                             +"&projectName="+projectName;
     60         return excute(para,method,null); 
     61     }
     62     
     63     /**
     64      * 
     65      * @param cubeName  Cube name.
     66      * @return
     67      */
     68     public static String getCubeDes(String cubeName){
     69         String method = "GET";
     70         String para = "/cube_desc/"+cubeName;
     71         return excute(para,method,null); 
     72         
     73     }
     74     
     75     
     76     /**
     77      * 
     78      * @param cubeName
     79      * @return
     80      */
     81     public static String getCube(String cubeName){
     82         String method = "GET";
     83         String para = "/cubes/"+cubeName;
     84         return excute(para,method,null); 
     85         
     86     }
     87     
     88     
     89     
     90     /**
     91      * 
     92      * @param modelName Data model name, by default it should be the same with cube name.
     93      * @return
     94      */
     95     public static String getDataModel(String modelName){
     96         String method = "GET";
     97         String para = "/model/"+modelName;
     98         return excute(para,method,null);  
     99         
    100     }
    101 
    102     /**
    103      *  
    104      * @param cubeName cubeName Cube name.
    105      * @return
    106      */
    107     public static String enableCube(String cubeName){
    108         
    109         String method = "PUT";
    110         String para = "/cubes/"+cubeName+"/enable";
    111         return excute(para,method,null); 
    112         
    113     }
    114     
    115     /**
    116      * 
    117      * @param cubeName Cube name.
    118      * @return
    119      */
    120     public static String disableCube(String cubeName){
    121         
    122         String method = "PUT";
    123         String para = "/cubes/"+cubeName+"/disable";
    124         return excute(para,method,null); 
    125         
    126     }
    127     
    128     /**
    129      *  
    130      * @param cubeName Cube name.
    131      * @return
    132      */
    133     public static String purgeCube(String cubeName){
    134 
    135         String method = "PUT";
    136         String para = "/cubes/"+cubeName+"/purge";
    137         return excute(para,method,null); 
    138         
    139     }
    140     
    141     
    142     /**
    143      *  
    144      * @param jobId Job id
    145      * @return
    146      */
    147     public static String resumeJob(String jobId){
    148 
    149         String method = "PUT";
    150         String para = "/jobs/"+jobId+"/resume";
    151         return excute(para,method,null); 
    152         
    153     }
    154     
    155     
    156     /**
    157      * startTime - required long Start timestamp of data to build, e.g. 1388563200000 for 2014-1-1
    158      * endTime - required long End timestamp of data to build
    159      * buildType - required string Supported build type: ‘BUILD’, ‘MERGE’, ‘REFRESH’
    160      * @param cubeName  Cube name.
    161      * @return
    162      */
    163     public static String buildCube(String cubeName,String body){
    164         String method = "PUT";
    165         String para = "/cubes/"+cubeName+"/rebuild";
    166         
    167         return excute(para,method,body); 
    168     }
    169     
    170     
    171     /**
    172      * 
    173      * @param jobId  Job id.
    174      * @return
    175      */
    176     public static String discardJob(String jobId){
    177 
    178         String method = "PUT";
    179         String para = "/jobs/"+jobId+"/cancel";
    180         return excute(para,method,null); 
    181         
    182     }
    183     
    184     /**
    185      * 
    186      * @param jobId  Job id.
    187      * @return
    188      */
    189     public static String getJobStatus(String jobId){
    190 
    191         String method = "GET";
    192         String para = "/jobs/"+jobId;
    193         return excute(para,method,null); 
    194         
    195     }
    196     
    197     /**
    198      * 
    199      * @param jobId Job id.
    200      * @param stepId  Step id; the step id is composed by jobId with step sequence id; 
    201      * for example, the jobId is “fb479e54-837f-49a2-b457-651fc50be110”, its 3rd step id 
    202      * is “fb479e54-837f-49a2-b457-651fc50be110-3”,
    203      * @return
    204      */
    205     public static String getJobStepOutput(String jobId,String stepId){
    206         String method = "GET";
    207         String para = "/"+jobId+"/steps/"+stepId+"/output";
    208         return excute(para,method,null); 
    209     }
    210     
    211     /**
    212      * 
    213      * @param tableName table name to find.
    214      * @return
    215      */
    216     public static String getHiveTable(String tableName){
    217         String method = "GET";
    218         String para = "/tables/"+tableName;
    219         return excute(para,method,null); 
    220     }
    221     
    222     /**
    223      * 
    224      * @param tableName  table name to find.
    225      * @return
    226      */
    227     public static String getHiveTableInfo(String tableName){
    228         String method = "GET";
    229         String para = "/tables/"+tableName+"/exd-map";
    230         return excute(para,method,null); 
    231     }
    232     
    233 
    234     /**
    235      * 
    236      * @param projectName will list all tables in the project.
    237      * @param extOptional boolean set true to get extend info of table.
    238      * @return
    239      */
    240     public static String getHiveTables(String projectName,boolean extOptional){
    241         String method = "GET";
    242         String para = "/tables?project="+projectName+"&ext="+extOptional;
    243         return excute(para,method,null); 
    244     }
    245     
    246     
    247     /**
    248      * 
    249      * @param tables  table names you want to load from hive, separated with comma.
    250      * @param project the project which the tables will be loaded into.
    251      * @return
    252      */
    253     public static String loadHiveTables(String tables,String project){
    254         String method = "POST";
    255         String para = "/tables/"+tables+"/"+project;
    256         return excute(para,method,null); 
    257     }
    258     
    259     /**
    260      * 
    261      * @param type ‘METADATA’ or ‘CUBE’
    262      * @param name  Cache key, e.g the cube name.
    263      * @param action ‘create’, ‘update’ or ‘drop’
    264      * @return
    265      */
    266     public static String wipeCache(String type,String name,String action){
    267         String method = "POST";
    268         String para = "/cache/"+type+"/"+name+"/"+action;
    269         return excute(para,method,null); 
    270     }
    271     
    272     
    273     public static String query(String body){
    274         String  method = "POST";
    275         String para = "/query";
    276         
    277         return excute(para,method,body);
    278     }
    279     
    280     
    281     
    282     private  static String excute(String para,String method,String body){
    283     
    284         StringBuilder out = new StringBuilder();
    285         try {
    286             URL url = new URL(baseURL+para);        
    287             HttpURLConnection connection = (HttpURLConnection) url.openConnection();
    288             connection.setRequestMethod(method);   
    289             connection.setDoOutput(true);
    290             connection.setRequestProperty  ("Authorization", "Basic " + encoding);
    291             connection.setRequestProperty("Content-Type","application/json");         
    292             if(body !=null){
    293                 byte[] outputInBytes = body.getBytes("UTF-8");
    294                 OutputStream os = connection.getOutputStream();
    295                 os.write(outputInBytes);    
    296                 os.close();
    297             }
    298             InputStream content = (InputStream)connection.getInputStream();  
    299             BufferedReader in  = new BufferedReader (new InputStreamReader (content)); 
    300             String line;
    301             while ((line = in.readLine()) != null) {
    302                 out.append(line);
    303             }
    304             in.close();
    305             connection.disconnect();
    306             
    307         } catch(Exception e) {
    308             e.printStackTrace();
    309         }
    310         return out.toString();
    311     }
    312 }

    参考:

    http://kylin.apache.org/docs15/howto/howto_use_restapi.html#authentication

  • 相关阅读:
    Noip2017 提高组初赛 游(baozha)记
    bzoj4557
    MVVM
    当下较热web前端技术汇总
    JQ 常见demo
    各种宽高
    JQuery 总结
    自定义滚动条配合鼠标滚轮demo
    H5 触摸事件
    SQL必备知识点
  • 原文地址:https://www.cnblogs.com/dreamfactory/p/5588203.html
Copyright © 2020-2023  润新知