我需要使用 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
。