Hive學習小記 (9)hive分割槽表加欄位

2022-07-08 03:51:09 字數 1471 閱讀 1831

**:

情況:表: 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 恢復表結構,這樣歷史的分割槽資料都不會消失

alter table industry_db.product replace

columns(product_name string comment 『產品名』);

2、然後再使用帶cascade新增字段

a.直接在hive裡面解決

刪除對應的分割槽 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...