[Hive]Hive使用指南五 客戶端匯出資料
阿新 • • 發佈:2019-02-19
根據匯出的地方不一樣,將這些方式分為三種:
- 匯出到本地檔案系統中
- 匯出到HDFS中
- 匯出到Hive的另一個表中
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 DELIMITEDFIELDS 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中
匯出到HDFS中,與匯出到本地檔案系統中思路一致,只是少了一個LOCAL
關鍵字:
INSERT OVERWRITE DIRECTORY 'tmp/data_group/test/client_behavior'ROW FORMAT DELIMITEDFIELDS 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的另一個表中
匯出到Hive中的另一個表中,也是Hive的資料匯入方式:
INSERT INTO client_behavior_copySELECT * FROM client_behavior WHERE dt = '2017-08-16' LIMIT 2000;
備註
如果想要匯入資料到另一個表中,則這個表必須已經建立成功