1. 程式人生 > >[Hive]Hive使用指南五 客戶端匯出資料

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

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

  • 匯出到本地檔案系統中
  • 匯出到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;

備註

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