hive 構建外表及分區


    hive里分了create table和create external table,external table的好處就是表結構和數據是解綁的,刪除表並不會刪除數據,表相當於就是定義了去解析相對應的文件時的規范而已。

    一個比較常見的應用場景是將網站的用戶瀏覽數據建立一個外表,然后按天做分區加快查找效率。

 

創建表

create EXTERNAL table sms_detail(

    mobile_type int,

    msg_id bigint)

partitioned by (data_date string)

 

ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'

lines terminated by '\n' stored as textfile;

 

我們建立了一張叫做sms_detail的外表,現在不需要任何數據的,我們定義了分區字段data_date。分區字段相當於數據表多了一個字段,這個字段在select *時是不會出現的,但是可以放在where之后

 

插入數據和分區

很多時候我們會按天分區,比如我們hdfs上的文件結構是這樣的/home/user1/smsdata/2015-03-18,/home/user1/smsdata/2015-03-19。。。然后我們現在要把數據和外表對應起來,命令如下

alter table sms_detail add if not exists partition(data_date='2015-03-18') location '/share/comm/esp/sms/sms_detail/2015-03-18'

這條命令往外表上添加了一個新的partition,並且把location對應的數據和這個partition對應上了。這之后在hive執行select * from sms_detail where data_date='2015-03-18'時,程序就直接會去'/share/comm/esp/sms/sms_detail/2015-03-18'文件夾下找。2015-03-19的數據也可以按相同的方法加入。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM