要按照S3对象键前缀而不是“文件夹”对Athena进行分区,您可以使用Athena的分区投影功能。以下是一个解决方案,包含代码示例:
CREATE EXTERNAL TABLE my_table (
column1 INT,
column2 STRING,
...
)
PARTITIONED BY (prefix STRING)
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe'
WITH SERDEPROPERTIES (
'serialization.format' = ',',
'field.delim' = ','
)
LOCATION 's3://my-bucket/path/to/data/';
ALTER TABLE my_table
ADD PARTITION (
prefix = 'prefix1'
) LOCATION 's3://my-bucket/path/to/data/prefix1/';
ALTER TABLE my_table
ADD PARTITION (
prefix = 'prefix2'
) LOCATION 's3://my-bucket/path/to/data/prefix2/';
您可以根据需要添加更多的分区。
SELECT *
FROM my_table
WHERE prefix = 'prefix1';
这将返回与S3对象键前缀“prefix1”匹配的所有数据。
请注意,分区投影需要一些时间来生效。因此,在查询之前,请确保已经成功配置了分区投影。