Hologres V3.2 以降のバージョンは、Paimon REST を介した Data Lake Formation (DLF) カタログデータへのアクセスをサポートしています。この機能は、統一されたインターフェイスを提供し、メタデータ管理の効率を向上させます。
機能
外部データベースを使用して DLF カタログにアクセスできます。詳細については、「EXTERNAL DATABASE」をご参照ください。
CREATE EXTERNAL SCHEMA または DROP EXTERNAL SCHEMA を使用して、カタログ内のデータベースをカスケード方式で作成または削除できます。
CREATE EXTERNAL TABLE または DROP EXTERNAL TABLE を使用して、カタログ内のテーブルをカスケード方式で作成または削除できます。
カタログ内のすべてのデータベースとテーブルを表示できます。
動的テーブルを使用して、Paimon テーブルからデータを完全モードまたは増分モードで読み取ることができます。詳細については、「CREATE DYNAMIC TABLE」をご参照ください。
ANALYZE および AUTO ANALYZE を使用して、外部テーブルに関する統計情報を収集できます。これにより、オプティマイザーが最適なクエリプランを生成するのに役立ちます。詳細については、「ANALYZE and AUTO ANALYZE」をご参照ください。
外部テーブルからデータをミラーリングできます。
タイムトラベル: タイムスタンプ、バージョン、またはタグに基づいて Paimon テーブルの履歴スナップショットをクエリできます。
ブランチクエリ: ブランチに基づいて Paimon ブランチデータと履歴スナップショットをクエリできます。
Snapshots や Tags などの Paimon システムテーブルをクエリできます。
前提条件
DLF サービスが有効化され、カタログが作成されていること。詳細については、「権限を付与して DLF を有効化する」および「データカタログ」をご参照ください。
Hologres インスタンスを購入し、データレイクアクセラレーションサービスを有効にしていること。インスタンスは DLF サービスと同じリージョンにある必要があります。詳細については、「環境設定」をご参照ください。
制限事項
Paimon テーブルへのデータ書き込みはサポートされていません。これには、INSERT、UPDATE、DELETE、TRUNCATE などの操作が含まれます。
外部データベースを使用してマッピングされた Paimon 外部テーブルのみが、タイムトラベルクエリ、ブランチクエリ、およびデータミラーリングをサポートします。
スキーマ進化を経たテーブルや動的テーブルでは、タイムトラベルクエリを実行できません。
外部テーブルのデータミラーリングは、プライマリキーを持つ Paimon テーブルをサポートしていません。
Paimon テーブルでパーティションキーの値が NULL または空のデフォルトパーティションからのデータ読み取りはサポートされていません。
HoloWeb の OSS データレイクアクセラレーション機能を使用して、視覚的に DLF カタログを作成することはできません。
読み取り専用のセカンダリインスタンスでは、データレイクアクセラレーション機能を有効にできません。
外部データベースを使用したカタログのマッピング
SLR モード
サービスリンクロール (SLR) は、信頼できるエンティティが Alibaba Cloud サービスである RAM ロールです。SLR は、クロスサービスのアクセス権限付与の問題を解決するために使用されます。ほとんどの場合、特定の機能を使用すると、関連付けられた Alibaba Cloud サービスが自動的に SLR を作成または削除します。SLR を手動で作成または削除する必要はありません。SLR は、Alibaba Cloud サービスが適切に実行されるために必要な権限を設定し、誤操作によるリスクを回避するのに役立ちます。詳細については、「サービスリンクロール」をご参照ください。
シナリオ
SLR モードは、現在の ID を使用して外部データベースのデータにアクセスするシナリオに適しています。デフォルトでは、Hologres は SLR と ID パススルーを使用してクロスサービスアクセスを実装します。
手順
Hologres インスタンスに接続し、外部データベースを作成します。
CREATE EXTERNAL DATABASE <ext_database_name> WITH catalog_type 'paimon' metastore_type 'dlf-rest' dlf_catalog '<dlf_catalog_name>' comment 'Catalog on dlf' ;外部データベースのスキーマとテーブルを表示します。
-- 外部データベースのスキーマをクエリします。 SELECT * FROM hologres.hg_external_schemas('<ext_database_name>'); -- スキーマ内のテーブルをクエリします。 SELECT * FROM hologres.hg_external_tables ('<ext_database_name>', '<ext_schema_name>');テーブル内のデータをクエリします。
SELECT * FROM <ext_database_name>.<ext_schema_name>.<ext_table_name>;
STS モード
Alibaba Cloud セキュリティトークンサービス (STS) は、一時的なアクセス権限を管理するサービスです。Resource Access Management (RAM) は、RAM ユーザーと RAM ロールの 2 種類の ID を提供します。RAM ロールには永続的な認証情報がありません。STS から一時的な認証情報であるセキュリティトークンサービス (STS) トークンのみを取得できます。STS トークンの有効期間とアクセス権限はカスタマイズできます。詳細については、「STS とは」をご参照ください。
シナリオ
STS モードは、クロスアカウントアクセスや、カスタム Hologres アカウント (BASIC アカウント) を使用して外部データベースのデータにアクセスするシナリオに適しています。
手順
Resource Access Management (RAM) コンソールにログインします。RAM ロールを作成し、DLF にアクセスするための AliyunDLFFullAccess または AliyunDLFReadOnlyAccess 権限を付与します。詳細については、「RAM ロールを作成して権限を付与する」をご参照ください。
信頼ポリシーを変更して、信頼できる Alibaba Cloud サービスである Hologres が RAM ロールを偽装できるようにします。詳細については、「RAM ロールの信頼ポリシーを変更する」をご参照ください。
{ "Statement": [ { "Action": "sts:AssumeRole", "Effect": "Allow", "Principal": { "Service": [ "hologres.aliyuncs.com" ] } } ], "Version": "1" }Data Lake Formation コンソールにログインします。宛先カタログで、データベースとテーブルにアクセスするための権限を RAM ロールに付与します。詳細については、「権限管理」をご参照ください。
Hologres で、外部データベースを作成し、認証のために前述の RAM ロールを指定します。
CREATE EXTERNAL DATABASE <ext_database_name> WITH catalog_type 'paimon' metastore_type 'dlf-rest' dlf_catalog 'paimon_catalog' rolearn 'acs:ram::106380604****:role/***-ramrole' comment 'Catalog on dlf' ;Hologres で、DLF カタログにアクセスする必要がある RAM ユーザーまたは BASIC アカウントを RAM ロールに関連付けるためのユーザーマッピングを作成します。
CREATE USER MAPPING FOR "<RAM_user|BASIC_account>" EXTERNAL DATABASE <ext_database_name> OPTIONS ( rolearn 'acs:ram::10638060***:role/***ramrole' );説明ユーザーマッピングの詳細については、「CREATE USER MAPPING」をご参照ください。
RAM ユーザーの作成方法の詳細については、「RAM ユーザーの作成」をご参照ください。
BASIC アカウントの作成方法の詳細については、「ユーザー管理」をご参照ください。
RAM ユーザーとして Hologres 管理コンソールにログインするか、BASIC アカウントを使用して Hologres インスタンスに接続した後、次の SQL クエリを実行します。
SELECT * FROM <ext_database_name>.<ext_schema_name>.<ext_table_name>;
ミラーリングを使用したデータレイクテーブルのクエリ高速化
Hologres V3.2 以降のバージョンでは、データレイク内のデータのクエリを高速化するためのデータレイクテーブルミラーリング機能が提供されています。この機能は、メタデータとデータのミラーリングをサポートします。外部データソースからの変更を、ほぼリアルタイムまたは指定された間隔で Hologres に同期できます。また、完全なテーブルとパーティションテーブルの特定のパーティションのミラーリングもサポートしています。パラメーターを使用して、ミラーリングするデータの範囲を柔軟に制御できます。詳細については、「データレイクテーブルのミラーリング」をご参照ください。
外部スキーマ操作
カタログに外部スキーマを作成する
外部スキーマを作成すると、DLF カタログにデータベースが作成されます。次のコードは例です:
-- 外部スキーマを作成します。
CREATE EXTERNAL SCHEMA [IF NOT EXISTS] <ext_database_name>.<ext_schema_name>;外部スキーマのメタデータをリフレッシュする
REFRESH CACHE FOR EXTERNAL SCHEMA <ext_database_name>.<ext_schema_name> WITH( cache_level = 'metadata'); 外部スキーマを削除する
外部スキーマを削除すると、対応するデータベースとそれに含まれるすべてのテーブルがカタログから削除されます。この操作は注意して実行してください。
-- 外部スキーマを削除します。
DROP EXTERNAL SCHEMA [IF NOT EXISTS] <ext_database_name>.<ext_schema_name>;指定されたスキーマ内のテーブルを表示する
SELECT * FROM hologres.hg_external_tables ('<ext_database_name>', '<ext_schema_name>');外部テーブル操作
カタログに外部テーブルを作成する
-- 非パーティションテーブルを作成します。
CREATE EXTERNAL TABLE <ext_database_name>.<ext_schema_name>.<ext_table_name>(
id TEXT,
created_at BIGINT,
type TEXT,
actor_id TEXT,
actor_login TEXT,
repo_id TEXT,
repo_name TEXT,
org TEXT,
org_login TEXT,
PRIMARY KEY(id)
) WITH (
"changelog-producer"='input',
"bucket"=6,
"bucket-key"='id'
);
-- パーティションテーブルを作成します。
CREATE EXTERNAL TABLE <ext_database_name>.<ext_schema_name>.<ext_table_name>(
id TEXT,
created_at BIGINT,
type TEXT,
actor_id TEXT,
actor_login TEXT,
repo_id TEXT,
repo_name TEXT,
org TEXT,
org_login TEXT
)
LOGICAL PARTITION BY LIST(created_at)
WITH (
"file_format" = 'orc',
"bucket"=6,
"bucket-key"='id'
);外部テーブルのメタデータをリフレッシュする
REFRESH CACHE FOR EXTERNAL TABLE <ext_db_name>.<ext_schema_name>.<ext_table_name> WITH( cache_level = 'metadata');外部テーブルを削除する
外部テーブルを削除すると、そのテーブルは DLF カタログから削除されます。この操作は注意して実行してください。
-- 外部テーブルを削除します。
DROP EXTERNAL TABLE IF EXISTS <ext_database_name>.<ext_schema_name>.<ext_table_name>;外部テーブルの統計情報を収集する
ANALYZE および AUTO ANALYZE コマンドは、データベース内のテーブルの内容に関する統計情報を収集します。オプティマイザーはこの情報を使用して、最適なクエリプランを生成し、クエリ効率を向上させます。詳細については、「ANALYZE と AUTO ANALYZE」をご参照ください。
-- テーブルの統計情報を更新します。デフォルトでは、テーブル内のすべての列の統計情報が収集されます。
analyze <ext_database_name>.<ext_schema_name>.<ext_table_name>;
-- 特定の列の統計情報を更新します。テーブル全体を更新する場合よりも多くのデータがサンプリングされるため、より正確な統計が得られます。これは主に、条件付きフィルターを持つ列を更新するために使用されます。
analyze <ext_database_name>.<ext_schema_name>.<ext_table_name>(<colname>, <colname>);
-- 自動分析を有効にします。
ALTER EXTERNAL DATABASE <ext_database_name> WITH enable_auto_analyze 'true';タイムトラベルクエリ
Hologres V3.2 以降のバージョンでは、タイムスタンプ、バージョン、またはタグに基づいて Paimon テーブルの履歴スナップショットをクエリできます。これにより、データのタイムトラベル機能が有効になります。また、Hologres で Snapshots や Tags などの Paimon システムテーブルをクエリして、ターゲットテーブルのスナップショットの詳細を取得することもできます。システムテーブルの詳細については、「Paimon システムテーブル」をご参照ください。
Paimon Snapshots システムテーブルのクエリ
SELECT * FROM hologres.hg_list_snapshots('<ext_database_name>.<ext_schema_name>.<ext_table_name>;');次の表は、Snapshots システムテーブルのフィールドと Paimon システムテーブルのフィールド間のマッピングを示しています。
Snapshots システムテーブルのフィールド | タイプ | 説明 | Paimon システムテーブルの対応するフィールド |
branch_name | TEXT | ブランチ名。 | branch_name |
snapshot_id | TEXT | スナップショット ID。 | snapshot_id |
schema_id | TEXT | テーブルスキーマ ID。 | schema_id |
commit_kind | TEXT | テーブルデータのコミットタイプ。 | commit_kind |
commit_time | TIMESTAMPTZ | コミット時間。 | commit_time |
extend_info | TEXT (JSON) | Paimon Snapshots システムテーブルのその他のプロパティ。 | Paimon Snapshots システムテーブルのその他のプロパティ |
また、hologres.hg_list_versions 関数を使用して Paimon Snapshots システムテーブルをクエリすることもできます。Paimon テーブルのクエリでは、バージョンはスナップショット ID に対応します。
SELECT * FROM hologres.hg_list_versions('<ext_database_name>.<ext_schema_name>.<ext_table_name>');Paimon Tag システムテーブルのクエリ
SELECT * FROM hologres.hg_list_tags('<ext_database_name>.<ext_schema_name>.<ext_table_name>');次の表は、Tag システムテーブルのフィールドと Paimon システムテーブルのフィールド間のマッピングを示しています。
Tag システムテーブルのフィールド | タイプ | 説明 | Paimon システムテーブルの対応するフィールド |
branch_name | TEXT | ブランチ名。 | branch_name |
tag_name | TEXT | タグ名。 | tag_name |
snapshot_id | TEXT | スナップショット ID。 | snapshot_id |
schema_id | TEXT | テーブルスキーマ ID。 | schema_id |
commit_time | TIMESTAMPTZ | コミット時間。 | commit_time |
extend_info | TEXT (JSON) | Paimon Tag システムテーブルのその他のプロパティ。 | Paimon Tag システムテーブルのその他のプロパティ |
タイムスタンプに基づいて Paimon テーブルの履歴スナップショットをクエリする
SELECT * FROM '<ext_database_name>.<ext_schema_name>.<ext_table_name>' FOR TIMESTAMP AS OF '<timestamp>';バージョンに基づいて Paimon テーブルの履歴スナップショットをクエリする
Paimon テーブルの場合、バージョンはスナップショット ID に対応します。
SELECT * FROM '<ext_database_name>.<ext_schema_name>.<ext_table_name>' FOR VERSION AS OF '<version>';タグに基づいて Paimon テーブルの履歴スナップショットをクエリする
SELECT * FROM '<ext_database_name>.<ext_schema_name>.<ext_table_name>' FOR TAG AS OF '<tag>';ブランチクエリ
Hologres V3.2 以降のバージョンでは、Paimon テーブルの指定されたブランチからデータをクエリできます。ブランチのフォールバックプロパティもサポートされています。Paimon ブランチの詳細については、「ブランチの管理」をご参照ください。
Branch システムテーブルのクエリ
SELECT * FROM hologres.hg_list_branches('<ext_database_name>.<ext_schema_name>.<ext_table_name>');次の表は、Branch システムテーブルのフィールドと Paimon システムテーブルのフィールド間のマッピングを示しています。
フィールド | タイプ | 説明 | Paimon システムテーブルの対応するフィールド |
branch_name | TEXT | ブランチ名。 | branch_name |
create_time | TIMESTAMPTZ | ブランチが作成された時間。 | 作成時間 |
extend_info | TEXT (JSON) | Paimon Branch システムテーブルのその他のプロパティ。 | Paimon Branch システムテーブルのその他のプロパティ |
指定されたブランチのデータをクエリする
SELECT * FROM '<ext_database_name>.<ext_schema_name>.<ext_table_name>' FOR branch AS OF '<tag>';Paimon テーブルに scan.fallback-branch プロパティが設定されていて、クエリジョブが現在のブランチからデータを読み取るときにパーティションが存在しない場合、リーダーはそのパーティションのデータをフォールバックブランチから読み取ろうとします。フォールバックブランチの詳細については、「ブランチの管理」をご参照ください。
指定されたブランチの履歴スナップショットデータをクエリする
-- タイムスタンプに基づいてクエリします。
SELECT * FROM '<ext_database_name>.<ext_schema_name>.<ext_table_name>' FOR branch AS OF '<branch_name>' TIMESTAMP AS OF '<timestamp>';
-- タグに基づいてクエリします。
SELECT * FROM '<ext_database_name>.<ext_schema_name>.<ext_table_name>' FOR branch AS OF '<branch_name>' TAG AS OF '<tag_name>';外部テーブルを使用して Paimon テーブルを使用する
外部サーバーを作成します。
外部サーバーの操作の詳細については、「外部サーバーに対するその他の操作 (SQL)」をご参照ください。
-- 外部サーバーの作成 CREATE SERVER IF NOT EXISTS <server_name> FOREIGN DATA WRAPPER dlf_fdw OPTIONS ( catalog_type 'paimon', metastore_type 'dlf-rest', dlf_catalog '<dlf_catalog_name>' );外部テーブルを作成します。
IMPORT FOREIGN SCHEMA を使用する
IMPORT FOREIGN SCHEMA の使用方法の詳細については、「IMPORT FOREIGN SCHEMA」をご参照ください。
-- IMPORT FOREIGN SCHEMA を使用して外部テーブルを作成します。 IMPORT FOREIGN SCHEMA <dlf_db_name> FROM SERVER <server_name> INTO <holo_schema_name> options (if_table_exist 'update');CREATE FOREIGN TABLE を使用する
CREATE FOREIGN TABLE の使用方法の詳細については、「CREATE FOREIGN TABLE」をご参照ください。
CREATE FOREIGN TABLE <foreign_table_name> ( { column_name data_type } [, ... ] ) SERVER <server_name> options ( schema_name '<dlf_db_name>', table_name '<dlf_table_name>' );
動的テーブルを使用して Paimon テーブルを使用する
動的テーブルは、1 つ以上のベーステーブルの集計データを自動的に処理して保存します。ビジネスニーズに基づいて設定できる組み込みのデータリフレッシュポリシーが含まれています。この設定により、ベーステーブルから動的テーブルへの自動的なデータフローが可能になり、統一された開発、自動的なデータフロー、およびタイムリーな処理の要件を満たします。Hologres V3.0 以降のバージョンでは、MaxCompute 外部テーブルと DLF 外部テーブルを動的テーブルのベーステーブルとして使用できます。詳細については、「動的テーブル」をご参照ください。
完全リフレッシュ
CREATE DYNAMIC TABLE paimon_dt_table
WITH (
auto_refresh_mode='full',
freshness='3 minutes'
)AS SELECT * FROM <ext_database_name>.<ext_schema_name>.<ext_table_name>;増分リフレッシュ
CREATE DYNAMIC TABLE paimon_dt_table_increamental
WITH (
auto_refresh_mode='incremental',
freshness='3 minutes'
)AS SELECT * FROM <ext_database_name>.<ext_schema_name>.<ext_table_name>;自動リフレッシュ
CREATE DYNAMIC TABLE paimon_dt_table_auto
WITH (
auto_refresh_mode='auto',
freshness='3 minutes'
)AS SELECT * FROM <ext_database_name>.<ext_schema_name>.<ext_table_name>;