說明
本博客每週五更新一次。 本文記錄hive知識,主要內容包括sql語句、beeline工具和表數據的導出和導入。
sql
-
添加
- 添加字段:
alter table 庫名.表名 add columns(字段名 字段類型,字段名 字段類型)
- 添加分區:
alter table 庫名.表名 add if not exists partition (分區名='值',分區名='值');
- 添加數據:
insert into 庫名.表名 values("one","270");
- 部分字段添加數據:
insert into 庫名.表名 (字段一,字段二) values("one","270");
- 指定分區添加數據:
insert into 庫名.表名 partition(分區名="2020060919") values("one","270");
- 覆蓋表添加:
insert overwrite table 庫名.表名 (字段一,字段二) values("one","270");
- 添加字段:
-
修改
- 修改存儲路徑:
alter table 庫名.表名 set location '存儲路徑'
- 修改字段:
alter table 庫名.表名 change 舊字段名 新字段名 類型;
- 壓縮格式存儲的表,修改字段類型,原有數據不可使用,<font color="red">慎重</font>
- 修改空值null爲默認值0:
alter table 庫名.表名 set serdeproperties('serialization.null.format' = '0');
- 修改表名:
alter table 庫名.舊錶名 to 庫名.新表名
- 修改字段位置:
alter table 表名 change 字段一 after 字段二;
- 將字段一移動到字段二後面,有可能因爲數據類型修改報錯,造成修改不成功。
- 修改分隔符:
alter table 表名 set serdeproperties('field.delim'='\t');
,修改分隔符爲\t,建議同步修改下serialization.format
- 修改存儲路徑:
-
刪除
- 刪除分區:
alter table 庫名.表名 DROP IF EXISTS PARTITION (分區名='值',分區名='值');
- 刪除字段:
ALTER TABLE test REPLACE COLUMNS(id BIGINT, name STRING);
- 填寫要保留的字段
- 刪除分區:
-
查看
- 模糊查詢表:
show tables like '*name*';
- 表字段結構:
desc 表名;
- 表創建語句:
show create table 表名;
- 模糊查詢表:
beeline
- beeline工具hive庫遠程連接命令:
/usr/hdp/current/hive-client/bin/beeline -u jdbc:hive2://ip:10000 -n 用戶名 -p 密碼 -d org.apache.hive.jdbc.HiveDriver
表數據導入導出
-
導出數據
beeline -u jdbc:hive2://host:10000 --incremental=true --showHeader=false --outputformat=dsv --delimiterForDSV=$'\t' -e 'select * from test' > file.csv
- --showHeader是否顯示錶頭,只顯示一行表頭,不會多行。
- –outputformat=table/vertical/csv/tsv/dsv/csv2/tsv2,結果展示的模式。默認是table。dsv可配合delimiterForDSV一起使用,設置分隔
- --delimiterForDSV 指定輸出格式中劃分值的界定符。默認是‘|’,如果需要輸入特殊符號,如'\n001' ,'\x01'等需在前面加$,例 --delimiterForDSV=$'\t'
-
導入數據
- 標準方法:
- 用beeline將數據導入表中,需要先將文件上傳到hadoop,比如上傳到tmp下:hadoop fs -put 路徑/data.txt /tmp/
- 進入beeline裏面執行:load data inpath '/tmp/data.txt' overwrite into table 表名
- 實用方法
- 將數據上傳到指定hive表分區目錄下
- 爲hive表創建對應分區
- 標準方法:
總結
- hive表數據存儲如果爲壓縮格式如orc、parquet等,修改表字段結構,源數據不可用,因爲表存儲壓縮格式數據,無法隨着表結構變化動態改變。