全部產品
Search
文件中心

Hologres:湖表鏡像

更新時間:Oct 21, 2025

Hologres 自V3.2版本起,新增湖表鏡像功能,以加速湖上資料查詢。該功能支援中繼資料與資料鏡像,能夠近即時或按指定時間間隔將外部資料源的變更同步至Hologres。此外,還支援全表鏡像和分區表的部分鏡像,可通過參數靈活控制鏡像資料的範圍。

功能詳情

在通過Hologres訪問湖表時,系統會自動觸發中繼資料鏡像同步任務,定期(預設為1分鐘)從源表中同步最新中繼資料並緩衝在Hologres中。再次訪問時,將自動選擇已鏡像的中繼資料以實現Meta鏈路的訪問加速。

對於湖表Data的鏡像能力,需要使用ALTER EXTERNAL TABLE命令手動開啟,支援的能力如下:

  • 支援對Paimon Append Table和帶Deletion Vector的主鍵表開啟鏡像能力。

  • 支援分區表、非分區表整表以及部分分區的鏡像能力。

  • 支援外部表格Schema Evolution,支援的操作類型包括增加列、刪除列、調整列順序和重新命名列,對於不支援的操作自動Fallback到直讀外部表格。

  • 支援湖表分區的自動探索與同步。

  • 支援對湖表鏡像設定內表常用索引,使SQL在執行時快速命中資料,減少IO消耗,以更少的計算資源,實現更快的查詢效能,詳情請參見設定表屬性和索引。支援的索引包括:

    • data_mirroring_clustering_key

    • data_mirroring_bitmap_columns

    • data_mirroring_dictionary_encoding_columns

  • 支援使用主從執行個體、計算群組執行個體和Serverless資源查詢鏡像資料。

  • 支援查看鏡像同步的進度。

  • 支援查看完整鏡像的最新分區。

  • 支援查看執行個體級、DB級、表級的鏡像儲存量。

  • 支援修改某個表的Data鏡像配置。

  • 支援對某個表關閉Data鏡像功能。

限制條件

  • 支援以External Database方式實現中繼資料映射的外部表格,不支援以Foreign Table方式映射的外部表格。

  • 支援通過DLF實現中繼資料管理的外部表格。

  • 暫不支援Paimon Branch分支資料鏡像。

文法說明

ALTER EXTERNAL TABLE <ext_db.ext_schema.ext_table> 
SET(
   -- 開啟外部表格鏡像
  data_mirroring_speed_up_enable = 'on|off', 
  [data_mirroring_partition_num='1~N|all',] |[data_mirroring_partition_list='pt1,pt2...',] 
  
  -- 指定鏡像構建過程使用的資源
  [data_mirroring_guc_hg_computing_resource='[serverless | local]',]
  [data_mirroring_guc_hg_experimental_serverless_computing_required_cores='<num>',] 

  -- 設定索引
  [data_mirroring_clustering_key='[columnName{:asc]} [,...]]',]
  [data_mirroring_dictionary_encoding_columns='[columnName [,...]]',]
  [data_mirroring_bitmap_columns='[columnName [,...]]',]
  );

參數說明

參數名稱

是否必填

說明

data_mirroring_speed_up_enable

是否開啟外部表格鏡像能力。取值如下:

  • on:開啟鏡像能力。

  • off:關閉鏡像能力。

data_mirroring_partition_num

指定分區表需要鏡像的最近n個分區,僅分區表適用。取值如下:

  • all:全部分區。

  • 1~N:n個分區。

data_mirroring_partition_list

指定需要鏡像的分區List,僅分區表適用。

data_mirroring_guc_hg_computing_resource

指定鏡像構建過程使用的資源,預設為。

Serverless:指定資料鏡像使用Serverless資源。

Local:預設值,指定只用當前執行個體資源。

data_mirroring_guc_hg_experimental_serverless_computing_required_cores

指定Serverless資源需要的Core數。

說明

僅當data_mirroring_guc_hg_computing_resource參數選擇Serverless時,需設定該參數。

使用方式

前提條件

  • 已開通2.5及以上版本的DLF服務並建立Paimon Catalog。

  • 已完成以下操作:

    1. 購買Hologres執行個體並開通資料湖加速服務。詳情請參見OSS資料湖加速

    2. 建立EXTERNAL DATABASE實現湖表中繼資料映射至Hologres,詳情參見CREATE EXTERNAL DATABASE

開啟外部表格鏡像

非分區

ALTER EXTERNAL TABLE <ext_db.ext_schema.ext_table> 
SET(
   -- 開啟外部表格鏡像
  data_mirroring_speed_up_enable = 'on', 
   
  -- 指定鏡像構建過程使用的資源
  data_mirroring_guc_hg_computing_resource='local'
 
  -- 設定索引
  data_mirroring_clustering_key='c_int:asc,c_char:desc',
  data_mirroring_dictionary_encoding_columns='c_int:on,c_char:auto',
  data_mirroring_bitmap_columns='c_int:on'
  );

分區表

  • 指定分區個數

    ALTER EXTERNAL TABLE <ext_db.ext_schema.ext_table> 
    SET(
       -- 開啟外部表格鏡像
      data_mirroring_speed_up_enable = 'on', 
      data_mirroring_partition_num='7', 
      
      -- 指定鏡像構建過程使用的資源
      data_mirroring_guc_hg_computing_resource='serverless'
      data_mirroring_guc_hg_experimental_serverless_computing_required_cores='16', 
    
      -- 設定索引
      data_mirroring_clustering_key='c_int:asc,c_char:desc',
      data_mirroring_dictionary_encoding_columns='c_int:on,c_char:auto',
      data_mirroring_bitmap_columns='c_int:on'
      );
  • 指定全部分區

    ALTER EXTERNAL TABLE <ext_db.ext_schema.ext_table> 
    SET(
       -- 開啟外部表格鏡像
      data_mirroring_speed_up_enable = 'on', 
      data_mirroring_partition_num='all', 
      
      -- 指定鏡像構建過程使用的資源
      data_mirroring_guc_hg_computing_resource='local',
    
      -- 設定索引
      data_mirroring_clustering_key='c_int:asc,c_char:desc,
      data_mirroring_dictionary_encoding_columns='c_int:on,c_char:auto',
      data_mirroring_bitmap_columns='c_int:on'
      );
  • 指定分區List

    ALTER EXTERNAL TABLE <ext_db.ext_schema.ext_table> 
    SET(
       -- 開啟外部表格鏡像
      data_mirroring_speed_up_enable = 'on', 
      data_mirroring_partition_list='pt1,pt2...', 
      
      -- 指定鏡像構建過程使用的資源
      data_mirroring_guc_hg_computing_resource='local',
    
      -- 設定索引
      data_mirroring_clustering_key='c_int:asc,c_char:desc,
      data_mirroring_dictionary_encoding_columns='c_int:on,c_char:auto',
      data_mirroring_bitmap_columns='c_int:on'
      );
  • 指定分區個數同時指定特定分區,用於保留歷史分區鏡像

    ALTER EXTERNAL TABLE <ext_db.ext_schema.ext_table> 
    SET(
       -- 開啟外部表格鏡像
      data_mirroring_speed_up_enable = 'on',
      data_mirroring_partition_num='7', 
      data_mirroring_partition_list='pt1', 
      
      -- 指定鏡像構建過程使用的資源
      data_mirroring_guc_hg_computing_resource='local',
    
      -- 設定索引
      data_mirroring_clustering_key='c_int:asc,c_char:desc,
      data_mirroring_dictionary_encoding_columns='c_int:on,c_char:auto',
      data_mirroring_bitmap_columns='c_int:on'
      );

查看鏡像構建狀態

您可通過如下命令查看鏡像構建狀態。

SELECT * FROM hologres.hg_datalake_get_mirror_status();

返回列表的欄位介紹如下:

欄位名稱

說明

external_db_name

鏡像構建任務對應的表所在的External Database。

external_schema_name

鏡像構建任務對應的表所在的External Schema。

external_table_name

鏡像構建任務對應的External Table。

partition

鏡像構建任務對應的External Table中的分區。

mirror_data_size

該表或者分區對應的鏡像檔案大小。

mirror_start_time

鏡像構建任務開始時間。

mirror_last_update_time

鏡像資料最新動向時間。

total_file_count

總檔案大小。

mirrored_file_count

已鏡像的檔案大小。

修改鏡像配置

ALTER EXTERNAL TABLE <ext_db.ext_schema.ext_table> 
SET(
   -- 開啟外部表格鏡像
  data_mirroring_speed_up_enable = 'on', 
  data_mirroring_partition_num='12'
  );

查看查詢是否用到鏡像檔案

explain analyze  SELECT xx FROM <holo_ext_db.ext_schema.ext_table>;

返回結果如下。

QUERY PLAN
Gather  (cost=0.00..5.80 rows=1000 width=116)
[128:1 id=100002 dop=1 time=26/26/26ms rows=107995(107995/107995/107995) mem=0/0/0B open=0/0/0ms get_next=26/26/26ms * ]
  ->  Local Gather  (cost=0.00..5.01 rows=1000 width=116)
      [id=2 dop=128 time=13/0/0ms rows=107995(97688/843/0) mem=0/0/0B open=0/0/0ms get_next=13/0/0ms local_dop=0/0/0]
        ->  Seq Scan on sls_ads_table  (cost=0.00..5.01 rows=1000 width=116)
              Foreign Table Type: DLF
            [id=1 split_count=128 time=13/0/0ms rows=107995(97688/843/0) mem=37/5/4KB open=0/0/0ms get_next=13/0/0ms physical_reads=154(140/77/14) scan_rows=107995(97688/8999/671)]

ADVICE: 
"[node id : 1] Table default."sls_ads_table" Miss Stats! please run 'analyze default."sls_ads_table"'. "

Query id:[1002007457093288810]
QE version: 2.0
Query Queue: init_warehouse.default_queue
======================cost======================
Total cost:[150] ms
Fast statistics cost:[0] ms
Optimizer cost:[73] ms
Build execution plan cost:[10] ms
Init execution plan cost:[9] ms
Start query cost:[13] ms
- Queue cost: [0] ms
- Wait schema cost:[0] ms
- Lock query cost:[0] ms
- Create dataset reader cost:[0] ms
- Create split reader cost:[3] ms
Get result cost:[45] ms
- Get the first block cost:[1] ms
====================resource====================
Memory: total 7 MB. Worker stats: max 3 MB, avg 3 MB, min 3 MB, max memory worker id: 1889346452478863373.
CPU time: total 96 ms. Worker stats: max 82 ms, avg 48 ms, min 14 ms, max CPU time worker id: 1889346412692090879.
DAG CPU time stats: max 77 ms, avg 38 ms, min 0 ms, cnt 2, max CPU time dag id: 1.
Fragment CPU time stats: max 66 ms, avg 25 ms, min 0 ms, cnt 3, max CPU time fragment id: 2.
Ec wait time: total 139 ms. Worker stats: max 79 ms, max(max) 2 ms, avg 69 ms, min 60 ms, max ec wait time worker id: 1889346452478863373, max(max) ec wait time worker id: 1889346412692090879.
Physical read bytes: total 1 MB. Worker stats: max 1 MB, avg 0 MB, min 0 MB, max physical read bytes worker id: 1889346412692090879.
Read bytes: total 7 MB. Worker stats: max 7 MB, avg 3 MB, min 0 MB, max read bytes worker id: 1889346412692090879.
DAG instance count: total 3. Worker stats: max 2, avg 1, min 1, max DAG instance count worker id: 1889346452478863373.
Fragment instance count: total 257. Worker stats: max 129, avg 128, min 128, max fragment instance count worker id: 1889346452478863373.
Meta mirror table count: use 1 miss 0.
Data mirror file count: use 12 miss 0.

返回結果中最後兩個指標use和個數,代表命中了鏡像。

關閉外部表格鏡像

關閉鏡像之後,系統將不再同步資料至hologres,查詢外部表格會直接查詢湖上資料,內部已鏡像資料檔案會在30分鐘後非同步刪除。

ALTER EXTERNAL TABLE <holo_ext_db.ext_schema.ext_table> SET(
  data_mirroring_speed_up_enable = 'off'
  );

查看鏡像配置

可通過如下SQL查看哪些表配置了資料鏡像。

SELECT * FROM hologres.hg_datalake_get_mirror_config();

查看鏡像進度

可通過如下SQL查看鏡像進行的進度。

SELECT * 
FROM hologres.hg_user_datalake_mirror_cron_tasks 
WHERE command::jsonb->>'external_db_name'='external_database_name'
ORDER BY start_time DESC;

其中external_database_nameExternal Database的名稱。