如何使用Presto从Aws S3读取分区的镶木地板数据?

时间:2019-08-05 10:45:52

标签: amazon-s3 partitioning parquet presto

我以带分区的实木复合地板文件的形式将数据存储在 S3 中。我正在尝试使用 presto 读取此数据。如果给出带分区的镶木地板文件的完整位置,则能够读取数据。下面是从“ a部分”读取数据的查询:

presto> create table IF NOT EXISTS default.sample(name varchar(255), age varchar(255), section varchar(255)) WITH (external_location = 's3://bucket/presto/section=a', format = 'PARQUET');

但是我的数据按不同的部分进行分区,即s3:// bucket / presto文件夹包含多个文件夹,例如“ section = a”,“ section = b”等。

我正在尝试按以下方式读取带有分区的数据:

presto> create table IF NOT EXISTS default.sample(name varchar(255), age varchar(255), section varchar(255)) WITH (partitioned_by = ARRAY['section'], external_location = 's3://bucket/presto', format = 'PARQUET');

正在创建表,但是当我尝试选择数据时,表为空。

我是Presto的新手,请帮忙。

谢谢

1 个答案:

答案 0 :(得分:1)

您正确创建了表格:

create table IF NOT EXISTS default.sample(name varchar(255), age varchar(255), section varchar(255))
WITH (partitioned_by = ARRAY['section'], external_location = 's3://bucket/presto', format = 'PARQUET');

但是,在“配置单元表格式”中,不会自动发现分区。相反,需要显式声明它们。造成这种情况的原因如下:

  • 明确的分区声明使您可以在编写完成后以原子方式发布分区
  • section=asection=b仅是约定,分区位置可能不同。实际上,分区可以位于其他S3存储桶或其他存储中

要在像您这样的情况下自动发现分区,可以使用Presto随附的system.sync_partition_metadata procedure