开发者社区> 华章计算机> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

Apache Kylin权威指南3.2 设计增量Cube

简介:
+关注继续查看

3.2 设计增量Cube


3.2.1 设计增量Cube的前提

并非所有的Cube都适用于增量构建,Cube的定义必须包含一个时间维度,用来分割不同的Segment,我们将这样的维度称为分割时间列(Partition Date Column)。尽管由于历史原因该命名中存在“date”的字样,但是分割时间列既可以是Hive中的Date类型、也可以是Timestamp类型或String类型。无论是哪种类型,Kylin都要求用户显式地指定分割时间列的数据格式,例如精确到年月日的Date类型(或者String类型)的数据格式可能是yyyyMMdd或yyyy-MM-dd,如果是精确到时分秒的Timestamp类型(或者String类型),那么数据格式可能是YYYY-MM-DD HH:MM:SS。

在一些场景中,时间由长整数Unix Time来表示,由于对该类型的支持存在争议(详情可参见https://issues.apache.org/jira/browse/KYLIN-1698),因此在目前的版本中并不支持使用长整数类型作为分割时间列。作为一种变通的方法,可以在ETL过程中克服这个问题。具体来说,就是在Hive中为包含长整数时间列的表创建一个视图,将长整数时间列转化为符合Kylin规范的任意类型,在后续的Cube设计中,应使用该视图而不是原始的表。

满足了设计增量Cube的前提之后,在进行增量构建时,将增量部分的起始时间和结束时间作为增量构建请求的一部分提交给Kylin的任务引擎,任务引擎会根据起始时间和结束时间从Hive中抽取相应时间的数据,并对这部分数据做预计算处理,然后将预计算的结果封装成为一个新的Segment,并将相应的信息保存到元数据和存储引擎中。一般来说,增量部分的起始时间等于Cube中最后一个Segment的结束时间。

3.2.2 增量Cube的创建

创建增量Cube的过程和创建普通Cube的过程基本类似,只是增量Cube会有一些额外的配置要求。

1.?Model层面的设置

每个Cube背后都关联着一个Model,Cube之于Model就好像Java中的Object之于Class。如同3.2.1节中所描述的,增量构建的Cube需要指定分割时间列。同一个Model下不同分割时间列的定义应该是相同的,因此我们将分割时间列的定义放到了Model之中。Model的创建和修改在第2章中已经介绍过,这里将跳过重复的部分,直接进入Model Designer的最后一步Settings来添加分割时间列,如图3-1所示。

 

图3-1 定义分割时间列

目前分割时间列必须是事实表上的列,且它的格式必须满足3.2.1节中所描述的要求。一般来说如果年月日已经足够帮助分割不同的Segment,那么在大部分情况下日期列是分割时间列的首选。当用户需要更细的分割粒度时,例如用户需要每6小时增量构建一个新的Segment,那么对于这种情况,则需要挑选包含年月日时分秒的列作为分割时间列。

在一些用户场景中,年月日和时分秒并不体现在同一个列上,例如在用户的事实表上有两个列,分别是“日期”和“时间”,分别保存记录发生的日期(年月日)和时间(时分秒),对于这样的场景,允许用户指定一个额外的分割时间列来指定除了年月日之外的时分秒信息。为了区分,我们将之前的分割时间列称为常规分割时间列,将这个额外的列称为补充分割时间列。在勾选了“Has a separate "time of the day" column?”选项之后(如图3-2所示),用户可以选择一个符合时分秒时间格式的列作为补充的分割时间列。由于日期的信息已经体现在了常规的分割时间列之上,因此补充的分割时间列中不应该再具有日期的信息。反过来说,如果这个列中既包含年月日信息,又包含时分秒信息,那么用户应该将它指定为格式是YYYY-MM-DD HH:MM:SS的常规分割时间列,而不需要勾选“Has a separate "time of the day"column?”。在大部分场景下用户可以跳过补充分割时间列。

2.?Cube层面的设置

Cube的创建和修改在第2章中已经做过介绍,这里将跳过重复的部分,直接进入Cube Designer的“Refresh Settings”。这里的设置目前包含“Auto Merge Thresholds”、“Retention Threshold”和“Partition Start Date”。“Partition Start Date”是指Cube默认的第一个Segment的起始时间。同一个Model下不同的Cube可以指定不同的起始时间,因此该设置项出现在Cube Designer之中。“Auto Merge Thresholds”用于指定Segment自动合并的阈值,而“Retention Threshold”则用于指定将过期的Segment自动抛弃。3.4节将详细介绍这两个功能。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
Apache Flink 邀您共度「2022开源之夏」,成为开源新星
开源项目资深维护者(社区导师)亲自指导,用 3 个月的时间感受开源技术共建的魅力,完成项目并贡献给社区后,还将获得活动奖金和结项证书。
549 0
使用 Flink CDC 实现 MySQL 数据实时入 Apache Doris
本文通过实例来演示怎么通过Flink CDC 结合Doris的Flink Connector实现从Mysql数据库中监听数据并实时入库到Doris数仓对应的表中。
928 0
基于Apache Hudi + Flink的亿级数据入湖实践
本次分享分为5个部分介绍Apache Hudi的应用与实践 实时数据落地需求演进 基于Spark+Hudi的实时数据落地应用实践 基于Flink自定义实时数据落地实践 基于Flink+Hudi的应用实践 后续应用规划及展望
74 0
重磅!解锁Apache Flink读写Apache Hudi新姿势
Apache Hudi 是目前最流行的数据湖解决方案之一,Data Lake Analytics 集成了 Hudi 服务高效的数据 MERGE(UPDATE/DELETE)场景;AWS 在 EMR 服务中 预安装 了 Apache Hudi,为用户提供高效的 record-level updates/deletes 和高效的数据查询管理;Uber 已经稳定运行 Apache Hudi 服务 4 年多,提供了 低延迟的数据库同步和高效率的查询。自 2016 年 8 月上线以来,数据湖存储规模已经超过 100PB。
111 0
官宣|Apache Flink 1.15 发布公告
1.15 版本中,贡献者们极大地改进了操作 Apache Flink 的体验
82738 0
Apache Flink部署应用到任意地方
Apache Flink部署应用到任意地方
21 0
Apache Flink 在蔚来汽车的应用
Flink 在蔚来汽车实时计算平台、实时看板、CDP、实时数仓等场景的应用
1244 0
Apache Flink 在翼支付的实践应用
翼支付高级开发工程师曹劼、尹春光在 FFA 2021 的分享
1078 0
重磅!Apache Flink 1.11 功能前瞻抢先看!
Flink 1.11 版本即将正式宣告发布!为满足大家的好奇与期待,我们邀请 Flink 核心开发者对 1.11 版本的功能特性进行解读与分享。Flink 1.11 在 1.10 的基础上对许多方面进行了完善和改进,并致力于进一步提高 Flink 的可用性及性能。
16640 0
10057
文章
0
问答
来源圈子
更多
+ 订阅
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载