2017-06-09 140 views
0

我在将配置单元输出保存到S3时遇到问题。我试过ssh ing到主节点并在Hive中运行我的命令,但它不保存输出。我也曾尝试在AWS中的EMR控制台中运行Hue中的命令,但仍不保存到S3。我还将该脚本添加为步骤,但仍不能保存。我能够得到结果的唯一方法是在Hue中运行它,然后单击以查看结果并以此方式下载,然后将它们推送到S3。我无能为力,为什么会发生这种情况。这是我正在运行的查询。未将配置单元结果保存到S3存储桶

with temp as (
select /*+ streamtable(l) */ a.id, a.name, a.page 
from my_table a 
join my_other_table l on (a.id = l.id) 
group by a.page, a.id, a.name) 
insert overwrite directory 's3://bucket/folder/folder2/folder3/folder4/folder5/folder6/folder7/' 
select page, count(distinct id) over (PARTITION BY page) 
from temp 
group by page; 

作为一个说明,我宁愿为解决方案添加了一步,当工作,因为我打算依次添加x许多步骤。

回答

0

我在Amazon S3上看到Amazon EMR输出的正常方式是CREATE EXTERNAL TABLE,其中LOCATION

例如:

CREATE EXTERNAL TABLE IF NOT EXISTS output_table 
(gram string, year int, ratio double, increase double) 
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' 
STORED AS TEXTFILE 
LOCATION 's3://my-bucket/directory'; 

然后,只需INSERT数据转换成表:

INSERT OVERWRITE TABLE output_table 
SELECT gram FROM table... 
+0

您提供的第一部分代码会在S3中的Hive中创建一个表,这是正确的,而且是我如何从S3中的数据创建表。我想从蜂巢----> S3出发。据我所知,查询的前缀是“插入覆盖目录”,后跟S3存储桶。 –

+0

上述语法适用。您只需将INSERT插入表中,然后将其写入S3。 –

+0

这也适用,接受可视性 –

0

我找到了解决办法。

问题是位于S3位置的尾部斜线,您希望写入的目录的基本路径应为NOT包含尾部斜线。