mysql - AWS Glue 谓词下推条件无效

标签 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”中输入什么条件,我总是在“数据源”中获取所有记录。 我错过了什么?

最佳答案

下推谓词仅适用于分区列。换句话说,您的数据文件应该放在分层结构的文件夹中。例如,如果数据位于 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 数据源。

这是一个不错的 blog post由 AWS Glue 开发人员编写的有关数据分区的文章。

关于mysql - AWS Glue 谓词下推条件无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51388993/

相关文章:

SQL isset 并且不显示空白 'cells'

python - 明确关闭异步事件循环的必要性

android - 从 MySql 到 FireBase 的数据结构(NOSQL 数据库)

php - 在 MySQL 数据库中存储和检索整数

python-3.x - 限制 DataFrame 中一列中的单词数

node.js - 使用 AWS Lambda NodeJS 时无法返回结果

postgresql - Redshift 插入瓶颈

node.js - BadRequestException : no open transaction, qldb,nodejs 驱动程序

php - Ajax 在下拉列表中发送相同的值但不同的选项

python - 使用 time.time() 作为计时器在 `**` 上失败