MaxCompute では、既存のテーブルのカラムを変更できます。必要に応じて、カラムの追加、カラムの削除、カラムのデータ型の変更が可能です。
コマンド
カラム操作のための MaxCompute SQL コマンドは次のとおりです:
操作 | 機能 | ロール | プラットフォーム |
既存の非パーティションテーブルまたはパーティションテーブルにカラムまたはコメントを追加します。 | テーブルに対する Alter 権限を持つユーザー | このトピックのコマンドは、次のプラットフォームで実行できます: | |
既存の非パーティションテーブルまたはパーティションテーブルからカラムを削除します。 | |||
既存のカラムのデータ型を変更します。 | |||
テーブル内の指定されたカラムの順序を調整します。 | |||
既存の非パーティションテーブルまたはパーティションテーブルのカラム名を変更します。 | |||
既存の非パーティションテーブルまたはパーティションテーブルのカラムのコメントを変更します。 | |||
既存の非パーティションテーブルまたはパーティションテーブルのカラム名とコメントを同時に変更します。 | |||
非パーティションキー列の NOT NULL プロパティを変更します。 |
適用範囲
スキーマ進化には、既存のテーブルへの複雑なデータ型のカラムの追加、カラムの削除、カラムの順序の変更、カラムのデータ型の変更などの操作が含まれます。カラムの順序を変更したり、新しいカラムを追加してカラムの順序を変更したり、カラムを削除したりすると、テーブルの読み取りおよび書き込みの動作が変わります。次の制限が適用されます:
ジョブタイプが MapReduce 1.0 の場合、Graph タスクは変更されたテーブルからの読み取りまたは書き込みができません。
CUPID ジョブの場合、次の Spark バージョンのみがテーブルから読み取りできます。テーブルへの書き込みはできません:
Spark-2.3.0-odps0.34.0
Spark-3.1.1-odps0.34.0
PAI ジョブはテーブルから読み取りできますが、書き込みはできません。
Hologres ジョブの場合、1.3 より前の Hologres バージョンを使用していると、変更されたテーブルが外部テーブルとして参照されている場合、そのテーブルからの読み取りまたは書き込みができません。
スキーマ進化が発生した場合、CLONE TABLE はサポートされません。
スキーマ進化が発生した場合、Streaming Tunnel を使用するとエラーが報告されます。
カラムまたはコメントの追加
既存の非パーティションテーブルまたはパーティションテーブルにカラムまたはコメントを追加できます。スキーマ進化の適用範囲にご注意ください。MaxCompute は、STRUCT<x: STRING, y: BIGINT> や MAP<STRING, STRUCT<x: DOUBLE, y: DOUBLE>> のような STRUCT 型のカラムの追加をサポートしています。
パラメーター設定
この機能を有効にするには、
setproject odps.schema.evolution.enable=true;パラメーターを設定します。権限:これはプロジェクトレベルのパラメーターです。プロジェクトオーナーであるか、プロジェクトレベルの Super_Administrator または Admin ロールを持っている必要があります。詳細については、「ユーザーへの組み込み管理ロールの割り当て」をご参照ください。
有効期間:パラメーターは設定後、約 10 分で有効になります。
コマンドフォーマット
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
いいえ
新しいカラムのコメント。
例
例 1:sale_detail テーブルに 2 つのカラムを追加します。
ALTER TABLE sale_detail ADD COLUMNS IF NOT EXISTS(customer_name STRING, education BIGINT);例 2:sale_detail テーブルにコメント付きの 2 つのカラムを追加します。
ALTER TABLE sale_detail ADD COLUMNS (customer_name STRING COMMENT 'Customer', education BIGINT COMMENT 'Education' );例 3:sale_detail テーブルに複雑なデータ型のカラムを追加します。
ALTER TABLE sale_detail ADD COLUMNS (region_info struct<province:string, area:string>);例 4:sale_detail テーブルに既存のカラム (ID カラムなど) を追加する SQL 文を実行すると、成功メッセージが返され、カラムは再度追加されません。
-- 文は成功しますが、ID カラムは繰り返し追加されません。 ALTER TABLE sale_detail ADD COLUMNS IF NOT EXISTS(id bigint);例 5: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 つ以上の指定されたカラムを削除できます。スキーマ進化の適用範囲にご注意ください。
パラメーター設定
この機能を有効にするには、
setproject odps.schema.evolution.enable=true;パラメーターを設定します。権限:これはプロジェクトレベルのパラメーターです。プロジェクトオーナーであるか、プロジェクトレベルの Super_Administrator または Admin ロールを持っている必要があります。詳細については、「ユーザーへの組み込み管理ロールの割り当て」をご参照ください。
有効期間:パラメーターは設定後、約 10 分で有効になります。
コマンドフォーマット
-- 単一のカラムを削除します。 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 カラムを削除します。yes と入力して削除を確定します。 ALTER TABLE sale_detail DROP COLUMN customer_id; -- sale_detail テーブルから customer_id カラムを削除します。yes と入力して削除を確定します。 ALTER TABLE sale_detail DROP COLUMNS customer_id; -- sale_detail テーブルから shop_name と customer_id カラムを削除します。yes と入力して削除を確定します。 ALTER TABLE sale_detail DROP COLUMNS shop_name, customer_id;
カラムのデータ型の変更
既存のカラムのデータ型を変更できます。スキーマ進化の適用範囲にご注意ください。
パラメーター設定
この機能を有効にするには、
setproject odps.schema.evolution.enable=true;パラメーターを設定します。権限:これはプロジェクトレベルのパラメーターです。プロジェクトオーナーであるか、プロジェクトレベルの Super_Administrator または Admin ロールを持っている必要があります。詳細については、「ユーザーへの組み込み管理ロールの割り当て」をご参照ください。
有効期間:パラメーターは設定後、約 10 分で有効になります。
コマンドフォーマット
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_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() は、括弧内の条件が満たされた場合に変換がサポートされることを示します。

カラムの順序の変更
既存の非パーティションテーブルまたはパーティションテーブルのカラムの順序を変更できます。スキーマ進化の適用範囲にご注意ください。
パラメーター設定
この機能を有効にするには、
setproject odps.schema.evolution.enable=true;パラメーターを設定します。権限:これはプロジェクトレベルのパラメーターです。プロジェクトオーナーであるか、プロジェクトレベルの Super_Administrator または Admin ロールを持っている必要があります。詳細については、「ユーザーへの組み込み管理ロールの割り当て」をご参照ください。
有効期間:パラメーターは設定後、約 10 分で有効になります。
コマンドフォーマット
ALTER TABLE <table_name> CHANGE <old_column_name> <new_column_name> <column_type> AFTER <column_name>;パラメーター
パラメーター
必須
説明
table_name
はい
カラムの順序を変更するテーブルの名前。
old_column_name
はい
順序を変更するカラムの元の名前。
new_col_name
はい
カラムの新しい名前。
new_col_name は old_column_name と同じにすることができます。これはカラム名が変更されないことを意味します。ただし、new_col_name は old_column_name 以外のどのカラムの名前とも同じにすることはできません。
column_type
はい
カラムの元のデータ型。これは変更できません。
column_name
はい
順序を変更するカラムを column_name の後に移動します。
例
-- sale_detail テーブルの customer カラムの名前を customer_id に変更し、total_price カラムの後に移動します。 ALTER TABLE sale_detail CHANGE customer customer_id STRING AFTER total_price; -- sale_detail テーブルの 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 バイトの長さにすることができます。
例
-- sale_detail テーブルの customer カラムの名前を customer_newname に変更し、そのコメントを 'customer' に変更します。 ALTER TABLE sale_detail CHANGE COLUMN customer customer_newname STRING COMMENT 'customer';
カラムの NOT NULL プロパティの変更
テーブル内の非パーティションキー列の NOT NULL プロパティを変更して、NULL 値を許可することができます。
カラムに NULL 値を許可した後、この変更を元に戻して NULL 値を許可しないようにすることはできません。注意して実行してください。
DESC EXTENDED table_name;コマンドを実行してNullableプロパティの値を確認し、カラムが NULL 値を許可するかどうかを判断できます:Nullableがtrueの場合、NULL 値が許可されます。Nullableがfalseの場合、NULL 値は許可されません。
コマンドフォーマット
ALTER TABLE <table_name> CHANGE COLUMN <old_col_name> NULL;パラメーター
パラメーター
必須
説明
table_name
はい
カラムの NOT NULL プロパティを変更するテーブルの名前。
old_col_name
はい
変更する非パーティションキー列の名前。既存の非パーティションキー列である必要があります。
例
-- 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 | | +------------------------------------------------------------------------------------+
関連ドキュメント
テーブル操作コマンドの詳細については、以下をご参照ください: