MaxCompute では、Paimon 外部テーブルを作成して Object Storage Service (OSS) に保存されている Paimon テーブルディレクトリとのマッピング関係を確立し、そのデータにアクセスできます。 本書では、Paimon 外部テーブルを作成し、MaxCompute 経由で Paimon 外部テーブルにアクセスする方法について説明します。
背景情報
Apache Paimon は、ストリーミングとバッチを統合したレイクストレージフォーマットであり、高スループットの書き込みと低レイテンシーのクエリ能力を備えています。Realtime Compute for Apache Flink や E-MapReduce の一般的なコンピューティングエンジン (Spark、Hive、Trino など) は、すべて Paimon と完全に統合されています。 Apache Paimon を利用することで、ストレージサービスである OSS 上に独自のデータレイクストレージサービスを迅速に構築し、MaxCompute に接続してデータレイク分析を実行できます。 Apache Paimon の詳細については、「Apache Paimon」をご参照ください。
前提条件
-
現在操作を実行しているアカウントに、MaxCompute テーブルを作成する権限 (CreateTable) が付与されていること。
-
MaxCompute プロジェクトが作成済みであること。 詳細な操作手順については、「MaxCompute プロジェクトの作成」をご参照ください。
-
バケットと対応するファイルディレクトリが作成済みであること。 詳細な操作手順については、「バケットの作成」をご参照ください。
説明MaxCompute は一部のリージョンにしかデプロイされていないため、クロスリージョンでのデータ接続に問題が発生する可能性があります。 そのため、バケットと MaxCompute プロジェクトのリージョンを同じにすることを推奨します。
-
Flink フルマネージドサービスを購入済みであること。詳細な操作手順については、「Realtime Compute for Apache Flink の有効化」をご参照ください。
注意事項
-
現在、MaxCompute は Paimon 外部テーブルに対する読み取り操作のみをサポートしており、書き込みや、Paimon テーブル構造の変更に自動的に追従する操作などはサポートしていません。
-
現在、Paimon は Schema operations が有効になっている MaxCompute プロジェクトをサポートしていません。
-
Paimon 外部テーブルは cluster 属性をサポートしていません。
-
Paimon 外部テーブルは、過去バージョンのデータをクエリするなどの機能をサポートしていません。
Paimon 外部テーブル作成のコマンド構文
MaxCompute で Paimon 外部テーブルを作成するための構文は、次のとおりです。
CREATE EXTERNAL TABLE [if NOT EXISTS] <mc_oss_extable_name>
(
<col_name> <data_type>,
...
)
[partitioned BY (<col_name> <data_type>, ...)]
stored BY 'org.apache.paimon.hive.PaimonStorageHandler'
WITH serdeproperties (
'odps.properties.rolearn'='acs:ram::xxxxxxxxxxxxx:role/aliyunodpsdefaultrole'
)
location '<oss_location>'
USING 'paimon_maxcompute_connector.jar';
作成する Paimon 外部テーブルがパーティションテーブルの場合、パーティションデータをインポートする操作を別途実行する必要があります。 コマンドの詳細については、「ORC 外部テーブル」をご参照ください。
-
方法 1 (推奨): OSS ディレクトリ構造を自動的に解析して、パーティションを識別し、OSS 外部テーブルにパーティション情報を追加します。
msck repair TABLE <mc_oss_extable_name> ADD partitions; -
方法 2: 次のコマンドを手動で実行して、OSS 外部テーブルにパーティション情報を追加します。
ALTER TABLE <mc_oss_extable_name> ADD PARTITION (<col_name>= <col_value>);
パラメーターの説明は次のとおりです。
|
パラメーター名 |
任意/必須 |
説明 |
|
mc_oss_extable_name |
必須 |
作成する Paimon 外部テーブルの名前。 テーブル名では大文字と小文字が区別されません。 外部テーブルをクエリする際に、大文字と小文字を区別する必要はなく、強制的な大文字/小文字変換はサポートされていません。 |
|
col_name |
必須 |
Paimon 外部テーブルの列名。 Paimon データを読み取るシナリオでは、作成された Paimon 外部テーブルの構造が Paimon データファイルの構造と一致している必要があります。一致していない場合、Paimon データの読み取りに失敗します。 |
|
data_type |
必須 |
Paimon 外部テーブルの列のデータ型。 Paimon データを読み取るシナリオでは、作成された Paimon 外部テーブルの各列のデータ型が Paimon データファイルの各列のデータ型と一致している必要があります。一致していない場合、Paimon データの読み取りに失敗します。 |
|
odps.properties.rolearn |
必須 |
RAM のロール (OSS へのアクセス権限を持つ) の ARN を指定します。 RAM コンソールの「ロールの詳細」から取得できます。 |
|
oss_location |
必須 |
データファイルが配置されている OSS パスです。フォーマットは
|
使用方法
ステップ 1: Flink でのデータ準備
Paimon Catalog と Paimon テーブルを作成し、テーブルにデータを挿入します。参考となる操作手順は次のとおりです。 Flink に Paimon テーブルとデータが既にある場合は、このステップをスキップできます。
-
Realtime Compute for Apache Flink コンソールにログインし、Paimon Catalog を作成します。 詳細な操作手順については、「カタログの作成」をご参照ください。
-
Paimon テーブルを作成します。 詳細な操作手順については、「テーブルの管理」をご参照ください。
-
[メタデータ管理] ページで、作成した Paimon Catalog 配下の [default] を選択し、[テーブルの作成] をクリックします。
-
[テーブルの追加] ダイアログボックスで、[Apache Paimon] コネクタを選択し、次のステートメントを入力して [OK] をクリックします。 本書では、test_tbl テーブルを例として使用します。
CREATE TABLE `catalogname`.`default`.test_tbl ( dt STRING, id BIGINT, data STRING, PRIMARY KEY (dt, id) NOT ENFORCED ) PARTITIONED BY (dt); -
[SQL 開発] ページで、次のステートメントを含む SQL ジョブを作成し、ジョブをデプロイして実行します。 SQL ジョブの作成と実行の詳細については、「ジョブ開発の概要」をご参照ください。
INSERT INTO `catalogname`.`default`.test_tbl VALUES ('2023-04-21', 1, 'AAA'), ('2023-04-21', 2, 'BBB'), ('2023-04-22', 1, 'CCC'), ('2023-04-22', 2, 'DDD');説明-
SQL ジョブのエンジンバージョンが
vvr-8.0.1-flink-1.17以降であることを確認してください。 -
SQL ジョブがストリーミングジョブ (例えば
INSERT INTO ... VALUES ...ステートメントを実行する場合) である場合は、[ジョブの運用保守] ページで Execution Parameters を編集し、その他の設定 でexecution.checkpointing.checkpoints-after-tasks-finish.enabled: trueを設定する必要があります。 ジョブの実行パラメーターを設定する方法の詳細については、「ジョブデプロイの設定」をご参照ください。
-
-
ステップ 2: MaxCompute プロジェクトへの Paimon プラグインのアップロード
次のいずれかの方法で、作成済みの MaxCompute プロジェクトに Paimon プラグインをアップロードできます。
MaxCompute クライアントの使用
クライアント (odpscmd) 経由で作成済みの MaxCompute プロジェクトにアクセスし、次のコードを実行して paimon_maxcompute_connector.jar を MaxCompute プロジェクトにアップロードします。
ADD JAR <path_to_paimon_maxcompute_connector.jar>;
DataWorks の使用
-
DataWorks コンソールにログインし、左側メニューで [ワークスペース] を選択し、対象のワークスペースの [操作] 列にある [クイックアクセス] > [データ開発] をクリックします。
-
データ開発 ページで、[新規作成] ボタンをクリックし、[リソースの新規作成] > [JAR] を選択します。
-
[リソースの新規作成] ダイアログボックスで、新規リソースのパラメーターを設定し、
paimon_maxcompute_connector.jarをアップロードして、[新規作成] をクリックします。 新規リソース作成の詳細については、「ステップ 1:リソースの作成またはアップロード」をご参照ください。ここで、[リソースタイプ] には [JAR] を選択し、[ODPSリソースとしてアップロード] にチェックを入れます。
-
リソースの作成が完了したら、リソース編集ページでツールバーの
アイコンをクリックし、リソースをスケジューリング開発サーバーにサブミットします。
ステップ 3: MaxCompute での Paimon 外部テーブルの作成
odpscmd を使用して MaxCompute に接続するか、MaxCompute SQL を実行できる他のツールを使用して、MaxCompute Paimon 外部テーブルを作成します。 本書では、oss_extable_paimon_1pt を例として使用します。
CREATE EXTERNAL TABLE oss_extable_paimon_1pt
(
id BIGINT,
data STRING
)
PARTITIONED BY (dt STRING )
stored BY 'org.apache.paimon.hive.PaimonStorageHandler'
WITH serdeproperties (
'odps.properties.rolearn'='acs:ram::124*********:role/aliyunodpsdefaultrole'
)
location 'oss://oss-cn-beijing-internal.aliyuncs.com/paimon_flink/test_db_y.db/test_tbl/'
USING 'paimon_maxcompute_connector.jar'
;
ステップ 4: MaxCompute での Paimon 外部テーブルの読み取り
-
ローカルクライアント (
odpscmd) を使用するか、MaxCompute SQL を実行できる他のツールを使用して、次のコマンドを実行します。SET odps.sql.common.table.planner.ext.hive.bridge = true; SET odps.sql.hive.compatible = true; -
次のコマンドを実行して、MaxCompute Paimon 外部テーブル
oss_extable_paimon_1ptをクエリします。SELECT * FROM oss_extable_paimon_1pt;実行結果の例は次のとおりです。
+------------+------------+------------+ | id | data | dt | +------------+------------+------------+ | 1 | AAA | 2023-04-21 | | 2 | BBB | 2023-04-21 | | 1 | CCC | 2023-04-22 | | 2 | DDD | 2023-04-22 | +------------+------------+------------+説明実行結果にパーティション情報が表示されない場合は、次のコマンドを実行してパーティション情報を追加してください。
msck repair table oss_extable_paimon_1pt add partitions;
関連ドキュメント
また、Flink でカスタム Catalog を使用して MaxCompute Paimon 外部テーブルを作成し、データを書き込んだ後、MaxCompute 経由で Paimon データをクエリして消費することもできます。詳細については、「Flink に基づく MaxCompute Paimon 外部テーブルの作成」をご参照ください。