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

文檔

分區(qū)和列操作

MaxCompute支持對已有表的分區(qū)和列執(zhí)行變更操作,如添加分區(qū)、添加列、刪除列、更改列數(shù)據(jù)類型等,您可以根據(jù)實際業(yè)務(wù)場景執(zhí)行相應(yīng)操作。

MaxCompute SQL的分區(qū)和列操作命令如下。

類型

操作

功能

角色

操作入口

分區(qū)操作

添加分區(qū)

為已存在的分區(qū)表新增分區(qū)。

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

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

刪除分區(qū)

為已存在的分區(qū)表刪除分區(qū)。

修改分區(qū)的更新時間

修改分區(qū)表中分區(qū)的LastModifiedTime

修改分區(qū)值

修改分區(qū)表的分區(qū)值。

合并分區(qū)

對分區(qū)表的分區(qū)進行合并,即同一個分區(qū)表下的多個分區(qū)合并成一個分區(qū),同時刪除被合并的分區(qū)維度的信息,把數(shù)據(jù)移動到指定分區(qū)。

清空分區(qū)數(shù)據(jù)

清空指定分區(qū)的數(shù)據(jù)。

列操作

添加列或注釋

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

刪除列

刪除已存在的非分區(qū)表或分區(qū)表的列。

更改列數(shù)據(jù)類型

更改已存在列的數(shù)據(jù)類型。

修改列的順序

調(diào)整表中指定列的順序。

修改列名

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

修改列注釋

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

修改列名及注釋

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

修改表的列非空屬性

修改非分區(qū)列的非空屬性。

使用限制

  • 目前支持TINYINT、SMALLINT、INT、BIGINT、CHAR、VARCHAR和STRING數(shù)據(jù)類型的字段設(shè)為分區(qū)列。

  • 單表分區(qū)層級最多6級。

  • 單表分區(qū)數(shù)最多允許60000個分區(qū)。

  • 一次最多查詢分區(qū)數(shù)為10000個。

  • 使用表結(jié)構(gòu)變更(Schema Evolution)限制:

    表結(jié)構(gòu)變更包括對現(xiàn)有表新增復(fù)雜數(shù)據(jù)類型列、刪除列、修改列順序和修改列的數(shù)據(jù)類型。在下列場景中,如果執(zhí)行了更改表的列順序、添加新列并修改列順序或刪除列這三種操作,會使表的讀寫行為發(fā)生變化:

    • 作業(yè)類型是MapReduce 1.0時,Graph任務(wù)無法讀寫修改的表。

    • CUPID作業(yè)只有Spark以下版本可以讀表,但是不可以寫表:

      • Spark-2.3.0-odps0.34.0

      • Spark-3.1.1-odps0.34.0

    • PAI作業(yè)可以讀表,但不可以寫表。

    • Hologres作業(yè)在1.3版本之前,Hologres引用修改的表作為外部表時,無法讀寫該表。

    • 表做過表結(jié)構(gòu)變更操作后,不支持CLONE TABLE。

    • Streaming Tunnel在寫入表時,不可以修改表結(jié)構(gòu),否則會發(fā)生錯誤。

  • Transaction類型的分區(qū)表不支持merge partition操作。

  • Delta Table類型的非分區(qū)表不支持清空操作、不支持更改表的write.bucket.num屬性。

添加分區(qū)

為已存在的分區(qū)表新增分區(qū)。

  • 限制條件

    • MaxCompute單表支持的分區(qū)數(shù)量上限為6萬個。

    • 對于有多級分區(qū)的表,如果需要添加新的分區(qū)值,必須指明全部的分區(qū)。

    • 僅支持新增分區(qū)值,不支持新增分區(qū)字段。

  • 命令格式

    alter table <table_name> add [if not exists] partition <pt_spec> [partition <pt_spec> partition <pt_spec>...];
  • 參數(shù)說明

    • table_name:必填。待新增分區(qū)的分區(qū)表名稱。

    • if not exists:可選。如果未指定if not exists而同名的分區(qū)已存在,會執(zhí)行失敗并返回報錯。

    • pt_spec:必填。新增的分區(qū),格式為(partition_col1 = partition_col_value1, partition_col2 = partition_col_value2, ...)partition_col是分區(qū)字段,partition_col_value是分區(qū)值。分區(qū)字段不區(qū)分大小寫,分區(qū)值區(qū)分大小寫。

  • 使用示例

    • 示例1:給表sale_detail添加一個分區(qū),用來存儲2013年12月杭州地區(qū)的銷售記錄。

      alter table sale_detail add if not exists partition (sale_date='201312', region='hangzhou');
    • 示例2:給表sale_detail同時添加兩個分區(qū),用來存儲2013年12月北京和上海地區(qū)的銷售記錄。

      alter table sale_detail add if not exists partition (sale_date='201312', region='beijing') partition (sale_date='201312', region='shanghai');
    • 示例3:給表sale_detail添加分區(qū),僅指定一個分區(qū)字段sale_date,返回報錯,需要同時指定2個分區(qū)字段sale_date和region。

      alter table sale_detail add if not exists partition (sale_date='20111011');
    • 示例4:增加Delta Table表分區(qū)

      --創(chuàng)建delta table表
      create table mf_tt (pk bigint not null primary key, 
                          val bigint not null) 
                   partitioned by (dd string, hh string) 
                   tblproperties ("transactional"="true"); 
                   
      --添加分區(qū)           
      alter table mf_tt add partition (dd='01', hh='01');
    • 示例5:修改Delta Table表屬性

      --更新bucket數(shù)據(jù),目前只支持分區(qū)表,不支持非分區(qū)表
      alter table mf_tt3 set tblproperties("write.bucket.num"="64");
      
      --更新retain屬性
      alter table mf_tt3 set tblproperties("acid.data.retain.hours"="60");

刪除分區(qū)

為已存在的分區(qū)表刪除分區(qū)。

MaxCompute支持通過條件篩選方式刪除分區(qū)。如果您希望一次性刪除符合某個規(guī)則條件的多個分區(qū),可以使用表達式指定篩選條件,通過篩選條件匹配分區(qū)并批量刪除分區(qū)。

  • 限制條件

    • 每個分區(qū)過濾子句只能訪問一個分區(qū)列。

    • 表達式用到的函數(shù)必須是內(nèi)建的Scalar函數(shù)。

  • 注意事項

    • 刪除分區(qū)之后,MaxCompute項目的存儲量會降低。

    • 您可以結(jié)合MaxCompute提供的生命周期功能,實現(xiàn)自動回收舊分區(qū)的能力。更多生命周期信息,請參見生命周期

  • 命令格式

    • 未指定篩選條件

      --一次刪除一個分區(qū)。
      alter table <table_name> drop [if exists] partition <pt_spec>;
      --一次刪除多個分區(qū)。
      alter table <table_name> drop [if exists] partition <pt_spec>,partition <pt_spec>[,partition <pt_spec>....];
    • 指定篩選條件

      alter table <table_name> drop [if exists] partition <partition_filtercondition>;
  • 參數(shù)說明

    • table_name:必填。待刪除分區(qū)的分區(qū)表名稱。

    • if exists:可選。如果未指定if exists且分區(qū)不存在,則返回報錯。

    • pt_spec:必填。刪除的分區(qū)。格式為(partition_col1 = partition_col_value1, partition_col2 = partition_col_value2, ...)partition_col是分區(qū)字段,partition_col_value是分區(qū)值。分區(qū)字段不區(qū)分大小寫,分區(qū)值區(qū)分大小寫。

    • partition_filtercondition:指定篩選條件時必填。分區(qū)篩選條件,不區(qū)分大小寫。格式為:

      partition_filtercondition
          : partition (<partition_col> <relational_operators> <partition_col_value>)
          | partition (scalar(<partition_col>) <relational_operators> <partition_col_value>)
          | partition (<partition_filtercondition1> AND|OR <partition_filtercondition2>)
          | partition (NOT <partition_filtercondition>)
          | partition (<partition_filtercondition1>)[,partition (<partition_filtercondition2>), ...]
      • partition_col:分區(qū)名稱。

      • relational_operators:關(guān)系運算符,詳情請參見運算符

      • partition_col_value:分區(qū)列比較值或正則表達式,與分區(qū)列數(shù)據(jù)類型保持一致。

      • scalar():Scalar函數(shù)。Scalar函數(shù)基于輸入值生成對應(yīng)的標量,對分區(qū)列的值(partition_col)進行處理后再按照指定的關(guān)系運算符relational_operatorspartition_col_value做比較。

      • 分區(qū)過濾條件支持邏輯運算符NOT、AND和OR。支持通過NOT過濾條件子句,取過濾規(guī)則的補集。支持多個過濾條件子句以AND或OR的關(guān)系組成整體分區(qū)匹配規(guī)則。

      • 支持多個分區(qū)過濾子句,當多個分區(qū)過濾子句以英文逗號(,)分隔時,每個過濾子句的邏輯以O(shè)R的關(guān)系組成整體分區(qū)匹配規(guī)則。

  • 使用示例

    • 未指定篩選條件

      --從表sale_detail中刪除一個分區(qū),2013年12月杭州分區(qū)的銷售記錄。
      alter table sale_detail drop if exists partition(sale_date='201312',region='hangzhou'); 
      --從表sale_detail中同時刪除兩個分區(qū),2013年12月杭州和上海分區(qū)的銷售記錄。
      alter table sale_detail drop if exists partition(sale_date='201312',region='hangzhou'),partition(sale_date='201312',region='shanghai');
    • 指定篩選條件

      --創(chuàng)建分區(qū)表。
      create table if not exists sale_detail(
      shop_name     STRING,
      customer_id   STRING,
      total_price   DOUBLE)
      partitioned by (sale_date STRING);
      --添加分區(qū)。
      alter table sale_detail add if not exists
      partition (sale_date= '201910')
      partition (sale_date= '201911')
      partition (sale_date= '201912')
      partition (sale_date= '202001')
      partition (sale_date= '202002')
      partition (sale_date= '202003')
      partition (sale_date= '202004')
      partition (sale_date= '202005')
      partition (sale_date= '202006')
      partition (sale_date= '202007');
      --批量刪除分區(qū)。
      alter table sale_detail drop if exists partition(sale_date < '201911');
      alter table sale_detail drop if exists partition(sale_date >= '202007');
      alter table sale_detail drop if exists partition(sale_date LIKE '20191%');
      alter table sale_detail drop if exists partition(sale_date IN ('202002','202004','202006'));
      alter table sale_detail drop if exists partition(sale_date BETWEEN '202001' AND '202007');
      alter table sale_detail drop if exists partition(substr(sale_date, 1, 4) = '2020');
      alter table sale_detail drop if exists partition(sale_date < '201912' OR sale_date >= '202006');
      alter table sale_detail drop if exists partition(sale_date > '201912' AND sale_date <= '202004');
      alter table sale_detail drop if exists partition(NOT sale_date > '202004');
      --支持多個分區(qū)過濾表達式,表達式之間是OR的關(guān)系。
      alter table sale_detail drop if exists partition(sale_date < '201911'), partition(sale_date >= '202007');
      --添加其他格式分區(qū)。
      alter table sale_detail add IF NOT EXISTS
      partition (sale_date= '2019-10-05') 
      partition (sale_date= '2019-10-06') 
      partition (sale_date= '2019-10-07');
      --批量刪除分區(qū),使用正則表達式匹配分區(qū)。
      alter table sale_detail drop if exists partition(sale_date RLIKE '2019-\\d+-\\d+');
      --創(chuàng)建多級分區(qū)表。
      create table if not exists region_sale_detail(
      shop_name     STRING,
      customer_id   STRING,
      total_price   DOUBLE)
      partitioned by (sale_date STRING , region STRING );
      --添加分區(qū)。
      alter table region_sale_detail add IF NOT EXISTS
      partition (sale_date= '201910',region = 'shanghai')
      partition (sale_date= '201911',region = 'shanghai')
      partition (sale_date= '201912',region = 'shanghai')
      partition (sale_date= '202001',region = 'shanghai')
      partition (sale_date= '202002',region = 'shanghai')
      partition (sale_date= '201910',region = 'beijing')
      partition (sale_date= '201911',region = 'beijing')
      partition (sale_date= '201912',region = 'beijing')
      partition (sale_date= '202001',region = 'beijing')
      partition (sale_date= '202002',region = 'beijing');
      --執(zhí)行如下語句批量刪除多級分區(qū),兩個匹配條件是或的關(guān)系,會將sale_date小于201911或region等于beijing的分區(qū)都刪除掉。
      alter table region_sale_detail drop if exists partition(sale_date < '201911'),partition(region = 'beijing');
      --如果刪除sale_date小于201911且region等于beijing的分區(qū),可以使用如下方法。
      alter table region_sale_detail drop if exists partition(sale_date < '201911', region = 'beijing');

      批量刪除多級分區(qū)時,在一個partition過濾子句中,不能根據(jù)多個分區(qū)列編寫組合條件匹配分區(qū),如下語句會報錯FAILED: ODPS-0130071:[1,82] Semantic analysis exception - invalid column reference region, partition expression must have one and only one column reference

      --分區(qū)過濾子句只能訪問一個分區(qū)列,如下語句報錯。
      alter table region_sale_detail drop if exists partition(sale_date < '201911' AND region = 'beijing');

修改分區(qū)的更新時間

MaxCompute SQL提供touch操作,用于修改分區(qū)表中分區(qū)的LastModifiedTime。此操作會將LastModifiedTime修改為當前時間。此時,MaxCompute會認為數(shù)據(jù)有變動,重新計算生命周期。

  • 使用限制

    對于有多級分區(qū)的表,必須指明全部的分區(qū)。

  • 命令格式

    alter table <table_name> touch partition (<pt_spec>);
  • 參數(shù)說明

    • table_name:必填。待修改分區(qū)更新時間的分區(qū)表名稱。如果表不存在,則返回報錯。

    • pt_spec:必填。需要修改更新時間的分區(qū)信息。格式為(partition_col1 = partition_col_value1, partition_col2 = partition_col_value2, ...)partition_col是分區(qū)字段,partition_col_value是分區(qū)值。如果指定的分區(qū)字段或分區(qū)值不存在,則返回報錯。

  • 使用示例

    --修改表sale_detail的分區(qū)sale_date='201312', region='shanghai'的LastModifiedTime。
    alter table sale_detail touch partition (sale_date='201312', region='shanghai');

修改分區(qū)值

MaxCompute SQL支持通過rename操作更改分區(qū)表的分區(qū)值。

  • 使用限制

    • 不支持修改分區(qū)列的列名,只能修改分區(qū)列對應(yīng)的值。

    • 對于有多級分區(qū)的表,必須指明全部的分區(qū)。

  • 命令格式

    alter table <table_name> partition (<pt_spec>) rename to partition (<new_pt_spec>);
  • 參數(shù)說明

    • table_name:必填。待修改分區(qū)值的表名稱。

    • pt_spec:必填。需要修改分區(qū)值的分區(qū)信息。格式為(partition_col1 = partition_col_value1, partition_col2 = partition_col_value2, ...)partition_col是分區(qū)字段,partition_col_value是分區(qū)值。如果指定的分區(qū)字段或分區(qū)值不存在,則返回報錯。

    • new_pt_spec:必填。修改后的分區(qū)信息。格式為(partition_col1 = new_partition_col_value1, partition_col2 = new_partition_col_value2, ...)partition_col是分區(qū)字段,new_partition_col_value是新分區(qū)值。

  • 使用示例

    --修改表sale_detail的分區(qū)值。
    alter table sale_detail partition (sale_date = '201312', region = 'hangzhou') rename to partition (sale_date = '201310', region = 'beijing');

合并分區(qū)

MaxCompute SQL提供merge partition對分區(qū)表的分區(qū)進行合并,即將同一個分區(qū)表下的多個分區(qū)合并成一個分區(qū),同時刪除被合并的分區(qū)維度的信息,把數(shù)據(jù)移動到指定分區(qū)。

  • 使用限制

    • 不支持外部表,聚簇表合并后的分區(qū)會消除聚簇屬性。

    • 一次性合并分區(qū)數(shù)量限制為4000個。

  • 命令格式

    alter table <table_name> merge [if exists] partition (<predicate>) [, partition(<predicate2>) ...] overwrite partition (<fullpartitionSpec>) [purge];
  • 參數(shù)說明

    • table_name:必填。待合并分區(qū)的分區(qū)表名稱。

    • if exists:可選。如果未指定if exists,且分區(qū)不存在,會執(zhí)行失敗并返回報錯。如果指定if exists后不存在滿足merge條件的分區(qū),則不生成新分區(qū)。如果運行過程中出現(xiàn)源數(shù)據(jù)被并發(fā)修改(包括insertrenamedrop)時,即使指定if exists也會報錯。

    • predicate:必填。篩選待合并分區(qū)需要滿足的條件。

    • fullpartitionSpec:必填。目標分區(qū)信息。

    • purge:可選關(guān)鍵字。選擇該字段,則會清理session目錄,默認清理3天內(nèi)的日志。詳情請參見Purge

  • 使用示例

    • 示例1:合并滿足指定條件的分區(qū)到目標分區(qū)。

      --查看分區(qū)表的分區(qū)。
      show partitions intpstringstringstring;
      
      ds=20181101/hh=00/mm=00
      ds=20181101/hh=00/mm=10
      ds=20181101/hh=10/mm=00
      ds=20181101/hh=10/mm=10
      
      --合并所有滿足hh='00'的分區(qū)到hh='00',mm='00'中。
      alter table intpstringstringstring merge partition(hh='00') overwrite partition(ds='20181101', hh='00', mm='00');
      
      --查看合并后的分區(qū)。
      show partitions intpstringstringstring;
      
      ds=20181101/hh=00/mm=00
      ds=20181101/hh=10/mm=00
      ds=20181101/hh=10/mm=10                    
    • 示例2:合并指定的多個分區(qū)到目標分區(qū)。

      --合并多個指定分區(qū)。
      alter table intpstringstringstring merge if exists partition(ds='20181101', hh='00', mm='00'), partition(ds='20181101', hh='10', mm='00'),  partition(ds='20181101', hh='10', mm='10') overwrite partition(ds='20181101', hh='00', mm='00') purge;
      --查看分區(qū)表的分區(qū)。
      show partitions intpstringstringstring;
      
      ds=20181101/hh=00/mm=00

清空分區(qū)數(shù)據(jù)

清空分區(qū)表中指定分區(qū)的數(shù)據(jù)。

MaxCompute支持通過條件篩選方式清空分區(qū)數(shù)據(jù)。如果您希望一次性刪除符合某個規(guī)則條件的一個或多個分區(qū),可以使用表達式指定篩選條件,通過篩選條件匹配分區(qū)并批量清空分區(qū)數(shù)據(jù)。

  • 命令格式

    • 未指定篩選條件

      truncate table <table_name> partition <pt_spec>[, partition <pt_spec>....];
    • 指定篩選條件

      truncate table <table_name> partition <partition_filtercondition>;
  • 參數(shù)說明

    • table_name:必填。待清空分區(qū)數(shù)據(jù)的分區(qū)表名稱。

    • pt_spec:必填。待清空數(shù)據(jù)的分區(qū)。格式為(partition_col1 = partition_col_value1, partition_col2 = partition_col_value2, ...)partition_col是分區(qū)字段,partition_col_value是分區(qū)值。分區(qū)字段不區(qū)分大小寫,分區(qū)值區(qū)分大小寫。

    • partition_filtercondition:指定篩選條件時必填。分區(qū)篩選條件,不區(qū)分大小寫。格式為:

      partition_filtercondition
          : partition (<partition_col> <relational_operators> <partition_col_value>)
          | partition (scalar(<partition_col>) <relational_operators> <partition_col_value>)
          | partition (<partition_filtercondition1> AND|OR <partition_filtercondition2>)
          | partition (NOT <partition_filtercondition>)
          | partition (<partition_filtercondition1>)[,partition (<partition_filtercondition2>), ...]
      • partition_col:分區(qū)名稱。

      • relational_operators:關(guān)系運算符,詳情請參見運算符

      • partition_col_value:分區(qū)列比較值或正則表達式,與分區(qū)列數(shù)據(jù)類型保持一致。

      • scalar():Scalar函數(shù)。Scalar函數(shù)基于輸入值生成對應(yīng)的標量,對分區(qū)列的值(partition_col)進行處理后再按照指定的關(guān)系運算符relational_operatorspartition_col_value做比較。

      • 分區(qū)過濾條件支持邏輯運算符NOT、AND和OR。支持通過NOT過濾條件子句,取過濾規(guī)則的補集。支持多個過濾條件子句以AND或OR的關(guān)系組成整體分區(qū)匹配規(guī)則。

      • 支持多個分區(qū)過濾子句,當多個分區(qū)過濾子句以英文逗號(,)分隔時,每個過濾子句的邏輯以O(shè)R的關(guān)系組成整體分區(qū)匹配規(guī)則。

  • 使用示例

    • 未指定篩選條件

      --從表sale_detail中清空一個分區(qū),清空2013年12月杭州地域的銷售記錄。
      truncate table sale_detail partition(sale_date='201312',region='hangzhou');
      
      --從表sale_detail中同時清空兩個分區(qū),清空2013年12月杭州和上海地域的銷售記錄。
      truncate table sale_detail partition(sale_date='201312',region='hangzhou'),  partition(sale_date='201312',region='shanghai');
    • 指定篩選條件

      --從表sale_detail中清空多個分區(qū),清空杭州地域下sale_date以2013開頭的銷售記錄。
      truncate table sale_detail partition(sale_date like '2013%' and region='hangzhou');
    • 清空Delta Table非分區(qū)表

      --清空非分區(qū)表,表類型必須為非分區(qū)表, 否則報錯
      truncate table mf_tt2; 

添加列或注釋

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

說明
  • MaxCompute已支持添加STRUCT類型的列,例如struct<x: string, y: bigint>map<string, struct<x: double, y: double>>。如果需要開通此功能,請設(shè)置以下參數(shù),同時請注意使用限制,修改該參數(shù)需要等待10分鐘后才會生效:

    setproject odps.schema.evolution.enable=true;

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

  • 命令格式

    ALTER TABLE <table_name> 
          ADD columns [if not exists]
              (<col_name1> <type1> comment ['<col_comment>']
               [, <col_name2> <type2> comment '<col_comment>'...]
              );
  • 參數(shù)說明

    • table_name:必填。待新增列的表名稱。添加的新列不支持指定順序,默認在最后一列。

    • col_name:必填。新增列的名稱。

    • type:必填。新增列的數(shù)據(jù)類型。

    • 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添加一個復(fù)雜數(shù)據(jù)類型列。

      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會返回成功,但實際并不會重復(fù)增加。

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

刪除列

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

說明

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

setproject odps.schema.evolution.enable=true;

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

  • 命令格式

    alter table <table_name> drop columns <col_name1>[, <col_name2>...];
  • 參數(shù)說明

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

更改列數(shù)據(jù)類型

為已存在的列更改數(shù)據(jù)類型。

說明

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

setproject odps.schema.evolution.enable=true;

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

  • 命令格式。

    alter table <table_name> change [column] <old_column_name> <new_column_name> <new_data_type>;
  • 參數(shù)說明。

    • table_name:必填。待修改列數(shù)據(jù)類型的表名稱。

    • old_column_name:必填。待修改列數(shù)據(jù)類型的列名稱。

    • new_column_name:必填。修改列數(shù)據(jù)類型后的列名稱。old_column_name可以與new_column_name保持一致,表示不修改列名稱。但是new_column_name不能與除old_column_name之外的列名稱相同。

    • new_data_type:必填。待修改的列修改后的數(shù)據(jù)類型。

  • 使用示例。

    --將mf_evol_t3表的id字段由int轉(zhuǎn)化為bigint
    alter table mf_evol_t3 change id id bigint;
    --將mf_evol_t3表的id字段類型由bigint轉(zhuǎn)化為string
    alter table mf_evol_t3 change column id id string;
  • 數(shù)據(jù)類型支持轉(zhuǎn)換表。

    說明

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

    數(shù)據(jù)類型支持轉(zhuǎn)換表

修改列的順序

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

說明

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

setproject odps.schema.evolution.enable=true;

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

  • 命令格式

    alter table <table_name> change <old_column_name> <new_column_name> <column_type> after <column_name>;
  • 參數(shù)說明

    • table_name:必填。待修改列順序的表名稱。

    • old_column_name:必填。待修改順序的列的原始名稱。

    • new_col_name:必填。修改后的列名稱。new_col_name可以與old_column_name保持一致,表示不修改列名稱。但new_col_name不能與除old_column_name的之外的列名稱相同。

    • column_type:必填。待修改的列的原始數(shù)據(jù)類型。不可修改。

    • column_name:必填。將待調(diào)整順序的列調(diào)整至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;

修改列名

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

  • 命令格式

    alter table <table_name> change column <old_col_name> rename to <new_col_name>;
  • 參數(shù)說明

    • table_name:必填。待修改列名的表名稱。

    • old_col_name:必填。待修改的列名稱。old_col_name必須是已存在的列。

    • new_col_name:必填。修改后的列名稱。表中不能有名為new_col_name的列。

  • 使用示例

    --修改表sale_detail的列名customer_name為customer。
    alter table sale_detail change column customer_name rename to customer;

修改列注釋

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

  • 語法格式

    alter table <table_name> change column <col_name> comment '<col_comment>';
  • 參數(shù)說明

    • table_name:必填。待修改列注釋的表名稱。

    • col_name:必填。待修改注釋的列名稱。col_name必須是已存在的列。

    • col_comment:必填。修改后的注釋信息。注釋內(nèi)容為長度不超過1024字節(jié)的有效字符串,否則報錯。

  • 使用示例

    --修改表sale_detail的列customer的注釋。
    alter table sale_detail change column customer comment 'customer';

修改列名及注釋

修改非分區(qū)表或分區(qū)表的列名或注釋。

  • 命令格式

    alter table <table_name> change column <old_col_name> <new_col_name> <column_type> comment '<col_comment>';
  • 參數(shù)說明

    • table_name:必填。需要修改列名以及注釋的表名稱。

    • old_col_name:必填。需要修改的列名稱。old_col_name必須是已存在的列。

    • new_col_name:必填。新的列名稱。表中不能有名為new_col_name的列。

    • column_type:必填。列的數(shù)據(jù)類型。

    • col_comment:可選。修改后的注釋信息。內(nèi)容最長為1024字節(jié)。

  • 使用示例

    --修改表sale_detail的列名customer_name為customer_newname,注釋“客戶”為“customer”。
    alter table sale_detail change column customer_name customer_newname STRING comment 'customer';

修改表的列非空屬性

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

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

  • 使用限制

    修改分區(qū)列值允許為NULL后,不可回退,不支持再修改分區(qū)列值禁止為NULL,請謹慎操作。

  • 命令格式

    alter table <table_name> change column <old_col_name> null;
  • 參數(shù)說明

    • table_name:必填。待修改列非空屬性的表名稱。

    • old_col_name:必填。待修改的非分區(qū)列的名稱。old_col_name必須是已存在的非分區(qū)列。

  • 使用示例

    --創(chuàng)建一張分區(qū)表,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;

相關(guān)文檔

更多關(guān)于表操作的命令請參見表操作