在 EMR 中获取 s3 密钥名称

Getting s3 key name within EMR

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

我最近遇到了类似的问题。根据我的研究,这取决于。您可以从 "directory" 部分获取数据,但不能从 s3 密钥的 "filename" 部分获取数据。

如果 s3 密钥格式正确,您可以使用 partitionpartition可以像列一​​样查询。这是一个带有一些示例的 link: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 数据必须是 "directory name" 而不是 "filename" 的一部分,因为 Hive 从目录加载数据。

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

祝你好运!