我正在EMR上运行一个EMR脚本,从s3键中提取数据。我可以得到所有的数据并把它放在一张桌子上。问题是,我需要的一些数据都在密钥名中。如何从hive内部获取密钥名并将其放入hive表中?
发布于 2015-04-30 18:38:24
我最近也遇到了类似的问题。据我所研究,这取决于。您可以将数据从“目录”部分中获取,但不能从s3键的“文件名”部分获取。
如果正确格式化了partition键,则可以使用s3。可以以与列相同的方式查询partition。下面是一个带有一些示例的链接:Loading data with Hive, S3, EMR, and Recover Partitions
如果s3文件已经正确分组,您也可以自己指定分区。例如,我需要日期信息,所以我的脚本如下所示:
create external table Example(Id string, PostalCode string, State string)
partitioned by (year int, month int, day int)
row format delimited fields terminated by ','
tblproperties ("skip.header.line.count"="1");
alter table Example add partition(year=2014,month=8,day=1) location 's3n://{BuckeyName}/myExampledata/2014/08/01/';
alter table Example add partition(year=2014,month=8,day=2) location 's3n://{BuckeyName}/myExampledata/2014/08/02/';
...keep goingpartition数据必须是“目录名”的一部分,而不是“文件名”,因为Hive从目录中加载数据。
如果您需要从文件名中读取一些文本,我认为您必须创建自定义程序,以便将对象重命名为“目录名”中的文本。
祝好运!
https://stackoverflow.com/questions/29887212
复制相似问题