我以带分区的实木复合地板文件的形式将数据存储在 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的新手,请帮忙。
谢谢
答案 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=a
,section=b
仅是约定,分区位置可能不同。实际上,分区可以位于其他S3存储桶或其他存储中要在像您这样的情况下自动发现分区,可以使用Presto随附的system.sync_partition_metadata
procedure。