Apache Kylin 入门系列目录算法
本文从各个角度总结一些 Kylin 实践相关的最佳实践,不必定很是准确,欢迎批评指正。编程
若是维度与事实表没法映射,某些字段(数据类型为 number 系列)会遇到构建失败的问题(
numberFormatException('\N')
,\N
是为 Hive 中 NULL 的实际存储内容);此外,在进行 Left Join 的时候会产生大量的 NULL,这些 NULL 值在真正查询中根本没有任何做用。架构
Hive 表支持多分区(Partition),简单地说,一个分区就是一个文件目录,存储了特定的数据文件。当有新的数据生成的时候,能够将数据加载到指定的分区,读取数据的时候也能够指定分区。对于 SQL 查询,若是查询中指定了分区列的属性条件,则 Hive 会智能地选择特定分区(也就是目录),从而避免全量数据的扫描,减小读写操做对集群的压力。app
Kylin 支持增量的 Cube 构建,一般是按时间属性来增量地从 Hive 表中抽取数据。若是 Hive 表正好是按此时间属性作分区的话,那么就能够利用到 Hive 分区的好处,每次在 Hive 构建的时候均可以直接跳过不相干日期的数据,节省 Cube 构建的时间。这样的列在 Kylin 里也称为分割时间列(Partition Time Column),一般它应该也是 Hive 表的分区列。oop
必需维度、层级维度、联合维度、衍生维度以及聚合组能够参看 Apache Kylin 入门 5 一文的详细说明。post
不少人会误觉得只有聚合组 Includes 里面被选择的维度才参与 Cube 构建的计算,其实真正参与计算是 Dimensions 设置界面选择为 Default 的那些维度,还有 Left Join 的字段(若是其 Derived 字段被勾选)。优化
简单来讲,在 RowKeys 排序界面看到的维度都会参与 Cuboid 的构建,若是在 RowKeys 看到不想参与计算的维度,能够到 Dimensions 设置界面进行修改。code
层级维度在设置的时候必定要深入理解业务,例如:企业到底归属到行业类型下仍是归属到区域类型下?从层级结构的角度来说都是能够的,深层次挖掘业务需求后咱们会发现,凡是查询企业的时候均附带有区域的过滤条件,所以将企业归属到区域的层级下比归属到行业类型下更加有效。orm
在实践中,可能会遇到各类不肯定的思路,最佳的作法是去实践,多创建 Model 和 Cube,从不一样层次去优化,去尝试,在实践中不断总结经验。cdn
Any Code,Code Any!
扫码关注『AnyCode』,编程路上,一块儿前行。