Dynamic Table
Hologres推出了聲明式數(shù)據(jù)處理架構(gòu)Dynamic Table,該架構(gòu)可以自動處理并存儲一個或者多個基表(Base Table)對象的數(shù)據(jù)聚合結(jié)果,內(nèi)置不同的數(shù)據(jù)刷新策略,業(yè)務(wù)可以根據(jù)需求設(shè)置不同的數(shù)據(jù)刷新策略,實(shí)現(xiàn)數(shù)據(jù)從基表對象到Dynamic Table的自動流轉(zhuǎn),滿足業(yè)務(wù)統(tǒng)一開發(fā)、數(shù)據(jù)自動流轉(zhuǎn)、處理時效性等訴求。
背景信息
在實(shí)時數(shù)倉場景中,通常會涉及到復(fù)雜的業(yè)務(wù)處理,例如多表關(guān)聯(lián)查詢、大表聚合查詢等,針對不同場景,業(yè)務(wù)在時效性方面也有不同的需求:
風(fēng)控、推薦等純實(shí)時場景(實(shí)時場景):需要秒級/毫秒級出結(jié)果。
實(shí)時報表、BI看數(shù)等場景(近實(shí)時場景):時效性可以允許分鐘級延遲。
定期報表、查歷史數(shù)據(jù)等場景(離線場景):查詢頻率較低,時效性可以允許小時級延遲。
同時業(yè)務(wù)之間也會有關(guān)聯(lián)查詢的訴求,需要嚴(yán)格保證數(shù)據(jù)口徑一致性。
為了滿足業(yè)務(wù)資源成本、開發(fā)效率及業(yè)務(wù)時效性等需求,業(yè)界做了比較多的架構(gòu)研究演進(jìn),例如早期的Lambda架構(gòu)、流批一體架構(gòu)等,雖然解決了部分業(yè)務(wù)/開發(fā)問題,但還存在以下問題:
架構(gòu)上:目前市面上的產(chǎn)品通過相互組合的解決方案,來支持不同業(yè)務(wù)場景不同時效性的業(yè)務(wù)訴求。不能在一個產(chǎn)品里滿足所有業(yè)務(wù)訴求。
數(shù)據(jù)加工上(ETL):從明細(xì)層到應(yīng)用層,實(shí)時數(shù)倉沒有明確的方法論,無法做到更低成本的數(shù)據(jù)自動流動,資源成本高、開發(fā)效率低。
基于上述背景,Hologres重磅推出Dynamic Table,支持全量、增量的數(shù)據(jù)處理模式,實(shí)現(xiàn)更高效、更低成本的數(shù)據(jù)自動流動與分層。通過Dynamic Table,結(jié)合Hologres本身特性,能夠統(tǒng)一存儲層、統(tǒng)一計(jì)算層、統(tǒng)一數(shù)據(jù)服務(wù)層,滿足開發(fā)效率、時效性等需求。
Dynamic Table的優(yōu)勢
簡化數(shù)倉架構(gòu)
Dynamic Table多種刷新模式可實(shí)現(xiàn)不同級別的時延,滿足業(yè)務(wù)不同時效性的查詢訴求,再基于Hologres的統(tǒng)一存儲(存儲實(shí)時數(shù)據(jù)、離線數(shù)據(jù)),直接賦能業(yè)務(wù)OLAP查詢、在線服務(wù)、AI與大模型等多個應(yīng)用場景的查詢訴求,有效簡化數(shù)倉架構(gòu),節(jié)約開發(fā)、運(yùn)維成本。
自動數(shù)倉分層
Dynamic Table可以自動刷新數(shù)據(jù),實(shí)現(xiàn)數(shù)據(jù)從ODS>DWD>DWS>ADS的自動數(shù)據(jù)流轉(zhuǎn),提升數(shù)倉分層體驗(yàn)。
提升數(shù)據(jù)處理(ETL)效率
Dynamic Table支持全量刷新和增量刷新,滿足業(yè)務(wù)的不同時效性處理需求。對于增量刷新,只處理增量數(shù)據(jù),減少ETL計(jì)算數(shù)據(jù)量,顯著提升數(shù)據(jù)處理效率。
簡化開發(fā)維護(hù)
Dynamic Table自動管理刷新任務(wù),以及數(shù)據(jù)之間的層級和依賴關(guān)系,簡化繁瑣的開發(fā)運(yùn)維流程,提升開發(fā)效率。
基本概念
基表(Base Table)
Dynamic Table中數(shù)據(jù)來源的基表,可以是一張表(內(nèi)部表或外部表),也可以是多個表關(guān)聯(lián)。不同的刷新模式,支持的基表類型不同。詳情請參見Dynamic Table支持范圍和限制。
Query
創(chuàng)建Dynamic Table時指定的Query,是指對基表數(shù)據(jù)的處理Query,相當(dāng)于ETL過程。不同的刷新模式支持的Query類型不同,詳情請參見Dynamic Table支持范圍和限制。
刷新(Refresh)
當(dāng)基表中的數(shù)據(jù)發(fā)生變化時,需要通過刷新(Refresh)Dynamic Table以更新數(shù)據(jù)的變動。Dynamic Table會根據(jù)設(shè)置的刷新開始時間和刷新間隔,自動在后臺運(yùn)行刷新任務(wù),對刷新任務(wù)的觀測和運(yùn)維詳情請參見運(yùn)維Dynamic Table刷新任務(wù)。
技術(shù)原理
基表中的數(shù)據(jù)根據(jù)Dynamic Table中Query定義的數(shù)據(jù)處理流程,通過刷新的方式寫入Dynamic Table。以下將從刷新模式、計(jì)算資源、數(shù)據(jù)存儲及表索引四個方面介紹Dynamic Table的部分技術(shù)原理。
刷新模式
當(dāng)前Dynamic Table支持兩種刷新模式,即全量刷新(Full)和增量刷新(Incremental),根據(jù)設(shè)置的刷新模式不同,Dynamic Table的技術(shù)原理也有所差異。
全量刷新(Full)
全量刷新是指每次執(zhí)行刷新時,都以全量的方式進(jìn)行數(shù)據(jù)處理,并將基表的聚合結(jié)果物化寫入Dynamic Table,其技術(shù)原理類似于INSERT OVERWRITE的相關(guān)原理。
增量刷新(Incremental)
增量刷新模式下,每次刷新時只會讀取基表中新增的數(shù)據(jù),根據(jù)中間聚合狀態(tài)和增量數(shù)據(jù)計(jì)算最終結(jié)果并更新到Dynamic Table中。相比全量刷新,增量刷新每次處理的數(shù)據(jù)量更少,效率更高,從而可以非常有效地提升刷新任務(wù)的時效性,同時降低計(jì)算資源的使用。
技術(shù)原理
創(chuàng)建了增量刷新的Dynamic Table后,系統(tǒng)會在底層創(chuàng)建一個列存的狀態(tài)表(State表),用于存儲Query的中間聚合狀態(tài),引擎在編碼、存儲等方面對中間聚合狀態(tài)進(jìn)行了優(yōu)化,可以加快對中間聚合狀態(tài)的讀取和更新。增量數(shù)據(jù)會以微批次方式做內(nèi)存態(tài)的聚合,再與狀態(tài)表中的數(shù)據(jù)進(jìn)行合并,然后以BulkLoad的方式將最新聚合結(jié)果高效地寫入Dynamic Table。微批次的增量處理方式減少了單次刷新的數(shù)據(jù)處理量,顯著提升了計(jì)算的時效性。
注意事項(xiàng)
增量刷新模式支持的基表存在一定的限制,詳情請參見Dynamic Table支持范圍和限制。
增量刷新需要基表開啟Binlog,以此感知基表的數(shù)據(jù)變化,詳情請參見訂閱Hologres Binlog。
增量刷新內(nèi)置的狀態(tài)表會占用一定的存儲,系統(tǒng)會設(shè)置TTL定期清理數(shù)據(jù),您可以使用函數(shù)查看狀態(tài)表的存儲大小,詳情請參見狀態(tài)表(State)管理。
計(jì)算資源
執(zhí)行刷新任務(wù)的計(jì)算資源可以是本實(shí)例的資源或者Serverless資源:
本實(shí)例資源:刷新任務(wù)將會使用本實(shí)例的資源運(yùn)行,與實(shí)例中的其他任務(wù)共享資源,高峰期可能會出現(xiàn)資源爭搶現(xiàn)象。
Serverless資源(默認(rèn)):默認(rèn)會將刷新任務(wù)通過Serverless方式執(zhí)行,如果Query比較復(fù)雜,處理的數(shù)據(jù)量較多,通過Serverless方式可以有效地提升刷新任務(wù)的穩(wěn)定性,避免本實(shí)例內(nèi)多任務(wù)間的資源爭搶,同時也可以對單個刷新任務(wù)修改計(jì)算資源,以便更合理地使用Serverless資源。
數(shù)據(jù)存儲
Dynamic Table在數(shù)據(jù)存儲方面與普通表一致,默認(rèn)使用熱存儲模式。為了減少存儲成本,也可以將查詢頻率較低的數(shù)據(jù)設(shè)置為冷存儲,有效降低成本。
表索引
業(yè)務(wù)在查詢時,可以直接查詢Dynamic Table,相當(dāng)于直接查詢聚合結(jié)果,這樣可以顯著提升查詢性能。同時,Dynamic Table也如同普通表,支持設(shè)置表索引,如行存/列存、Distribution Key、Clustering Key等,通常情況下,引擎會根據(jù)Dynamic Table的Query推導(dǎo)出合適的索引,如業(yè)務(wù)有進(jìn)一步的調(diào)優(yōu)需求,可以重新為其設(shè)置合適的索引,以進(jìn)一步提升查詢性能。
與物化視圖對比
Dynamic Table VS Hologres實(shí)時物化視圖
Hologres在V1.3版本推出了SQL管理物化視圖,但是支持的能力相對較弱,與Dynamic Table的差異如下:
功能分類 | Hologres Dynamic Table | Hologres實(shí)時物化視圖 |
基表類型 |
| 單內(nèi)表 |
基表操作 |
| 僅支持append寫入 |
刷新原理 | 異步刷新(全量刷新、增量刷新) | 同步刷新 |
刷新時效性 |
| 實(shí)時 |
Query類型 |
說明 不同的刷新模式,支持的Query類型不同,詳情請參見Dynamic Table支持范圍和限制。 | 有限算子支持(AGG、RB函數(shù)等) |
查詢模式 | 直接查Dynamic Table |
|
Dynamic Table VS 異步物化視圖
當(dāng)前市面上,與Dynamic Table功能類似的有OLAP產(chǎn)品的異步物化視圖、Snowflake的Dynamic Table等,其差別如下:
功能分類 | Hologres Dynamic Table | OLAP產(chǎn)品異步物化視圖 | Snowflake Dynamic Table |
基表類型 |
說明 不同的刷新模式,支持的Query類型不同,詳情請參見Dynamic Table支持范圍和限制。 |
|
|
刷新模式 |
|
|
|
刷新時效性 |
| 小時級 |
|
Query類型 |
說明 不同的刷新模式,支持的Query類型不同,詳情請參見Dynamic Table支持范圍和限制。 |
|
|
查詢模式 | 直接查Dynamic Table |
| 直接查Dynamic Table |
觀測/運(yùn)維 |
| 豐富的監(jiān)控指標(biāo) | 可視化界面 |
使用場景
Dynamic Table可以自動完成數(shù)據(jù)加工和存儲,通過Dynamic Table,可以加速數(shù)據(jù)查詢,提升業(yè)務(wù)時效性,推薦您在湖倉加速和數(shù)倉分層場景中使用。
湖倉加速
Dynamic Table的基表數(shù)據(jù)可以來源于Hologres表,也可以來源于數(shù)據(jù)倉庫,例如MaxCompute、數(shù)據(jù)湖OSS、Paimon等,通過對基表數(shù)據(jù)的全量/增量刷新,滿足不同時效性的數(shù)據(jù)查詢探索需求。推薦的使用場景包括:
定期報表查詢
對于周期性觀測的相關(guān)場景,例如周期性報表等,如果數(shù)據(jù)量較少或者Query不復(fù)雜,可以使用全量刷新或者增量刷新的模式,周期性地將湖倉數(shù)據(jù)的聚合分析結(jié)果刷新至Dynamic Table,應(yīng)用側(cè)直接查詢Dynamic Table獲取分析結(jié)果,加速報表查詢。
實(shí)時大屏/報表
對于實(shí)時大屏和實(shí)時報表等場景,數(shù)據(jù)的時效性要求更高,推薦使用增量刷新的模式,將湖Paimon或者實(shí)時數(shù)據(jù)的聚合分析結(jié)果刷新至Dynamic Table,以此來加速對實(shí)時數(shù)據(jù)的處理,應(yīng)用側(cè)直接查詢Dynamic Table獲取數(shù)據(jù)分析結(jié)果,達(dá)到近實(shí)時分析的目的。
數(shù)倉分層
如果基表中有大量數(shù)據(jù),需要進(jìn)行復(fù)雜的ETL處理來滿足業(yè)務(wù)的時效性需求,常見的做法就是數(shù)倉分層。對于實(shí)時數(shù)倉,業(yè)界在數(shù)倉分層上的方案較多,例如使用物化視圖、周期性調(diào)度等,這些方案雖然能解決一部分問題,但也都存在數(shù)據(jù)時效性、開發(fā)不便捷等問題。而Hologres Dynamic Table本身就具備數(shù)據(jù)自動處理的能力,因此可以通過Dynamic Table方便地實(shí)現(xiàn)數(shù)倉分層。
推薦做法如下:
可以在Hologres中通過Dynamic Table構(gòu)建數(shù)倉分層DWD>DWS>ADS:
每一層之間的數(shù)據(jù)同步使用增量刷新模式,這樣可以確保每一層處理的數(shù)據(jù)量更少,減少不必要的重復(fù)計(jì)算,提升同步速度。也可以根據(jù)業(yè)務(wù)情況,將刷新任務(wù)提交到Serverless Computing執(zhí)行,進(jìn)一步提升刷新的時效性和穩(wěn)定性。
如果要對每一層的數(shù)據(jù)進(jìn)行回刷,可以使用全量刷新模式執(zhí)行一次刷新,以此來保證每一層數(shù)據(jù)口徑的一致性。同樣也可以根據(jù)業(yè)務(wù)情況,將刷新任務(wù)提交到Serverless Computing執(zhí)行,進(jìn)一步提升刷新的時效性和穩(wěn)定性。
每一層都在Hologres中構(gòu)建,數(shù)倉分層明確,每一層都可以根據(jù)業(yè)務(wù)情況提供查詢,保證數(shù)據(jù)的可見性、復(fù)用性。
通過Hologres Dynamic Table方案即可完成數(shù)據(jù)加工+應(yīng)用的場景,顯著提升數(shù)倉開發(fā)、運(yùn)維效率。