Apache Kylin 入门 4 - 构建 Model
Apache Kylin 入门系列目录
- Apache Kylin 入门 1 - 基本概念
- Apache Kylin 入门 2 - 原理与架构
- Apache Kylin 入门 3 - 安装配置参数详解
- Apache Kylin 入门 4 - 构建 Model
- Apache Kylin 入门 5 - 构建 Cube
一、从 Hive 中加载表
从 Hive 中导入表定义的具体步骤如下:
- 登录系统:
http://ip:7070/kylin
; - 主界面顶端左侧网站 Logo 下点击加号 “+” 以新建项目;
- 在弹出的窗口中,输入项目名称(必选)和项目描述, 点击“确定”按钮,完成项目创建;
- 在网站 Logo 的右侧的下拉框中选择创建的项目,点击 “Model” 菜单;
- 点击“Data Source”选项卡,在 Tables 后面有三个按钮,第一个深蓝色按钮表示根据表名从 Hive 中导入表;第二个浅蓝色按钮点击后可以以可视化的方式从 Hive 选择需要导入的表;
- 点击浅蓝色按钮,从 Hive 中选择需要导入的表,选择完毕后点击右下角的“Sync”按钮即可完成 Hive 表的导入。
从 Hive 中导入表定义导入表定义的界面有一个选择框 Calculate column cardinality,勾选后系统会计算 Hive 表每一列的基数,基数是指数据集中出现的不同值的个数,例如“国家”是一个维度,如果有 200 个不同的值,那么此维度的基数就是 200。
二、创建 Model
点击 “Models” 选项卡,可以看到项目已创建的 Models 以及 Cubes,点击 “+ New” 按钮,选择 “New Model” 即可打开创建 Model 的窗口。由于数据模型的差异,本文不介绍具体的案例,下面将主要介绍创建 Model 过程中遇到的各种概念。
1、Model Info
Model Info 主要是填写 Model 的基本信息,其中 “Model Name” 是必填项,模型名称有两点需要注意:
- 模型名称是全局唯一的,也就是说即便你新建了一个工程,你的模型名称也不能够重复;
- 模型一旦创建后,模型名称无法被修改。
2、Data Model
Data Model 主要是构建整体的数据模型,无论你的数据是星型模型或者是雪花模型,需要在这个地方建立数据表之间的关系。
2.1、选择事实表
建立数据模型的第一步是选择事实表,选择完成后点击 “Add Lookup Table” 按钮设置事实表与维度表之间的关系。
选择事实表
2.2、建立数据关系
对 “Add Lookup Table” 页面的几点说明:
- 数据关系不仅仅是事实表与维度表之间(星型模型),维度表和维度表之间(雪花模型)也可以建立联系;
- 表与表之间的连接添加有三种:“Left Join”、“Inner Join”、“Right Join”;
-
Skip snapshot for this lookup table
选项指的是是否跳过生成 snapshotTable,由于某些 Lookup 表特别大(大于 300M),如果某一个维度的基数比较大 ,可能会导致内存出现 OOM,所以在创建 snapshotTable 的时候会限制原始表的大小不能超过配置的一个上限值(kylin.snapshot.max-mb
,默认值300); - 跳过构建 snapshot 的 lookup 表将不能搜索,同时不支持设置为衍生维度(Derived);
- 大部分情况下都是使用 “Left Join”,其他两种 Join 方式不是很常用。
2.3、完成表关系构建
通过上述的操作即可将事实表以及维度表联系起来,构成一个数据模型。
完成表关系构建3、Dimensions
在 Dimensions 页面选择可能参与计算的维度,这里被选择的只是在 Cube 构建的时候拥有被选择资格的维度,并不是最后参与 Cube 构建的维度,推荐将维度表中的字段都选择上。
选择可能参与计算的维度一般而言,日期、商品种类、区域等会作为维度。
4、Measures
在 Measures 页面选择可能用于计算的度量。
选择可能用于计算的度量一般而言,销售额、流量、温湿度等会作为度量。
5、Settings
在 Settings 页面可以设置分区以及过滤条件,其中分区是为了系统可以进行增量构建而设计的,目前 Kylin 支持基于日期的分区,在 “Partition Date Column” 后面选择事实表或者维度表中的日期字段,然后选择日期格式即可;过滤条件设置后,Kylin 在构建的时候会选择符合过滤条件的数据进行构建。
需要注意的几点:
- 时间分区列可以支持日期或更细粒度的时间分区;
- 时间分区列支持的数据类型有
time/date/datetime/integer
等; - 过滤条件不需要写
WHERE
; - 过滤条件不能包含日期维度。
6、Save
最后保存即可完成 Model 的创建,你可以打开 Model 中的 Visualization 标签页查询模型的表连接情况。
查看 Model 表连接情况三、Snapshot Table
每一个 Snapshot 是和一个 Hive 维度表对应的,生成的过程是:
- 从原始的hive维度表中顺序得读取每一行每一列的值;
- 使用 TrieDictionary 方式对这些所有的值进行编码(一个值对应一个 Id);
- 再次读取原始表中每一行的值,将每一列的值使用编码之后的 Id 进行替换,得到了一个只有 Id 的新表;
- 同时保存这个新表和 Dictionary 对象(Id 和值的映射关系)就能够保存整个维度表;
- Kylin 将这个数据存储到元数据库中。
Any Code,Code Any!
扫码关注『AnyCode』,编程路上,一起前行。
AnyCode