跳至内容

如何在 Amazon Athena 中创建和使用分区表?

2 分钟阅读
0

我想在 Amazon Athena 中创建分区表,并使用它们来改进我的查询。

简短描述

要创建分区的 Athena 表,请完成以下步骤:

  1. 将您的数据作为分区存储在 Amazon Simple Storage Service (Amazon S3) 存储桶中。
  2. 创建表时指定分区列和分区数据的根位置。
  3. 将分区上传到 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 文件夹的名称
  • firstlastusername 替换为列名
  • year stringmonth stringday 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 查询没有返回结果?

AWS 官方已更新 2 年前