1. 程式人生 > 實用技巧 >Hive的日常操作筆記

Hive的日常操作筆記

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 表名

(

ut string comment '',
ype string comment '',
sordid string comment '',
sid string comment ''
)partitioned by (
dt string,
type string) ;