版權聲明:本文為部落客原創文章,未經部落客允許不得轉載。 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;
備注
如果想要導入資料到另一個表中,則這個表必須已經建立成功