この機能は非公開プレビュー中です。ご利用を希望される場合は、トライアル申請フォームに記入してください。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>'
)
;
パラメーター
例
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 文 |
|
|
|
テーブルのライフサイクル |
MaxCompute はテーブルをマッピングするのみです。 |
MaxCompute はメタデータおよび OSS データのライフサイクル全体を管理します。作成時に指定する 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)
|
|
|
Types.DateType |
DATE |
|
|
Types.TimeType |
BIGINT
|
|
|
Types.TimestampType |
TIMESTAMP_NTZ |
|
|
Types.TimestampType_z |
TIMESTAMP |
|
|
Types.StringType |
STRING |
|
|
Types.UUIDType |
BINARY |
|
|
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 テーブルについて:
-
テーブル名の変更文はサポートされていません。
-
XCOPY 跨域复制文はサポートされていません。
-
CLONE TABLE 文および RENAME TABLE 文はサポートされていません。
-
名前を変更する テーブルスナップショット のステートメントはサポートされていません。
-
カラムのデフォルト値の設定はサポートされていません。
-
カラムのデータの型の変更はサポートされていません。
-
マテリアライズドビュー操作はサポートされていません。
-
UPDATE 文はサポートされていません。
-
行レベルのアクセス制御はサポートされていません。
-
TRUNCATE 文はサポートされていません。
-
CDC(非公開プレビュー)はサポートされていません。
-
ローカルバックアップはサポートされていません。
-
CREATE OR REPLACE文はサポートされていません。 -
LOADコマンドおよびUNLOADコマンドはサポートされていません。
-
-
コンソールでのクエリおよび API 応答では、管理対象 Iceberg テーブルのストレージサイズが 0 バイトと表示されます。
-