2013-02-27 57 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