すべてのプロダクト
Search
ドキュメントセンター

MaxCompute:Paimon 外部テーブル

最終更新日:Jan 01, 2026

MaxCompute で Paimon 外部テーブルを作成して、Object Storage Service (OSS) の Paimon テーブルフォルダーにマッピングし、これらのフォルダー内のデータにアクセスできます。このトピックでは、Paimon 外部テーブルを作成し、MaxCompute を使用してそのデータにアクセスする方法について説明します。

機能紹介

Apache Paimon は、ストリーミング処理とバッチ処理の両方をサポートするデータレイクストレージフォーマットです。高スループットの書き込みと低レイテンシーのクエリを提供します。Paimon は、Realtime Compute for Apache FlinkE-MapReduce などのサービスで利用可能な Spark、Hive、Trino などの一般的なコンピュートエンジンと完全に統合されています。Apache Paimon を使用して、OSS 上にデータレイクを迅速に構築し、それを MaxCompute に接続してデータレイク分析を行うことができます。メタデータフィルタリング機能は、タスク処理中に不要な OSS フォルダーから読み取られるファイル数を減らすことで、クエリパフォーマンスをさらに最適化します。

適用範囲

  • Paimon 外部テーブルのスキーマは、Paimon ファイルのスキーマ変更を反映して自動的に更新されません。

  • Paimon 外部テーブルにクラスタープロパティやプライマリキーを設定することはできません。

  • Paimon 外部テーブルは、履歴データバージョンのクエリなどの機能をサポートしていません。

  • Paimon 外部テーブルに直接データを書き込まないでください。代わりに、UNLOAD などのメソッドを使用してデータを OSS にエクスポートします。

  • INSERT INTO または INSERT OVERWRITE 文を使用して、Paimon 外部テーブルにデータを書き込むことができます。動的バケットテーブルまたはクロスパーティションテーブルへのデータ書き込みはサポートされていません。

  • Paimon 外部テーブルでは、UPDATE および DELETE 操作はサポートされていません。

  • MaxCompute と OSS は同じリージョンにある必要があります。

サポートされるデータ型

MaxCompute のデータ型の詳細については、「データ型 (バージョン 1.0)」および「データ型 (バージョン 2.0)」をご参照ください。

オープンソース Paimon データ型

MaxCompute V2.0 データ型

読み取り/書き込みサポート

説明

TINYINT

TINYINT

已开通

8 ビット符号付き整数。

SMALLINT

SMALLINT

已开通

16 ビット符号付き整数。

INT

INT

已开通

32 ビット符号付き整数。

BIGINT

BIGINT

已开通

64 ビット符号付き整数。

BINARY(MAX_LENGTH)

BINARY

已开通

バイナリデータ型。最大長は 8 MB です。

FLOAT

FLOAT

已开通

32 ビット 2 進浮動小数点数。

DOUBLE

DOUBLE

已开通

64 ビット 2 進浮動小数点数。

DECIMAL(precision,scale)

DECIMAL(precision,scale)

已开通

高精度 10 進数。デフォルトは decimal(38,18) です。精度とスケールの値をカスタマイズできます。

  • precision:表現できる最大桁数を示します。値は 1 <= precision <= 38 の範囲内である必要があります。

  • scale:小数部の桁数を示します。値は 0 <= scale <= 18 の範囲内である必要があります。

VARCHAR(n)

VARCHAR(n)

已开通

可変長文字列型。n は長さを表し、1 から 65,535 の範囲です。

CHAR(n)

CHAR(n)

已开通

固定長文字列型。n は長さを表し、1 から 255 の範囲です。

VARCHAR(MAX_LENGTH)

STRING

已开通

文字列型。最大長は 8 MB です。

DATE

DATE

已开通

日付型。フォーマットは yyyy-mm-dd です。

TIME, TIME(p)

サポートされていません

未开通

Paimon の TIME データ型は、タイムゾーンのない時間型です。時、分、秒で構成され、精度はナノ秒までです。

TIME(p) は小数部の精度を示し、0 から 9 までの整数を指定できます。デフォルト値は 0 です。

MaxCompute には対応する型がありません。

TIMESTAMP, TIMESTAMP(p)

TIMESTAMP_NTZ

已开通

タイムゾーンのないタイムスタンプ型で、精度はナノ秒までです。

テーブルを読み取るには、ネイティブスイッチを有効にします:SET odps.sql.common.table.jni.disable.native=true;

TIMESTAMP WITH LOCAL TIME_ZONE(9)

TIMESTAMP

已开通

  • 精度がナノ秒までのタイムスタンプ型。フォーマットは yyyy-mm-dd hh:mm:ss.xxxxxxxxx です。

  • 低精度の TIMESTAMP 型を持つ Paimon ソーステーブルの場合、データ書き込み中に値が切り捨てられます。精度が 0 から 3 の値は小数点以下 3 桁に切り捨てられます。精度が 4 から 6 の値は小数点以下 6 桁に切り捨てられます。精度が 7 から 9 の値は小数点以下 9 桁に切り捨てられます。

TIMESTAMP WITH LOCAL TIME_ZONE(9)

DATETIME

未开通

精度がナノ秒までのタイムスタンプ型。

フォーマットは yyyy-mm-dd hh:mm:ss.xxxxxxxxx です。

BOOLEAN

BOOLEAN

已开通

BOOLEAN 型。

ARRAY

ARRAY

已开通

複合型。

MAP

MAP

已开通

複合型。

ROW

STRUCT

已开通

複合型。

MULTISET<t>

サポートされていません

未开通

MaxCompute には対応する型がありません。

VARBINARY, VARBINARY(n), BYTES

BINARY

已开通

可変長バイナリ文字列データ型。

Paimon 外部テーブルの作成

構文

異なるフォーマットの外部テーブルの構文の詳細については、「OSS 外部テーブル」をご参照ください。

CREATE EXTERNAL TABLE  [if NOT EXISTS] <mc_oss_extable_name>
(
  <col_name> <data_type>,
  ...
)
[COMMENT <table_comment>]
[PARTITIONED BY (<col_name> <data_type>, ...)]
STORED BY 'org.apache.paimon.hive.PaimonStorageHandler'
WITH serdeproperties (
  'odps.properties.rolearn'='acs:ram::<uid>:role/aliyunodpsdefaultrole'
)
LOCATION '<oss_location>';

共通パラメーター

共通パラメーターの詳細については、「基本構文パラメーター」をご参照ください。

データの書き込み

MaxCompute の書き込み構文の詳細については、「書き込み構文」をご参照ください。

クエリと分析

  • SELECT 構文の詳細については、「クエリ構文」をご参照ください。

  • クエリプランの最適化の詳細については、「クエリの最適化」をご参照ください。

  • BadRowSkipping の詳細については、「BadRowSkipping」をご参照ください。

ステップ 1:前提条件

  1. MaxCompute プロジェクトを作成済みであること。

  2. OSS バケットとフォルダーを準備します。詳細については、「バケットの作成」および「フォルダーの管理」をご参照ください。

    MaxCompute は一部のリージョンにのみデプロイされています。データの接続性の問題を避けるため、ご利用の MaxCompute プロジェクトと同じリージョンにある OSS バケットを使用してください。
  3. 権限付与

    1. OSS にアクセスするための権限が必要です。Alibaba Cloud アカウント、RAM ユーザー、または RAM ロールを使用して OSS 外部テーブルにアクセスできます。権限付与の詳細については、「OSS の STS 権限付与」をご参照ください。

    2. MaxCompute プロジェクトで `CreateTable` 権限が必要です。テーブル操作の権限の詳細については、「MaxCompute の権限」をご参照ください。

ステップ 2:Flink でのデータ準備

Paimon カタログと Paimon テーブルを作成し、そのテーブルにデータを挿入します。以下に例を示します。

説明

OSS に Paimon テーブルデータが既にある場合は、このステップをスキップできます。

  1. Paimon ファイルシステムカタログの作成

    1. Flink コンソールにログインし、左上隅でリージョンを選択します。

    2. 目的のワークスペースをクリックします。 左側のナビゲーションウィンドウで、[カタログ] を選択します。

    3. [カタログリスト] ページで、右側の [カタログの作成] をクリックします。[カタログの作成] ダイアログボックスで、Apache Paimon を選択し、[次へ] をクリックして、次のパラメーターを設定します:

      パラメーター

      必須

      説明

      metastore

      必須

      メタストアのタイプ。この例では、filesystem を選択します。

      catalog name

      必須

      カスタムのカタログ名。例:paimon-catalog

      warehouse

      必須

      OSS で指定されたデータウェアハウスディレクトリ。例:oss://paimon-fs/paimon-test/

      fs.oss.endpoint

      必須

      OSS サービスのエンドポイント。たとえば、中国 (杭州) リージョンのエンドポイントは oss-cn-hangzhou-internal.aliyuncs.com です。

      fs.oss.accessKeyId

      必須

      OSS サービスへのアクセスに必要な AccessKey ID。

      fs.oss.accessKeySecret

      必須

      OSS サービスへのアクセスに必要な AccessKey Secret。

  2. Paimon テーブルの作成

    1. Flink コンソールにログインし、左上隅でリージョンを選択します。

    2. 対象のワークスペース名をクリックし、左側のナビゲーションウィンドウで [開発] > [スクリプト] を選択します。

    3. [新規スクリプト] タブでは、イメージ をクリックして新しいクエリスクリプトを作成できます。

      次のコマンドを入力し、[実行] をクリックします。

      CREATE TABLE `paimon-catalog`.`default`.test_tbl (
          id BIGINT,
          data STRING,
          dt STRING,
          PRIMARY KEY (dt, id) NOT ENFORCED
      ) PARTITIONED BY (dt);
      
      INSERT INTO `paimon-catalog`.`default`.test_tbl VALUES (1,'CCC','2024-07-18'), (2,'DDD','2024-07-18');
  3. SQL ジョブが有界ストリームジョブである場合 (例:INSERT INTO ... VALUES ... 文を実行するジョブ)、次の手順を実行します:

    1. 対象のワークスペース名をクリックします。左側のナビゲーションウィンドウで、[O&M] > [デプロイメント]を選択します。

    2. [デプロイメント] ページで、対象のジョブの名前をクリックすると、その[設定] ページが開きます。

    3. ジョブの実行時パラメーターを設定する方法の詳細については、「ジョブデプロイメント情報の設定」をご参照ください。

ステップ 3:MaxCompute での Paimon 外部テーブルの作成

MaxCompute で、次の SQL 文を実行して MaxCompute Paimon 外部テーブルを作成します。

CREATE EXTERNAL TABLE oss_extable_paimon_pt
(
    id BIGINT,
    data STRING
)
PARTITIONED BY (dt STRING )
STORED BY 'org.apache.paimon.hive.PaimonStorageHandler'
WITH serdeproperties (
    'odps.properties.rolearn'='acs:ram::<uid>:role/aliyunodpsdefaultrole'
)
LOCATION 'oss://oss-cn-<your-region>-internal.aliyuncs.com/<table_path>'
;

上記の文で、table_path は Flink の Paimon テーブルへのパスです。例:paimon-fs/paimon-test/default.db/test_tbl。パスを取得するには、次の手順を実行します:

  1. Flink コンソールにログインし、左上隅でリージョンを選択します。

  2. 対象のワークスペースの名前をクリックします。左側のナビゲーションウィンドウで、[カタログ] を選択します。

ステップ 4:パーティションデータのインポート

作成した OSS 外部テーブルがパーティションテーブルである場合は、パーティションデータもインポートする必要があります。詳細については、「OSS 外部テーブルにパーティションデータを追加するための構文」をご参照ください。

MSCK REPAIR TABLE oss_extable_paimon_pt ADD PARTITIONS;

ステップ 5:MaxCompute を使用した Paimon 外部テーブルの読み取り

MaxCompute で、次の文を実行して MaxCompute Paimon 外部テーブル `oss_extable_paimon_pt` をクエリします。

SET odps.sql.common.table.planner.ext.hive.bridge = true;
SET odps.sql.hive.compatible = true;
SELECT * FROM oss_extable_paimon_pt WHERE dt='2024-07-18';

次の結果が返されます:

+------------+------------+------------+
| id         | data       | dt         | 
+------------+------------+------------+
| 1          | CCC        | 2024-07-18 | 
| 2          | DDD        | 2024-07-18 | 
+------------+------------+------------+
説明

Paimon ファイルのスキーマが外部テーブルのスキーマと一致しない場合:

  • 列数の不一致: Paimon ファイルの列数が外部テーブルのスキーマより少ない場合、データの読み取り時に不足している列は NULL 値で埋められます。Paimon ファイルの列数が多い場合、余分な列データは破棄されます。

  • 列の型の不一致: MaxCompute では、`INT` 型を使用して Paimon ファイルから `STRING` データを読み取ることはできません。`STRING` 型を使用して `INT` データを読み取ることはできますが、この方法は推奨されません。

よくある質問

Paimon 外部テーブルからデータを読み取る際に kSIGABRT エラーが発生するのはなぜですか?

  • エラーメッセージ

    ODPS-0123144: Fuxi job failed - kSIGABRT(errCode:6) at Odps/*****_SQL_0_1_0_job_0/M1@f01b17437.cloud.eo166#3. 
      Detail error msg: CRASH_CORE, maybe caused by jvm crash, please check your java udf/udaf/udtf. 
      | fatalInstance: Odps/*****_SQL_0_1_0_job_0/M1#0_0 
  • 原因

    このエラーは、Java Native Interface (JNI) モードを使用して TIMESTAMP_NTZ 型のデータを読み取る場合に発生します。

  • 解決策

    テーブルからデータを読み取る前に、次の文を実行してネイティブスイッチを有効にします:SET odps.sql.common.table.jni.disable.native=true;

関連ドキュメント

カスタムカタログを使用して、Flink で MaxCompute Paimon 外部テーブルを作成できます。データがテーブルに書き込まれた後、MaxCompute を使用して Paimon データをクエリおよび消費できます。詳細については、「Flink を使用した MaxCompute Paimon 外部テーブルの作成」をご参照ください。