MaxCompute支援對已有表的分區和列執行變更操作,如添加分區、添加列、刪除列、更改列資料類型等,您可以根據實際業務情境執行相應操作。
MaxCompute SQL的分區和列操作命令如下。
類型 | 操作 | 功能 | 角色 | 操作入口 |
分區操作 | 為已存在的分區表新增分區。 | 具備修改表許可權(Alter)的使用者 | 本文中的命令您可以在如下工具平台執行: | |
為已存在的分區表刪除分區。 | ||||
修改分區表中分區的 | ||||
修改分區表的分區值。 | ||||
對分區表的分區進行合并,即同一個分區表下的多個分區合并成一個分區,同時刪除被合并的分區維度資訊,把資料移動到指定分區。 | ||||
清空指定分區的資料。 | ||||
列操作 | 為已存在的非分區表或分區表添加列或注釋。 | |||
刪除已存在的非分區表或分區表的列。 | ||||
更改已存在列的資料類型。 | ||||
調整表中指定列的順序。 | ||||
為已存在的非分區表或分區表修改列名稱。 | ||||
為已存在的非分區表或分區表修改列注釋。 | ||||
為已存在的非分區表或分區表同時修改列名稱和列注釋。 | ||||
修改非分區列的非空屬性。 |
使用限制
目前支援TINYINT、SMALLINT、INT、BIGINT、CHAR、VARCHAR和STRING資料類型的欄位設為分區列。
單表分區層級最多6級。
單表分區數最多允許60000個分區。
一次最多查詢分區數為10000個。
使用表結構變更(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在寫入表時,不可以修改表結構,否則會發生錯誤。
Transaction類型的分區表不支援merge partition操作。
Delta Table類型的非分區表不支援清空操作、不支援更改表的write.bucket.num屬性。
添加分區
為已存在的分區表新增分區。
限制條件
MaxCompute單表支援的分區數量上限為6萬個。
對於有多級分區的表,如果需要添加新的分區值,必須指明全部的分區。
僅支援新增分區值,不支援新增分區欄位。
命令格式
alter table <table_name> add [if not exists] partition <pt_spec> [partition <pt_spec> partition <pt_spec>...];
參數說明
table_name:必填。待新增分區的分區表名稱。
if not exists:可選。如果未指定if not exists而同名的分區已存在,會執行失敗並返回報錯。
pt_spec:必填。新增的分區,格式為
(partition_col1 = partition_col_value1, partition_col2 = partition_col_value2, ...)
。partition_col是分區欄位,partition_col_value是分區值。分區欄位不區分大小寫,分區值區分大小寫。
使用樣本
樣本1:給表sale_detail添加一個分區,用來儲存2013年12月杭州地區的銷售記錄。
alter table sale_detail add if not exists partition (sale_date='201312', region='hangzhou');
樣本2:給表sale_detail同時添加兩個分區,用來儲存2013年12月北京和上海地區的銷售記錄。
alter table sale_detail add if not exists partition (sale_date='201312', region='beijing') partition (sale_date='201312', region='shanghai');
樣本3:給表sale_detail添加分區,僅指定一個分區欄位sale_date,返回報錯,需要同時指定2個分區欄位sale_date和region。
alter table sale_detail add if not exists partition (sale_date='20111011');
樣本4:增加Delta Table表分區
--建立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"); --添加分區 alter table mf_tt add partition (dd='01', hh='01');
樣本5:修改Delta Table表屬性
--更新bucket資料,目前只支援分區表,不支援非分區表 alter table mf_tt3 set tblproperties("write.bucket.num"="64"); --更新retain屬性 alter table mf_tt3 set tblproperties("acid.data.retain.hours"="60");
刪除分區
為已存在的分區表刪除分區。
MaxCompute支援通過條件式篩選方式刪除分區。如果您希望一次性刪除符合某個規則條件的多個分區,可以使用運算式指定篩選條件,通過篩選條件匹配分區並大量刪除分區。
限制條件
每個分區過濾子句只能訪問一個分區列。
運算式用到的函數必須是內建的Scalar函數。
注意事項
刪除分區之後,MaxCompute專案的儲存量會降低。
您可以結合MaxCompute提供的生命週期功能,實現自動回收舊分區的能力。更多生命週期資訊,請參見生命週期。
命令格式
未指定篩選條件
--一次刪除一個分區。 alter table <table_name> drop [if exists] partition <pt_spec>; --一次刪除多個分區。 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>;
參數說明
table_name:必填。待刪除分區的分區表名稱。
if exists:可選。如果未指定if exists且分區不存在,則返回報錯。
pt_spec:必填。刪除的分區。格式為
(partition_col1 = partition_col_value1, partition_col2 = partition_col_value2, ...)
。partition_col是分區欄位,partition_col_value是分區值。分區欄位不區分大小寫,分區值區分大小寫。partition_filtercondition:指定篩選條件時必填。分區篩選條件,不區分大小寫。格式為:
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:分區名稱。
relational_operators:關係運算子,詳情請參見運算子。
partition_col_value:分區列比較值或Regex,與分區列資料類型保持一致。
scalar():Scalar函數。Scalar函數基於輸入值產生對應的標量,對分區列的值(partition_col)進行處理後再按照指定的關係運算子relational_operators與partition_col_value做比較。
分區過濾條件支援邏輯運算子NOT、AND和OR。支援通過NOT過濾條件子句,取過濾規則的補集。支援多個過濾條件子句以AND或OR的關係組成整體分區匹配規則。
支援多個分區過濾子句,當多個分區過濾子句以英文逗號(,)分隔時,每個過濾子句的邏輯以OR的關係組成整體分區匹配規則。
使用樣本
未指定篩選條件
--從表sale_detail中刪除一個分區,2013年12月杭州分區的銷售記錄。 alter table sale_detail drop if exists partition(sale_date='201312',region='hangzhou'); --從表sale_detail中同時刪除兩個分區,2013年12月杭州和上海分區的銷售記錄。 alter table sale_detail drop if exists partition(sale_date='201312',region='hangzhou'),partition(sale_date='201312',region='shanghai');
指定篩選條件
--建立分區表。 create table if not exists sale_detail( shop_name STRING, customer_id STRING, total_price DOUBLE) partitioned by (sale_date STRING); --添加分區。 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'); --大量刪除分區。 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'); --支援多個分區過濾運算式,運算式之間是OR的關係。 alter table sale_detail drop if exists partition(sale_date < '201911'), partition(sale_date >= '202007'); --添加其他格式分區。 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'); --大量刪除分區,使用Regex匹配分區。 alter table sale_detail drop if exists partition(sale_date RLIKE '2019-\\d+-\\d+'); --建立多級分區表。 create table if not exists region_sale_detail( shop_name STRING, customer_id STRING, total_price DOUBLE) partitioned by (sale_date STRING , region STRING ); --添加分區。 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'); --執行如下語句大量刪除多級分區,兩個匹配條件是或的關係,會將sale_date小於201911或region等於beijing的分區都刪除掉。 alter table region_sale_detail drop if exists partition(sale_date < '201911'),partition(region = 'beijing'); --如果刪除sale_date小於201911且region等於beijing的分區,可以使用如下方法。 alter table region_sale_detail drop if exists partition(sale_date < '201911', region = 'beijing');
大量刪除多級分區時,在一個
partition
過濾子句中,不能根據多個分區列編寫組合條件匹配分區,如下語句會報錯FAILED: ODPS-0130071:[1,82] Semantic analysis exception - invalid column reference region, partition expression must have one and only one column reference
。--分區過濾子句只能訪問一個分區列,如下語句報錯。 alter table region_sale_detail drop if exists partition(sale_date < '201911' AND region = 'beijing');
修改分區的更新時間
MaxCompute SQL提供touch
操作,用於修改分區表中分區的LastModifiedTime
。此操作會將LastModifiedTime
修改為目前時間。此時,MaxCompute會認為資料有變動,重新計算生命週期。
使用限制
對於有多級分區的表,必須指明全部的分區。
命令格式
alter table <table_name> touch partition (<pt_spec>);
參數說明
table_name:必填。待修改分區更新時間的分區表名稱。如果表不存在,則返回報錯。
pt_spec:必填。需要修改更新時間的分區資訊。格式為
(partition_col1 = partition_col_value1, partition_col2 = partition_col_value2, ...)
。partition_col是分區欄位,partition_col_value是分區值。如果指定的分區欄位或分區值不存在,則返回報錯。
使用樣本
--修改表sale_detail的分區sale_date='201312', region='shanghai'的LastModifiedTime。 alter table sale_detail touch partition (sale_date='201312', region='shanghai');
修改分區值
MaxCompute SQL支援通過rename
操作更改分區表的分區值。
使用限制
不支援修改分區列的列名,只能修改分區列對應的值。
對於有多級分區的表,必須指明全部的分區。
命令格式
alter table <table_name> partition (<pt_spec>) rename to partition (<new_pt_spec>);
參數說明
table_name:必填。待修改分區值的表名稱。
pt_spec:必填。需要修改分區值的分區資訊。格式為
(partition_col1 = partition_col_value1, partition_col2 = partition_col_value2, ...)
。partition_col是分區欄位,partition_col_value是分區值。如果指定的分區欄位或分區值不存在,則返回報錯。new_pt_spec:必填。修改後的分區資訊。格式為
(partition_col1 = new_partition_col_value1, partition_col2 = new_partition_col_value2, ...)
。partition_col是分區欄位,new_partition_col_value是新分區值。
使用樣本
--修改表sale_detail的分區值。 alter table sale_detail partition (sale_date = '201312', region = 'hangzhou') rename to partition (sale_date = '201310', region = 'beijing');
合并分區
MaxCompute SQL提供merge partition
對分區表的分區進行合并,即將同一個分區表下的多個分區合并成一個分區,同時刪除被合并的分區維度資訊,把資料移動到指定分區。
使用限制
不支援外部表格,聚簇表合并後的分區會消除聚簇屬性。
一次性合并分區數量限制為4000個。
命令格式
alter table <table_name> merge [if exists] partition (<predicate>) [, partition(<predicate2>) ...] overwrite partition (<fullpartitionSpec>) [purge];
參數說明
table_name:必填。待合并分區的分區表名稱。
if exists:可選。如果未指定if exists,且分區不存在,會執行失敗並返回報錯。如果指定if exists後不存在滿足
merge
條件的分區,則不產生新分區。如果運行過程中出現來源資料被並發修改(包括insert
、rename
或drop
)時,即使指定if exists也會報錯。predicate:必填。篩選待合并分區需要滿足的條件。
fullpartitionSpec:必填。目標資料分割資訊。
purge:可選關鍵字。選擇該欄位,則會清理session目錄,預設清理3天內的日誌。詳情請參見Purge。
使用樣本
樣本1:合并滿足指定條件的分區到目標資料分割。
--查看分區表的分區。 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'的分區到hh='00',mm='00'中。 alter table intpstringstringstring merge partition(hh='00') overwrite partition(ds='20181101', hh='00', mm='00'); --查看合并後的分區。 show partitions intpstringstringstring; ds=20181101/hh=00/mm=00 ds=20181101/hh=10/mm=00 ds=20181101/hh=10/mm=10
樣本2:合并指定的多個分區到目標資料分割。
--合并多個指定分區。 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; --查看分區表的分區。 show partitions intpstringstringstring; ds=20181101/hh=00/mm=00
清空分區資料
清空分區表中指定分區的資料。
MaxCompute支援通過條件式篩選方式清空分區資料。如果您希望一次性刪除符合某個規則條件的一個或多個分區,可以使用運算式指定篩選條件,通過篩選條件匹配分區並批量清空分區資料。
命令格式
未指定篩選條件
truncate table <table_name> partition <pt_spec>[, partition <pt_spec>....];
指定篩選條件
truncate table <table_name> partition <partition_filtercondition>;
參數說明
table_name:必填。待清空分區資料的分區表名稱。
pt_spec:必填。待清空資料的分區。格式為
(partition_col1 = partition_col_value1, partition_col2 = partition_col_value2, ...)
。partition_col是分區欄位,partition_col_value是分區值。分區欄位不區分大小寫,分區值區分大小寫。partition_filtercondition:指定篩選條件時必填。分區篩選條件,不區分大小寫。格式為:
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:分區名稱。
relational_operators:關係運算子,詳情請參見運算子。
partition_col_value:分區列比較值或Regex,與分區列資料類型保持一致。
scalar():Scalar函數。Scalar函數基於輸入值產生對應的標量,對分區列的值(partition_col)進行處理後再按照指定的關係運算子relational_operators與partition_col_value做比較。
分區過濾條件支援邏輯運算子NOT、AND和OR。支援通過NOT過濾條件子句,取過濾規則的補集。支援多個過濾條件子句以AND或OR的關係組成整體分區匹配規則。
支援多個分區過濾子句,當多個分區過濾子句以英文逗號(,)分隔時,每個過濾子句的邏輯以OR的關係組成整體分區匹配規則。
使用樣本
未指定篩選條件
--從表sale_detail中清空一個分區,清空2013年12月杭州地區的銷售記錄。 truncate table sale_detail partition(sale_date='201312',region='hangzhou'); --從表sale_detail中同時清空兩個分區,清空2013年12月杭州和上海地區的銷售記錄。 truncate table sale_detail partition(sale_date='201312',region='hangzhou'), partition(sale_date='201312',region='shanghai');
指定篩選條件
--從表sale_detail中清空多個分區,清空杭州地區下sale_date以2013開頭的銷售記錄。 truncate table sale_detail partition(sale_date like '2013%' and region='hangzhou');
清空Delta Table非分區表
--清空非分區表,表類型必須為非分區表, 否則報錯 truncate table mf_tt2;
添加列或注釋
為已存在的非分區表或分區表添加列或注釋。
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:必填。待修改的列名稱。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;
修改列注釋
為已存在的非分區表或分區表修改列注釋。
文法格式
alter table <table_name> change column <col_name> comment '<col_comment>';
參數說明
table_name:必填。待修改列注釋的表名稱。
col_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:必填。需要修改的列名稱。
old_col_name
必須是已存在的列。new_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
屬性值,判斷列的非空屬性。如果Nullable
為true
,表示允許為NULL;如果Nullable
為false
,表示禁止為NULL。
使用限制
修改分區列值允許為NULL後,不可回退,不支援再修改分區列值禁止為NULL,請謹慎操作。
命令格式
alter table <table_name> change column <old_col_name> null;
參數說明
table_name:必填。待修改列非空屬性的表名稱。
old_col_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;
相關文檔
更多關於表操作的命令請參見表操作。