天天看点

Apache kylin 入门学习(4) kylin 查询api

之前我们成功创建了kylin的cube,并且可以使用web ui查询.但在真实的生产过程中,使用的是api调用,所以,我们将kylin api进行学习.

官方api文档:这里

本文代码:这里

lylin有两种连接方法

jdbc

这种方法与mysql,hive相似.

package kylin;

import java.io.IOException;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;
import org.apache.kylin.jdbc.Driver;

public class KylinJdbc {
	public void connentJdbc()
			throws InstantiationException, IllegalAccessException, ClassNotFoundException, SQLException {
		Driver driver = (Driver) Class.forName("org.apache.kylin.jdbc.Driver").newInstance();
		Properties info = new Properties();
		info.put("user", "ADMIN");
		info.put("password", "KYLIN");
		Connection conn = driver.connect("jdbc:kylin://*.*.*.*:7070/learn_kylin", info);
		Statement state = conn.createStatement();
		System.out.println("1111");
		ResultSet resultSet = state.executeQuery("select * from kylin_account limit 1000");
		System.out.println("1111");
		while (resultSet.next()) {
			// System.out.println("1111");
			String i = resultSet.getString(3);
			System.out.println(i);
			// System.out.println("1111");
		}
	}

	public static void main(String[] args)
			throws IOException, InstantiationException, IllegalAccessException, ClassNotFoundException, SQLException {
		KylinJdbc ky = new KylinJdbc();
		System.out.println("1111111");
		ky.connentJdbc();
	}
}

           

post

通过post发送请求,返回json.

package kylin;

import java.io.IOException;
import java.io.UnsupportedEncodingException;
import net.sf.json.JSONObject;
import org.apache.axis.encoding.Base64;
import org.apache.http.HttpEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;

public class kylinapi {
	private String encoding = "UTF-8";
	static String ACCOUNT = "ADMIN";
	static String PWD = "KYLIN";

	/**
	 * 使用httpcline 进行post访问
	 * 
	 * @throws IOException
	 */
	public void requestByPostMethod() throws IOException {
		CloseableHttpClient httpClient = this.getHttpClient();
		try {
//创建post方式请求对象
			String url = "http://*.*.*.*:7070/kylin/api/query";
			HttpPost httpPost = new HttpPost(url);
			String sql = "select count(*) from KYLIN_SALES ;";
// 接收参数json列表 (kylin 只接受json格式数据)
			JSONObject jsonParam = new JSONObject();
			jsonParam.put("sql", sql);
			jsonParam.put("limit", "20");
			jsonParam.put("project", "lkproject");
			StringEntity sentity = new StringEntity(jsonParam.toString(), encoding);// 解决中文乱码问题
			sentity.setContentEncoding(encoding);
			sentity.setContentType("application/json");
			httpPost.setEntity(sentity);
//设置header信息
//指定报文头【Content-type】、【User-Agent】
			httpPost.setHeader("Content-type", "application/json;charset=utf-8");
			httpPost.setHeader("Authorization", this.authCode());
			System.out.println("POST 请求...." + httpPost.getURI());
//执行请求
			CloseableHttpResponse httpResponse = httpClient.execute(httpPost);
			try {
				HttpEntity entity = httpResponse.getEntity();
				if (null != entity) {
//按指定编码转换结果实体为String类型
					String body = EntityUtils.toString(entity, encoding);
					JSONObject obj = JSONObject.fromObject(body);
					System.out.println(body);
					System.out.println(obj.get("results"));
				}
			} finally {
				httpResponse.close();
			}
		} catch (UnsupportedEncodingException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			this.closeHttpClient(httpClient);
		}
	}

	/**
	 * kylin 是base64加密的,访问时候需要加上加密码
	 * 
	 * @return
	 */
	private String authCode() {
		String auth = ACCOUNT + ":" + PWD;
		String code = "Basic " + new String(new Base64().encode(auth.getBytes()));
		return code;
	}

	/**
	 * 创建httpclient对象
	 * 
	 * @return
	 */
	private CloseableHttpClient getHttpClient() {
		return HttpClients.createDefault();
	}

	/**
	 * 关闭链接
	 * 
	 * @param client
	 * @throws IOException
	 */
	private void closeHttpClient(CloseableHttpClient client) throws IOException {
		if (client != null) {
			client.close();
		}
	}

	public static void main(String[] args) throws IOException {
		kylinapi ky = new kylinapi();
		ky.requestByPostMethod();
	}
}

           

继续阅读