MaxCompute の外部プロジェクトは Data Lake Formation (DLF) のカタログにマッピングされます。これにより、MaxCompute は DLF が管理する Object Storage Service (OSS) に保存されている Paimon フォーマットのテーブルに対して、リアルタイムでの読み取り/書き込みアクセスが可能になります。権限管理は DLF に委任され、カタログレベルのマッピングにより、共有データレイクのメタデータ上で複数のエンジンが連携できます。
Paimon_DLF 外部プロジェクトは現在、招待プレビュー段階です。
制限事項
-
DLF が管理する OSS に保存されている Paimon フォーマットのテーブルのみがサポートされます。
-
動的バケットテーブルへの書き込みはサポートされていません。
-
クロスパーティションテーブルへの書き込みはサポートされていません。
権限の仕組み
MaxCompute から Paimon_DLF データにアクセスするには、2 つの独立した権限レイヤーを満たす必要があります。両方を設定する必要があり、どちらか一方が欠けているとアクセスエラーが発生します。
| レイヤー | 制御対象 | 管理場所 |
|---|---|---|
| コントロールプレーン | コンソール操作 — 外部プロジェクトの作成と DLF カタログのアタッチ | RAM コンソール |
| データプレーン | SQL 操作 — Paimon テーブルの読み取りと書き込み、アタッチされた DLF カタログ内のスキーマとテーブルの管理 | DLF コンソール |
MaxCompute は、データの読み取りまたは書き込み時に、現在のタスクエグゼキュータの ID を DLF に渡します。その後、各システムは独立して独自の権限スコープを適用します。
統合の設定
| ステップ | 操作 | 目的 |
|---|---|---|
| 1 | 権限の付与 | クラウドリソースへのアクセスを承認し、DLF をアクティブ化し、サービスリンクロールを作成する |
| 2 | Paimon_DLF 外部データソースの作成 | MaxCompute と DLF 間の接続を定義する |
| 3 | 外部プロジェクトの作成 | DLF カタログを MaxCompute プロジェクトにマッピングする |
| 4 | SQL を使用したデータのクエリと書き込み | DLF が管理する OSS 内の Paimon テーブルの読み取りと書き込み |
ステップ 1:権限の付与
次の表に、このステップの各タスクを実行するアカウントの種類を示します。
| タスク | 実行者 |
|---|---|
| RAM ユーザーへの RAM ポリシーの付与 | Alibaba Cloud アカウントのオーナー |
| DLF コンソールでのクラウドリソースへのアクセスの承認 | Alibaba Cloud アカウントのオーナー |
| DLF のアクティブ化 | Alibaba Cloud アカウントのオーナー |
| MaxCompute サービスリンクロールの作成 | Alibaba Cloud アカウントのオーナー |
| RAM ユーザーへの DLF データ権限の付与 | データレイク管理者 (DLF コンソール) |
RAM ユーザーへの RAM ポリシーの付与
Resource Access Management (RAM) ユーザーを使用している場合は、次のポリシーをアタッチします。手順については、「RAM ユーザーに権限を付与する」をご参照ください。
| ポリシー | 対象 |
|---|---|
AliyunRAMFullAccess |
RAM ユーザーがこの権限を持っていない場合、Alibaba Cloud アカウントのオーナーが付与する必要があります |
AliyunMaxComputeFullAccess |
外部データソースと外部プロジェクトの作成 |
AliyunDLFReadOnlyAccess |
外部プロジェクトの作成 — DLF カタログに対する List 権限を付与します |
クラウドリソースへのアクセスの承認と DLF のアクティブ化
-
DLF コンソールにログインし、左上のコーナーでリージョンを選択します。
-
クラウドリソースへのアクセス権限が付与されました。 の右側にある [権限付与] をクリックします。
-
DLF がアクティブ化されました。 の右側にある [アクティブ化] をクリックします。
MaxCompute と DLF は同じリージョンにある必要があります。
MaxCompute のサービスリンクロールの作成
MaxCompute は AliyunServiceRoleForMaxComputeLakehouse サービスリンクロールを使用して DLF データにアクセスします。このロールを RAM コンソールで作成します:
-
RAM コンソールにログインします。
-
左側のナビゲーションウィンドウで、[アイデンティティ] > [ロール] を選択します。
-
[ロール] ページで、[ロールの作成] をクリックします。
-
右上隅にある [サービスリンクロールの作成] をクリックします。
-
[サービスの選択] を
AliyunServiceRoleForMaxComputeLakehouseに設定し、[サービスリンクロールの作成] をクリックします。ロールが既に存在するというメッセージが表示された場合は、すでに承認済みです。これ以上の操作は必要ありません。
RAM ユーザーへの DLF データ権限の付与
データプレーンの権限は DLF コンソールで管理されます。DLF コンソールにログインし、Paimon テーブルの読み取りまたは書き込みが必要な RAM ユーザーに権限を付与します。
ステップ 2:Paimon_DLF 外部データソースの作成
-
MaxCompute コンソールにログインし、リージョンを選択します。
-
左側のナビゲーションウィンドウで、[設定の管理] > [外部データソース] を選択します。
-
[外部データソースの作成] をクリックします。
-
次のパラメーターを設定します:
パラメーター 必須 説明 外部データソースタイプ 必須 [Paimon_DLF] 外部データソース名 必須 先頭は英字である必要があります。小文字の英字、アンダースコア、数字のみ使用できます。最大 128 文字です。例: paimon_dlf[説明] 任意 カスタムの説明 リージョン 必須 現在のリージョンがデフォルトで設定されます [認証と権限付与] 必須 デフォルトで [Alibaba Cloud RAM ロール] サービスにリンクされたロール 必須 自動生成 エンドポイント 必須 自動生成されます。中国 (杭州) リージョンの場合: cn-hangzhou-intranet.dlf.aliyuncs.com[外部サーバーの補足プロパティ] 任意 外部データソースの追加属性 -
[OK] をクリックします。
-
[外部データソース] ページで、新しいデータソースを見つけ、[操作] 列の [詳細] をクリックして構成を確認します。
ステップ 3:外部プロジェクトの作成
-
MaxCompute コンソールにログインし、リージョンを選択します。
-
左側のナビゲーションウィンドウで、[設定の管理] > [プロジェクト] を選択します。
-
[外部プロジェクト] タブで、[プロジェクトの作成] をクリックします。
-
次のパラメーターを設定し、[OK] をクリックします:
パラメーター 必須 説明 プロジェクトタイプ 必須 デフォルトで [外部プロジェクト] リージョン 必須 現在のリージョンがデフォルトで設定され、変更はできません [プロジェクト名 (グローバルに一意)] 必須 先頭は英字である必要があります。英字、数字、アンダースコアのみ使用できます。3~28 文字です MaxCompute 外部サーバータイプ 任意 デフォルトで [Paimon_DLF] MaxCompute 外部サーバー 任意 [既存のものを使用] を選択して以前に作成した外部データソースを選択するか、[外部サーバーの作成] を選択して新しいものを作成します MaxCompute 外部サーバー名 必須 既存のデータソースから選択するか、新しいデータソースの名前を入力します Data Catalog 必須 アタッチする DLF データカタログ [課金方法] 必須 [サブスクリプション] または [従量課金] デフォルト クォータ 必須 既存のクォータを選択します [説明] 任意 カスタムの説明
ステップ 4:SQL を使用したデータのクエリと書き込み
接続ツールを選択して外部プロジェクトにログインし、次の SQL コマンドを使用します。
スキーマの一覧表示
-- セッションレベルでスキーマ構文を有効化します。
SET odps.namespace.schema=true;
SHOW schemas;
-- 出力例:
-- ID = 20250919****am4qb
-- default
-- system
-- OK
スキーマ内のテーブルの一覧表示
-- <schema_name> を上記の出力に表示されたスキーマ名に置き換えます。
USE schema <schema_name>;
SHOW tables;
-- 出力例:
-- ID = 20250919****am4qb
-- acs:ram::<uid>:root emp
-- OK
スキーマの作成
-- <schema_name> をご自身のスキーマ名に置き換えます。
CREATE schema <schema_name>;
テーブルの作成とデータの挿入
TIMESTAMP データを Paimon ソーステーブルに書き込む際、データはその精度に基づいて切り捨てられます。精度 0~3 は小数点以下 3 桁に、精度 4~6 は小数点以下 6 桁に、精度 7~9 は小数点以下 9 桁に切り捨てられます。
コマンドフォーマット:
-- テーブルを作成します。
CREATE TABLE [IF NOT EXISTS] <table_name>
(
<col_name> <data_type>,
...
)
[COMMENT <table_comment>]
[PARTITIONED BY (<col_name> <data_type>, ...)]
;
-- データを挿入します。
INSERT {INTO|OVERWRITE} TABLE <table_name> [PARTITION (<pt_spec>)] [(<col_name> [,<col_name> ...])]
<select_statement>
FROM <from_statement>
例 — テーブルを作成して行を挿入する:
CREATE TABLE schema_table(id int, name string);
INSERT INTO schema_table VALUES (101, 'Zhang San'), (102, 'Li Si');
-- データを確認します。
SELECT * FROM schema_table;
-- 結果:
-- +------------+------------+
-- | id | name |
-- +------------+------------+
-- | 101 | Zhang San |
-- | 102 | Li Si |
-- +------------+------------+
RAM ユーザーとしてログインしている場合、テーブルの作成とデータの挿入には DLF カタログの権限が必要です。詳細については、「データ権限管理」をご参照ください。
デフォルトスキーマへの読み取りと書き込み
USE スキーマ default;
SHOW TABLES;
-- サンプル出力:
-- ID = 20250919*******yg5
-- acs:ram::<uid>:root emp
-- acs:ram::<uid>:root emp_detail
-- acs:ram::<uid>:root test_table
-- OK
-- データを読み取ります。
SELECT * FROM test_table;
-- 結果:
-- +------------+------------+
-- | id | name |
-- +------------+------------+
-- | 101 | Zhang San |
-- | 102 | Li Si |
-- +------------+------------+
-- データを書き込み、確認します。
INSERT INTO test_table VALUES (103, 'Wang Wu');
SELECT * FROM test_table;
-- 結果:
-- +------------+------------+
-- | id | name |
-- +------------+------------+
-- | 101 | Zhang San |
-- | 102 | Li Si |
-- | 103 | Wang Wu |
-- +------------+------------+
トラブルシューティング
外部プロジェクト作成時の "You are not authorized to perform this action" エラー
RAM ユーザーに必要な権限がありません。以下を確認してください:
「禁止されています: ユーザー acs:ram::<uid>:user/** には DATABASE default 上の LIST 特権がありません」を実行したときに SHOW TABLES
RAM ユーザーに DLF カタログに対するデータプレーンの権限がありません。
-
DLF コンソールにログインします。左側のナビゲーションウィンドウで、[システムとセキュリティ] をクリックします。[アクセス制御] タブでページを更新し、RAM ユーザーが表示されるか確認します。
-
ユーザーが存在する場合、[ロール] をクリックし、RAM ユーザーに必要な権限を付与します。