apache-kylin-3.1.3-bin-hadoop3 系列文章
1、apache-kylin-3.1.3-bin-hadoop3介绍及部署、验证详解
2、apache-kylin-3.1.3-bin-hadoop3集群部署
3、apache-kylin-3.1.3-bin-hadoop3基本操作(创建model和cube、数据查詢)
4、apache-kylin-3.1.3-bin-hadoop3增量构建、全量构建详细示例
5、apache-kylin-3.1.3-bin-hadoop3 segment管理及JDBC操作
6、apache-kylin-3.1.3-bin-hadoop3 cube优化方向及减少cuboids和降低膨胀率详细示例
本文简单的介绍了kylin的基本使用示例,也给出了hive和kylin的使用比较。
本文中第一个示例详细的介绍了kylin的使用步骤,以及与hive的使用简单对比;第二个示例单独的使用kylin来实现,仅仅给出了最后一个示例的hive执行时间的对比。
本文依赖hive环境好用、kylin环境好用。
本文部分数据来源于互联网。
一、准备基本的测试数据
准备一些测试表、测试数据。
- Hive中创建表
- 将数据从本地文件导入到Hive
0: jdbc:hive2://server4:10000> use test;
No rows affected (0.031 seconds)
0: jdbc:hive2://server4:10000> show tables;
+-----------+
| tab_name |
+-----------+
+-----------+
No rows selected (0.034 seconds)
0: jdbc:hive2://server4:10000> create table dw_sales(id string,date1 string,channelId string, productId string, regionId string,amount int,price double)ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' stored as textfile;
No rows affected (1.465 seconds)
0: jdbc:hive2://server4:10000> show tables;
+-----------+
| tab_name |
+-----------+
| dw_sales |
+-----------+
1 row selected (0.048 seconds)
0: jdbc:hive2://server4:10000> select * from dw_sales;
+--------------+-----------------+---------------------+---------------------+--------------------+------------------+-----------------+
| dw_sales.id | dw_sales.date1 | dw_sales.channelid | dw_sales.productid | dw_sales.regionid | dw_sales.amount | dw_sales.price |
+--------------+-----------------+---------------------+---------------------+--------------------+------------------+-----------------+
+--------------+-----------------+---------------------+---------------------+--------------------+------------------+-----------------+
No rows selected (1.478 seconds)
0: jdbc:hive2://server4:10000> create table dim_channel(channelId string, channelName string )ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' stored as textfile;
No rows affected (0.074 seconds)
0: jdbc:hive2://server4:10000> create table dim_product(productId string, productName string )ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' stored as textfile;
No rows affected (0.067 seconds)
0: jdbc:hive2://server4:10000> create table dim_region(regionId string,regionName string)ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' stored as textfile;
No rows affected (0.077 seconds)
0: jdbc:hive2://server4:10000> show tables;
+--------------+
| tab_name |
+--------------+
| dim_channel |
| dim_product |
| dim_region |
| dw_sales |
+--------------+
4 rows selected (0.036 seconds)
0: jdbc:hive2://server4:10000> LOAD DATA LOCAL INPATH '/usr/local/bigdata/testdata/dw_sales_data.txt' OVERWRITE INTO TABLE dw_sales;
No rows affected (0.481 seconds)
0: jdbc:hive2://server4:10000> select * from dw_sales;
+--------------+-----------------+---------------------+---------------------+--------------------+------------------+-----------------+
| dw_sales.id | dw_sales.date1 | dw_sales.channelid | dw_sales.productid | dw_sales.regionid | dw_sales.amount | dw_sales.price |
+--------------+-----------------+---------------------+---------------------+--------------------+------------------+-----------------+
| 0001 | 2019-02-01 | 01 | 01 | 010 | 1 | 3400.0 |
| 0002 | 2019-02-01 | 02 | 02 | 021 | 2 | 6800.0 |
....
| 0026 | 2019-02-02 | 01 | 04 | 010 | 1 | 3400.0 |
| 0027 | 2019-02-02 | 01 | 04 | 010 | 1 | 3400.0 |
+--------------+-----------------+---------------------+---------------------+--------------------+------------------+-----------------+
0: jdbc:hive2://server4:10000> LOAD DATA LOCAL INPATH '/usr/local/bigdata/testdata/dim_channel_data.txt' OVERWRITE INTO TABLE dim_channel;
No rows affected (0.205 seconds)
0: jdbc:hive2://server4:10000> LOAD DATA LOCAL INPATH '/usr/local/bigdata/testdata/dim_product_data.txt' OVERWRITE INTO TABLE dim_product;
No rows affected (0.177 seconds)
0: jdbc:hive2://server4:10000> LOAD DATA LOCAL INPATH '/usr/local/bigdata/testdata/dim_region_data.txt' OVERWRITE INTO TABLE dim_region;
No rows affected (0.262 seconds)
二、示例1-按照日期统计订单总额/总数量
1、hive实现方式
select date1, sum(price) as total_money, sum(amount) as total_amount from dw_sales group by date1;
0: jdbc:hive2://server4:10000> select date1, sum(price) as total_money, sum(amount) as total_amount from dw_sales group by date1;
WARN : Hive-on-MR is deprecated in Hive 2 and may not be available in the future versions. Consider using a different execution engine (i.e. spark, tez) or using Hive 1.X releases.
+-------------+--------------+---------------+
| date1 | total_money | total_amount |
+-------------+--------------+---------------+
| 2019-02-01 | 57800.0 | 17 |
| 2019-02-02 | 61200.0 | 18 |
+-------------+--------------+---------------+
2、kylin实现方式
使用kylin实现,需按照如下步骤进行
- 创建项目(Project)
- 创建数据源(DataSource),指定有哪些数据需要进行数据分析
- 创建模型(Model),指定具体要对哪个事实表、那些维度进行数据分析
- 创建立方体(Cube),指定对哪个数据模型执行数据预处理,生成不同维度的数据
- 执行构建、等待构建完成
- 再执行SQL查询,获取结果,从Cube中查询数据
1)、创建项目(Project)
2)、创建数据源(DataSource)
kylin本身是没有表的,其是使用hive的元数据进行数据处理。在使用kylin前,需要将需要分析的数据从hive中导入到kylin中。
将Hive中的表都导入到Kylin中 在添加表名中,指定数据库名test.dim_channel,test.dim_product,test.dim_region,test.dw_sales
3)、创建模型(Model)
1、 設置模型名称
2、指定事实表
設置事實表,在該步驟可以設置相關的維度表,並進行關聯
3、 指定维度表
設置數據分析的維度,可以是事實表中的字段,也可以是維度表中的字段
4、 指定待分析的指标
設置數據分析的字段
5、 指定分区和过滤条件
該步驟可以設置對需要分析的數據範圍進行選擇
4)、创建立方体(Cube)
1、选择数据模型
2、指定维度
設置分析的維度
3、指定度量
設置需要計算的字段,為將來應用進行預指定
4、指定刷新设置
5、指定执行引擎
設置數據分析的計算引擎,當前可以選擇的是MR、spark、Flink,前提是在部署的時候已經做好了相關部署
後面一直next,直到保存即可。
5)、执行构建
該步驟實際上是進行了預計算,也就是根據選擇計算引擎對將要分析的數據進行計算,然後將數據結果存儲在Hbase中。
該步驟完成后就可以在Insight中進行查詢
6)、执行SQL语句分析
select
date1,
sum(price) as total_money,
sum(amount) as total_amount
from
test.dw_sales
group by date1;
三、示例2(kylin)
1、按照订单渠道名称统计订单总额/总数量
1)、创建Model
指定关联表、关联条件
2)、创建Cube
略,参考上文示例1
3)、执行构建、等待构建完成
4)、执行SQL查询,获取结果
select
t2.channelid,
t2.channelname,
sum(t1.price) as total_money,
sum(t1.amount) as total_amount
from dw_sales t1
inner join dim_channel t2 on t1.channelid = t2.channelid
group by t2.channelid, t2.channelname
2、按照日期、区域、产品维度统计订单总额/总数量
1)、创建Model
- 指定关联表、关联条件
- 指定维度字段
2)、创建Cube
指定cube维度
3)、执行构建、等待构建完成
該步驟是預計算過程,耗時都在此處
4)、执行SQL查询,获取结果
select
t1.date1,
t2.regionid,
t2.regionname,
t3.productid,
t3.productname,
sum(t1.price) as total_money,
sum(t1.amount) as total_amount
from dw_sales t1
inner join dim_region t2 on t1.regionid = t2.regionid
inner join dim_product t3 on t1.productid = t3.productid
group by
t1.date1,
t2.regionid,
t2.regionname,
t3.productid,
t3.productname
order by
t1.date1,
t2.regionname,
t3.productname
查詢時間是0.29秒,但其預計算時間是近6分鐘
- Hive執行時間88秒
以上,简单的介绍了kylin的基本使用示例,也给出了hive和kylin的使用比较。