# 使用 kylin 计算留存率
这里采用的是在 docker 中运行 kylin 的模式,kylin 版本为 3.1.0。
-----------------------------------------------------------------------
[TOC]
### 1 准备数据
表 access_log 数据源
```
# dt,userid,page
20190101,100,index.html
20190101,101,search.html
20190101,102,detail.html
20190102,100,index.html
20190102,102,detail.html
20190102,103,index.html
20190103,101,index.html
```
建表
```sql
create table access_log(
dt int,
userid int,
page string
)
row format delimited
fields terminated by ',';
```
导入数据
```sql
load data local inpath '/home/admin/data/access_log.txt' into table access_log;
```
### 2 kylin构建cube
建模型
![留存率01](./image/留存率01.png)
![留存率02](./image/留存率02.png)
![留存率03](./image/留存率03.png)
建 cube
![留存率04](./image/留存率04.png)
![留存率05](./image/留存率05.png)
![留存率06](./image/留存率06.png)
度量的数据类型设置为 bitmap
### 3 执行查询
#### UV
```sql
select dt, count(distinct userid)
from access_log
where dt >= '20190101' and dt <= '20190103'
group by dt
```
![留存率07](./image/留存率07.png)
#### 留存分析
以日留存为例,要计算第一天访问的用户中,有多少在第二天、第三天继续访问了 app。如果使用 HiveQL 或 Spark SQL �