gpt4 book ai didi

hadoop - 如何仅将 365 个最近的文件加载到 Hadoop/Hive 中?

转载 作者:可可西里 更新时间:2023-11-01 14:53:25 26 4
gpt4 key购买 nike

我创建了一个表:

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 事件加载表;。当我执行 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 集群。它将始终从头开始——其中没有以前的数据——因此只关心添加数据,而不是删除数据。

最佳答案

您需要通过仅专门添加支持 S3 的分区来避免 Hive 看到支持 Glacier 的分区。创建表后,您需要为 365 个日期中的每个日期执行此操作,如下所示:

CREATE EXTERNAL TABLE ...;
ALTER TABLE events ADD PARTITION (dt = '2015-01-01');
ALTER TABLE events ADD PARTITION (dt = '2015-01-02');
ALTER TABLE events ADD PARTITION (dt = '2015-01-03');
...
ALTER TABLE events ADD PARTITION (dt = '2015-12-31');
SELECT * FROM events LIMIT 5;

关于hadoop - 如何仅将 365 个最近的文件加载到 Hadoop/Hive 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29183769/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com