将多个s3文件夹中的数据选择性地加载到Hive中的表中

时间:2019-01-22 06:50:26

标签: hive hiveql amazon-emr

我有一个带有多个文件夹的s3存储桶,例如A,B,还有其他一些文件夹。文件夹结构如下:

s3://buckets/AGGREGATED_STUDENT_REPORT/data/A/,
s3://buckets/AGGREGATED_STUDENT_REPORT/data/B/ etc.

在这两个文件夹中,每日报告是在另一个文件夹中生成的,例如run_date = 2019-01-01,因此结果文件夹结构如下所示:

  s3://buckets/AGGREGATED_STUDENT_REPORT/data/A/run_date=2019-01-01/..,
  s3://buckets/AGGREGATED_STUDENT_REPORT/data/B/run_date=2019-01-01/..

现在在配置单元中,我想创建一个外部表,仅将这两个文件夹中每个月的最后一天生成的数据取而代之,而忽略其他情况,如下所示:

CREATE EXTERNAL TABLE STUDENT_SUMMARY
 (
   ROLL_NUM    STRING,
   CLASS  STRING,
   REMARKS STRING,
   LAST_UPDATED STRING,
 )
  ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'
  STORED AS TEXTFILE LOCATION  's3://AGGREGATED_STUDENT_REPORT/data/*/run_date=2018-12-31';

但是在上面的查询中,我无法弄清楚如何处理所选文件夹组。

1 个答案:

答案 0 :(得分:0)

只要有机会,您就可以将文件夹复制到HDFS。 两个原因:

a)您只能在HDFS中创建一个文件夹,并将所有A,b,c等复制到同一HDFS文件夹中,并在您的location参数下使用相同的文件。

b)我猜测如果数据驻留在HDFS中而不是S3中,查询性能会更好。