AWS Glue谓词下推条件无效

时间:2018-07-17 19:34:26

标签: mysql python-3.x amazon-web-services pyspark aws-glue

我有一个MySQL源,可从中创建带有谓词下推条件的Glue动态框架,如下所示:

datasource = glueContext.create_dynamic_frame_from_catalog(
    database = source_catalog_db, 
    table_name = source_catalog_tbl, 
    push_down_predicate = "id > 1531812324", 
    transformation_ctx = "datasource")

无论我在'push_down_predicate'中设置什么条件,我总是在'datasource'中获取所有记录。 我想念什么?

2 个答案:

答案 0 :(得分:5)

下推谓词仅适用于分区列。换句话说,您的数据文件应放在分层结构的文件夹中。例如,如果数据位于s3://bucket/dataset/中,并按年,月和日划分,则结构应为:

s3://bucket/dataset/year=2018/month=7/day=18/<data-files-here>

在这种情况下,下推谓词仅适用于列yearmonthday

datasource = glueContext.create_dynamic_frame_from_catalog(
    database = source_catalog_db, 
    table_name = source_catalog_tbl, 
    push_down_predicate = "year = 2017 and month > 6 and day between 3 and 10", 
    transformation_ctx = "datasource")

除了要记住,下推谓词仅适用于s3数据源。

这是AWS Glue开发人员写的关于数据分区的不错的blog post

答案 1 :(得分:0)

太好了!我可以通过“ dt”分区列使用它来获取最近30天的数据:

datasource0 = glueContext.create_dynamic_frame.from_catalog(
    database = "my_db",
    table_name = "my_table",
    push_down_predicate = "to_date(dt) >= date_sub(current_date, 30)", 
    transformation_ctx = "datasource0"
)

我正在使用Glue 1.0-Spark 2.4-Python 2。