hive基本操作指令
阿新 • • 發佈:2018-12-21
- 建立內部表
create table mytable(
id int,
name string)
row format delimited fields terminated by '\t' stored as textfile;
附:
mytable是表名
id int是引數名字和引數型別
as textfile是代表格式,可以省略,預設都是text格式
- 建立外部表
create external table mytable2( id int, name string) row format delimited fields terminated by '\t' location '/user/hive/warehouse/mytable2';
關鍵詞external配合location使用,單引號中間內容是指定資料檔案存在hdfs的目錄
- 建立分割槽表
create table mytable3(
id int,
name string)
partitioned by(gender string) row format delimited fields terminated by '\t'stored as textfile;
- 插入測試資料
load data local inpath '/root/hivedata/girl.txt' overwrite into table mytable3 partition(gender='girl');
- 查詢表分割槽
show partitions mytable3;
- 查詢分割槽表資料
select * from mytable3;
- 重命名錶
alter table student rename to student_mdf
- 增加列
alter table student_mdf add columns (gender string);
- 改變列
alter table student_mdf change sex gender string;
- 替換列
alter table student_mdf replace columns (id string, name string);
- 刪除表
drop table if exists mytable;
- 增加分割槽
alter table mytable3 add partition(sex='unknown') localtion /user/hive/warehouse/mydb.db/mytable3/sex=unknown;
- 刪除分割槽
alter table mytable3 drop if exists partition(sex='unknown');
- Load 裝載資料
load data [local] inpath 'filepath' [overwrite] into table tablename [partition (partcol1=val1, partcol2=val2 ...)]
附:
load:操作只是單純的複製/移動操作,將資料檔案移動到 Hive 表對應的位置
filepath:包括相對路徑、絕對路徑和包含模式的完整URI
local:如果指定了local,load命令會去查詢本地檔案系統中的 filepath。如果沒有指定local關鍵字,則根據inpath中的URI查詢檔案
如果使用了overwrite關鍵字,則目標表(或者分割槽)中的內容會被覆蓋
- 插入一條資料
insert into table student_mdf values('1','zhangsan');
- 開啟動態分割槽
set hive.exec.dynamic.partition.mode=nonstrict
- 將查詢的資料直接存到一張新表中
create table mytable5 as select id, name from mytable3;
- 動態分割槽使用場景,當我們想要對資料進行分割槽的時候,你能拿到的資料卻未必是已經分好區的檔案,並不能直接load進來就能使用,這時我們就經常用動態分割槽解決問題
例如對上表persons進行處理,把資料加入到按月份分割槽的表中
insert into birthdays partition(month) select id,name,month from persons;
附:
預設使用的是嚴格模式,是不允許動態分割槽的,我們需要在命令列執行set hive.exec.dynamic.partition.mode=nonstrict
使用動態分割槽會將查詢結果集的最後一個作為分割槽條件,所以select查詢要注意.