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



我需要使用 presto 从 s3 读取位于"bucket-a"中的整个数据集。但是,在存储桶中,数据按年份保存在子文件夹中。所以我有一个看起来像这样的桶:

存储桶 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/(,您可以将表声明为分区,只需在 Presto 中使用system. sync_partition_metadata过程。

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

相关内容

  • 没有找到相关文章

最新更新