3.1简单案例
具体操作步骤
通过同步数据源
建立project->建立model->建立cube->build。
3.1.1 导入Hive表
Hive执行如下操作
create database if not exists sxt_kylin;
use sxt_kylin;
create table kylin_sale(
id int,
day date,
market string,
category string,
item string,
number int,
sales int
)
row format delimited fields terminated by ','
lines terminated by '\n';
kylin_sale表中数据为
1,2019-08-08,商场1,家电类,电脑,2,9000
2,2019-08-08,商场1,家电类,冰箱,3,3000
3,2019-08-08,商场1,家电类,洗衣机,6,3000
4,2019-08-08,商场1,日用品类,厨具四件套,10,500
5,2019-08-08,商场1,日用品类,锅碗瓢盆,5,200
6,2019-08-08,商场1,日用品类,洗洁精,8,240
7,2019-08-08,商场2,家电类,电脑,7,35000
8,2019-08-08,商场2,家电类,冰箱,4,4000
9,2019-08-08,商场2,家电类,洗衣机,5,5000
10,2019-08-08,商场2,日用品类,厨具四件套,8,500
11,2019-08-08,商场2,日用品类,锅碗瓢盆,9,360
12,2019-08-08,商场2,日用品类,洗洁精,10,900
13,2019-08-09,商场1,家电类,电脑,3,15000
14,2019-08-09,商场1,家电类,冰箱,4,3000
15,2019-08-09,商场1,家电类,洗衣机,5,3000
16,2019-08-09,商场1,日用品类,厨具四件套,6,500
17,2019-08-09,商场1,日用品类,锅碗瓢盆,7,350
18,2019-08-09,商场1,日用品类,洗洁精,8,240
19,2019-08-09,商场2,家电类,电脑,9,35000
20,2019-08-09,商场2,家电类,冰箱,5,3000
21,2019-08-09,商场2,家电类,洗衣机,8,5000
22,2019-08-09,商场2,日用品类,厨具四件套,3,300
23,2019-08-09,商场2,日用品类,锅碗瓢盆,8,320
24,2019-08-09,商场2,日用品类,洗洁精,9,900
加载数据:
load data local inpath '/root/kylin_sale' overwrite into table kylin_sale;
3.1.2 创建project
在kylinweb页面创建project
将hive中事实表数据导入kylin
选择要加载的哪些实例库中的哪些表,这里加载kylin_sale表;
选择该表数据点击sync同步
查看页面
3.1.3 创建模型model
如上图:点击 new model,出现以下视图:
给model起个名字,然后点击next;
如上图所示:选择事实表。然后进入下一步,进入到选择维度字段页面,如下图所示:
在这里,我们选择day,market,category,item四个维度,即我们将从这四个维度来统计分析商品的销售额情况。如下图所示:
点击next进入到measure(度量)页面,在这里我们选择number和sales字段,即我们将统计商品数量和商品销售额两个指标。
最后进入到设置页面,我们可以选择分区字段,选择格式化时间方式, 下面的filter可以添加where条件对数据源中的数据做过滤,最后点击save保存,既model创建成功。
3.1.4 创建cube
如上图所示:指明要创建的cube在哪个model下,并且对cube进行命名,然后点击下一步。
如上图所示,对本次cube添加计算的维度,进入到如下页面,我们选择select all 所有4个维度。
指定要进行计算的度量指标(Measures)如下图:
在这里,我们先创建一个销售额度指标,即对销售字段进行sum累加,如上图所示 1,2,3,4步骤。同时我们再创建一个商品数量指标如下图所示:
最终我们会看见两个度量指标(measures)如下图:
接着一直点击下一步,最终保存cube
3.1.5 构建cube
新创建的Cube只有定义,而没有计算的数据,它的状态是“DISABLED”,是不会被查询引擎挑中的。要想让Cube有数据,还需要 对它进行构建。Cube的构建方式通常有两种:全量构建和增量构建;两者的构建步骤是完全一样的,区别只在于构建时读取的数据源是全集还是子集。点击build,对定义好的cube进行构建计算。 构建计算完cube后,就可以在Insight页面进行查询操作。
3.2 Kylin的Cube创建过程详解
1)创建临时的Hive平表(从Hive读取数据)。
2)计算各维度的不同值,并收集各Cuboid的统计数据。
3)创建并保存字典。
4)保存Cuboid统计信息。
5)创建HTable。
6)计算Cube(一轮或若干轮MapReduce)。
7)将Cube的计算结果转成HFile。
8)加载HFile到HBase。
9)更新Cube元数据。
10)垃圾回收。
3.3 kylin查询api
之前我们成功创建了kylin的cube,并且可以使用web ui查询.但除了通过web ui进行操作,我们还可以使用api调用
3.3.1 RestFul API
在使用之前,我们要先进行认证,目前Kylin使用basic Authentication。,Basic Authentication是一种非常简单的访问控制机制,它先对账号密码基于Base64编码,然后将其作为请求头添加到HTTP请求头中,后端会读取请求头中的账号密码信息以进行认证。
以Kylin默认的账号密码ADMIN/KYLIN为例,对相应的账号密码进行 编码后,结果为“Basic QURNSU46S1lMSU4=”,那么HTTP对应的头信息 则为“Authorization:Basic QURNSU46S1lMSU4=”。
3.3.1.2 查询SQL
curl -X POST -H "Authorization: Basic QURNSU46S1lMSU4=" -H 'Content-Type: application/json' http://localhost:7070/kylin/api/query -d '{
"sql":"select market,sum(sales) from kylin_sale group by market",
"offset":0,
"limit":10,
"acceptPartial":false,
"project":"my_project"
}'
参数解释:
- sql:必填,字符串类型,请求的SQL。
- offset:可选,整型,查询默认从第一行返回结果,可以设置该参数以决定返回数据从哪一行开始往后返回。
- limit:可选,整型,加上limit参数后会从offset开始返回对应的行数, 返回数据行数小于limit的将以实际行数为准。
- acceptPartial:可选,布尔类型,默认是“true”,如果为true,那么实际上最多会返回一百万行数据;如果要返回的结果集超过了一百万行,那么 该参数需要设置为“false”。
- project:可选,字符串类型,默认为“DEFAULT”,在实际使用时,如 果对应查询的项目不是“DEFAULT”,那就需要设置为自己的项目。
3.3.1.3 Put提交cube
curl -X PUT -H "Authorization: Basic QURNSU46S1lMSU4=" -H 'Content-Type: application/json' http://localhost:7070/kylin/api/cubes/my_cube/build -d '{
"startTime":0,
"endTime":”$endTime”,
"buildType":"BUILD"
}'
红色的内容是你需要制定的,startTime : 做增量时,startTime 为上一次build的endTime。endTime:时间精确到毫秒(例1388563200000)。 buildType:可选BUILD,MERGE,REFRESH
3.3.1.4 注意点
我们在通过RESTful API向kylin进行build和rebuild的时候一定要观察kylin的web界面下面的Montior进程,否知一不小心运行太多进程导致服务器崩掉。
我们可以通过curl -X GET -H “Authorization: Basic xxxxxxxx=” -H ‘Content-Type: application/json’ http://localhost:7070/kylin/api/jobs/{job_uuid}来跟踪任务状态返回的 job_status 代表job的当前状态。Uuid是cube提交build时返回的json格式数据中获得。形如:7da54847-ce51-1e43-156a-a9c92a7123e0
如果构建过程中出现错误,执行如下进行任务的重新执行。
curl -X PUT -H “Authorization: Basic xxxxxxxx=” -H “Content-Type: application/json” http://localhost:7070/kylin/api/jobs/{job_uuid}/resume
3.3.2 JAVA API
3.3.2.1 Jdbc连接方式
和hive、mysql很相似。
package com.shsxt.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();
ResultSet resultSet = state.executeQuery("select * from kylin_account limit 1000");
while (resultSet.next()) {
String i = resultSet.getString(3);
System.out.println(i);
}
}
public static void main(String[] args)
throws IOException, InstantiationException, IllegalAccessException, ClassNotFoundException, SQLException {
KylinJdbc ky = new KylinJdbc();
ky.connentJdbc();
}
}