我需要使用s3中的presto读取位于“ 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
procedure in Presto。
现在,您的文件夹不遵循约定,因此您需要使用system. sync_partition_metadata
步骤将每个文件夹分别注册为一个分区(将在Presto 330中提供,即将发布)。 (system.register_partition
的替代方法是在Hive CLI中运行适当的register_partition
。)