**:
情況:表: test_table
已有字段 (a,b,c)
已有分割槽:
day_key=20131201
day_key=20131202
day_key=20131203
需求是需要新增乙個欄位d,用add加的字段在末尾
並且重新生成 所有分割槽的資料
步驟1.新增字段:
alter table test_table add columns (d string);
2.執行語句
insert overwrite table test_table
select ....
此時問題產生了:
發現 新加的字段d 列 生成出來的資料
在已有的分割槽中
全是null
解決辦法3個:
a1.新版本解決辦法:
修改分割槽表修改語句 在最後加上關鍵字 cascade 即可。
alter table test_table add ..... cascade;
tips:如果已經執行新增操作,並且沒有帶cascade,可以嘗試下面的方法:
1、使用replace 恢復表結構,這樣歷史的分割槽資料都不會消失a.直接在hive裡面解決alter table industry_db.product replace
columns(product_name string comment 『產品名』);
2、然後再使用帶cascade新增字段
刪除對應的分割槽 day_key=20131201
alter table test_table drop partition (day_key='20131201');
然後再次生成資料 發現d列的資料產生了。
b.修改元資料庫
修改sds表 老分割槽對應的 cd_id
與表的 cd_id 保持一致。
在元資料庫查詢:
select * from sds where location like '%tb_name%'\g
我們可以看到 所有分割槽 以及表 對應的cd_id
如果我們對欄位進行了修改
新生成分區的 cd_id 的最新的 (與colums表的一致)
而老分割槽 (不管你重新插入資料多少次) 都是與表(tbls)的tbl_id保持一致的!!
當我們重新計算資料之後 又不想重建分割槽
只需 :
update sds set cd_id=119 where sd_id=116;
其中 119為其它新分割槽的 cd_id 116 為表的tbl_id
當然後面如果再次 add columns
也可以用同樣的辦法
update sds set cd_id=120 where sd_id=119;
其中 120 為其它新分割槽的 cd_id 119 為表之前過期的cd_id
HIve學習 Hive分割槽修改
如何修改hive的分割槽 hive讀寫模式 hive分割槽的意義是避免全表掃瞄,從而提高查詢效率。預設使用全表掃瞄。partitioned by columnname columntype comment column comment 1 hive的分割槽名區分大小寫 2 hive的分割槽欄位是乙個...
hive 分割槽 hive 分割槽概念 0323
1 hive 分割槽表 在hive select查詢中一般會掃瞄整個表內容,會消耗很多時間做沒必要的工作。有時候只需要掃瞄表中關心的一部分資料,因此建表時引入了partition概念。分割槽表指的是在建立表時指定的partition的分割槽空間。hive可以對資料按照某列或者某些列進行分割槽管理,所...
HIVE動態分割槽
一 前段時間因為導表需求 從一張表中查詢出資料,按日期分割槽overwrite 到指定分割槽表中 在hive裡面研究了一下自動分割槽。步驟 1 建好所需分割槽表 2 設定分割槽引數?1 2 3 4 sethive.exec.dynamic.partition true 可通過這個語句檢視 sethi...