物化表(Materialized Table)是Flink SQL引入的一種新的表類型,旨在簡化批處理和流處理資料管道,提供流批一體化的開發體驗。建立物化表時無需聲明欄位與類型,通過指定資料新鮮度和查詢語句,Flink引擎將從查詢語句自動推導物化表的Schema,並建立相應的資料重新整理管道,以達到指定的資料新鮮度。
背景資訊
在不同的業務情境下,業務層對於資料的時效性有著不一樣的要求:
風控情境對資料時效性要求高,通常需要秒級到毫秒級。
使用者畫像、即時推薦等情境通常分鐘級即可滿足需求。
BI報表、歷史資料同環比分析等情境實效性較低,通常天級資料即可滿足需求。
儘管傳統的數倉架構下Kappa和Lambda兩套架構能在一定程度上支援業務需求,但其各自的缺點也十分明顯,缺少一個能滿足不同業務時效性要求的一體化架構。
Flink作為流批一體的計算引擎,致力於能提供一套完整的技術方案來解決業務對資料不同時效性的要求。基於Apache Paimon提供了物化表能力,通過物化表,您可以在資料湖上構建流批一體的計算能力,從而搭建一套新的資料開發範式,通過資料層、中繼資料層,計算層的統一,解決您在原有架構下,資料多份儲存、資料口徑對齊複雜、任務需要在不同引擎開發的痛點,實現真正的流批一體。
物化表優勢
物化表通過對錶的資料新鮮度的定義代替傳統的流批描述,您僅需要聲明資料需要重新整理的頻次,即可實現對資料的不同周期的重新整理,屏蔽複雜的流批開發和相關配置,資料口徑將天然對齊。
聲明式ETL:簡化ETL的過程,降低ETL複雜度,表Schema自動推導產生。
流批一體:通過對資料新鮮度的修改,實現作業流批的無縫切換。基於您資料新鮮度的定義,Flink將自動管理和編排資料。
簡化營運:Flink自動管理對資料的重新整理能力,提供資料血緣視角下各物化表的關聯關係,提供串聯更新能力。
效能提升:通過增量處理能力,顯著提高物化表的資料更新效能,節省資源。
物化表核心概念
資料新鮮度:定義了物化表資料相對於基礎資料表更新的最大延隔時間。
重新整理模式:
持續模式:流作業會累加式更新物化表資料,下遊資料會立即可見,或者等Checkpoint完成時才可見。
全量模式:工作流程定期觸發對物化表資料的全量覆蓋,其資料重新整理周期與資料新鮮度相匹配。預設覆蓋是表層級,如果有分區欄位存在,可選擇是否重新重新整理最新分區或更新全部分區。
查詢定義:物化表支援所有Flink SQL查詢。查詢結果用於填充物化表。在持續模式下,查詢結果會持續更新到物化表中;而在全量模式下,每次查詢結果都會覆蓋更新到物化表。
Schema:物化表可以聲明主鍵和分區欄位。其列名和類型會從相應的查詢語句中推導,無需聲明欄位和類型。
物化表工作原理
在建立物化表時,您需要指定資料的新鮮度和查詢語句。Flink引擎將自動推匯出物化表的Schema,並在Catalog中建立物化表,同時還會建立相應的資料更新作業,以按您指定的新鮮度自動完成物化表的資料重新整理。
例如,您可以設定物化表C的資料新鮮度為30 min,則物化表C的資料比基礎資料表(物化表A)至少滯後30 min更新。您也可以根據實際業務需要設定更長的物化表資料新鮮度以降低成本。
典型情境
物化表提供的是流批一體的新湖倉範式,旨在提供更加快速易用的開發體驗,同時協助您顯著降低儲存和營運的成本,以下情境更適合使用物化表。
歷史資料修正
由於資料轉送延時等問題可能導致最終資料存在部分失真,因此通常需要單獨開發離線作業,對歷史分區上的資料進行修正,以保證最終結果的正確性。通過物化表的手動重新整理能力,您可以在任意時間更新資料的歷史分區,且可以根據血緣關係對下遊所有關聯的物化表進行統一更新,一鍵完成修正。同時,物化表特有的增量計算能力也有別於普通的批次計算補資料情境,計算時會根據中間彙總狀態減少需要參與計算的資料量,成本更低、更新效率更高。
資料口徑對齊
Lambda架構下離線和即時的資料需要儲存在不同的業務系統中,處理邏輯與建表欄位無法自然對齊,需要在應用程式層做大量的拼接邏輯(比如同比、環比資料計算),搭建計算的邏輯複雜且容易出錯。使用物化表後,您的資料僅儲存一份,同時僅存在一張業務表,不需要進行複雜的拼接計算,不僅節省您的儲存資源,還節省了大量的開發與資料對齊口徑問題,顯著提高開發效率。
資料大屏即時統計
資料大屏在不同業務情境下對資料重新整理的時間要求各不相同。例如,電商資料大屏在日常業務中對資料的新鮮度要求通常為小時或天級。然而,在雙十一大促期間,資料的新鮮度需求可能提升至分鐘層級。物化表可以通過簡單的資料新鮮度修改,實現從天級到分鐘級的資料重新整理的能力,無需您單獨搭建即時鏈路,從而使即時化變得更加便捷。
如何使用物化表
文檔 | 說明 |
瞭解如何建立物化表,以及進行歷史資料回刷、修改新鮮度、查看物化表血緣關係。 | |
瞭解如何基於Paimon和物化表,構建流批一體的湖倉分析處理鏈路,以及通過修改表資料新鮮度,完成由批到流的切換,實現資料即時更新。 |
相關文檔
Apache Paimon是一種流批統一的資料湖儲存格式,可以快速地在雲端OSS上構建資料湖儲存服務,詳情請參見基於Paimon的Streaming Lakehouse方案。
通過Flink+Paimon+StarRocks搭建流式湖倉,詳情請參見基於Flink搭建流式湖倉OpenLake方案。