天天看點

[Hive]Hive使用指南五 用戶端導出資料

版權聲明:本文為部落客原創文章,未經部落客允許不得轉載。 https://blog.csdn.net/SunnyYoona/article/details/52924452

根據導出的地方不一樣,将這些方式分為三種:

  • 導出到本地檔案系統中
  • 導出到HDFS中
  • 導出到Hive的另一個表中

1. 導出到本地檔案系統中 http://gitlab.corp.qunar.com/jifeng.si/learningnotes/blob/master/IT/%E5%A4%A7%E6%95%B0%E6%8D%AE/Hive/%5BHive%5DHive%E4%BD%BF%E7%94%A8%E6%8C%87%E5%8D%97%E4%BA%94%20.md#1

INSERT OVERWRITE LOCAL DIRECTORY '/home/q/jifeng.si/data/client_behavior'
SELECT * FROM client_behavior WHERE dt = '2017-08-16' LIMIT 2000;
           

這條HQL的執行需要啟用Mapreduce作業,運作完這條語句之後,将會在本地檔案系統

/home/q/jifeng.si/data/client_behavior

目錄下生成檔案名稱為

000000_2

的檔案,這是由Reduce産生的結果,我們可以看看這個檔案的内容:

ll /home/q/jifeng.si/data/client_behavior
total 536
-rw-r--r-- 1 wirelessdev wirelessdev 546233 Aug 17 19:46 000000_2
           

在Hive0.11.0版本之前,當使用者将Hive查詢結果輸出到檔案中時,使用者不能指定列的分割符,預設為\x01:

cat /home/q/jifeng.si/data/client_behavior/000000_2 |awk -F"\x01" '{print $1}' | less
2017-08-16
2017-08-16
2017-08-16
2017-08-16
2017-08-16
2017-08-16
2017-08-16
...
           

在Hive0.11.0版本之後,引入了新特性,使用者可以指定列和行的分隔符:

INSERT OVERWRITE LOCAL DIRECTORY '/home/q/jifeng.si/data/client_behavior'
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '\t'
LINES TERMINATED BY '\n'
SELECT * FROM client_behavior WHERE dt = '2017-08-16' LIMIT 2000;
           

檢視資料:

cat /home/q/jifeng.si/data/client_behavior/000000_2 | awk -F"\t" '{print $1}' | less
2017-08-16
2017-08-16
2017-08-16
2017-08-16
2017-08-16
...
           

2. 導出到HDFS中 http://gitlab.corp.qunar.com/jifeng.si/learningnotes/blob/master/IT/%E5%A4%A7%E6%95%B0%E6%8D%AE/Hive/%5BHive%5DHive%E4%BD%BF%E7%94%A8%E6%8C%87%E5%8D%97%E4%BA%94%20.md#2-hdfs

導出到HDFS中,與導出到本地檔案系統中思路一緻,隻是少了一個

LOCAL

關鍵字:

INSERT OVERWRITE DIRECTORY 'tmp/data_group/test/client_behavior'
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '\t'
LINES TERMINATED BY '\n'
SELECT * FROM client_behavior WHERE dt = '2017-08-16' LIMIT 2000;
           

上面代碼将會導出查詢資料到HDFS的

tmp/data_group/test/client_behavior

目錄下。

3. 導出到Hive的另一個表中 http://gitlab.corp.qunar.com/jifeng.si/learningnotes/blob/master/IT/%E5%A4%A7%E6%95%B0%E6%8D%AE/Hive/%5BHive%5DHive%E4%BD%BF%E7%94%A8%E6%8C%87%E5%8D%97%E4%BA%94%20.md#3-hive

導出到Hive中的另一個表中,也是Hive的資料導入方式:

INSERT INTO client_behavior_copy
SELECT * FROM client_behavior WHERE dt = '2017-08-16' LIMIT 2000;
           

備注

如果想要導入資料到另一個表中,則這個表必須已經建立成功