新建cube
维度选择
Derived Columns:衍生维
Derived Columns 必须是在lookup table上的,可以被host column衍生出来,host column 是在fact表上的,衍生维会跟host column 有个映射关系
衍生维不会在cuboids里,要查询衍生维,kylin会先根据host column 统计一次,然后用衍生维的值替换host column 再做一次统计
添加度量
Auto Merge Thresholds:自动合并的阈值
作用:kylin会根据设置的阈值向上检查,如果有连续的segments时间范围超过阈值就会进行合并。
例如:设置的[7days,28days]
从20170101到20170108每天构建一次cube,当构建20170108时,将之前连续的7个segment合并为一个segment
同样,如果积累了最近28天的segments,就会再次merge为一个segment。如果中间有不连续的segment,将会跳过它,从下一个segment开始向上推算连续的segment个数。
Retention Threshold(保留阈值)
作用:保留最近设置阈值的cube segments个数,默认是0,它会保留所有历史构建的cube segments。
衍生维度优化
衍生维度(Derived Dim):当一个或者多个维度能够从主键中推断出来,那么这些维度列就称之为衍生“Derived” 列。
衍生维度(Derived Dim)优化效果:维度表中的n个维度计算,将Cuboid从2^n 减为2。
· 聚合组优化
根据业务的维度组合,划分出具有强依赖的组合,这些组合称之为聚合组,在聚合组内,维度之间的组合会预计算,聚合组之间并不交叉预计算,从而减少Cuboid的数量.
如果有4个维度,分别为A,B,C,D,那么就会有16个Cuboid,如果AB和CD分别为聚集组的话,那么Cuboid的数量就缩减为8个。
· 强制维度
强制维度(Mandatory Dimensions):所有Cubeid中都包含的维度称之为强制维度,不包含强制维度的Cubeid不会计算。 只计算包含强制维度的Cubeid,Cubeid的数量会缩减一半。 假如有三个维度A,B,C,那么Cuboid就会有8个,分别为ABC,AB,BC,AC,A,B,C,这时将A设置为强制维度,那么就只会计算ABC,AB,AC,A这四个 Cubeid。
· 层次维度
层次维度(Hierarchy Dim):某些维度之间具有上下层次关联。 如果有三个维度A,B,C 设置为层次维度,那么Cuboid数量将由2^3减为3+1。 比较适用于进行下钻分析,比如年月日,省市县这种。
· 联合维度
联合维度(Joint Dimension)::联合维度,有些维度往往一起出现,或者它们的基数非常接近(有1:1映射关系)。例如 “user_id” 和 “email”。把多个维度定义为组合关系后,所有不符合此关系的 cuboids 会被跳过计算。假如有ABC三个维度,但是在查询的时候只会出现Group by A,B,C,而不会出现Group A,Group by B,Group by A、B等等这种情况,那么就可以将A,B,C设置为联合维度
· Cube并发粒度优化
当Segment中某个Cuboid的大小超出一定的阈值时,系统会将该Cuboid的数据分片到多个Hbase Region Server,从而实现Cuboid数据读取的并行化,优化Cube的查询速度。
kylin的默认设置中
kylin.storage.hbase.region-cut-gb=5,
kylin.storage.hbase.min-region-count=1,
kylin.storage.hbase.max-region-count=500
在实际应用中(根据实际数据量调整),可以将
kylin.storage.hbase.min-region-count=2,
kylin.storage.hbase.max-region-count=100,
kylin.storage.hbase.region-cut-gb=1
上面设置为最小为2个分区,每个分区大小为1G,最多设置100个region分区。
Rowkeys: 是由维度编码值组成。”Dictionary” (字典)是默认的编码方式; 字典只能处理中低基数(少于一千万)的维度;如果维度基数很高(如大于1千万), 选择 “false” 然后为维度输入合适的长度,通常是那列的最大长度值; 如果超过最大值,会被截断。请注意,如果没有字典编码,cube 的大小可能会非常大。
你可以拖拽维度列去调整其在 rowkey 中位置; 位于rowkey前面的列,将可以用来大幅缩小查询的范围。通常建议将 mandantory 维度放在开头, 然后是在过滤 ( where 条件)中起到很大作用的维度;如果多个列都会被用于过滤,将高基数的维度(如 user_id)放在低基数的维度(如 age)的前面。
Mandatory Cuboids: 维度组合白名单。确保你想要构建的 cuboid 能被构建。
Cube Engine: cube 构建引擎。有两种:MapReduce 和 Spark。如果你的 cube 只有简单度量(SUM, MIN, MAX),建议使用 Spark。如果 cube 中有复杂类型度量(COUNT DISTINCT, TOP_N),建议使用 MapReduce。
Advanced Dictionaries: “Global Dictionary” 是用于精确计算 COUNT DISTINCT 的字典, 它会将一个非 integer的值转成 integer,以便于 bitmap 进行去重。如果你要计算 COUNT DISTINCT 的列本身已经是 integer 类型,那么不需要定义 Global Dictionary。 Global Dictionary 会被所有 segment 共享,因此支持在跨 segments 之间做上卷去重操作。请注意,Global Dictionary 随着数据的加载,可能会不断变大。
“Segment Dictionary” 是另一个用于精确计算 COUNT DISTINCT 的字典,与 Global Dictionary 不同的是,它是基于一个 segment 的值构建的,因此不支持跨 segments 的汇总计算。如果你的 cube 不是分区的或者能保证你的所有 SQL 按照 partition_column 进行 group by, 那么你应该使用 “Segment Dictionary” 而不是 “Global Dictionary”,这样可以避免单个字典过大的问题。
请注意:”Global Dictionary” 和 “Segment Dictionary” 都是单向编码的字典,仅用于 COUNT DISTINCT 计算(将非 integer 类型转成 integer 用于 bitmap计算),他们不支持解码,因此不能为普通维度编码。
Advanced Snapshot Table: 为全局 lookup 表而设计,提供不同的存储类型。
Advanced ColumnFamily: 如果有超过一个的COUNT DISTINCT 或 TopN 度量, 你可以将它们放在更多列簇中,以优化与HBase 的I/O。
网友评论