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

MaxCompute:MaxCompute が管理する Iceberg テーブル (ベータ版)

最終更新日:Jun 04, 2026
重要

この機能は非公開プレビュー中です。ご利用を希望される場合は、トライアル申請フォームに記入してください。MaxCompute チームは 3 営業日以内に申請内容を審査し、結果を SMS でお知らせします。結果に関するご質問は、申請リンクからお問い合わせください。

概要

MaxCompute は、Apache Iceberg テーブルを Object Storage Service (OSS) 上に保存し、メタデータ、権限、ライフサイクルを統合的に管理します。Iceberg テーブルは Spark、Flink、Trino、Presto などのオープンソースエンジンと互換性があり、レイクハウスアーキテクチャにおけるマルチエンジンでのデータ共有を実現します。

オープンな Iceberg フォーマットにより、データサイロが解消され、Spark、Flink、Hive とのシームレスなデータ共有が可能になります。ベンダーロックインを回避し、各ワークロードに最適なコンピュートエンジンを選択できます。また、オープン標準により長期的なデータの移植性が保証され、マルチクラウド環境下での組織間連携もサポートされます。

MaxCompute が管理する Iceberg テーブルには、以下の特徴があります。

  • Iceberg レイクテーブルのデータ管理

    MaxCompute SQL を使用して OSS 上で Iceberg テーブルの作成、読み取り、書き込みが可能です。DDL、DML、タイムトラベル、スキーマ進化、パーティション進化をサポートします。

  • 自動バックグラウンドメンテナンス

    コンパクション、スナップショットの期限切れ処理、メタデータのアーカイブを組み込みの最適化機能が自動で実行するため、手動でのメンテナンスが不要です。

  • メタデータの一貫性

    MaxCompute Metastore (MaxMeta) が ACID に準拠した書き込みによりテーブルメタデータを管理します。外部エンジンは MaxCompute ストレージ書き込み API または MaxCompute ネイティブエンジンを使用する必要があり、複数の書き込み元によるメタデータ競合を防止します。

  • オープンエコシステムとの統合

    Trino、Presto、Spark、Flink、Doris がネイティブに管理対象の Iceberg テーブルにアクセスでき、低遅延かつ高同時実行数でのマルチエンジンクエリが可能です。

  • 統合された権限管理:データレイクおよびデータウェアハウスの権限を単一システムで定義できます。RAM 権限とデータウェアハウスのアクセス制御を統合し、エンタープライズ向けのレイクハウスセキュリティを実現します。

注意事項

MaxCompute が管理する Iceberg テーブルに対して以下の操作を行うと、データ損失やデータの読み取り不能が発生する可能性があります。

禁止される操作

影響

正しい対応方法

MaxCompute 書き込み API 以外のインターフェイスを通じて Iceberg テーブルのデータを変更すること。

テーブルが整合性チェックに失敗し、読み取り不能になる可能性があります。

データの変更は MaxCompute SQL のみを通じて行ってください。

管理対象の OSS パスにファイルをアップロードすること。

バックグラウンドサービスがアップロードされたファイルを孤立ファイルと見なし、削除します。

管理対象パスにデータをアップロードしないでください。

複数の管理対象 Iceberg テーブルで同一の OSS パスを共有すること。

各テーブルのガベージコレクションプロセスが、他方のテーブルのファイルを削除します。

各テーブルに固有の OSS パスを使用してください。

異なる管理対象 Iceberg テーブルに親子関係のある OSS パスを使用すること。

各テーブルのガベージコレクションが他方のテーブルのファイルを孤立データと見なし、削除することでデータ損失が発生します。

各管理対象 Iceberg テーブルに固有の OSS パスを使用し、親子関係のあるパスは避けてください。

テーブルの作成

構文

CREATE ICEBERG TABLE [IF NOT EXISTS] <table name> (
  <col_name> <data_type>,
  ...
)
PARTITIONED BY (<partitionExpression>)
WITH CONNECTION <connection name>
OPTIONS(
  location='<oss_location>'
)
;

パラメーター

パラメーターの詳細を表示するにはクリックしてください

パラメーター

必須

説明

table name

はい

テーブル名です。

大文字・小文字は区別されません。大文字・小文字の変換はサポートされていません。

col_name

はい

カラム名です。

スキーマは OSS データファイルと一致している必要があります。スキーマが一致しない場合、データの読み取りができなくなります。

data_type

はい

カラムのデータの型です。

各カラムのデータの型は、OSS データファイル内の対応する型と一致している必要があります。型が一致しない場合、データの読み取りができなくなります。

table_comment

いいえ

テーブルのコメントです。有効な文字列で、長さは 1,024 バイト以下である必要があります。

partitionExpression

いいえ

Iceberg パーティション式と同じセマンティクスを持つパーティション式です。サポートされる関数は以下のとおりです。

  • <col_name>:パーティション値はカラムの生の値です。

  • BUCKET ( <num_buckets> , <col_name> ):カラム値をハッシュし、N で剰余をとります。結果の範囲は 0 ~ N-1 です。

  • TRUNCATE ( <width> , <col_name> ):フィールド値を指定された幅まで切り捨て、パーティション化に使用します。

  • YEAR ( <col_name> ):日付またはタイムスタンプから年を抽出します。

  • MONTH ( <col_name> ):日付またはタイムスタンプから月を抽出します。

  • DAY ( <col_name> ):日付またはタイムスタンプから日を抽出します。

  • HOUR ( <col_name> ):タイムスタンプから時を抽出します。

connection name

はい

CONNECTION 名です。CONNECTION の作成をご参照ください。

oss_location

はい

データファイルの OSS パスです。data ディレクトリおよび metadata ディレクトリの親ディレクトリとなります。

形式は location='oss://<oss_endpoint>/<Bucket name>/<OSS directory name>/' です。

  • oss_endpoint:OSS エンドポイントです。内部ネットワーク用のエンドポイント(-internal を含むもの)を使用してください。リージョンとエンドポイントをご参照ください。省略した場合、現在のプロジェクトのリージョンのエンドポイントが使用されます。リージョンをまたいだファイルは接続性の問題を引き起こす可能性があります。

    • 例:oss://oss-cn-beijing-internal.aliyuncs.com/xxx

    • 接続性の問題を回避するため、データファイルは MaxCompute プロジェクトと同じ OSS リージョンに保存してください。

  • Bucket name:OSS バケット名です。oss_endpoint の後に指定します。例:oss://oss-cn-beijing-internal.aliyuncs.com/your_bucket/path/バケットの一覧表示をご参照ください。

  • Directory name:OSS ディレクトリパスです。ファイル名を含んではいけません。例:oss://oss-cn-beijing-internal.aliyuncs.com/oss-mc-test/Demo1/

CREATE ICEBERG TABLE mc_iceberg_table (
  id bigint COMMENT 'ユーザーの一意な ID',
  name string COMMENT 'ユーザー名',
  age bigint COMMENT 'ユーザーの年齢',
  gender string COMMENT 'ユーザーの性別',
  height float COMMENT 'ユーザーの身長',
  birthday date COMMENT 'ユーザーの生年月日',
  phone_number string COMMENT 'ユーザーの電話番号',
  email string COMMENT 'ユーザーのメールアドレス',
  address string COMMENT 'ユーザーの住所',
  salary decimal(18, 2) COMMENT 'ユーザーの給与',
  create_time timestamp COMMENT 'ユーザー情報の作成時刻',
  update_time timestamp COMMENT 'ユーザー情報の最終更新時刻',
  is_deleted boolean COMMENT 'ユーザー情報が削除されたかどうかを示すフラグ',
  dt string COMMENT 'パーティションフィールド'
)
PARTITIONED BY (dt)
WITH CONNECTION <connection name>
OPTIONS(
  location='oss://oss-cn-<region>-internal.aliyuncs.com/<oss bucket>/Demo-iceberg/'
);

データの書き込み

  • MaxCompute 書き込み構文:構文の説明をご参照ください。

  • 例:

    SET odps.sql.type.system.odps2=true;
    SET odps.sql.decimal.odps2=true;
    
    INSERT INTO mc_iceberg_table VALUES
        (1, 'Zhang San', 18, 'Male', cast (178.56 as float), DATE '1990-01-01', '13800000000', 'zhangsan@example.com', 'Haidian District, Beijing', 5000.00, TIMESTAMP '2023-04-19 11:32:00', TIMESTAMP '2023-04-19 11:32:00', false,'20260402'),
        (2, 'Li Si', 20, 'Female', cast (162.70 as float), DATE '1992-02-02', '13900000000', 'lisi@example.com', 'Pudong New Area, Shanghai', 6000.00, TIMESTAMP '2023-04-19 11:32:00', TIMESTAMP '2023-04-19 11:32:00',false,'20260401'),
        (3, 'Wang Wu', 22, 'Male', cast (185.21 as float), DATE '1994-03-03', '14000000000', 'wangwu@example.com', 'Nanshan District, Shenzhen', 7000.00, TIMESTAMP '2023-04-19 11:32:00', TIMESTAMP '2023-04-19 11:32:00', false,'20260403')
    ;

データの照会と分析

  • SELECT 構文:構文の説明をご参照ください。

  • 例:

    SELECT * FROM mc_iceberg_table;
    
    -- 次の結果が返されます:
    +------------+------+------------+--------+--------+----------+--------------+-------+---------+--------+-------------+-------------+------------+----+
    | id         | name | age        | gender | height | birthday | phone_number | email | address | salary | create_time | update_time | is_deleted | dt |
    +------------+------+------------+--------+--------+----------+--------------+-------+---------+--------+-------------+-------------+------------+----+
    | 1          | Zhang San  | 18         | Male   | 178.56 | 1990-01-01 | 13800000000  | zhangsan@example.com | Haidian District, Beijing | 5000   | 2023-04-19 03:32:00 | 2023-04-19 03:32:00 | false      | 20260402 |
    | 2          | Li Si      | 20         | Female | 162.7  | 1992-02-02 | 13900000000  | lisi@example.com     | Pudong New Area, Shanghai | 6000   | 2023-04-19 03:32:00 | 2023-04-19 03:32:00 | false      | 20260401 |
    | 3          | Wang Wu    | 22         | Male   | 185.21 | 1994-03-03 | 14000000000  | wangwu@example.com   | Nanshan District, Shenzhen| 7000   | 2023-04-19 03:32:00 | 2023-04-19 03:32:00 | false      | 20260403 |
    +------------+------+------------+--------+--------+----------+--------------+-------+---------+--------+-------------+-------------+------------+----+

Iceberg 外部テーブルと管理対象テーブルの比較

ディメンション

Iceberg 外部テーブル

MaxCompute が管理する Iceberg テーブル

CREATE TABLE 文

CREATE EXTERNAL TABLE [if NOT EXISTS] <mc_oss_extable_name>
(
 <col_name> <data_type>,
 ...
)
[COMMENT <table_comment>]
[PARTITIONED BY (<col_name> <data_type>, ...)]
STORED AS ICEBERG
WITH SERDEPROPERTIES (
 'odps.properties.rolearn'='acs:ram::<uid>:role/aliyunodpsdefaultrole'
)
LOCATION '<oss_location>' 
TBLPROPERTIES ('<tbproperty_name>'='<tbproperty_value>',...);
CREATE [OR REPLACE] ICEBERG TABLE [IF NOT EXISTS] <table name> 
(
 <col_name> <data_type>,
 ...
)
PARTITIONED BY (<partitionExpression>)
WITH CONNECTION <connection name>
OPTIONS(
 <identifier> = expr,
 ...
)
[LIFECYCLE <days>];

テーブルのライフサイクル

MaxCompute はテーブルをマッピングするのみです。DROP TABLE はメタデータのみを削除し、OSS データは削除しません。

MaxCompute はメタデータおよび OSS データのライフサイクル全体を管理します。作成時に指定する OSS ディレクトリは空である必要があります。DROP TABLE はメタデータおよび関連する OSS データファイルの両方を削除します。

メタデータおよびデータガバナンス

標準的な外部テーブルと同様です。

高性能なメタデータキャッシングを提供します。

データのオープン性(オープンソースエンジンによる読み取り/書き込み)

Iceberg フォーマットにより整合性が保証されます。

MaxCompute が読み取り/書き込みの整合性を保証します。オープンソースエンジンは OSS から直接読み取るか、MaxCompute ストレージ API を使用します。

レイクテーブルのメンテナンス

ユーザーがメンテナンスを行います。

自動バックグラウンドメンテナンスを実施します。

  • 自動コンパクション

  • 期限切れスナップショットの自動クリーンアップ

  • 自動ガベージコレクション

サポートされるデータの型

Iceberg データの型

MaxCompute データの型

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

Types.BooleanType

BOOLEAN

サポートされています

Types.IntegerType

INT

サポートされています

Types.LongType

BIGINT

サポートされています

Types.FloatType

FLOAT

サポートされています

Types.DoubleType

DOUBLE

サポートされています

Types.DecimalType

DECIMAL(precision, scale)

  • 0 <= precision <= 38

  • 0 <= scale <= 18

サポートされています

Types.DateType

DATE

サポートされています

Types.TimeType

BIGINT

  • MaxCompute はマイクロ秒精度で Iceberg TIME 型にデータを書き込みます。

  • Iceberg 外部テーブルに書き込む場合は、iceberg_time_fields テーブルプロパティで時間フィールドを指定する必要があります。

    • col1;col2

    • リスト型の場合:col1.entry

    • マップ型の場合:col1.key;col1.value

    • 構造体型の場合:col1.field1;col2.field2

サポートされています

Types.TimestampType

TIMESTAMP_NTZ

サポートされています

Types.TimestampType_z

TIMESTAMP

サポートされています

Types.StringType

STRING

サポートされています

Types.UUIDType

BINARY

  • UUID は 16 バイトである必要があります。

  • uuid 変換の詳細については、この変換リンクをご参照ください。

  • Iceberg 外部テーブルに書き込む場合は、iceberg_uuid_fields テーブルプロパティで UUID フィールドを指定する必要があります。

    • col1;col2

    • リスト型の場合:col1.entry

    • マップ型の場合:col1.key;col1.value

    • 構造体型の場合:col1.field1;col2.field2

サポートされていません

Types.FixedType

BINARY

サポートされています

Types.BinaryType

BINARY

サポートされています

TypeID.STRUCT

STRUCT

サポートされています

TypeID.LIST

ARRAY

サポートされています

TypeID.MAP

MAP

サポートされています

N/A

TINYINT, SMALLINT, VARCHAR(n), CHAR(n), DATETIME, JSON

N/A

制限事項

  • バージョンに関する制限

    • Iceberg SDK 1.6.1 と互換性のある機能のみがサポートされます。

    • Iceberg テーブルフォーマット v2 のみが読み取り/書き込みに対応しています。

    • Iceberg v3 フォーマットの機能はサポートされていません。

  • サポートされる操作

    • MaxCompute データの型:データの型 (バージョン 1.0) および データの型 (バージョン 2.0)

    • スキーマ進化は現在、カラムの追加および削除のみをサポートしています。

    • パーティションプルーニングがサポートされています。有効になっていない場合は、申請リンクからフィードバックを送信するか、MaxCompute 開発者コミュニティ DingTalk グループ(グループ ID:11782920)にご参加ください。

  • サポートされない操作

    • MaxCompute が管理する Iceberg テーブルについて:

    • コンソールでのクエリおよび API 応答では、管理対象 Iceberg テーブルのストレージサイズが 0 バイトと表示されます。