全部產品
Search
文件中心

OpenLake:StarRocks基於Paimon查詢與分析的情境與實踐

更新時間:Jan 31, 2026

概述

StarRocks提供了開箱即用的資料湖查詢功能,適用於對湖中的資料進行探查式查詢分析。Paimon是新一代的資料湖格式,提供了以下核心功能:

  • 高效即時更新:高吞吐和低延遲的資料攝入和更新

  • 統一的批處理和流處理:同時支援批量讀寫和流式讀寫

  • 豐富的資料湖功能:ACID, Time Travel 和 Schema Evolution等

本文將介紹StarRocks基於Paimon湖格式的查詢分析的情境與實踐。

StarRocks + Paimon應用情境

湖倉分析:Flink+Paimon入湖,並利用StarRocks的分析能力更好地賦能給Paimon。

批處理:Paimon入湖作為ODS層之後,基於StarRocks物化視圖來簡化Pipeline的維護成本

  1. 整體資料存放區在Paimon資料湖格式上,用StarRocks對湖上資料直接做查詢加速

    • 開啟Data Cache提升查詢效能

    • 基於資料湖構建adhoc能力

    • 情境:StarRocks + Paimon資料打造流批一體方案

  2. 資料在Paimon上,不直接查詢,需要再做一些加工(ODS->DWD->DWS->ADS),把資料做寬表、彙總操作、結果表等,給上層使用者提供簡單統一介面。

    • 基於外表的物化視圖構建,透明加速,定時重新整理

    • 依賴 StarRocks 物化視圖實現 ETL 資料加工,採用 StarRocks 原生格式進行高效轉換

    • 情境:BI報表,高並發低延遲報表

  3. 資料存放區於 Paimon,通過 StarRocks 作為計算引擎執行 ETL 任務,結果通過Data Sink寫回資料湖

    • 支援物化視圖自動調度與外部調度機制

    • 利用其物化視圖自動調度與資源隔離能力實現高效資料加工

    • 將結果通過 Data Sink 寫入資料湖

    • 情境:資料都在Paimon上,跨引擎資料共用需求

StarRocks針對Paimon的最佳化能力

  • 物化視圖加速:

    • 提供非同步重新整理的物化視圖能力,支援分區級資料更新;

    • 自動緩衝熱資料至 StarRocks 記憶體,結合查詢改寫技術動態選擇執行路徑。

  • Paimon 批量寫入:

    • 原生支援 Paimon 表的 Batch Sink,相容 Append/Update 表類型,確保加工結果即時回寫資料湖。

  • 查詢功能增強:

    • 完整支援 Paimon 表 DDL 操作與 Time Travel 查詢,實現資料版本精確追溯

  • 效能最佳化引擎:

    • 使用 Native ORC/Parquet Reader 讀取資料;

    • 中繼資料快取與分散式處理機制,最佳化大規模查詢;

    • 完善統計資訊,提升CBO查詢規劃能力。

資料入湖

StarRocks查詢Paimon湖格式的加速方式

在3.2.9及以上版本的StarRocks執行個體,StarRocks在建立Paimon Catalog後,可以直接查詢Paimon表資料

StarRocks 作為 OLAP 查詢引擎需要掃描 HDFS 或Object Storage Service上的資料檔案。查詢實際讀取的檔案數量越多,I/O 開銷也就越大。此外,在即席查詢 (ad-hoc) 情境中,如果頻繁訪問相同資料,還會帶來重複的 I/O 開銷。

StarRocks通過使用Data Cache、非同步物化視圖等能力,可以為資料湖中的報表和應用實現更高的並發,以及更好的效能。

在以下情況下,建議優先通過Data Cache來實現加速:

  • 查詢沒有大量可複用的部分,並且可能涉及資料湖中的任何資料。

  • 遠程儲存存在顯著的波動或不穩定性,可能會對訪問產生潛在影響。

建議在以下情況下使用物化視圖:

  • 在啟用了Data Cache的情況下,查詢效能仍不符合您對查詢延遲和並發性的要求。

  • 查詢涉及可複用的部分,如固定的彙總方式、Join模式。

  • 資料以分區方式組織,而查詢彙總度較高(例如按天彙總)。

使用 StarRocks開啟Delection Vector查詢Paimon資料湖格式

開啟方式:主鍵表建表語句配置'deletion-vectors.enabled' = 'true'

例如:

create table dv4 (
    id int,
    name string
) tblproperties (
    'bucket' = '1',
    'primary-key' = 'id',
    'file.format' = 'parquet',
    'deletion-vectors.enabled' = 'true'
);

使用 StarRocks開啟Data Cache查詢Paimon資料湖格式

StarRocks提供了 Data Cache 功能。通過將外部儲存系統的未經處理資料按照一定策略切分成多個 block 後,緩衝至 StarRocks 的本地節點,來避免重複的遠端資料拉取開銷,實現熱點資料查詢分析效能的進一步提升。StarRocks Data Cache已支援Paimon資料湖格式。

開啟Data Cache的步驟

# 對於3.3版本,data cache,預設為true。對於3.2版本,data cache,預設為false,需要開啟
datacache_enable=true
# 單個磁碟快取資料量的上限,值可以為百分比,也可以為Byte數。預設為20%,即20%的磁碟最大容量。本樣本修改為20GB
datacache_disk_size=21474836480
# 記憶體快取資料量的上限,值可以為百分比,也可以為Byte數。預設為10%,本樣本修改為4GB
datacache_mem_size=4294967296
# 緩衝使用的磁碟路徑,不可修改
datacache_disk_path=/opt/starrocks/be/storage/disk1/datacache

在叢集重啟完成後,在SQL Editor中執行

SET GLOBAL enable_scan_datacache = true;

即可使Data Cache在全域生效。

命中Data Cache

再次執行Paimon查詢,如果命中了緩衝,可以看到明顯的查詢效率提升。可以通過Query Profile查看是否命中了緩衝。

開啟profile後,在全部查詢中,點擊查詢的id,進入profile頁面下載profile,觀察下述指標,即能夠說明Data Cache的命中情況。

  • DataCacheReadBytes:從記憶體和磁碟中讀取的資料量。

  • DataCacheWriteBytes:從外部儲存系統載入到記憶體和磁碟的資料量。

如以下的樣本顯示,該查詢在Data Cache裡讀取了10.107 GB的資料,而從外部檔案系統中沒有讀取資料,表示緩衝完全命中。

- DataCache:
 - DataCacheReadBlockBufferBytes: 920.146 MB
   - __MAX_OF_DataCacheReadBlockBufferBytes: 14.610 MB
   - __MIN_OF_DataCacheReadBlockBufferBytes: 1.762 MB
 - DataCacheReadBlockBufferCounter: 27.923K (27923)
   - __MAX_OF_DataCacheReadBlockBufferCounter: 440
   - __MIN_OF_DataCacheReadBlockBufferCounter: 55
 - DataCacheReadBytes: 10.107 GB
   - __MAX_OF_DataCacheReadBytes: 163.518 MB
   - __MIN_OF_DataCacheReadBytes: 20.225 MB
   - DataCacheReadDiskBytes: 563.468 MB
     - __MAX_OF_DataCacheReadDiskBytes: 30.965 MB
     - __MIN_OF_DataCacheReadDiskBytes: 0.000 B
   - DataCacheReadMemBytes: 9.556 GB
     - __MAX_OF_DataCacheReadMemBytes: 142.791 MB
     - __MIN_OF_DataCacheReadMemBytes: 20.225 MB
 - DataCacheReadCounter: 41.456K (41456)
   - __MAX_OF_DataCacheReadCounter: 655
   - __MIN_OF_DataCacheReadCounter: 81
 - DataCacheReadTimer: 9.157ms
   - __MAX_OF_DataCacheReadTimer: 48.792ms
   - __MIN_OF_DataCacheReadTimer: 478.759us
 - DataCacheSkipReadBytes: 0.000 B
 - DataCacheSkipReadCounter: 0
 - DataCacheWriteBytes: 0.000 B
 - DataCacheWriteCounter: 0
 - DataCacheWriteFailBytes: 0.000 B
 - DataCacheWriteFailCounter: 0
 - DataCacheWriteTimer: 0ns

在生產環境中,資料緩衝的效能在不同查詢模式下表現各異,通常能夠實現從幾十個百分點到數倍的提升。

使用 StarRocks 構建非同步物化視圖查詢Paimon資料湖格式

生產環境中的應用程式經常基於多個大表執行複雜查詢,涉及大量的資料關聯和彙總。處理此類查詢會大量消耗系統資源和時間,導致極高的查詢成本。StarRocks可以使用非同步物化視圖解決此問題。

如果您在生產環境經常需要執行此查詢,可以通過建立一個非同步物化視圖來加速查詢,具體步驟可參考:使用物化視圖加速資料湖查詢

物化視圖構建完成後,再次執行查詢,StarRocks可以自動改寫查詢SQL,從物化視圖裡直接讀取資料。

實際生產環境中,物化視圖應用在對查詢延遲要求非常高的情境,通常物化視圖的構建方式會極大影響最終查詢耗時,需要您根據業務需求和歷史的查詢SQL進行總結,選擇合適的物化視圖構建方式來滿足具體的業務需求。

向Paimon表寫入資料

說明
  • 在StarRocks中,寫入Paimon表的方式為批量寫入(Batch Write)。由於Paimon的限制,無法對Bucket Mode為HASH_DYNAMIC或CROSS_PARTITION的表進行寫入。一個典型的情境是,當寫入主鍵表時,如果該表的建表語句中的PROPERTIES未指定bucket,預設值將為-1(即Dynamic Bucket Mode),這將導致無法執行寫入操作。

  • Paimon SDK要求寫入的資料中的分區鍵或主鍵列不可為空白值,而StarRocks在寫入Paimon表時不會對即將寫入的資料進行預檢查,因此如果嘗試將空值寫入到包含值的Chunk時,將會拋出異常。

INSERT INTO <catalog_name>.<database_name>.<table_name> (column1, column2, ...) VALUES (value1, value2, ...);

例如,直接向ads_age_pvalue_analytics表插入以下資料。

INSERT INTO dlf_catalog.sr_dlf_db.ads_age_pvalue_analytics (final_gender_code, age_level, pvalue_level, clicks, total_behaviors)
VALUES 
('M', '18-24', 'Low', 1500, 2500),
('F', '25-34', 'Medium', 2200, 3300),
('M', '35-44', 'High', 2800, 4000);

Paimon資料匯入至內表

假設StarRocks中存在一個OLAP表,表名為olap_tbl。您可以按照以下方式將Paimon表中的資料轉換,並匯入到StarRocks的olap_tbl表中。

INSERT INTO default_catalog.olap_db.olap_tbl SELECT * FROM <paimon_catalog>.<db_name>.<table_name>;