ALTER TABLE ADD PARTITION
为表创建一个或多个分区列。每个分区包含一个或多个不同的列名称/值组合。将会为每个指定的组合创建一个单独的数据目录,这在某些情况下可提高查询性能。分区列在表数据本身中不存在,因此如果您使用的列名称与表本身的列同名,则会出现错误。有关更多信息,请参阅在 Athena 中对数据进行分区。
在 Athena 中,一个表及其分区必须使用相同的数据格式,但它们的架构可以不同。有关更多信息,请参阅包含分区的表中的更新。
有关 IAM 策略中需要的资源级权限(包括 glue:CreatePartition),请参阅 Amazon Glue API 权限:操作和资源参考以及 针对 Amazon Glue Data Catalog 中数据库和表的精细访问权限。有关使用 Athena 时权限相关的疑难解答信息,请参阅 在 Athena 中进行故障排除 主题的 权限 部分。
摘要
ALTER TABLE table_name ADD [IF NOT EXISTS]
PARTITION
(partition_col1_name = partition_col1_value
[,partition_col2_name = partition_col2_value]
[,...])
[LOCATION 'location1']
[PARTITION
(partition_colA_name = partition_colA_value
[,partition_colB_name = partition_colB_value
[,...])]
[LOCATION 'location2']
[,...]
参数
添加分区时,您可以为分区指定一个或多个列名/值对,以及该分区的数据文件所在的 Amazon S3 路径。
- [IF NOT EXISTS]
-
如果已存在具有相同定义的分区,则会导致错误被隐藏。
- PARTITION (partition_col_name = partition_col_value [,...])
-
创建一个具有指定列名称/值组合的分区。仅当列的数据类型为字符串时,才将
partition_col_value包含在字符串字符中。 - [LOCATION 'location']
-
指定存储前述语句所定义的分区的目录。
示例
ALTER TABLE orders ADD PARTITION (dt = '2016-05-14', country = 'IN');
ALTER TABLE orders ADD PARTITION (dt = '2016-05-14', country = 'IN') PARTITION (dt = '2016-05-15', country = 'IN');
ALTER TABLE orders ADD PARTITION (dt = '2016-05-14', country = 'IN') LOCATION 's3://mystorage/path/to/INDIA_14_May_2016/' PARTITION (dt = '2016-05-15', country = 'IN') LOCATION 's3://mystorage/path/to/INDIA_15_May_2016/';
ALTER TABLE flights_parquet ADD IF NOT EXISTS PARTITION (year = '2021')
零字节 _$folder$ 文件
如果您运行 ALTER TABLE ADD PARTITION 语句并错误地指定了已存在的分区和错误的 Simple Storage Service (Amazon S3) 位置,格式为 的零字节占位符文件将在 Simple Storage Service (Amazon S3) 中创建。您必须手动移除这些文件。partition_value_$folder$
为了防止这种情况发生,请在 ALTER TABLE ADD PARTITION 语句中使用 ADD IF NOT EXISTS 语法,像这样:
ALTER TABLE table_name ADD IF NOT EXISTS PARTITION […]