すべてのプロダクト
Search
ドキュメントセンター

Hologres:データレイクテーブルのミラーリング

最終更新日:Nov 09, 2025

Hologres V3.2 では、データレイククエリを高速化するためのデータレイクテーブルミラーリングが導入されています。この機能は、外部データソースからの変更をほぼリアルタイムまたは設定された間隔で Hologres に同期することにより、メタデータとデータをミラーリングします。テーブル全体またはパーティションテーブルの特定のパーティションをミラーリングできます。パラメーターを使用して、ミラーリングされたデータの範囲を制御できます。

機能詳細

Hologres を介してデータレイクテーブルにアクセスすると、システムは自動的にメタデータミラー同期タスクをトリガーします。このタスクは、ソーステーブルから最新のメタデータを定期的に同期し、Hologres にキャッシュします。デフォルトの間隔は 1 分です。その後のアクセスでは、Hologres は自動的にミラーリングされたメタデータを使用してメタデータアクセスを高速化します。

データレイクテーブルのデータをミラーリングするには、ALTER EXTERNAL TABLE コマンドを使用して手動で機能を有効にする必要があります。サポートされている機能は次のとおりです:

  • Paimon の append-only テーブルおよび削除ベクターを持つプライマリキーテーブルのミラーリングの有効化をサポートします。

  • パーティション化されたテーブルとパーティション化されていないテーブル全体、および特定のパーティションのミラーリングをサポートします。

  • 外部テーブルのスキーマ進化をサポートします。サポートされている操作には、列の追加、削除、並べ替え、名前の変更が含まれます。サポートされていない操作の場合、システムは自動的に外部テーブルを直接読み取るようにフォールバックします。

  • データレイクテーブルパーティションの自動検出と同期をサポートします。

  • テーブルミラーに共通の内部テーブルインデックスを設定することをサポートします。これにより、SQL クエリが迅速にデータにヒットし、I/O 消費を削減し、より少ない計算リソースでより高速なクエリパフォーマンスを実現できます。詳細については、「テーブルプロパティとインデックスの設定」をご参照ください。サポートされているインデックスは次のとおりです:

    • data_mirroring_clustering_key

    • data_mirroring_bitmap_columns

    • data_mirroring_dictionary_encoding_columns

  • セカンダリインスタンス、計算グループインスタンス、およびサーバーレスリソースを使用して、ミラーリングされたデータをクエリすることをサポートします。

  • ミラー同期の進捗状況の表示をサポートします。

  • フルミラーの最新パーティションの表示をサポートします。

  • インスタンス、DB、およびテーブルレベルでのミラー ストレージ使用量の表示をサポートします。

  • 特定のテーブルのデータミラー構成の変更をサポートします。

  • 特定のテーブルのデータミラーリング機能の無効化をサポートします。

制限事項

  • 外部テーブルは、External Database メソッドを使用したメタデータマッピングをサポートしますが、Foreign Table メソッドはサポートしません。

  • Data Lake Formation (DLF) によって管理されるメタデータを持つ外部テーブルをサポートします。

  • Paimon ブランチからのデータのミラーリングは現在サポートされていません。

構文

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

いいえ

ミラーリングするパーティションのリストを指定します。このパラメーターはパーティションテーブルにのみ適用されます。

data_mirroring_guc_hg_computing_resource

いいえ

ミラービルドプロセスに使用するリソースを指定します。デフォルト値は Local です。

Serverless: データミラーリングにサーバーレスリソースを使用します。

Local: 現在のインスタンスのリソースを使用します。

data_mirroring_guc_hg_experimental_serverless_computing_required_cores

いいえ

サーバーレスリソースに必要なコア数を指定します。

説明

このパラメーターは、data_mirroring_guc_hg_computing_resource が Serverless に設定されている場合にのみ必須です。

使用方法

前提条件

  • DLF V2.5 以降を有効化し、Paimon カタログを作成していること。

  • 次の操作を完了していること:

    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'
      );
  • パーティションのリストを指定する

    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_table_name

ミラービルドタスクの外部テーブル。

partition

ミラービルドタスクの外部テーブル内のパーティション。

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] テーブル default."sls_ads_table" の統計情報がありません! 'analyze default."sls_ads_table"' を実行してください。"

Query id:[1002007457093288810]
QE version: 2.0
Query Queue: init_warehouse.default_queue
======================cost======================
総コスト:[150] ms
高速統計コスト:[0] ms
オプティマイザコスト:[73] ms
実行計画構築コスト:[10] ms
実行計画初期化コスト:[9] ms
クエリ開始コスト:[13] ms
- キューコスト: [0] ms
- スキーマ待機コスト:[0] ms
- クエリロックコスト:[0] ms
- データセットリーダー作成コスト:[0] ms
- スプリットリーダー作成コスト:[3] ms
結果取得コスト:[45] ms
- 最初のブロック取得コスト:[1] ms
====================resource====================
メモリ: 合計 7 MB。ワーカーステータス: max 3 MB, avg 3 MB, min 3 MB, max memory worker id: 1889346452478863373。
CPU 時間: 合計 96 ms。ワーカーステータス: max 82 ms, avg 48 ms, min 14 ms, max CPU time worker id: 1889346412692090879。
DAG CPU 時間統計: max 77 ms, avg 38 ms, min 0 ms, cnt 2, max CPU time dag id: 1。
フラグメント CPU 時間統計: max 66 ms, avg 25 ms, min 0 ms, cnt 3, max CPU time fragment id: 2。
Ec 待機時間: 合計 139 ms。ワーカーステータス: 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。
物理読み取りバイト数: 合計 1 MB。ワーカーステータス: max 1 MB, avg 0 MB, min 0 MB, max physical read bytes worker id: 1889346412692090879。
読み取りバイト数: 合計 7 MB。ワーカーステータス: max 7 MB, avg 3 MB, min 0 MB, max read bytes worker id: 1889346412692090879。
DAG インスタンス数: 合計 3。ワーカーステータス: max 2, avg 1, min 1, max DAG instance count worker id: 1889346452478863373。
フラグメントインスタンス数: 合計 257。ワーカーステータス: max 129, avg 128, min 128, max fragment instance count worker id: 1889346452478863373。
メタミラーテーブル数: 使用 1、ミス 0。
データミラーファイル数: 使用 12、ミス 0。

イメージヒットは、返された結果の最後の 2 つのメトリックである use と count で示されます。

外部テーブルのテーブルミラーリングを無効にする

ミラーリングを無効にすると、システムは 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();

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 の名前です。