このトピックでは、Delta Lake フォーマットの OSS 外部テーブルの作成、読み取り、書き込み方法について説明します。
MaxCompute は、特定のバージョンの Delta Lake ソフトウェア開発キット (SDK) でのみ外部テーブル機能をサポートします。MaxCompute は SDK バージョンの更新や、この機能のさらなる開発は行いません。データレイクテーブルフォーマットのデータを読み取るには、Paimon 外部テーブルを使用してください。
適用範囲
OSS 外部テーブルは、クラスタープロパティをサポートしていません。
単一ファイルのサイズは 2 GB を超えることはできません。ファイルが大きすぎる場合は、分割してください。
MaxCompute と OSS は同じリージョンにある必要があります。
Delta Lake 外部テーブルは、外部テーブルにマッピングされたファイルからの全データ読み取りのみをサポートします。システム列の自動非表示、増分読み取り、スナップショット読み取り、書き込み操作はサポートしていません。原子性、一貫性、分離性、永続性 (ACID) をサポートする読み取りおよび書き込み操作を実行するには、MaxCompute Delta テーブルや Paimon 外部テーブルなどの機能を使用してください。
MaxCompute に統合されているデフォルトの Delta Lake SDK バージョンは
io.delta:delta-core_2.11:0.2.0.5です。Delta Lake SDK の上位互換性または下位互換性は保証されていません。互換性はオープンソースコミュニティによって維持されます。
サポートされるデータ型
MaxCompute のデータ型の詳細については、「データ型 (バージョン 1.0)」および「データ型 (バージョン 2.0)」をご参照ください。
データ型 | サポート | データ型 | サポート |
TINYINT |
| STRING |
|
SMALLINT |
| DATE |
|
INT |
| DATETIME |
|
BIGINT |
| TIMESTAMP |
|
BINARY |
| TIMESTAMP_NTZ |
|
FLOAT |
| BOOLEAN |
|
DOUBLE |
| ARRAY |
|
DECIMAL(precision,scale) |
| MAP |
|
VARCHAR(n) |
| STRUCT |
|
CHAR(n) |
| JSON |
|
外部テーブルの作成
構文
CREATE EXTERNAL TABLE [IF NOT EXISTS] <mc_oss_extable_name>
(
<col_name> <data_type>,
...
)
[COMMENT <table_comment>]
[PARTITIONED BY (<col_name> <data_type>, ...)]
ROW FORMAT SERDE 'org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe'
STORED AS
INPUTFORMAT 'io.delta.hive.DeltaInputFormat'
OUTPUTFORMAT 'io.delta.hive.DeltaOutputFormat'
LOCATION 'oss_location';パラメーター
詳細については、「基本的な構文パラメーター」をご参照ください。
クエリと分析
SELECT 構文の詳細については、「OSS からのデータ読み取り」をご参照ください。
クエリ計画の最適化の詳細については、「クエリの最適化」をご参照ください。
例
この例では、組み込みのオープンソースデータリゾルバーを使用して Delta Lake 外部テーブルを作成し、OSS にデータを書き込み、そのデータをクエリする方法を示します。
前提条件
OSS バケットとフォルダーが利用可能であること。詳細については、「バケットの作成」および「フォルダーの管理」をご参照ください。
MaxCompute は OSS でのフォルダーの自動作成をサポートしています。SQL 文に外部テーブルとユーザー定義関数 (UDF) が含まれている場合、単一の文を使用してテーブルの読み取りと書き込み、および UDF の使用が可能です。フォルダーは手動で作成することもできます。
MaxCompute は特定のリージョンにのみデプロイされます。リージョン間のデータ接続で発生する可能性のある問題を回避するため、OSS バケットが MaxCompute プロジェクトと同じリージョンにあることを確認してください。
権限付与
OSS にアクセスする権限が必要です。Alibaba Cloud アカウント、Resource Access Management (RAM) ユーザー、または RAM ロールを使用して OSS 外部テーブルにアクセスできます。権限付与の詳細については、「OSS への STS モードでのアクセス権限付与」をご参照ください。
MaxCompute プロジェクトで CreateTable 権限が必要です。テーブル権限の詳細については、「MaxCompute 権限」をご参照ください。
テストデータのアップロード
OSS コンソールにログインし、Delta Lake フォーマットのテストデータファイルを OSS バケットの
oss-mc-test/Demo_delta_pt/dt=20250612/フォルダーにアップロードします。詳細については、「OSS へのファイルのアップロード」をご参照ください。Delta Lake 外部テーブルの作成
CREATE EXTERNAL TABLE test_delta_pt ( id INT ) PARTITIONED BY (dt STRING ) ROW FORMAT SERDE 'org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe' STORED AS INPUTFORMAT 'io.delta.hive.DeltaInputFormat' OUTPUTFORMAT 'io.delta.hive.DeltaOutputFormat' LOCATION 'oss://oss-cn-hangzhou-internal.aliyuncs.com/oss-mc-test/Demo_delta_pt/';パーティションデータのインポート。作成した OSS 外部テーブルがパーティションテーブルの場合、パーティションデータもインポートする必要があります。詳細については、「OSS 外部テーブルへのパーティションデータの追加構文」をご参照ください。
MSCK REPAIR TABLE test_delta_pt ADD PARTITIONS;Delta Lake 外部テーブルのクエリ。
SELECT * FROM test_delta_pt WHERE dt='20250612';