通常,我們只使用hive的新增列命令,缺省會在表的最後面新增列,例如
# 新增1列
alter
table table_name add
columns
(user_id bigint
comment
'使用者id');
# 新增多列
alter
table table_name add
columns
( name string comment
'使用者名稱'
, city string comment
'城市'
, *** string comment
'使用者性別'
, age string comment
'使用者年齡'
, phone string comment
'使用者手機'
, email string comment
'使用者郵箱'
, unqiue_id string comment
'身份證id'
);
有時候,我們需要將列新增到指定位置,這就需要兩步
先新增欄位到最後(add columns),然後再移動到指定位置(change)
alter
table table_name add
columns
(c_time string comment
'當前時間');
-- 正確,新增在最後
alter
table table_name change c_time c_time string after address ;
-- 正確,移動到指定位置,address欄位的後面
第二種方式,我們可以通過先備份原表,再重新建表,然後重新從備份表載入歷史資料。
具體實現邏輯
-- 建立備份表
alter
table test.saleorder rename
to test.saleorder_bak;
-- 建立新錶
drop
table
ifexists test.saleorder ;
create
table test.saleorder (
order_id string comment
'訂單id'
,order_time string comment
'訂單時間(新加字段)'
,order_amount string comment
'訂單數量'
)row format delimited fields
terminated
by'\036'
stored as parquet;
-- 載入歷史資料
insert overwrite table test.saleorder
select
order_id,'',
order_amont
from saleorder_bak
--分割槽表處理的sql,採用動態分割槽載入
insert overwrite table dmr.dmr_sal_failure_rate_mly
partition
(part_sc,part_dt)
select
order_id,'',
order_amont,
part_sc,part_dt
from saleorder_bak
HIve 在指定位置新增字段
分兩步,先新增欄位到最後 add columns 然後再移動到指定位置 change alter table table name add columns c time string comment 當前時間 正確,新增在最後 alter table table name change c time...
Hive 在指定位置新增字段
此處僅為mark,方便檢視。搗騰了半天,終於找到解決方案了,hive定時任務原表新增欄位的方法 分兩步,先新增欄位到最後 add columns 然後再移動到指定位置 change alter table table name add columns c time string comment 當前...
在指定位置插入新列
來由 現有一張表test a,b,c 怎樣在a和b列之間插入新列d 希望結果 test a,d,b,c vivianfdlpw 2005.9 引用請保留此資訊 建立測試環境 create table test a varchar 20 b varchar 20 c varchar 20 go 允許系...