Apache Kylin在1.5.3以及之前版本中使用精确去重只支持int类型,而目前1.5.4版本中已经支持其他数据类型的精确去重了,下面我们来验证一下对字符串进行精确去重。
Hadoop:2.6.0
HBase:1.1.4
Hive:1.2.1
Kylin:1.5.4.1
维表:region_tbl和city_tbl
数据如下:
region_tbl:
regionid regionname
G01 北京
G02 江苏
G03 浙江
G04 上海
G05 广州
city_tbl:
regionid cityid cityname
G01 G0101 朝阳
G01 G0102 海淀
G02 G0201 南京
G02 G0202 宿迁
G03 G0301 杭州
G03 G0302 嘉兴
G04 G0401 徐汇
G04 G0402 虹口
G05 G0501 广州
G05 G0502 海珠
事实表:web_access_fact_tbl
数据如下:
day cookieid regionid cityid siteid os pv
2016-07-19 GBSYO1IMQ7GHQXOVTP G03 G0302 810 Mac OS 2
2016-07-03 NTJ95UHFUD3UECNS0U G05 G0502 3171 MacOS 4
2016-07-20 ZR27L7C79CCJGTN1F7 G04 G0402 8793 MacOS 2
2016-07-01 C17QEB0560LUZHD26P G04 G0402 9793 Android 5.0 5
2016-07-01 N9LRCVTU6PGSUDJ9RB G03 G0301 1292 MacOS 1
可以创建一个如下的工程名称:
1. 数据模型如下:
2. 维度字段
3. 度量字段
1. Cube维度
2. Cube度量
可以看到,我们这里对COOKIEID字符型字段进行COUNT_DISTINCT精确去重计数,返回类型为bitmap。
3. 增量构建Cube的起始时间
因为事实表数据的时间是从2016-07-01开始的,所以我们这里保持分区时间从2016-07-01开始。
当上面的Cube创建好之后,我们开始构建Cube,选择“End Date (Exclude)”的时间为2017-07-04 00:00:00。
提交构建Cube操作后,我们可以通过Monitor页面查看执行过程:
Cube构建完成后,就可以通过Insight页面进行查询Cube数据:
1. 查询每天的uv和pv数
查询SQL:
select "DAY",
count(distinct cookieid),
sum(pv)
from web_access_fact_tbl
group by "DAY";
查询结果为:
可以看到结果是正确的。如果数量比较大,我们可以通过Hive查询来验证结果的正确性:
可以看到2016-07-01和2016-07-03两天的结果与我们Kylin中查询的一致。