Paimon_DLF 外部プロジェクトは、Data Lake Formation (DLF) カタログを MaxCompute にマッピングし、リアルタイムのメタデータとデータアクセスを実現します。権限管理を DLF に委任し、DLF が管理する Object Storage Service (OSS) データに対する読み取り/書き込み操作をサポートすることで、Paimon ベースのエンジン間連携のためのカタログレベルのデータレイクマッピングを可能にします。この機能は現在、招待プレビュー段階です。
適用範囲
テーブル形式:DLF によって完全に管理されている OSS に保存された Paimon テーブルのみがサポートされます。
書き込み制限:動的バケットテーブルおよびクロスパーティションテーブルは、
INSERT INTOまたはINSERT OVERWRITEをサポートしません。外部プロジェクト:
スキーマ進化のサポート
操作タイプ
サポート状況
列の追加
列の削除
列の並べ替え
列のデータ型の変更
列名の変更
列コメントの変更
列の NULL 値許容属性の変更
パーティション操作のサポート
操作/サポート
サポート状況
パーティションの追加
パーティション更新時刻の変更
パーティション値の変更
パーティションのマージ
全パーティションのリスト表示
パーティション情報の表示
パーティションの削除
パーティションデータのクリア
リソースおよび関数操作はサポートされていません。
操作手順
ステップ 1:権限の付与
権限モデル
コントロールプレーン:これらの権限は、MaxCompute コンソールで操作を実行する際にチェックされます。主に、外部プロジェクトを作成し、それを DLF カタログにバインドするときに適用されます。
これらの権限は RAM によって管理されます。ご利用の Alibaba Cloud アカウント (root ユーザー) は、RAM コンソールにログインして、必要な権限を設定する必要があります。詳細については、「RAM ユーザーの権限管理」をご参照ください。
データプレーン:これらの権限は、外部プロジェクトにログインした後、Paimon テーブルから読み取りまたは書き込みを行う際にチェックされます。これは通常、MaxCompute で SQL ステートメントを実行して、バインドされた DLF カタログ内のスキーマ、テーブル、およびその他のリソースを作成、維持、または使用するときに発生します。
これらの権限は DLF コンソールによって管理されます。ご利用の Alibaba Cloud アカウント (root ユーザー) は、DLF コンソールにログインして、必要な権限を設定する必要があります。詳細については、「RAM ユーザーへの権限付与」をご参照ください。
MaxCompute への DLF 権限の付与
MaxCompute は、外部データソースと外部プロジェクトを介して Paimon_DLF データにアクセスします。続行する前に、必要な DLF データ権限を MaxCompute アクセスアカウントに付与してください。
「タスクエグゼキュータの ID を使用」オプションは、タスクエグゼキュータの ID を DLF に渡します。その後、MaxCompute と DLF の両方がこの ID に基づいて権限を適用します。まず、MaxCompute のサービスリンクロールを作成し、必要な権限を付与します:
RAM コンソールにログインします。
左側のナビゲーションバーで、 を選択します。
ロール ページで、ロールの作成 をクリックします。
ロールの作成 ページの右上隅で、サービスリンクロールを作成 をクリックします。
サービスリンクロールを作成 ページで、信頼するクラウドサービス で
AliyunServiceRoleForMaxComputeLakehouseを選択し、サービスリンクロールを作成 をクリックします。ロールが既に存在するというプロンプトが表示された場合、そのロールは既に承認されているため、プロンプトを無視してかまいません。
RAM ユーザーへの権限付与
RAM ユーザーの場合は、次の権限ポリシーをアタッチします。権限の追加方法については、「RAM ユーザーの権限管理」をご参照ください。
AliyunRAMFullAccess:RAM ユーザーがこの権限を持っていない場合、Alibaba Cloud アカウント (root ユーザー) がそれを付与する必要があります。
AliyunMaxComputeFullAccess:外部データソースと外部プロジェクトを作成するために必要です。
AliyunDLFReadOnlyAccess:外部プロジェクトを作成するために必要です。Paimon_DLF 外部プロジェクトの作成には DLF カタログに対する List 権限が必要なため、この権限ポリシーが必要です。
ステップ 2:Paimon_DLF 外部データソースの作成
MaxCompute コンソールにログインし、左上隅でリージョンを選択します。
左側のナビゲーションウィンドウで、 を選択します。
外部データソース ページで、外部データソースの作成 をクリックします。
外部データソースの作成 ダイアログボックスで、パラメーターを設定します。次の表で、パラメーターについて説明します。
パラメーター
必須
説明
外部データソースタイプ
はい
Paimon_DLF を選択します。
外部データソース名
はい
カスタム名を入力します。名前は次の要件を満たす必要があります:
文字で始まり、小文字、数字、アンダースコア (_) のみを含むこと。
長さが 128 文字を超えないこと。
たとえば、
paimon_dlfと入力できます。外部データソースの説明
いいえ
必要に応じて説明を入力します。
リージョン
はい
現在のリージョンがデフォルトで選択されます。
認証と認可
はい
デフォルト値は Alibaba Cloud RAM ロールです。
サービスロールの関連付け
はい
ロールはデフォルトで生成されます。
エンドポイント
はい
エンドポイントは自動的に生成されます。中国 (杭州) リージョンの場合、エンドポイントは
cn-hangzhou-intranet.dlf.aliyuncs.comです。外部データソースの補足プロパティ
いいえ
これらのプロパティは、このデータソースを使用するタスクがソースシステムにアクセスする方法を定義します。
説明サポートされるパラメーターは、製品の進化に伴い、今後のドキュメント更新で拡張される予定です。
確認 をクリックして、外部データソースを作成します。
外部データソース ページで、データソースを見つけ、操作 列の 詳細 をクリックしてその詳細を表示します。
ステップ 3:外部プロジェクトの作成
MaxCompute コンソールにログインし、左上隅でリージョンを選択します。
左側のナビゲーションウィンドウで、 を選択します。
外部プロジェクト タブで、プロジェクトの作成 をクリックします。
プロジェクトの作成 ダイアログボックスで、設定を構成して 決定 をクリックします。
パラメーター
必須
説明
プロジェクトタイプ
はい
デフォルト値は外部プロジェクトです。
リージョン
はい
現在のリージョンがデフォルトで選択され、変更できません。
プロジェクト名 (グローバルに一意)
はい
名前は 3~28 文字の長さで、文字で始まり、文字、数字、アンダースコア (_) のみを含む必要があります。
MaxCompute 外部データソースタイプ
いいえ
デフォルト値は Paimon_DLF です。
MaxCompute 外部データソース
いいえ
既存:既存の外部データソースのリストを表示します。
新規外部データソース:新しい外部データソースを作成して使用できます。
MaxCompute 外部データソース名称
はい
既存のデータソースを使用することを選択した場合、ドロップダウンリストからその名前を選択します。
新しいデータソースを作成することを選択した場合、その名前が自動的に使用されます。
データカタログ
はい
DLF データカタログ。
計算リソースの課金タイプ
はい
サブスクリプション または 従量課金 を選択します。
デフォルト Quota
はい
既存のクォータを選択します。
説明
いいえ
カスタムのプロジェクト説明を入力します。
ステップ 4:SQL を使用したデータソースへのアクセス
外部プロジェクトを削除しても、基になるデータは削除されません。なぜなら、プロジェクトはデータソースへのマッピングにすぎないからです。
ただし、標準の外部テーブルとは異なり、外部プロジェクトで DROP TABLE または DROP SCHEMA コマンドを実行すると、リクエストがピアサービスに送信されます。これにより、対応するテーブルまたはデータベースが永久に削除されます。DROP 操作は慎重に使用してください。
接続ツールを選択して外部プロジェクトにログインします。
次の例では、DataWorks ワークスペース (新バージョン) でのデータ開発に SQL ノードを使用します。
DataWorks コンソールにログインし、左上隅でリージョンを選択します。
左側のナビゲーションウィンドウで、ワークスペース を選択します。
ワークスペース一覧 ページで、ワークスペースの作成 をクリックするか、既存のワークスペースの名前をクリックします。
ワークスペースの詳細 ページの左側のナビゲーションウィンドウで、計算リソース をクリックします。
計算リソース ページで、計算リソースのアタッチ をクリックし、MaxCompute を選択します。
基本情報を、MaxCompute 計算リソースのアタッチ用に設定します。
MaxCompute プロジェクトには、外部プロジェクトを選択します。
外部プロジェクト内のスキーマをリスト表示します。
-- セッションレベルでスキーマ構文を有効にします。 SET odps.namespace.schema=true; SHOW schemas; -- 結果の例 ID = 20250919****am4qb default system OK外部プロジェクト内のスキーマにあるテーブルをリスト表示します。
現在の環境で本番の外部プロジェクトからテーブルにアクセスする必要がある場合は、すべての SQL ステートメントの前に
use external_project_pro;を追加します。-- schema_name は、外部プロジェクトで SHOW SCHEMAS によって返されるスキーマ名です。 SET odps.namespace.schema=true; USE schema <schema_name>; SHOW tables; -- 結果 ID = 20250919****am4qb acs:ram::<uid>:root emp OK外部プロジェクトに新しいスキーマを作成します。
-- この例では、schema_name は schema_demo_test です。 SET odps.namespace.schema=true; CREATE schema <schema_name>;テーブルを作成し、スキーマにデータを挿入します。
RAM ユーザーとしてログインしている場合、この操作には DLF カタログに対する権限が必要です。権限の付与方法については、「データ権限管理」をご参照ください。
コマンド形式:
-- テーブルを作成します。 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>例:
説明ソースの Paimon テーブルの低精度 TIMESTAMP 型の場合、書き込み操作中にデータは次のように切り捨てられます:精度 0~3 は小数点以下 3 桁に、4~6 は 6 桁に、7~9 は 9 桁に切り捨てられます。
SET odps.namespace.schema=true; USE schema <schema_name>; CREATE TABLE schema_table(id int,name string); INSERT INTO schema_table VALUES (101,'田中 一郎'),(102,'鈴木 二郎'); -- schema_table テーブルをクエリします。 SET odps.namespace.schema=true; USE schema <schema_name>; SELECT * FROM schema_table; -- 結果 +------------+------------+ | id | name | +------------+------------+ | 101 | 田中 一郎 | | 102 | 鈴木 二郎 | +------------+------------+
既存の
defaultスキーマに切り替えます。use schema default; SHOW tables; -- 結果の例 ID = 20250919*******yg5 acs:ram::<uid>:root emp acs:ram::<uid>:root emp_detail acs:ram::<uid>:root test_table OK -- テーブルからデータを読み取ります。 SET odps.namespace.schema=true; USE schema default; SELECT * FROM test_table; -- 結果 +------------+------------+ | id | name | +------------+------------+ | 101 | 田中 一郎 | | 102 | 鈴木 二郎 | +------------+------------+ -- テーブルにデータを書き込み、クエリを実行して書き込み操作を検証します。 SET odps.namespace.schema=true; USE schema default; INSERT INTO test_table VALUES (103,'佐藤 三郎'); SET odps.namespace.schema=true; USE schema default; SELECT * FROM test_table; -- 結果 +------------+------------+ | id | name | +------------+------------+ | 101 | 田中 一郎 | | 102 | 鈴木 二郎 | | 103 | 佐藤 三郎 | +------------+------------+
Paimon テーブルプロパティの受け渡し
Apache Paimon は、コアな設定オプションを提供します。外部プロジェクトで Paimon テーブルを作成する際、これらのオプションを CREATE TABLE ステートメントの TBLPROPERTIES 句で指定します。
設定:TBLPROPERTIES リストに mcfed. というプレフィックスが付いたパラメーターを追加します。プレフィックスの後のパラメーター名は、ネイティブの Paimon パラメーター名と一致する必要があります。
例
バケット、プライマリキー、パーティションを持つ Paimon 外部テーブルの作成
テーブルを作成し、その外部パラメーターを設定します
-- ご利用の外部プロジェクトに切り替えます。既にその中にいる場合は、このステップをスキップできます。 use <your external project>; -- セッションレベルでスキーマ構文を有効にします。 SET odps.namespace.schema=true; -- 使用するスキーマを選択します。 use schema <your schema>; CREATE TABLE oss_extable_bucket_pk_pt_bucket ( id BIGINT, name STRING, dt STRING )tblproperties ( 'mcfed.bucket'='3', -- バケット数 'mcfed.bucket-key'='id', -- バケットキー。プライマリキーが指定されている場合はオプションです。 "mcfed.primary-key"="dt,id", -- プライマリキー "mcfed.partition"="dt" -- パーティションフィールド );外部テーブルにデータを挿入します
use <your external project>; SET odps.namespace.schema=true; use schema <your schema>; INSERT INTO oss_extable_bucket_pk_pt_bucket PARTITION (dt='2025-06-18') VALUES (1, 'Alice'),(2, 'Bob'); INSERT INTO oss_extable_bucket_pk_pt_bucket PARTITION (dt='2025-06-19') VALUES (3, 'Charlie'),(4, 'David'),(5, 'Eva');外部テーブルをクエリします
use <your external project>; SET odps.namespace.schema=true; use schema <your schema>; SELECT * FROM oss_extable_bucket_pk_pt_bucket; -- 結果: +------------+---------+------------+ | id | name | dt | +------------+---------+------------+ | 1 | Alice | 2025-06-18 | | 2 | Bob | 2025-06-18 | | 4 | David | 2025-06-19 | | 3 | Charlie | 2025-06-19 | | 5 | Eva | 2025-06-19 | +------------+---------+------------+Data Lake Formation (DLF) コンソールにログインし、左上隅でリージョンを選択します。
カタログでテーブルの詳細を表示します。
よくある質問
問題 1:外部プロジェクト作成時のエラー
問題:外部プロジェクトを作成しようとすると、「You are not authorized to perform this action.」というエラーメッセージが表示されます。
エラー詳細では、エラーコードは NoMCPermission です。
解決策:
RAM ユーザーを使用している場合、
AliyunMaxComputeFullAccessポリシーが RAM ユーザーにアタッチされていることを確認してください。詳細については、ステップ 1 をご参照ください。この操作では、Data Lake Formation (DLF) からカタログを選択する必要があります。DLF 操作に必要な権限があることを確認してください。詳細については、ステップ 1 をご参照ください。
問題 2:デフォルトスキーマでの SHOW TABLES 実行エラー
問題:外部プロジェクトのデフォルトスキーマで SHOW TABLES コマンドを実行すると、「Forbidden:User acs: ram: :<uid>:user/** doesn't have privilege LIST on DATABASE default」というエラーメッセージが表示されます。
解決策:
Data Lake Formation (DLF) コンソールにログインし、左上隅でリージョンを選択します。
左側のナビゲーションウィンドウで、System & Securityを選択します。
タブで、ページをリフレッシュして、現在の RAM ユーザーが存在するかどうかを確認します。
ユーザーが存在する場合は、 タブに移動して、RAM ユーザーに権限を付与します。
問題 3:「invalid database operations on two-tier」エラー
問題:外部プロジェクトで SHOW SCHEMAS コマンドを実行すると、「invalid database operations on two-tier」というエラーメッセージが表示されます。
解決策:
まず、外部プロジェクトを使用していることを確認してください。
DataWorks SQL ノードを使用している場合、右側のペインで [デバッグ設定] をクリックし、バインドされている計算リソースが外部プロジェクトであることを確認します。
DataWorks SQL 分析を使用している場合、右上隅の [データソース] をクリックし、バインドされているデータソースが外部プロジェクトであることを確認します。
MaxCompute SQL 分析を使用している場合、右側のペインで [実行設定] をクリックし、計算リソースセクションで選択されているプロジェクトが外部プロジェクトであることを確認します。
odpscmd を使用している場合、odps_config.ini ファイルの
project_nameパラメーターの値を確認し、それが外部プロジェクトの名前に設定されていることを確認します。
外部プロジェクトを使用していることを確認した後、次の SQL ステートメントを一緒に選択して実行します。
-- セッションレベルでスキーマ構文を有効にします。 SET odps.namespace.schema=true; SHOW schemas;
問題 4:SHOW SCHEMAS がデフォルトスキーマのみを返す
問題:外部プロジェクトで SHOW SCHEMAS コマンドを実行すると、コマンドは 'default' のみを返します。
解決策:
まず、外部プロジェクトを使用していることを確認してください。
DataWorks SQL ノードを使用している場合、右側のペインで [デバッグ設定] をクリックし、バインドされている計算リソースが外部プロジェクトであることを確認します。
DataWorks SQL 分析を使用している場合、右上隅の [データソース] をクリックし、バインドされているデータソースが外部プロジェクトであることを確認します。
MaxCompute SQL 分析を使用している場合、右側のペインで [実行設定] をクリックし、計算リソースセクションで選択されているプロジェクトが外部プロジェクトであることを確認します。
odpscmd を使用している場合、odps_config.ini ファイルの
project_nameパラメーターの値を確認し、それが外部プロジェクトの名前に設定されていることを確認します。
外部プロジェクトを使用していることを確認した後、Data Lake Formation (DLF) コンソールにログインし、外部プロジェクトにバインドされているカタログに他のデータベースが存在するかどうかを確認します。
ステップ 1 と 2 の検証を完了しても、SHOW SCHEMAS コマンドが期待されるデータベースを返さない場合は、チケットを送信して問題を報告してください。
問題 5:「Dynamic bucket」エラー
問題:外部プロジェクトで SHOW TABLES コマンドを実行すると、次のエラーメッセージが表示されます:
ODPS-0110005:
com.aliyun.odps.meta.exception.MetaException:
com.aliyun.odps.common.table.na.NativeException:
common/table/jni/utils/jni_helper.cpp(79): UnretryableException: Common table connector exception
- ExceptionType: java.lang.IllegalArgumentException
- Message: You should use dynamic bucket (bucket = -1) mode in cross partition update case (Primary key constraint [sending_time, symbol, sequence_number] not include all partition fields [pt]).[pt])解決策:
このエラーは、MaxCompute が固定バケットを持つクロスパーティションプライマリキーテーブルをサポートしていないために発生します。
一時的な回避策:Data Lake Formation (DLF) コンソールで、サポートされていないクロスパーティション PK テーブルを削除します。
問題 6:「Can't set default schema...」エラー
問題:SHOW TABLES または SHOW SCHEMAS を実行すると、「FAILED: Can't set default schema if odps.namespace.schema is false.」というエラーメッセージが表示されます。
解決策:
まず、SQL ステートメントの前にセッションフラグ
SET odps.namespace.schema=true;を追加して、スキーマ構文を有効にしていることを確認してください。フラグを有効にしてもエラーが解決しない場合は、ステートメントの順序を確認してください。別の外部プロジェクトからテーブルを読み取るには、次の順序でコマンドを使用します:
USE external_project; SET odps.namespace.schema=true; USE schema schema_name; SHOW tables;
問題 7:「Failed to connect to...dlf.aliyuncs.com」エラー
問題:Paimon_DLF 外部プロジェクトのテーブルからデータを読み取ろうとすると、「Caused by: java.net.ConnectException: Failed to connect to cn-***-intranet.dlf.aliyuncs.com/xx.xx.xx.xx:80」のようなエラーメッセージが表示されます。
このエラーは、ジョブが実行される内部プロジェクトの許可リストにアドレス cn-***-intranet.dlf.aliyuncs.com を追加する必要があることを示しています。
解決策:
申請リンクを使用するか、DingTalk でグループ ID
11782920を検索して、MaxCompute 開発者コミュニティの DingTalk グループに参加します。MaxCompute テクニカルサポートチームに連絡し、エラーメッセージのアドレスを許可リストに追加するよう依頼してください。アドレスが許可リストに追加されたら、読み取り操作の前に次のパラメーターを含めます。
set odps.security.outbound.intranetlist=cn-***-intranet.dlf.aliyuncs.com:80; set odps.internet.access.list=cn-***-intranet.dlf.aliyuncs.com:80;
問題 8:Failed to connect Http service: http://clg-paimon-***.oss-cn-***-internal.aliyuncs.com
問題:Paimon_DLF 外部プロジェクトのテーブルからデータを読み取ろうとすると、「open failed, get file internal error:Failed to connect Http service: http://clg-paimon-***.oss-cn-***-internal.aliyuncs.com/***」のようなエラーメッセージが表示されます。
このエラーは、ジョブが実行される内部プロジェクトの許可リストにアドレス cn-***-intranet.dlf.aliyuncs.com を追加する必要があることを示しています。
解決策:
申請リンクを使用するか、DingTalk でグループ ID
11782920を検索して、MaxCompute 開発者コミュニティの DingTalk グループに参加します。MaxCompute テクニカルサポートチームに連絡し、エラーメッセージのアドレスを許可リストに追加するよう依頼してください。アドレスが許可リストに追加されたら、読み取り操作の前に次のパラメーターを含めます。
set odps.security.outbound.intranetlist=clg-paimon-***.oss-cn-***-internal.aliyuncs.com:80; set odps.internet.access.list=clg-paimon-***.oss-cn-***-internal.aliyuncs.com:80;
データ型のマッピング
MaxCompute のデータ型の詳細については、「データ型 (V1.0)」および「データ型 (V2.0)」をご参照ください。
Paimon データ型 | MaxCompute 2.0 データ型 | 読み取り/書き込みサポート | 説明 |
TINYINT | TINYINT | 8 ビット符号付き整数。 | |
SMALLINT | SMALLINT | 16 ビット符号付き整数。 | |
INT | INT | 32 ビット符号付き整数。 | |
BIGINT | BIGINT | 64 ビット符号付き整数。 | |
BINARY(MAX_LENGTH) | BINARY | バイナリデータ型。現在の最大長は 8 MB です。 | |
FLOAT | FLOAT | 32 ビットバイナリ浮動小数点数。 | |
DOUBLE | DOUBLE | 64 ビットバイナリ浮動小数点数。 | |
DECIMAL(precision,scale) | DECIMAL(precision,scale) | 正確な 10 進数型。デフォルトは
| |
VARCHAR(n) | VARCHAR(n) | 可変長文字型。n は長さを指定し、1 から 65,535 の範囲です。 | |
CHAR(n) | CHAR(n) | 固定長文字型。n は長さを指定し、1 から 255 の範囲です。 | |
VARCHAR(MAX_LENGTH) | STRING | 文字列型。現在の最大長は 8 MB です。 | |
DATE | DATE | 日付型。フォーマットは | |
TIME, TIME(p) | 非サポート | Paimon の TIME データ型は、タイムゾーンなしの時刻を表し、時、分、秒で構成され、ナノ秒の精度を持ちます。 TIME(p) は、0 から 9 の小数秒精度を指定します。デフォルト値は 0 です。 MaxCompute には対応する型が存在しません。 | |
TIMESTAMP, TIMESTAMP(p) | TIMESTAMP_NTZ | タイムゾーンなしでナノ秒まで正確なタイムスタンプ型。 このデータ型を読み取るには、次のコマンドを実行してネイティブ JNI ブリッジを無効にする必要があります: | |
TIMESTAMP WITH LOCAL TIME_ZONE(9) | TIMESTAMP |
| |
TIMESTAMP WITH LOCAL TIME_ZONE(9) | DATETIME | ナノ秒まで正確なタイムスタンプ型。 フォーマットは | |
BOOLEAN | BOOLEAN | BOOLEAN 型。 | |
ARRAY | ARRAY | 複合型。 | |
MAP | MAP | 複合型。 | |
ROW | STRUCT | 複合型。 | |
MULTISET<t> | 非サポート | MaxCompute には対応する型が存在しません。 | |
VARBINARY, VARBINARY(n), BYTES | BINARY | 可変長バイナリ文字列のデータ型。 |