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

MaxCompute:列操作

最終更新日:Mar 01, 2026

MaxCompute は、既存のテーブルの列の追加、削除、名前変更、順序変更、および変更をサポートしています。

操作の概要

操作スキーマ進化が必要説明
列またはコメントの追加はい既存のテーブルに列を追加
列の削除はいテーブルから 1 つ以上の列を削除
列のデータ型の変更はい列を異なるデータ型に変換
列の順序の変更はい列を異なる位置に移動
列名の変更いいえ列の名前を変更
列のコメントの変更いいえ列のコメントを更新
列名とコメントの変更いいえ列の名前変更とコメントの更新を同時に実行
列の NOT NULL プロパティの変更いいえ非パーティションキー列に NULL 値を許可

サポートされるプラットフォーム

列操作コマンドは、次のいずれかのプラットフォームで実行します。

前提条件

開始する前に、以下があることを確認してください。

  • 対象テーブルに対する Alter 権限

  • プロジェクトレベルでスキーマ進化が有効になっていること (列の追加、列の削除、列のデータ型の変更、列の順序の変更にのみ必要です)。

スキーマ進化の有効化

次のコマンドを実行して、スキーマ進化を有効にします。

setproject odps.schema.evolution.enable=true;
説明

このパラメーターを設定できるのは、プロジェクトオーナー、または Super_Administrator か Admin ロールを持つユーザーのみです。 設定後、約 10 分で有効になります。 詳細については、「ユーザーへの組み込み管理ロールの割り当て」をご参照ください。

列またはコメントの追加

既存の非パーティションテーブルまたはパーティションテーブルに列を追加します。 新しい列はテーブルの末尾に追加されます。 MaxCompute は、STRUCT<x: STRING, y: BIGINT>MAP<STRING, STRUCT<x: DOUBLE, y: DOUBLE>> などの複雑なデータ型をサポートしています。

構文

ALTER TABLE <table_name>
  ADD COLUMNS [IF NOT EXISTS]
  (<col_name1> <type1> COMMENT ['<col_comment>']
  [, <col_name2> <type2> COMMENT '<col_comment>'...]
  );

パラメーター

パラメーター必須説明
table_nameはいテーブルの名前。 新しい列は末尾に追加されます。順序は指定できません。
col_nameはい新しい列の名前。
typeはい新しい列のデータ型。
col_commentいいえ新しい列のコメント。

sale_detail テーブルに 2 つの列を追加します。

ALTER TABLE sale_detail ADD COLUMNS IF NOT EXISTS(customer_name STRING, education BIGINT);

sale_detail テーブルにコメント付きの 2 つの列を追加します。

ALTER TABLE sale_detail ADD COLUMNS (customer_name STRING COMMENT 'Customer', education BIGINT COMMENT 'Education' );

sale_detail テーブルに複雑なデータ型の列を追加します。

ALTER TABLE sale_detail ADD COLUMNS (region_info struct<province:string, area:string>);

列が既に存在し、文に IF NOT EXISTS が含まれている場合、文は成功しますが、列は再度追加されません。

-- 文は成功しますが、ID 列は繰り返し追加されません。
ALTER TABLE sale_detail ADD COLUMNS IF NOT EXISTS(id bigint);

Delta テーブルに列を追加します。

CREATE TABLE delta_table_test (pk BIGINT NOT NULL PRIMARY KEY, val BIGINT)
  TBLPROPERTIES ("transactional"="true");

ALTER TABLE delta_table_test ADD COLUMNS (val2 bigint);

列の削除

既存の非パーティションテーブルまたはパーティションテーブルから 1 つ以上の列を削除します。 プロンプトが表示されたら、yes と入力して削除を確認します。

構文

-- 単一の列を削除します。
ALTER TABLE <table_name> DROP COLUMN <col_name>;

-- 複数の列を削除します。
ALTER TABLE <table_name> DROP COLUMNS <col_name1>[, <col_name2>...];

パラメーター

パラメーター必須説明
table_nameはい列を削除するテーブルの名前。
col_nameはい削除する列の名前。

sale_detail テーブルから customer_id 列を削除します。

-- sale_detail テーブルから customer_id 列を削除します。 削除を確認するには yes と入力します。
ALTER TABLE sale_detail DROP COLUMN customer_id;

DROP COLUMNS を使用して customer_id 列を削除します。

-- sale_detail テーブルから customer_id 列を削除します。 削除を確認するには yes と入力します。
ALTER TABLE sale_detail DROP COLUMNS customer_id;

sale_detail テーブルから shop_name 列と customer_id 列を削除します。

-- sale_detail テーブルから shop_name 列と customer_id 列を削除します。 削除を確認するには yes と入力します。
ALTER TABLE sale_detail DROP COLUMNS shop_name, customer_id;

列のデータ型の変更

既存の列のデータ型を変更します。

構文

ALTER TABLE <table_name> CHANGE [COLUMN] <old_column_name> <new_column_name> <new_data_type>;

パラメーター

パラメーター必須説明
table_nameはい列を含むテーブルの名前。
old_column_nameはい列の現在の名前。
new_column_nameはい変更後の列の名前。 名前を変更しない場合は、old_column_name と同じ値を設定します。 この値は、他の既存の列名と一致させることはできません。
new_data_typeはい列の新しいデータ型。

sale_detail テーブルの id フィールドのデータ型を BIGINT から STRING に変更します。

ALTER TABLE sale_detail CHANGE COLUMN id id STRING;

データ型変換テーブル

説明

Y は変換がサポートされていることを、N はサポートされていないことを示します。 - は、変換が適用できないことを示します。 Y() は、括弧内の条件を満たす場合に変換がサポートされることを示します。

Data type conversion table

列の順序の変更

既存の非パーティションテーブルまたはパーティションテーブル内の列を別の位置に移動します。 必要に応じて、同時に列の名前を変更することもできます。

構文

ALTER TABLE <table_name> CHANGE <old_column_name> <new_column_name> <column_type> AFTER <column_name>;

パラメーター

パラメーター必須説明
table_nameはいテーブルの名前。
old_column_nameはい移動する列の現在の名前。
new_col_nameはい列の新しい名前。 名前を変更しない場合は、old_column_name と同じ値を設定します。 この値は、他の既存の列名と一致させることはできません。
column_typeはい列の元のデータ型。 これは変更できません。
column_nameはい移動した列を配置する位置の直後にある列。

customer 列の名前を customer_id に変更し、total_price 列の後に移動します。

ALTER TABLE sale_detail CHANGE customer customer_id STRING AFTER total_price;

customer_id 列の名前を変更せずに total_price 列の後に移動します。

ALTER TABLE sale_detail CHANGE customer_id customer_id STRING AFTER total_price;

列名の変更

既存の非パーティションテーブルまたはパーティションテーブルの列の名前を変更します。

構文

ALTER TABLE <table_name> CHANGE COLUMN <old_col_name> RENAME TO <new_col_name>;

パラメーター

パラメーター必須説明
table_nameはいテーブルの名前。
old_col_nameはい名前を変更する列の名前。 列は存在している必要があります。
new_col_nameはい列の新しい名前。 名前は一意である必要があります。

sale_detail テーブルの customer_name 列の名前を customer に変更します。

ALTER TABLE sale_detail CHANGE COLUMN customer_name RENAME TO customer;

列のコメントの変更

既存の非パーティションテーブルまたはパーティションテーブルの列のコメントを更新します。

構文

ALTER TABLE <table_name> CHANGE COLUMN <col_name> COMMENT '<col_comment>';

パラメーター

パラメーター必須説明
table_nameはいテーブルの名前。
col_nameはい列の名前。 列は存在している必要があります。
col_commentはい新しいコメント。 コメントは 1024 バイト以下の有効な文字列である必要があります。

sale_detail0113 テーブルの customer 列のコメントを変更します。

ALTER TABLE sale_detail0113 CHANGE COLUMN customer COMMENT 'customer';

列名とコメントの変更

非パーティションテーブルまたはパーティションテーブルで、列の名前変更とコメントの更新を同時に行います。

構文

ALTER TABLE <table_name> CHANGE COLUMN <old_col_name> <new_col_name> <column_type> COMMENT '<col_comment>';

パラメーター

パラメーター必須説明
table_nameはいテーブルの名前。
old_col_nameはい変更する列の名前。 列は存在している必要があります。
new_col_nameはい列の新しい名前。 名前は一意である必要があります。
column_typeはい列のデータ型。
col_comment任意新しいコメント。 コンテンツの長さは最大 1024 バイトです。

customer 列の名前を customer_newname に変更し、そのコメントを 'customer' に設定します。

ALTER TABLE sale_detail CHANGE COLUMN customer customer_newname STRING COMMENT 'customer';

列の NOT NULL プロパティの変更

非パーティションキー列に NULL 値を許可します。 この操作は元に戻せません。 NULL 値が許可されると、列を NOT NULL に戻すことはできません。

列が NULL 値を許可するかどうかを確認するには、DESC EXTENDED table_name; を実行し、Nullable フィールドを確認します。

  • true -- NULL 値が許可されます。

  • false -- NULL 値は許可されません。

構文

ALTER TABLE <table_name> CHANGE COLUMN <old_col_name> NULL;

パラメーター

パラメーター必須説明
table_nameはいテーブルの名前。
old_col_nameはい変更する非パーティションキー列の名前。 列は存在している必要があります。

id 列に NOT NULL 制約を持つパーティションテーブルを作成し、NULL 値を許可します。

-- id 列が NULL にできないパーティションテーブルを作成します。
CREATE TABLE null_test(id INT NOT NULL, name STRING) PARTITIONED BY (ds string);

-- テーブルのプロパティを表示します。
DESC EXTENDED null_test;
-- 次の結果が返されます。
+------------------------------------------------------------------------------------+
| Native Columns:                                                                    |
+------------------------------------------------------------------------------------+
| Field    | Type   | Label | ExtendedLabel | Nullable | DefaultValue | Comment      |
+------------------------------------------------------------------------------------+
| id       | int    |       |               | false    | NULL         |              |
| name     | string |       |               | true     | NULL         |              |
+------------------------------------------------------------------------------------+
| Partition Columns:                                                                 |
+------------------------------------------------------------------------------------+
| ds              | string     |                                                     |
+------------------------------------------------------------------------------------+

-- id 列に NULL を許可します。
ALTER TABLE null_test CHANGE COLUMN id NULL;
-- テーブルのプロパティを表示します。
DESC EXTENDED null_test;
-- 次の結果が返されます。
+------------------------------------------------------------------------------------+
| Native Columns:                                                                    |
+------------------------------------------------------------------------------------+
| Field    | Type   | Label | ExtendedLabel | Nullable | DefaultValue | Comment      |
+------------------------------------------------------------------------------------+
| id       | int    |       |               | true     | NULL         |              |
| name     | string |       |               | true     | NULL         |              |
+------------------------------------------------------------------------------------+
| Partition Columns:                                                                 |
+------------------------------------------------------------------------------------+
| ds              | string     |                                                     |
+------------------------------------------------------------------------------------+

スキーマ進化の制限事項

スキーマ進化操作 (列の順序変更、列の追加と順序変更、または列の削除) がテーブルを変更すると、特定のジョブタイプの読み取りと書き込みの動作が変更されます。

ジョブタイプ読み取り書き込み
MapReduce 1.0 / Graph タスクサポートされていませんサポートされていません
CUPID Spark (Spark-2.3.0-odps0.34.0 または Spark-3.1.1-odps0.34.0)サポートされていますサポートされていません
PAI ジョブサポートされていますサポートされていません
Hologres (1.3 より前のバージョン、外部テーブル)サポートされていませんサポートされていません

追加の制限事項:

  • スキーマ進化が発生した後、CLONE TABLE はサポートされません。

  • スキーマ進化が発生した後、Streaming Tunnel はエラーを報告します。

関連ドキュメント