我想在 Amazon Athena 中创建分区表,并使用它们来改进我的查询。
简短描述
要创建分区的 Athena 表,请完成以下步骤:
- 将您的数据作为分区存储在 Amazon Simple Storage Service (Amazon S3) 存储桶中。
- 创建表时指定分区列和分区数据的根位置。
- 将分区上传到 AWS Glue Data Catalog 中。
**注意:**当您运行查询时,该表指的是 Data Catalog。
解决方法
将您的数据作为分区存储在 Amazon S3 中
选择以下格式之一来存储分区数据:
- Hive 样式格式:s3://doc-example-bucket/example-folder/year=2021/month=01/day=01/myfile.csv
**注意:**该路径包括分区键的名称及其值。例如,year=2021。
- 非 Hive 样式格式:s3://doc-example-bucket/example-folder/2021/01/01/myfile.csv
创建表时指定分区信息
在 CREATE TABLE 语句中,包含 PARTITIONED BY 以定义分区列,并包含 LOCATION 以指定分区数据的根位置。
查询示例:
CREATE EXTERNAL TABLE doc-example-table (
first string,
last string,
username string
)
PARTITIONED BY (year string, month string, day string)
STORED AS parquet
LOCATION 's3://doc-example-bucket/example-folder'
**注意:**在前面的策略中,将以下值替换为您的值:
- 将 doc-example-table 替换为您正在创建的表名
- 将 doc-example-bucket 替换为您存储表的 S3 存储桶的名称
- 将 example-folder 替换为您的 S3 文件夹的名称
- 将 first、last 和 username 替换为列名
- 将 year string、month string 和 day string 替换为分区表的名称
将分区上传到 Data Catalog 中
创建表后,选择以下方法之一将分区添加到 Data Catalog 中。
对 Hive 样式格式数据使用 MSCK REPAIR TABLE 查询
要在添加分区后更新 Data Catalog 元数据,请运行 MSCK REPAIR TABLE 命令:
MSCK REPAIR TABLE doc-example-table
**注意:**将 doc-example-table 替换为您的表。
如果您有超过几千个分区,则此方法并非最佳实践。您的 DDL 查询可能会遇到超时问题。有关详细信息,请参阅为什么我的 MSCK REPAIR TABLE 查询没有向 AWS Glue Data Catalog 添加分区?
对 Hive 样式和非 Hive 样式格式数据使用 ALTER TABLE ADD PARTITION 查询
要向 Data Catalog 添加分区,请运行 ALTER TABLE ADD PARTITION 命令。
要添加单个分区,请运行以下命令:
ALTER TABLE doc-example-table ADD PARTITION (year='2021', month='01', day='01') LOCATION 's3://doc-example-bucket/example-folder/2021/01/01/'
要在一个查询中添加多个分区,请运行以下命令:
ALTER TABLE doc-example-table ADD
PARTITION (year='2021', month='01', day='01') LOCATION 's3://doc-example-bucket/example-folder/2021/01/01/'
PARTITION (year='2020', month='06', day='01') LOCATION 's3://doc-example-bucket/example-folder/2020/06/01/'
**注意:**在上述命令中,请将示例值替换为您的值。
对 Hive 样式和非 Hive 样式格式数据使用 AWS Glue 爬网程序
要自动从您的数据集中推断出表架构、创建表并将分区添加到 Data Catalog 中,请使用 AWS Glue 爬网程序。您也可以使用爬网程序仅向使用 CREATE TABLE 语句手动创建的表添加分区。
有关详细信息,请参阅自定义爬网程序行为。
在 Amazon S3 中对高度分区的数据使用分区投影
在 Amazon S3 中针对高度分区的数据运行查询并非最佳实践,因为查询速度很慢。如果您的数据是高度分区的,请使用分区投影来加快查询过程并自动进行分区管理。
相关信息
为什么我在查询 Amazon Athena 表时收到零个记录?
为什么在添加新分区后 Athena 查询没有返回结果?