2013-02-27 89 views
0

我試圖將Hive結果導出到位於Amazon s3上的文件。Hive沒有正確創建CSV文件

但結果文件具有一些無法識別的字符像正方形等

結果類型的文件格式的二進制/八位字節流,而不是CSV格式。

我沒有得到乳清它不能夠創建一個csv文件。

使用的配置單元版本是hive-0.8.1。

我正在按照下面的步驟進行操作。

順便說一下,從Amazon EMR啓動的實例中使用配置單元。

create table test_csv(employee_id bigint, employee_name string, employee_designation string) row format delimited fields terminated by ',' lines terminated by '\n' stored as textfile; 

    insert overwrite table test_csv select employee_id , employee_name , employee_designation from employee_details; 

    INSERT OVERWRITE DIRECTORY 's3n://<path_to_s3_bucket>' SELECT * from test_csv; 

您能否讓我知道這可能是什麼原因?

+0

檢查wheather選擇查詢給出正確的結果。然後嘗試插入 – 2013-02-27 12:03:54

+0

是的選擇查詢給出正確的結果。 – Sam 2013-02-27 12:25:00

回答

0

因爲我知道,INSERT OVERWRITE DIRECTORY總是會用ctrl-A( '\ 001')作爲分隔符。用表格數據直接複製文件將是最佳解決方案。 GL。

+0

我如何實現這一目標? – Sam 2013-02-27 15:20:56

+0

試試這個:hadoop distcp hdfs:// s3:// / – www 2013-02-27 17:45:28

0

您是否嘗試在HDFS中打開Hive倉庫目錄到您的輸出以檢查數據如何存儲在那裏?

我覺得不需要該行執行

INSERT OVERWRITE DIRECTORY 's3n://<path_to_s3_bucket>' SELECT * from test_csv; 

,而可以直接做「DFS -get」

+0

因此,而不是s3我應該把hdfs文件路徑在INSERT查詢中?如果我把hdfs路徑配置成可以訪問那個? – Sam 2013-02-27 12:23:21

+0

@Sam hive可以成功寫入hdfs路徑,您可以使用@Balaswami vaddeman – 2013-02-27 12:30:57

+0

,但我想將結果存儲到s3而不是hdfs。 – Sam 2013-02-27 12:33:46

1

您可以從蜂巢通過命令行導出數據:

hive -e 'select * from foo;' > foo.tsv

你很可能通過一切的sed或東西的標籤轉換成逗號,我們只使用硅通孔管。

+0

這個方法和'INSERT OVERWRITE DIRECTORY'一樣,所有的字段分隔符都會改成ctrl-A。希望在下一次HIVE發佈時能夠改變。 – www 2013-02-28 13:26:44

+0

我很確定,當你這樣做時,它使用製表符分隔符。至少,我通過這些文件的人從未抱怨過。 – 2013-03-05 21:50:25

+0

已檢查。你是對的先生。 +1。 – www 2013-03-05 22:01:25