全部產品
Search
文件中心

Hologres:Dynamic Table

更新時間:Dec 13, 2024

Hologres推出了聲明式資料處理架構Dynamic Table,該架構可以自動處理並儲存一個或者多個基表(Base Table)對象的資料彙總結果,內建不同的資料重新整理策略,業務可以根據需求設定不同的資料重新整理策略,實現資料從基表對象到Dynamic Table的自動流轉,滿足業務統一開發、資料自動流轉、處理時效性等訴求。

背景資訊

在即時數倉情境中,通常會涉及到複雜的業務處理,例如多表關聯查詢、大表彙總查詢等,針對不同情境,業務在時效性方面也有不同的需求:

  • 風控、推薦等純即時情境(即時情境):需要秒級/毫秒級出結果。

  • 即時報表、BI看數等情境(近即時情境):時效性可以允許分鐘級延遲。

  • 定期報表、查歷史資料等情境(離線情境):查詢頻率較低,時效性可以允許小時級延遲。

同時業務之間也會有關聯查詢的訴求,需要嚴格保證資料口徑一致性。

為了滿足業務資源成本、開發效率及業務時效性等需求,業界做了比較多的架構研究演化,例如早期的Lambda架構、流批一體架構等,雖然解決了部分業務/開發問題,但還存在以下問題:

  • 架構上:目前市面上的產品通過相互組合的解決方案,來支援不同業務情境不同時效性的業務訴求。不能在一個產品裡滿足所有業務訴求。

  • 資料加工上(ETL):從明細層到應用程式層,即時數倉沒有明確的方法論,無法做到更低成本的資料自動流動,資源成本高、開發效率低。

基於上述背景,Hologres重磅推出Dynamic Table,支援全量、增量的資料處理模式,實現更高效、更低成本的資料自動流動與分層。通過Dynamic Table,結合Hologres本身特性,能夠統一儲存層、統一計算層、統一資料服務層,滿足開發效率、時效性等需求。

Dynamic Table的優勢

  • 簡化數倉架構

    Dynamic Table多種重新整理模式可實現不同層級的時延,滿足業務不同時效性的查詢訴求,再基於Hologres的統一儲存(儲存即時資料、離線資料),直接賦能業務OLAP查詢、線上服務、AI與大模型等多個應用情境的查詢訴求,有效簡化數倉架構,節約開發、營運成本。

  • 自動數倉分層

    Dynamic Table可以自動重新整理資料,實現資料從ODS>DWD>DWS>ADS的自動資料流轉,提升數倉分層體驗。

  • 提升資料處理(ETL)效率

    Dynamic Table支援全量重新整理和增量重新整理,滿足業務的不同時效性處理需求。對於增量重新整理,只處理增量資料,減少ETL計算資料量,顯著提升資料處理效率。

  • 簡化開發維護

    Dynamic Table自動管理重新整理任務,以及資料之間的層級和依賴關係,簡化繁瑣的開發營運流程,提升開發效率。

image

基本概念

  • 基表(Base Table)

    Dynamic Table中資料來源的基表,可以是一張表(內部表或外部表格),也可以是多個表關聯。不同的重新整理模式,支援的基表類型不同。詳情請參見Dynamic Table支援範圍和限制

  • Query

    建立Dynamic Table時指定的Query,是指對基表資料的處理Query,相當於ETL過程。不同的重新整理模式支援的Query類型不同,詳情請參見Dynamic Table支援範圍和限制

  • 重新整理(Refresh)

    當基表中的資料發生變化時,需要通過重新整理(Refresh)Dynamic Table以更新資料的變動。Dynamic Table會根據設定的重新整理開始時間和重新整理間隔,自動在後台運行重新整理任務,對重新整理任務的觀測和營運詳情請參見營運Dynamic Table重新整理任務

技術原理

基表中的資料根據Dynamic Table中Query定義的資料處理流程,通過重新整理的方式寫入Dynamic Table。以下將從重新整理模式、計算資源、資料存放區及表索引四個方面介紹Dynamic Table的部分技術原理。

重新整理模式

當前Dynamic Table支援兩種重新整理模式,即全量重新整理(Full)和增量重新整理(Incremental),根據設定的重新整理模式不同,Dynamic Table的技術原理也有所差異。

全量重新整理(Full)

全量重新整理是指每次執行重新整理時,都以全量的方式進行資料處理,並將基表的彙總結果物化寫入Dynamic Table,其技術原理類似於INSERT OVERWRITE的相關原理。

增量重新整理(Incremental)

增量重新整理模式下,每次重新整理時只會讀取基表中新增的資料,根據中間彙總狀態和增量資料計算最終結果並更新到Dynamic Table中。相比全量重新整理,增量重新整理每次處理的資料量更少,效率更高,從而可以非常有效地提升重新整理任務的時效性,同時降低計算資源的使用。

  • 技術原理

    建立了增量重新整理的Dynamic Table後,系統會在底層建立一個列存的狀態表(State表),用於儲存Query的中間彙總狀態,引擎在編碼、儲存等方面對中間彙總狀態進行了最佳化,可以加快對中間彙總狀態的讀取和更新。增量資料會以微批次方式做記憶體態的彙總,再與狀態表中的資料進行合并,然後以BulkLoad的方式將最新彙總結果高效地寫入Dynamic Table。微批次的增量處理方式減少了單次重新整理的資料處理量,顯著提升了計算的時效性。

  • 注意事項

    • 增量重新整理模式支援的基表存在一定的限制,詳情請參見Dynamic Table支援範圍和限制

    • 增量重新整理需要基表開啟Binlog,以此感知基表的資料變化,詳情請參見訂閱Hologres Binlog

    • 增量重新整理內建的狀態表會佔用一定的儲存,系統會設定TTL定期清理資料,您可以使用函數查看狀態表的儲存大小,詳情請參見狀態表(State)管理

計算資源

執行重新整理任務的計算資源可以是本執行個體的資源或者Serverless資源:

  • 本執行個體資源:重新整理任務將會使用本執行個體的資源運行,與執行個體中的其他任務共用資源,高峰期可能會出現資源爭搶現象。

  • Serverless資源(預設):預設會將重新整理任務通過Serverless方式執行,如果Query比較複雜,處理的資料量較多,通過Serverless方式可以有效地提升重新整理任務的穩定性,避免本執行個體內多任務間的資源爭搶,同時也可以對單個重新整理任務修改計算資源,以便更合理地使用Serverless資源。

資料存放區

Dynamic Table在資料存放區方面與普通表一致,預設使用熱儲存模式。為了減少儲存成本,也可以將查詢頻率較低的資料設定為冷儲存,有效降低成本。

表索引

業務在查詢時,可以直接查詢Dynamic Table,相當於直接查詢彙總結果,這樣可以顯著提升查詢效能。同時,Dynamic Table也如同普通表,支援設定表索引,如行存/列存、Distribution Key、Clustering Key等,通常情況下,引擎會根據Dynamic Table的Query推匯出合適的索引,如業務有進一步的調優需求,可以重新為其設定合適的索引,以進一步提升查詢效能。image

與物化視圖對比

Dynamic Table VS Hologres即時物化視圖

Hologres在V1.3版本推出了SQL管理物化視圖,但是支援的能力相對較弱,與Dynamic Table的差異如下:

功能分類

Hologres Dynamic Table

Hologres即時物化視圖

基表類型

  • 內部表

  • 外部表格(MaxCompute、Paimon、OSS)

  • Dynamic Table

  • 視圖

單內表

基表操作

  • 寫入

  • 更新

  • 刪除

僅支援append寫入

重新整理原理

非同步重新整理(全量重新整理、增量重新整理)

同步重新整理

重新整理時效性

  • 分鐘級

  • 小時級

即時

Query類型

  • 單表彙總

  • 多表關聯

  • 維表JOIN

  • 複雜OLAP:視窗、CTE、RB等

說明

不同的重新整理模式,支援的Query類型不同,詳情請參見Dynamic Table支援範圍和限制

有限運算元支援(AGG、RB函數等)

查詢模式

直接查Dynamic Table

  • 直接查物化視圖

  • 查詢改寫

Dynamic Table VS 非同步物化視圖

當前市面上,與Dynamic Table功能類似的有OLAP產品的非同步物化視圖、Snowflake的Dynamic Table等,其差別如下:

功能分類

Hologres Dynamic Table

OLAP產品非同步物化視圖

Snowflake Dynamic Table

基表類型

  • 內部表

  • 外部表格(MaxCompute、Paimon、OSS)

  • Dynamic Table

  • 視圖

說明

不同的重新整理模式,支援的Query類型不同,詳情請參見Dynamic Table支援範圍和限制

  • 內部表

  • 外部表格(Hive、Hudi、Iceberg等)

  • 物化視圖

  • 視圖

  • 內部表

  • Dynamic Table

  • 視圖

重新整理模式

  • 全量重新整理

  • 增量重新整理

  • 全量重新整理

  • 指定分區/資料範圍重新整理

  • 全量重新整理

  • 增量重新整理

重新整理時效性

  • 分鐘級

  • 小時級

小時級

  • 小時級

  • 分鐘級

Query類型

  • 單表彙總

  • 多表關聯

  • 維表JOIN

  • 複雜OLAP:視窗、CTE、RB等

說明

不同的重新整理模式,支援的Query類型不同,詳情請參見Dynamic Table支援範圍和限制

  • 單表彙總

  • 多表關聯

  • 維表JOIN

  • 複雜OLAP:視窗、CTE等

  • 單表彙總

  • 多表關聯

  • 維表JOIN

  • 複雜OLAP:視窗、CTE等

查詢模式

直接查Dynamic Table

  • 直接查物化視圖

  • 查詢改寫

直接查Dynamic Table

觀測/營運

  • DataWorks、Holoweb可視化介面

  • 豐富的監控指標

豐富的監控指標

可視化介面

使用情境

Dynamic Table可以自動完成資料加工和儲存,通過Dynamic Table,可以加速資料查詢,提升業務時效性,推薦您在湖倉加速和數倉分層情境中使用。

湖倉加速

Dynamic Table的基表資料可以來源於Hologres表,也可以來源於資料倉儲,例如MaxCompute、資料湖OSS、Paimon等,通過對基表資料的全量/增量重新整理,滿足不同時效性的資料查詢探索需求。推薦的使用情境包括:

  • 定期報表查詢

    對於周期性觀測的相關情境,例如周期性報表等,如果資料量較少或者Query不複雜,可以使用全量重新整理或者增量重新整理的模式,周期性地將湖倉資料的彙總分析結果重新整理至Dynamic Table,應用側直接查詢Dynamic Table擷取分析結果,加速報表查詢。

  • 即時大屏/報表

    對於即時大屏和即時報表等情境,資料的時效性要求更高,推薦使用增量重新整理的模式,將湖Paimon或者即時資料的彙總分析結果重新整理至Dynamic Table,以此來加速對即時資料的處理,應用側直接查詢Dynamic Table擷取資料分析結果,達到近即時分析的目的。image

數倉分層

如果基表中有大量資料,需要進行複雜的ETL處理來滿足業務的時效性需求,常見的做法就是數倉分層。對於即時數倉,業界在數倉分層上的方案較多,例如使用物化視圖、周期性調度等,這些方案雖然能解決一部分問題,但也都存在資料時效性、開發不便捷等問題。而Hologres Dynamic Table本身就具備資料自動處理的能力,因此可以通過Dynamic Table方便地實現數倉分層。

推薦做法如下:

可以在Hologres中通過Dynamic Table構建數倉分層DWD>DWS>ADS:

  • 每一層之間的資料同步使用增量重新整理模式,這樣可以確保每一層處理的資料量更少,減少不必要的重複計算,提升同步速度。也可以根據業務情況,將重新整理任務提交到Serverless Computing執行,進一步提升重新整理的時效性和穩定性。

  • 如果要對每一層的資料進行回刷,可以使用全量重新整理模式執行一次重新整理,以此來保證每一層資料口徑的一致性。同樣也可以根據業務情況,將重新整理任務提交到Serverless Computing執行,進一步提升重新整理的時效性和穩定性。

  • 每一層都在Hologres中構建,數倉分層明確,每一層都可以根據業務情況提供查詢,保證資料的可見度、複用性。

通過Hologres Dynamic Table方案即可完成資料加工+應用的情境,顯著提升數倉開發、營運效率。image