Apache Kylin 入門 1 - 基本概念

rochy_he發表於2018-10-14

Apache Kylin 入門系列目錄

Apache Kylin 簡介

Apache Kylin 是一個開源的分散式分析引擎,提供 Hadoop/Spark 之上的 SQL 查詢介面及多維分析(OLAP)能力以支援超大規模資料,最初由 eBay Inc. 開發並貢獻至開源社群,它能在亞秒內查詢巨大的 Hive 表。

Apache Kylin 的特性:

  • 可擴充套件的超快 OLAP 引擎: Kylin 是為減少在 Hadoop/Spark 上百億規模資料查詢延遲而設計;
  • Hadoop ANSI SQL 介面: Kylin 為 Hadoop 提供標準 SQL 支援大部分查詢功能;
  • 互動式查詢能力: 通過 Kylin,使用者可以與 Hadoop 資料進行亞秒級互動,在同樣的資料集上提供比 Hive 更好的效能;
  • 多維立方體(MOLAP Cube): 使用者能夠在 Kylin 裡為百億以上資料集定義資料模型並構建立方體;
  • 與 BI 工具無縫整合: Kylin 提供與 BI 工具的整合能力,如 Tableau,PowerBI/Excel,MSTR,QlikSense,Hue 和 SuperSet

其他特性:

  • Job 管理與監控
  • 壓縮與編碼
  • 增量更新
  • 利用 HBase Coprocessor
  • 基於 HyperLogLog 的 Dinstinc Count 近似演算法
  • 友好的 web 介面以管理,監控和使用立方體
  • 專案及表級別的訪問控制安全
  • 支援 LDAP、SSO

資料倉儲基本概念

資料倉儲(Data Warehouse)

資料倉儲是一種資訊系統的資料儲存理論,此理論強調的是利用某些特殊的資料儲存方式,讓所包含的資料特別有利於分析和處理,從而產生有價值的資訊,並可依此做出決策。

利用資料倉儲的方式存放的資料,具有一旦存入,便不會隨時間發生變動的特性,此外,存入的資料必定包含時間屬性,通常一個資料倉儲中會含有大量的歷史性資料,並且它可利用特定的分析方式,從其中發掘出特定的資訊。

STAGE 層

STAGE 層作為資料緩衝層,主要負責採集不同型別的業務系統資料並儲存一定期限內的相關業務資料,完成不同型別資料來源的統一臨時儲存,同時避免 ETL 操作對業務系統效能造成影響,STAGE 層資料在資料結構、資料之間的邏輯關係上都與業務系統基本保持一致。

ODS 資料層

ODS(Operational Data Store)層資料來源於 STAGE 層,它的資料經過了對 STAGE 層資料的清洗,包括編碼表去重、去空、垃圾資料過濾、資料型別規則化等。

另外 ODS 作為 DW 和 STAGE 層的橋樑,也可以實現指標一致性的管理,將不同系統不同部門相同指標的定義及指標資料按照業務規則取其一,保證不同源資料的資料一致性,也可以滿足使用者對明細資料的查詢要求,直接從ODS層獲取明細資料進行分析。

DWD 資料層

DWD(Data Warehouse Detail)層資料是將 ODS 層資料根據資料清洗規則,經過質量檢查、資料清洗、轉換、標準化後,形成符合質量要求的公共資料中心。

把 ODS 資料表結構改變成專案主題資料倉儲的表結構,對 DWD 層的所有表新增了代理鍵,標準化了業務系統編碼型別不統一的問題,建立了資料倉儲維度表和事實表的關聯體系,也為緩慢變化維的實現奠定了基礎。

DWC 資料層

DWC(Data Warehouse Center)層主要管理固化報表的資料儲存,資料主要來源於 DWD 層,根據前臺所需資料建立物理模型,使用 ETL 抽取 DWD 層資料推送給 DWC 層,這樣顯著減少前臺應用直接關聯 DWD 層查詢明細資料的成本,提高平臺資料獲取的速度。

DM 資料層

DM(Data Mart)層即資料集市,將指標與維度建立物理模型組成資料集市,這是 OLAP 的資料基礎。該層實現了合併不同系統的資料來源來滿足面向主題的業務需求,它的建模是終端使用者驅動的,也是由業務需求驅動的。按主題,維度及 KPI 指標對 DM 層進行模型設計、建模,DM 層資料是將 DWD 層資料進行進一步整合、轉換、彙總、計算等 ETL 操作處理獲取的。

資料倉儲架構案例

Kylin 基本概念

事實表(Fact Table)

事實表(Fact Table)是指儲存有事實記錄的表,如系統日誌、銷售記錄等;事實表的記錄在不斷地動態增長,所以它的體積通常遠大於其他表。

維度表(Dimension Table)

維度表或維表,有時也稱查詢表(Lookup Table),是與事實表相對應的一種表。它儲存了維度的屬性值,可以跟事實表做關聯;相當於將事實表上經常重複出現的屬性抽取、規範出來用一張表進行管理。

維度表有以下幾個優點:

  • 縮小了事實表的大小;
  • 便於維度的管理和維護,不必對事實表進行改動;
  • 維度表可以為多個事實表重用,以減少重複工作。

維度(Dimension)

維度是觀察資料的角度,一般是一組離散的值;因此統計時可以把維度值相同的記錄聚合在一起,然後進行聚合計算。

在 Kylin Cube 構建中,維度可以分為以下幾種型別:

  • Mandatory:必需維度,查詢中總是出現在 where 條件中的維度;如果一個維度被標記為 “Mandatory”,會認為所有的查詢都會包含此維度,所有不含此維度的組合,在 Cube 構建時都會被剪枝(不計算);
  • Hierarchy:層級維度,如果多個維度之間有層級(或包含)的關係,通過設定為 “Hierarchy”,那些不滿足層級的組合會被剪枝;如果A, B, C是層級,並且A>B>C,那麼只需要計算組合A, AB, ABC; 其它組合如B, C, BC, AC將不做預計算;
  • Joint:聯合維度,有些維度往往一起出現,或者它們的基數非常接近(有 1:1 對映關係),例如 “使用者 ID”總是對應唯一的 “使用者名稱”;
  • Derived:衍生維度:維度表的列值,可以從它的主鍵值衍生而來,那麼通過將這些列定義為衍生維度,可以僅將主鍵加入到 Cube 的預計算來,而在執行時通過使用維度表的快照,衍生出非主鍵列的值,從而起到降維的效果。

度量(Measure)

度量是被聚合的統計值,也是聚合運算的結果,它一般是連續的值。

OLAP(Online Analytical Process)

OLAP(Online Analytical Process),聯機分析處理,以多維度的方式分析資料,而且能夠彈性地提供上卷(Roll-up)、下鑽(Drill-down)和透視分析(Pivot)等操作,它是呈現整合性決策資訊的方法,多用於決策支援系統、商務智慧或資料倉儲。其主要的功能在於方便大規模資料分析及統計計算,可對決策提供參考和支援。

與之相區別的是聯機交易處理(OLTP),聯機交易處理,更側重於基本的、日常的事務處理,包括資料的增刪改查。

星型模型

星型模型是一種多維的資料關係,它由一個事實表和一組維表組成。每個維表都有一個維作為主鍵,所有這些維的主鍵組合成事實表的主鍵。強調的是對維度進行預處理,將多個維度集合到一個事實表,形成一個寬表。

這也是我們在使用 Hive 時,經常會看到一些大寬表的原因,大寬表一般都是事實表,包含了維度關聯的主鍵和一些度量資訊,而維度表則是事實表裡面維度的具體資訊,使用時候一般通過 Join 來組合資料,相對來說對 OLAP 的分析比較方便。

星型模型

雪花模型

當有一個或多個維表沒有直接連線到事實表上,而是通過其他維表連線到事實表上時,其圖解就像多個雪花連線在一起,故稱雪花模型。

雪花模型是對星型模型的擴充套件,它對星型模型的維表進一步層次化,原有的各維表可能被擴充套件為小的事實表,形成一些區域性的"層次"區域,這些被分解的表都連線到主維度表而不是事實表。

雪花模型更加符合資料庫正規化,減少資料冗餘,但是在分析資料的時候,操作比較複雜,需要 Join 的表比較多所以其效能並不一定比星型模型高。

雪花模型

資料立方體(Data Cube)

資料立方體允許多維對資料建模和觀察,它由維和事實定義,它是對多維模型的一個形象的說法。

從表方面看,資料立方體是三維的,但是多維模型不僅限於三維模型,可以組合更多的模型,比如四維、五維等等,比如我們根據時間、地域、產品和產品型號這四個維度,統計銷售量等指標。

對於每一種維度的組合,將度量做聚合運算,然後將運算的結果儲存為一個物化檢視,稱為 Cuboid。所有維度組合的 Cuboid 作為一個整體,被稱為 Cube。所以簡單來說,一個 Cube 就是許多按維度聚合的物化檢視的集合。

Cube Segment 是指標對源資料中的某一個片段,計算出來的 Cube 資料。通常資料倉儲中的資料數量會隨著時間的增長而增長,而 Cube Segment 也是按時間順序來構建的。

Cuboid 示例:Cuboid[Time, Locatio] = select Time, Location, sum(GMV) as GMV from T group by Time, Location

Cuboid Cuboid 示例

Cube 構建常見概念

  • Table - 表, 是 Cube 的資料來源;在建立 Cube 之前,需要從資料來源(通常為 Hive)同步表的後設資料,包含表名、列名、列屬性等。
  • Data Model - 資料模型,定義了由若干張表的一個連線關係。支援星型模型的多維分析;在建立Cube之前,使用者需定義這麼一個資料模型。
  • Cube - 資料立方體,是一種多維分析的技術,通過預計算,將計算結果儲存在某多個維度值所對映的空間中;在執行時通過對 Cube 的再處理而快速獲取結果。
  • Partition - 分割槽,使用者可以定義一個分割槽日期或時間列,隨後對 Cub e的構建按此列的值範圍而進行,從而將 Cube 分成多個 Segment。
  • Cube Segment - 每個 Cube Segment 是對特定時間範圍的資料計算而成的 Cube,每個 Segment 對應一張 HBase 表。
  • Aggregation Group - 聚合組,每個聚合組是全部維度的一個子集;通過將很多個維度分組,並把常一起使用的維度放在一起,可以有效降低 Cube 的組合數。

Any Code,Code Any!

掃碼關注『AnyCode』,程式設計路上,一起前行。

Apache Kylin 入門 1 - 基本概念

相關文章