在EMR中获取s3密钥名称

时间:2015-04-27 04:27:21

标签: amazon-web-services hive amazon-emr

我正在hvie上运行EMR脚本,该脚本从s3键中提取数据。我可以获得所有数据并将其放入表格中。问题是,我需要的一些数据是密钥名称。如何从hive中获取密钥名称并将其放入hive表中?

1 个答案:

答案 0 :(得分:1)

我最近遇到了类似的问题。根据我的研究,这取决于。您可以从"目录中获取数据"部分但不是"文件名" s3键的一部分。

如果s3键格式正确,您可以使用partition。可以使用与列相同的方式查询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 going

partition数据必须是"目录名称的一部分"而不是"文件名"因为Hive从目录加载数据。

如果您需要从文件名中读取一些文本,我认为您必须创建自定义程序以重命名对象,以便您需要的文本位于"目录名称"。

祝你好运!