为什么在添加新分区后 Athena 查询没有返回结果?

1 分钟阅读
0

我在 Amazon Athena 查询中添加了新分区,但查询没有返回结果。

解决方法

如果您使用以下方法之一添加新分区,则可能会出现此问题:

要解决此问题,请对您的用例执行以下步骤。

MSCK REPAIR TABLE

MSCK REPAIR TABLE 命令仅适用于 Hive 式分区,其数据路径包含用等号连接的键值对。例如,country=us/...year=2021/month=01/day=26/...,依此类推。

此外,MSCK REPAIR TABLE 命令可能无法添加新分区,尤其是 Amazon Simple Storage Service (Amazon S3) 存储桶中的大型分区。这也可能导致性能和超时问题,因为 MSCK REPAIR TABLE 命令会加载数据范围内的所有分区。例如,如果现有数据来自 2020 年,新的分区数据来自 2023 年,则读取 2020 年以来的所有分区。

要添加非 Hive 式分区,请运行 ALTER TABLE ADD PARTITION 命令,如下所示:

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']
  [,...]

分区投影

在分区投影中,表属性是在创建表时定义的。确保表属性符合要求的规范,否则可能无法读取分区。

使用以下命令列出表分区:

"SELECT * FROM 'table_name$partitions'"

在输出中,检查分区数据格式。如果使用年、月、日或小时等日期格式,则为范围、间隔和数字添加必要的表属性。

有关详细信息,请参阅支持的分区投影类型

AWS Glue Data Catalog 或 AWS Glue 控制台

如果您使用 Data Catalog 或 AWS Glue 控制台定义分区列,请验证分区数据类型。分区数据类型必须与 S3 存储桶中定义的数据类型相匹配。

**注意:**最佳做法是在 Data Catalog 或 AWS Glue 控制台和 S3 存储桶中使用一致的数据类型。

相关信息

为什么我的 MSCK REPAIR TABLE 查询没有向 AWS Glue Data Catalog 添加分区?

为什么我在查询 Amazon Athena 表时收到零个记录?

AWS 官方
AWS 官方已更新 1 年前