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

MaxCompute:カラム操作

最終更新日:Jan 14, 2026

MaxCompute では、既存のテーブルのカラムを変更できます。必要に応じて、カラムの追加、カラムの削除、カラムのデータ型の変更が可能です。

コマンド

カラム操作のための MaxCompute SQL コマンドは次のとおりです:

操作

機能

ロール

プラットフォーム

カラムまたはコメントの追加

既存の非パーティションテーブルまたはパーティションテーブルにカラムまたはコメントを追加します。

テーブルに対する Alter 権限を持つユーザー

このトピックのコマンドは、次のプラットフォームで実行できます:

カラムの削除

既存の非パーティションテーブルまたはパーティションテーブルからカラムを削除します。

カラムのデータ型の変更

既存のカラムのデータ型を変更します。

カラムの順序の変更

テーブル内の指定されたカラムの順序を調整します。

カラム名の変更

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

カラムのコメントの変更

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

カラム名とコメントの変更

既存の非パーティションテーブルまたはパーティションテーブルのカラム名とコメントを同時に変更します。

カラムの NOT NULL プロパティの変更

非パーティションキー列の 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_namenew_column_name と同じにすることができます。これはカラム名が変更されないことを意味します。ただし、new_column_nameold_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

カラムの順序の変更

既存の非パーティションテーブルまたはパーティションテーブルのカラムの順序を変更できます。スキーマ進化の適用範囲にご注意ください。

  • パラメーター設定

    この機能を有効にするには、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_nameold_column_name と同じにすることができます。これはカラム名が変更されないことを意味します。ただし、new_col_nameold_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 値を許可するかどうかを判断できます:

    • Nullabletrue の場合、NULL 値が許可されます。

    • Nullablefalse の場合、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     |                                                     |
    +------------------------------------------------------------------------------------+

関連ドキュメント

テーブル操作コマンドの詳細については、以下をご参照ください: