如何从 AWS Glue 中的 JDBC 编目连接加载部分数据?

Posted

技术标签:

【中文标题】如何从 AWS Glue 中的 JDBC 编目连接加载部分数据?【英文标题】:How to load partial data from a JDBC cataloged connection in AWS Glue? 【发布时间】:2018-09-24 16:59:35 【问题描述】:

我知道我可以通过 Glue 上下文从 JDBC 编目连接加载整个表,如下所示:

glueContext.create_dynamic_frame.from_catalog(
    database="jdbc_rds_postgresql",
    table_name="public_foo_table",
    transformation_ctx="datasource0"
)

但是,我想做的是使用编目连接部分加载表,就像我通过 spark 会话使用未编目的 JDBC 连接一样:

query = "(select * from public.foo_table where date='%s') as data" % date_fm)
spark.read.jdbc(url=DB_URL, table=query)

有没有办法可以使用编目连接?

或者,当使用未编目的连接时,我很难理解如何锁定对未编目的连接的访问​​,以便只有 Glue 作业可以访问它。我有哪些选择?

【问题讨论】:

【参考方案1】:

理论上,您可以在 Glue 中使用 Pushdown predicates 进行编目连接来实现此目的,您可以在其中添加 push_down_predicate 参数以在读取数据时过滤数据。因此,使用您的示例:

glueContext.create_dynamic_frame.from_catalog(
    database="jdbc_rds_postgresql",
    table_name="public_foo_table",
    transformation_ctx="datasource0",
    push_down_predicate="date=%s" % date_fm
)

但是,在撰写本文时,这似乎仅支持 S3 源。

【讨论】:

目前仅s3 存储支持下推谓词功能。但是,据我所知,AWS Glue 团队正在努力为 JDBC 连接实现它。 @YuriyBondaruk 你对当前的 s3 限制有什么参考吗? 你可以在这里找到它:aws.amazon.com/blogs/big-data/…。它没有明确说明仅支持 S3,但我认为它是 AWS 详细解释下推谓词功能的唯一公共资源

以上是关于如何从 AWS Glue 中的 JDBC 编目连接加载部分数据?的主要内容,如果未能解决你的问题,请参考以下文章

AWS Glue:如何使用 JDBC 连接 oracle db

连接到 SQL Server 实例 AWS Glue

从 AWS Glue 读取 Netezza 时连接超时

在AWS Glue上使用JDBC连接Trino

AWS Python Shell - 如何使用 Glue 目录连接

AWS Glue to Redshift:是否可以替换,更新或删除数据?