Presto:如何从s3中读取在子文件夹中分区的整个存储桶?

问题描述 投票:0回答:1

我需要使用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数据中读取数据,这些数据已经作为单个表在文件夹中拆分了。

谢谢。

database amazon-web-services amazon-s3 presto partition
1个回答
0
投票

如果您的文件夹遵循Hive分区文件夹命名约定(year=2019/,则可以将表声明为已分区,而只需使用system. sync_partition_metadata procedure in Presto

现在,您的文件夹不遵循约定,因此您需要使用system. sync_partition_metadata步骤将每个文件夹分别注册为一个分区(将在Presto 330中提供,即将发布)。 (system.register_partition的替代方法是在Hive CLI中运行适当的register_partition。)

© www.soinside.com 2019 - 2024. All rights reserved.