2013-01-12 93 views
25

我運行java代碼的配置單元查詢。 例子:Hive查詢輸出到文件

「SELECT * FROM表WHERE ID> 100」

如何導出結果到HDFS文件。

回答

48

下面的查詢將直接結果插入HDFS:

INSERT OVERWRITE DIRECTORY '/path/to/output/dir' SELECT * FROM table WHERE id > 100; 
+0

感謝you.How設置輸出文件format.Example(ROW1,ROW2) – cldo

+0

你可以使用'printf' UDF(0.9)如要格式化您的輸入,否則創建自己的UDF可能是一個選項。 –

+0

@Charles - 你能展示或鏈接到如何使用printf UDF格式化輸出的例子嗎?不明顯的是在這裏做什麼。 – quux00

29

該命令將輸出重定向到您所選擇的文本文件:

$hive -e "select * from table where id > 10" > ~/sample_output.txt 
+0

如何覆蓋文件,如果我想從另一個表中運行另一個select *命令並寫入相同的文件? – sarath

+1

這將花費很長時間處理大型表,因爲它必須將其寫入標準輸出。 – Tgsmith61591

+0

不會也寫進度到輸出文件?或者是寫入stderr的進度? – Avision

20

這將會把選項卡中的結果下劃線的文件:

INSERT OVERWRITE LOCAL DIRECTORY '/home/hadoop/YourTableDir' 
ROW FORMAT DELIMITED 
FIELDS TERMINATED BY '\t' 
STORED AS TEXTFILE 
SELECT * FROM table WHERE id > 100; 
+2

有沒有辦法吐出標題行? – Chris

+0

我得到這個代碼的錯誤:無法識別選擇子句中的'行''FORMAT''DELIMITED'附近的輸入 – Selrac

+0

看起來你似乎在輸入中有一條徑流線;也許缺少結束語。在控制檯中試用它。 – topkara

1

我同意tnguyen80的迴應。請注意,查詢中有一個特定的字符串值可以更好地用雙引號給出整個查詢。

例如:

$hive -e "select * from table where city = 'London' and id >=100" > /home/user/outputdirectory/city details.csv 
+0

這是要寫入HDFS還是寫入本地文件系統 - 看起來像本地的,而「INSERT OVERWRITE DIRECTORY」方法寫入HDFS – TobyEvans

1

做將使用 「INSERT OVERWRITE DIRECTORY '/ pathtofile' 選擇從臨時*其中id> 100」 而不是「蜂巢-e「SELECT * FROM理想的方式...」> /filepath.txt」

+0

它是否創建需要在之前創建的文件或文件? –

1
INSERT OVERWRITE LOCAL DIRECTORY '/home/training/mydata/outputs' 
SELECT expl , count(expl) as total 
FROM (
SELECT explode(splits) as expl 
FROM (
    SELECT split(words,' ') as splits 
    FROM wordcount 
) t2 
) t3 
GROUP BY expl ; 

這是一個例子,薩拉特的問題

上面是存儲在輸出文件,該文件是在本地目錄的字數工作 :)

1

要直接保存在HDFS文件,請使用以下命令:

hive> insert overwrite directory '/user/cloudera/Sample' row format delimited fields terminated by '\t' stored as textfile select * from table where id >100; 

這將使內容在文件夾/用戶/ Cloudera公司/ HDFS中的樣品。

0

輸入該行成蜂巢命令行界面:

插入owerwrite目錄由存儲爲「\ T」終止文本文件SELECT * FROM testViewQuery「/數據/檢驗」行格式分隔的字段;

'testViewQuery' - 一些具體的看法

+0

歡迎使用StackOverflow:如果您發佈代碼,XML或數據示例,請在文本編輯器中突出顯示這些行,然後單擊編輯器工具欄上的「代碼示例」按鈕({})或使用鍵盤上的Ctrl + K格式和語法突出顯示它! – WhatsThePoint