amazon-web-services - 具有下推谓词的 AWS Glue Dynamic_frame 未正确过滤
问题描述
我正在为 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?
解决方案
根据评论,日志显示日期分区列被标记为“dt”,在您的表中,它被称为“日期”
日志
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 + "'")
将表中的日期分区列名称更改为dt,并且在上述代码中的 push_down_predicate 参数中更改为相同。
我还在上述日志中的某些路径中看到了额外的正斜杠,这些分区是通过 athena 使用 ALTER TABLE 命令手动添加的吗?如果是这样,我建议使用 MSCK REPAIR 命令加载表中的所有分区以避免此类问题。S3 路径中的额外空白斜杠有时会在通过 spark 执行 ETL 时导致错误。
推荐阅读
- python - 熊猫折线图 Y 标签 1e6 而不是完整数字
- javascript - 创建 HTML 的 Vue 组件中的插值
- javascript - Typescript object const assertion typing - .includes() “'string' 类型的参数不可分配给'never' 类型的参数。”
- python - 如果 2 点之间的距离小于指定值,则生成线条而不是贝塞尔曲线
- csvhelper - CsvHelper 自定义分隔符
- flutter - 添加控制器时选项卡指示器不滑动
- java - 获取“java.lang.OutOfMemoryError:Java 堆空间”
- keycloak - Keycloak - 添加额外的登录步骤
- java - 具有自定义逻辑的 JAVA 8 Sum 函数
- html - CSS Circle,边框颜色部分填充,圆圈内有数字