Hive篇:Hive分區表常用語法彙總


前言:


如果對分區表瞭如指掌,那麼非分區表的語法就簡單多了,只需將 PARTITION 相關字段去掉就可以了。


1. 創建hive分區表


//不指定LOCATION


CREATE EXTERNAL TABLE 

IF NOT EXISTS hive_partition_01(

ROWKEY STRING,

YEAR INT,

MONTH INT,

DAY INT,

HOUR INT,

MINUTE INT)

PARTITIONED BY (AGE INT) 

ROW FORMAT DELIMITED FIELDS 

TERMINATED BY ','  STORED AS TEXTFILE;    


注:不指定LOCATION,默認爲/user/hive/warehouse/*.db/table_name


//指定LOCATION


CREATE EXTERNAL TABLE 

IF NOT EXISTS hive_partition_02(

ROWKEY STRING,

YEAR INT,

MONTH INT,

DAY INT,

HOUR INT,

MINUTE INT)

PARTITIONED BY (AGE INT) 

ROW FORMAT DELIMITED FIELDS 

TERMINATED BY ','  

STORED AS TEXTFILE 

LOCATION 'hdfs://master:8020/user/hive/warehouse/hive_hbase.db/hive_partition_01' ;


注:創建指定數據路徑的外部分區表要添加分區後才能查到數據,可在hive命令行執行修復命令: msck repair table tablename。 


2. 創建分區


ALTER TABLE hive_partition_01 ADD PARTITION(AGE= 1998);  


注:創建分區後 HDFS 增加目錄 age=1998


3. 刪除分區


ALTER TABLE hive_partition_01 DROP IF EXISTS PARTITION(age =1998);   

 

注:外部表刪除分區後HDFS分區數據不會被刪除


4. 向HIVE表加載數據(四種方式)


4.1 從HDFS上導入數據到Hive表


//加載某個目錄下所有數據,只適合非分區表


LOAD DATA INPATH '/emp.txt' OVERWRITE INTO TABLE hive_01; 


//INTO 追加寫


LOAD DATA INPATH '/emp.txt' INTO TABLE hive_partition_01 PARTITION(AGE=1998);  


注:從HDFS加載數據,加載後emp.txt文件消失,屬於copy操作


//OVERWRITE INTO 覆蓋寫


LOAD DATA INPATH '/emp.txt' OVERWRITE INTO TABLE hive_partition_01 PARTITION(AGE=1998);    


LOAD DATA INPATH '/emp.txt' [OVERWRITE] INTO TABLE hive_partition_01 PARTITION(AGE=1999); 

  

注:執行該語句若分區不存在會自動創建


4.2 從本地文件系統中導入數據到Hive表


// INTO 追加寫


LOAD DATA LOCAL INPATH '/home/emp.txt' INTO TABLE hive_partition_01 PARTITION(AGE=1999);  


// OVERWRITE INTO 覆蓋寫 


LOAD DATA LOCAL INPATH '/home/emp.txt' OVERWRITE INTO TABLE hive_partition_01 PARTITION(AGE=1999);    


4.3 從別的表中查詢數據並導入到Hive表中


// INTO 追加寫


insert INTO table hive_partition_01 partition (AGE=1999) select rowkey, year, month ,day , hour , minute from hive_partition_02;


注:hive_partition_02 表 select 的字段必須與 hive_partition_01 表對應,此條語句會執行MapReduce任務


//OVERWRITE 覆蓋寫


insert OVERWRITE table hive_partition_01 partition (AGE=1999) select rowkey, year, month ,day , hour , minute from hive_partition_02;


注:HDFS分區目錄下的文件都會被覆蓋寫


4.4 創建表時從別的表查詢數據到所創建的表


create table hive_partition_03 as select rowkey, year, month from hive_partition_01;   


注:此條語句會執行MapReduce任務,可select部分字段 


4.5 支持多表插入


from hive_partition_01

    > insert into table hive_partition_02

    > partition(age=1998)

    > select rowkey, year, month ,day , hour , minute

    > insert into table hive_partition_03

    > select rowkey, year, month;


注:向HDFS目錄相同路徑下上傳相同文件,文件名會添加copy字樣。如下:


/user/hive/warehouse/hive_hbase.db/hive_partition_01/age=1999/emp.txt

/user/hive/warehouse/hive_hbase.db/hive_partition_01/age=1999/emp_copy_1.txt


注:hive 字段不區分大小寫





將最好的祝福送給正在閱讀的你,感恩!

本文分享自微信公衆號 - HBase工作筆記(HBase-Notes)。
如有侵權,請聯繫 [email protected] 刪除。
本文參與“OSC源創計劃”,歡迎正在閱讀的你也加入,一起分享。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章