AWS Glue谓词下推条件无效

Ana*_*ail 3 mysql amazon-web-services python-3.x 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")
Run Code Online (Sandbox Code Playgroud)

无论我在“ push_down_predicate”中添加什么条件,我总是会在“数据源”中获取所有记录。我想念什么?

Yur*_*ruk 9

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

s3://bucket/dataset/year=2018/month=7/day=18/<data-files-here>
Run Code Online (Sandbox Code Playgroud)

在这种情况下,下推谓词将工作列yearmonth并且day只:

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")
Run Code Online (Sandbox Code Playgroud)

除此之外,您还必须记住,下推谓词仅适用于s3数据源。

这是AWS Glue开发人员撰写的有关数据分区的不错的博客文章

  • 谢谢@Yuriy,这完全有道理。我现在正在使用Glue的Filter操作来缩小结果范围。它效率不高,因为它将整个表加载到内存中,然后应用过滤器。但是,我相信这是我们现在与Glue唯一的选择。 (2认同)