1. 程式人生 > >hive基本操作指令

hive基本操作指令

  • 建立內部表
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查詢要注意.