湖流一體表通過統一的中繼資料層,實現對即時增量資料(Fluss)與歷史全量資料(Paimon)的透明訪問。可根據業務需求,靈活選擇即時資料流讀、離線批讀或混合讀模數式。
支援的查詢引擎
湖流一體表的訪問相容性取決於訪問方式。
訪問方式 | 說明 | 支援的引擎 |
Fluss 原生訪問(含 Union Read) | 充分利用湖流一體的混合讀取能力,實現流批統一。 | Flink |
底層 Paimon 訪問( | 直接存取底層 Paimon 格式儲存,支援多引擎分析。 | Flink、Spark、Trino、StarRocks 等所有相容 Paimon 的引擎 |
通過 Flink 訪問
即時消費
在流處理情境中,通常需要監聽資料的最新變更。通過配置 Flink SQL 的啟動模式,可以指定不同的消費模式。
-- 即時監聽 orders 表的變更,僅讀取最新到達的資料
SELECT *
FROM fluss_catalog.fluss.orders
/*+ OPTIONS('scan.startup.mode' = 'latest-offset') */;更多啟動模式配置(如最早位點、特定時間戳記等),請參見消費模式中的消費模式說明。
批量查詢
Fluss 服務會自動將資料即時同步至底層的 Paimon 格式儲存。對於需要分析全量歷史資料或訪問特定快照的離線任務,可直接查詢底層的 Paimon 表。
在 Fluss Catalog 中,通過在表名後附加 $lake 尾碼,即可直接存取對應的 Paimon 表。
-- 批模式:直接查詢底層 Paimon 儲存的全量資料
SELECT * FROM fluss_catalog.fluss.orders$lake;
-- 批模式:查詢底層 Paimon 儲存的快照(Snapshots)中繼資料
SELECT * FROM fluss_catalog.fluss.orders$lake$snapshots;$lake 表本質上是一張標準的 Paimon 表,因此繼承了 Paimon 的所有特性,包括時間旅行(Time Travel)和對多引擎的支援。
關聯查詢
關聯查詢(Union Read)提供"湖流融合"的統一視圖。系統自動合并 Fluss 層(熱資料,秒級延遲)與 Paimon 層(冷資料,分鐘級延遲),對外呈現為一張邏輯完整的表,無需關心資料的實體儲存體位置。
在傳統的流批分離架構中,若要同時擷取即時與離線資料,需自行搭建資料管道完成資料移轉、ETL 彙總、主鍵去重等流程,開發維護成本高,且難以保證資料一致性。Union Read 在儲存引擎層面原生融合流與湖,一條 SQL 即可透明訪問冷熱全量資料,無需關心底層資料的物理分區與合并邏輯。
-- 自動合并讀取冷熱資料
SELECT * FROM fluss_catalog.fluss.orders;Flink 引擎的執行邏輯如下。
執行模式 | 邏輯 |
流模式 | 作業啟動時,首先全量讀取 Paimon 中的歷史資料,隨即無縫切換至 Fluss 消費毫秒級的即時增量資料。 |
批模式 | 讀取 Paimon 中的基量資料與 Fluss 中的未歸檔增量資料,並進行合并,返回最新的全域快照。 |
對於主鍵表,Flink 在批模式下必須對兩部分資料執行按主鍵合并去重。相比日誌表的讀取,此過程會增加一定的計算耗時。
更多使用Flink訪問詳情,請參見Fluss Connector。
通過 StarRocks 訪問
完成 Fluss Catalog 的建立和配置後(詳見引擎對接 - StarRocks),可通過以下方式查詢湖流一體表中的資料。
查詢湖上資料
StarRocks 通過 $lake 尾碼直接存取底層 Paimon 儲存的全量歷史資料。
-- 查詢底層 Paimon 儲存的全量資料
SELECT * FROM <catalog_name>.<database_name>.<table_name>$lake;查詢流上資料
StarRocks 通過 $rt 尾碼直接查詢 Fluss 中尚未歸檔至資料湖的即時增量資料。
-- 查詢 Fluss 層的即時增量資料
SELECT * FROM <catalog_name>.<database_name>.<table_name>$rt;查詢全部資料(Union Read)
不加任何尾碼時,StarRocks 自動合并 Fluss 層(熱資料)與 Paimon 層(冷資料),返回完整的最新資料檢視。
-- 自動合并冷熱資料,返回全量最新資料
SELECT * FROM <catalog_name>.<database_name>.<table_name>;