?新建cube
維度選擇
Derived Columns:衍生維
Derived Columns 必須是在lookup table上的魁衙,可以被host column衍生出來譬淳,host column 是在fact表上的,衍生維會跟host column? 有個映射關(guān)系
衍生維不會在cuboids里径玖,要查詢衍生維媒区,kylin會先根據(jù)host column 統(tǒng)計一次锚烦,然后用衍生維的值替換host column 再做一次統(tǒng)計
添加度量
Auto Merge Thresholds:自動合并的閾值
作用:kylin會根據(jù)設置的閾值向上檢查,如果有連續(xù)的segments時間范圍超過閾值就會進行合并扩然。
例如:設置的[7days,28days]
從20170101到20170108每天構(gòu)建一次cube,當構(gòu)建20170108時,將之前連續(xù)的7個segment合并為一個segment
同樣,如果積累了最近28天的segments,就會再次merge為一個segment艘儒。如果中間有不連續(xù)的segment,將會跳過它,從下一個segment開始向上推算連續(xù)的segment個數(shù)夫偶。
Retention Threshold(保留閾值)
作用:保留最近設置閾值的cube segments個數(shù)界睁,默認是0,它會保留所有歷史構(gòu)建的cube segments。
?衍生維度優(yōu)化
? ?衍生維度(Derived Dim):當一個或者多個維度能夠從主鍵中推斷出來兵拢,那么這些維度列就稱之為衍生“Derived” 列翻斟。
? ??衍生維度(Derived Dim)優(yōu)化效果:維度表中的n個維度計算,將Cuboid從2^n 減為2说铃。
· 聚合組優(yōu)化
? ? 根據(jù)業(yè)務的維度組合访惜,劃分出具有強依賴的組合,這些組合稱之為聚合組腻扇,在聚合組內(nèi)债热,維度之間的組合會預計算,聚合組之間并不交叉預計算衙解,從而減少Cuboid的數(shù)量.
?如果有4個維度,分別為A焰枢,B蚓峦,C,D济锄,那么就會有16個Cuboid暑椰,如果AB和CD分別為聚集組的話,那么Cuboid的數(shù)量就縮減為8個荐绝。
· 強制維度
強制維度(Mandatory Dimensions):所有Cubeid中都包含的維度稱之為強制維度一汽,不包含強制維度的Cubeid不會計算。 只計算包含強制維度的Cubeid,Cubeid的數(shù)量會縮減一半召夹。 假如有三個維度A岩喷,B,C监憎,那么Cuboid就會有8個纱意,分別為ABC,AB鲸阔,BC偷霉,AC,A褐筛,B类少,C,這時將A設置為強制維度渔扎,那么就只會計算ABC硫狞,AB,AC赞警,A這四個 Cubeid妓忍。
· 層次維度
層次維度(Hierarchy Dim):某些維度之間具有上下層次關(guān)聯(lián)。 如果有三個維度A愧旦,B世剖,C 設置為層次維度,那么Cuboid數(shù)量將由2^3減為3+1笤虫。 比較適用于進行下鉆分析旁瘫,比如年月日,省市縣這種琼蚯。
· 聯(lián)合維度
聯(lián)合維度(Joint Dimension)::聯(lián)合維度酬凳,有些維度往往一起出現(xiàn),或者它們的基數(shù)非常接近(有1:1映射關(guān)系)遭庶。例如 “user_id” 和 “email”宁仔。把多個維度定義為組合關(guān)系后,所有不符合此關(guān)系的 cuboids 會被跳過計算峦睡。假如有ABC三個維度翎苫,但是在查詢的時候只會出現(xiàn)Group by A,B榨了,C煎谍,而不會出現(xiàn)Group A,Group by B龙屉,Group by A呐粘、B等等這種情況,那么就可以將A,B作岖,C設置為聯(lián)合維度
· Cube并發(fā)粒度優(yōu)化
當Segment中某個Cuboid的大小超出一定的閾值時唆垃,系統(tǒng)會將該Cuboid的數(shù)據(jù)分片到多個Hbase Region Server,從而實現(xiàn)Cuboid數(shù)據(jù)讀取的并行化鳍咱,優(yōu)化Cube的查詢速度降盹。
kylin的默認設置中
kylin.storage.hbase.region-cut-gb=5,
kylin.storage.hbase.min-region-count=1,
kylin.storage.hbase.max-region-count=500
在實際應用中(根據(jù)實際數(shù)據(jù)量調(diào)整)谤辜,可以將
kylin.storage.hbase.min-region-count=2,
kylin.storage.hbase.max-region-count=100蓄坏,
kylin.storage.hbase.region-cut-gb=1
上面設置為最小為2個分區(qū),每個分區(qū)大小為1G丑念,最多設置100個region分區(qū)窗宦。
Rowkeys: 是由維度編碼值組成叫惊⊥姿冢”Dictionary” (字典)是默認的編碼方式; 字典只能處理中低基數(shù)(少于一千萬)的維度笋婿;如果維度基數(shù)很高(如大于1千萬), 選擇 “false” 然后為維度輸入合適的長度,通常是那列的最大長度值; 如果超過最大值推正,會被截斷恍涂。請注意,如果沒有字典編碼植榕,cube 的大小可能會非常大再沧。
你可以拖拽維度列去調(diào)整其在 rowkey 中位置; 位于rowkey前面的列,將可以用來大幅縮小查詢的范圍尊残。通常建議將 mandantory 維度放在開頭, 然后是在過濾 ( where 條件)中起到很大作用的維度炒瘸;如果多個列都會被用于過濾,將高基數(shù)的維度(如 user_id)放在低基數(shù)的維度(如 age)的前面寝衫。
Mandatory Cuboids: 維度組合白名單顷扩。確保你想要構(gòu)建的 cuboid 能被構(gòu)建。
Cube Engine: cube 構(gòu)建引擎慰毅。有兩種:MapReduce 和 Spark隘截。如果你的 cube 只有簡單度量(SUM, MIN, MAX),建議使用 Spark汹胃。如果 cube 中有復雜類型度量(COUNT DISTINCT, TOP_N)婶芭,建議使用 MapReduce。
Advanced Dictionaries: “Global Dictionary” 是用于精確計算 COUNT DISTINCT 的字典, 它會將一個非 integer的值轉(zhuǎn)成 integer统台,以便于 bitmap 進行去重雕擂。如果你要計算 COUNT DISTINCT 的列本身已經(jīng)是 integer 類型啡邑,那么不需要定義 Global Dictionary贱勃。 Global Dictionary 會被所有 segment 共享,因此支持在跨 segments 之間做上卷去重操作。請注意贵扰,Global Dictionary 隨著數(shù)據(jù)的加載仇穗,可能會不斷變大。
“Segment Dictionary” 是另一個用于精確計算 COUNT DISTINCT 的字典戚绕,與 Global Dictionary 不同的是纹坐,它是基于一個 segment 的值構(gòu)建的,因此不支持跨 segments 的匯總計算舞丛。如果你的 cube 不是分區(qū)的或者能保證你的所有 SQL 按照 partition_column 進行 group by, 那么你應該使用 “Segment Dictionary” 而不是 “Global Dictionary”耘子,這樣可以避免單個字典過大的問題。
請注意:”Global Dictionary” 和 “Segment Dictionary” 都是單向編碼的字典球切,僅用于 COUNT DISTINCT 計算(將非 integer 類型轉(zhuǎn)成 integer 用于 bitmap計算)谷誓,他們不支持解碼,因此不能為普通維度編碼吨凑。
Advanced Snapshot Table: 為全局 lookup 表而設計捍歪,提供不同的存儲類型。
Advanced ColumnFamily: 如果有超過一個的COUNT DISTINCT 或 TopN 度量, 你可以將它們放在更多列簇中鸵钝,以優(yōu)化與HBase 的I/O糙臼。