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 | はい | 外部テーブルのテーブルミラーリングを有効にするかどうかを指定します。有効な値:
|
data_mirroring_partition_num | いいえ | ミラーリングする最新の 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 カタログを作成していること。
次の操作を完了していること:
Hologres の購入インスタンスを購入し、データレイクアクセラレーションサービスを有効化します。詳細については、「OSS データレイクアクセラレーション」をご参照ください。
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_name は External Database の名前です。