我需要使用presto从s3中读取位于“ bucket-a”中的整个数据集。但是,在存储桶中,数据按年保存在子文件夹中。所以我有一个像这样的水桶:
Bucket-a> 2017>数据
Bucket-a> 2018>更多数据
Bucket-a> 2019>更多数据
以上所有数据均在同一张表中,但以这种方式保存在s3中。请注意,存储桶-a本身中没有数据,仅在每个文件夹中。
我要做的是将存储桶中的所有数据作为一个表读取,并添加一年作为列或分区。
我尝试过这种方式,但没有成功:
CREATE TABLE hive.default.mytable (
col1 int,
col2 varchar,
year int
)
WITH (
format = 'json',
partitioned_by = ARRAY['year'],
external_location = 's3://bucket-a/'--also tryed 's3://bucket-a/year/'
)
并且
CREATE TABLE hive.default.mytable (
col1 int,
col2 varchar,
year int
)
WITH (
format = 'json',
bucketed_by = ARRAY['year'],
bucket_count = 3,
external_location = 's3://bucket-a/'--also tryed's3://bucket-a/year/'
)
以上所有方法均无效。
我已经看到人们使用presto将分区写入s3,但是我想做的却是相反的:从s3数据中读取数据,这些数据已经作为单个表在文件夹中拆分了。
谢谢。
如果您的文件夹遵循Hive分区文件夹命名约定(year=2019/
),则可以将表声明为已分区,只需使用system. sync_partition_metadata
Presto中的过程即可。
现在,您的文件夹不遵循约定,因此您需要使用system.register_partition
过程将每个文件夹分别注册为一个分区(将在Presto 330中提供,即将发布)。(替代方法register_partition
是ADD PARTITION
在Hive CLI中适当运行。)
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句