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

MaxCompute:列の操作

最終更新日:Aug 22, 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 はサポートされません。

  • スキーマエボリューションが発生した場合、ストリーミングトンネルはエラーを返します。

列またはコメントの追加

既存の非パーティションテーブルまたはパーティションテーブルに列またはコメントを追加できます。 制約の詳細については、「注意事項」をご参照ください。 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:IF NOT EXISTS を使用して既存の列を追加しようとした場合、コマンドは列を再度追加することなく成功メッセージを返します。

      -- ステートメントは成功しますが、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:必須。 削除する列の名前。

  • -- 例 1:sale_detail テーブルから customer_id 列を削除します。
    ALTER TABLE sale_detail DROP COLUMN customer_id;
    
    -- 例 2:sale_detail テーブルから shop_name 列と total_price 列を削除します。
    ALTER TABLE sale_detail DROP COLUMNS shop_name, total_price;

列のデータ型の変更

既存の列のデータ型を変更できます。 制約の詳細については、「注意事項」をご参照ください。

  • 前提条件

    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_column_name

    はい

    列の新しい名前。

    new_column_nameold_column_name に同じ名前を指定できます。その場合、列名は変更されません。 ただし、new_column_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

    はい

    新しいコメント。有効な文字列である必要があります。 最大長は 1,024 バイトです。

  • -- 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

    任意

    新しいコメント。 最大長は 1,024 バイトです。

  • -- 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 値を許可した後で、列を NULL 値を許可しない状態に戻すことはできません。

  • DESC EXTENDED table_name; コマンドを実行して Nullable プロパティを表示し、列が NULL 値を許可するかどうかを確認します:

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

    • Nullablefalse の場合、NULL 値は許可されません。

  • 構文

    ALTER TABLE <table_name> CHANGE COLUMN <old_col_name> NULL;
  • パラメーター

    パラメーター

    必須

    説明

    table_name

    はい

    変更するテーブルの名前。

    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     |                                                     |
    +------------------------------------------------------------------------------------+

関連ドキュメント

テーブル操作の詳細については、次のトピックをご参照ください: