日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

列操作

MaxCompute支持對已有表的列執行變更操作,如添加列、刪除列、更改列數據類型等,您可以根據實際業務場景執行相應操作。

MaxCompute SQL的列操作命令如下。

操作

功能

角色

操作入口

添加列或注釋

為已存在的非分區表或分區表添加列或注釋。

具備修改表權限(Alter)的用戶

本文中的命令您可以在如下工具平臺執行:

刪除列

刪除已存在的非分區表或分區表的列。

更改列數據類型

更改已存在列的數據類型。

修改列的順序

調整表中指定列的順序。

修改列名

為已存在的非分區表或分區表修改列名稱。

修改列注釋

為已存在的非分區表或分區表修改列注釋。

修改列名及注釋

為已存在的非分區表或分區表同時修改列名稱和列注釋。

修改表的列非空屬性

修改非分區列的非空屬性。

使用限制

表結構變更(Schema Evolution)包括對現有表新增復雜數據類型列、刪除列、修改列順序和修改列的數據類型。在下列場景中,如果執行了更改表的列順序、添加新列并修改列順序或刪除列這三種操作,會使表的讀寫行為發生變化,且存在以下限制:

  • 作業類型是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類型的列,例如struct<x: string, y: bigint>、map<string, struct<x: double, y: double>>。如果需要開通此功能,請設置以下參數,同時請注意使用限制,修改該參數需要等待10分鐘后才會生效:

    setproject odps.schema.evolution.enable=true;

    設置項目空間的Project級屬性,需操作賬號為項目的Owner或者賬號被賦予了項目級別的Super_Administrator或Admin角色,操作詳情請參見為用戶賦予內置管理角色

  • 命令格式

    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添加兩個列。

      ALTER TABLE sale_detail ADD columns if NOT EXISTS(customer_name STRING, education BIGINT);
    • 示例2:給表sale_detail添加兩個列并同時添加列注釋。

      ALTER TABLE sale_detail ADD columns (customer_name STRING comment '客戶', education BIGINT comment '教育' );
    • 示例3:給表sale_detail添加一個復雜數據類型列。

      ALTER TABLE sale_detail ADD columns (region struct<province:string, area:string>);
    • 示例4:增加Delta Table的列。

      ALTER TABLE mf_tt ADD columns (val2 bigint);
    • 示例5:給表sale_detail增加ID列SQL會返回成功,但實際并不會重復增加。

      --返回成功,但實際并不會重復增加ID列
      ALTER TABLE sale_detail ADD columns if NOT EXISTS(id bigint);

刪除列

為已存在的非分區表或分區表刪除指定的單個或多個列。

說明

如果需要開通此功能,請設置以下參數,同時請注意使用限制,修改該參數需要等待10分鐘后才會生效:

setproject odps.schema.evolution.enable=true;

設置項目空間的Project級屬性,需操作賬號為項目的Owner或者賬號被賦予了項目級別的Super_Administrator或Admin角色,操作詳情請參見為用戶賦予內置管理角色。

  • 命令格式

    ALTER TABLE <table_name> DROP columns <col_name1>[, <col_name2>...];
  • 參數說明

    參數

    是否必填

    說明

    table_name

    待刪除列的表名稱。

    col_name

    待刪除的列名稱。

  • 示例:刪除表的列

    --刪除表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;

更改列數據類型

為已存在的列更改數據類型。

說明

如果需要開通此功能,請設置以下參數,同時請注意使用限制,修改該參數需要等待10分鐘后才會生效:

setproject odps.schema.evolution.enable=true;

設置項目空間的Project級屬性,需操作賬號為項目的Owner或者賬號被賦予了項目級別的Super_Administrator或Admin角色,操作詳情請參見為用戶賦予內置管理角色

  • 命令格式。

    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

    待修改的列修改后的數據類型。

  • 使用示例。

    --將mf_evol_t3表的id字段由int轉化為bigint
    ALTER TABLE mf_evol_t3 change id id bigint;
    --將mf_evol_t3表的id字段類型由bigint轉化為string
    ALTER TABLE mf_evol_t3 change COLUMN id id string;
  • 數據類型支持轉換表。

    說明

    Y表示支持轉換;N表示不支持轉換;-表示不涉及;Y()表示滿足括號內的條件支持轉換。

    數據類型支持轉換表

修改列的順序

為已存在的非分區表或分區表修改列順序。

說明

如果需要開通此功能,請設置以下參數,同時請注意使用限制,修改該參數需要等待10分鐘后才會生效:

setproject odps.schema.evolution.enable=true;

設置項目空間的Project級屬性,需操作賬號為項目的Owner或者賬號被賦予了項目級別的Super_Administrator或Admin角色,操作詳情請參見為用戶賦予內置管理角色。

  • 命令格式

    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_id為customer并位于total_price之后。
    ALTER TABLE sale_detail change customer_id customer 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_detail的列customer的注釋。
    ALTER TABLE sale_detail 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_name為customer_newname,注釋“客戶”為“customer”。
    ALTER TABLE sale_detail change COLUMN customer_name customer_newname STRING comment 'customer';

修改表的列非空屬性

修改表的非分區列的非空屬性。即如果表的非分區列值禁止為NULL,您可以通過本命令修改分區列值允許為NULL。

您可以通過desc extended table_name;命令查看Nullable屬性值,判斷列的非空屬性。如果Nullabletrue,表示允許為NULL;如果Nullablefalse,表示禁止為NULL。

  • 使用限制

    修改分區列值允許為NULL后,不可回退,不支持再修改分區列值禁止為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);
    --修改id列允許為NULL。
    ALTER TABLE null_test change COLUMN id NULL;

相關文檔

更多關于表操作命令詳情,請參見: