Hive的日常操作筆記
阿新 • • 發佈:2020-09-10
1、insert into 與insert overwrite的區別
都是向 hive 表中插入資料,但 insert into 操作是以追加的方式向 hive 表尾部追加資料,而 insert overwrite 操作則是直接重寫資料,即先刪除 hive 表的資料,再執行寫入操作。注意,如果 hive 表是分割槽表的話,insert overwrite 操作只會重寫當前分割槽的資料,不會重寫其他分割槽資料。
2、表中增加欄位,資料重跑的問題
首先想到的是先在表中增加欄位(也可以用replace)。
1)alter table表名
add columns(new_col string);
然後重跑資料
2) insert overwrite table表名
partition(dt='2020-08-29')
這種後果是,我們新增的欄位new_col的值為空。
解決方案:
1)在1.1.0中表和分割槽的元資料就是分開處理的,在add或replace時加上cascade能同時更新表和分割槽,如果在新增欄位的時候沒有指定的cascade的情況
因為我們在重跑資料的時候,雖然HDFS上的資料更新了,但是我們查詢的時候仍然查詢的是舊的元資料資訊。
2)新生成的分割槽是不會有問題的,Hive會自動維護新分割槽中的元資料
3)先drop掉老分割槽,再insert overwrite
4) 使用如下命令來對分割槽新增 alter table 表名 partition(dt='2020-08-29') add columns(欄位名 型別);
3、常用操作
select * from表名
where dt='0000-01-09' and type='one'
show create table 表名
insert into table表名
partition(dt='0000-01-09', type='one') values('',null,null,'')
alter table表名 drop partition(dt='0000-01-09',type='one’);
create table if not exists 表名
(
ype string comment '',
sordid string comment '',
sid string comment ''
)partitioned by (
dt string,
type string) ;