【发布时间】:2015-05-24 21:07:10
【问题描述】:
我创建一个表:
CREATE EXTERNAL TABLE events (
id bigint, received_at string, generated_at string, source_id int, source_name string, source_ip string, facility string, severity string, program string, message string
)
PARTITIONED BY (
dt string
)
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'
STORED AS TEXTFILE
LOCATION 's3://mybucket/folder1/folder2';
s3://mybucket/folder1/folder2里面有多个文件夹,命名格式dt=YYYY-MM-DD/,每个文件夹里面有1个文件,命名格式YYYY-MM-DD.tsv.gz
然后我通过MSCK REPAIR TABLE events; 加载表格。当我执行SELECT * FROM events LIMIT 5; 时,我得到了
OK
Failed with exception java.io.IOException:com.amazonaws.services.s3.model.AmazonS3Exception: The operation is not valid for the object's storage class (Service: Amazon S3; Status Code: 403; Error Code: InvalidObjectState; Request ID: 66C6392F74DBED77), S3 Extended Request ID: YPL1P4BO...+fxF+Me//cp7Fxpiuqxds2ven9/4DEc211JI2Q7BLkc=
Time taken: 0.823 seconds
因为超过 365 天的物体已被移至 Glacier。
我如何以编程方式仅将 365 个最近的文件加载到其中,或者更好的是,我可以指定仅加载比设定日期更新/命名超过设定日期的文件?
PS:我只会在需要时启动 Hadoop/Hive 集群。它总是从头开始——其中没有以前的数据——因此只关心添加数据,而不是删除它。
【问题讨论】:
标签: hadoop hive bigdata hiveql hadoop2