我正在为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吗?
答案 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路径中多余的斜杠有时会导致错误。