具有下推谓词的AWS Glue Dynamic_frame无法正确过滤

时间:2019-10-29 13:27:20

标签: amazon-web-services apache-spark apache-spark-sql aws-glue

我正在为AWS Glue编写一个脚本,该脚本源自S3存储的镶木地板文件,其中我正在创建一个DynamicFrame并尝试使用pushDownPredicate逻辑来限制传入的数据。

表分区是(按顺序): account_id> region> vpc_id> dt

以下是用于创建dynamic_frame的代码:

dynamic_frame = glueContext.create_dynamic_frame.from_catalog(
    database = DATABASE_NAME,
    table_name= TABLE_NAME,
    push_down_predicate = "dt='" + DATE + "'")

其中DATE = '2019-10-29'

但是,似乎Glue仍然尝试读取其他日期的数据。也许是因为我必须为其他条件指定一个push_down_predicate吗?

1 个答案:

答案 0 :(得分:0)

根据评论,日志显示日期分区列被标记为“ dt”,如表中一样,其名称为“ date”

日志

s3://route/account_id=XXX/region=eu-west-1/vpc_id=YYY/dt=2019-07-15 
s3://route/account_id=XXX/region=eu-west-1/vpc_id=YYY//dt=2019-10-03 
s3://route/account_id=XXX/region=eu-west-1/vpc_id=YYY//dt=2019-08-27 
s3://route/account_id=XXX/region=eu-west-1/vpc_id=YYY//dt=2019-10-29 ...

您的代码

dynamic_frame = glueContext.create_dynamic_frame.from_catalog(
database = DATABASE_NAME,
table_name= TABLE_NAME,
push_down_predicate = "date='" + DATE + "'")

将表中的 date 分区列名称更改为 dt ,与上面的push_down_predicate参数相同代码。

我还在上面的日志中的某些路径中看到额外的正斜杠,这些分区是否是使用ALTER TABLE命令通过athena手动添加的?如果是这样,我建议使用MSCK REPAIR命令加载表中的所有分区,以避免此类问题。通过Spark执行ETL时,S3路径中多余的斜杠有时会导致错误。