-
合理地取消Redistributed Flat Table:设置kylin.source.hive.redistribute-flat-table=false。
-
定期合并增量数据:大的事实表采用天分区增量构建,为了不影响查询性能,可以定期做合并(Merge),周期可以根据实际情况确定。
-
合理使用Hive视图:对于维表比较大的情况,或者查询Select部分存在复杂的逻辑判断,存在Apache Kylin不支持的函数或语句时,可以将事实表和维表的关联处理创建为Hive视图,之后根据视图创建Cube模型。
-
合理地设置Mandatory字段:每次查询必然带有的条件建议在字典设置步骤将其设置为Mandatory。这样会最终 Build出来Cube的大小会减少一半。
-
合理地设置分组字段:Cube的维度如果超过10个,建议将常用的聚合字段做分组。
-
Cube定义中RowKey顺序:Mandatory维度,Where过滤条件中出现频率较多的维度,高基数维度,低基数维度。
-
当Segment中某一个Cuboid的大小超过一定的阈值时,修改数据分片大小以实现数据读取的并行化,从而优化Cube的查询速度。
-
设计合适的维度编码能减少维度对空间的占用,比如对于高基数的维度如果使用Dict字典编码方式占用大量空间,容易造成构建引擎或查询引擎的内存溢出。
-
对维度进行分片,如果Cuboid中某两个行的Shard by Dimension的值相同,那么无论这个Cuboid最终会被划分多少个分片,这两行数据必然会被分配到同一个分片中,方便查询和索引。
-
部署层面,可以通过Nginx在前端做负载均衡,后端启动多个Query Server接收查询请求处理。一个job或all,多个query部署Kylin节点。
网友评论