AWS Glue,加载到框架之前的数据过滤,命名 s3 对象

Posted

技术标签:

【中文标题】AWS Glue,加载到框架之前的数据过滤,命名 s3 对象【英文标题】:AWS Glue, data filtering before loading into a frame, naming s3 objects 【发布时间】:2018-04-27 00:20:20 【问题描述】:

我有 3 个问题,针对以下情况: 我正在尝试将我的历史从 RDS postgresql 迁移到 S3。我的数据库中有大约十亿行数据, Q1) 有没有办法让我告诉 aws 胶水作业要加载哪些行?例如,我希望它从某个日期开始加载数据? PostgreSQL 数据源没有书签功能,

Q2) 处理完数据后,胶水作业会自动为 s3 输出对象创建名称,我知道我可以在 DynamicFrame 写入中指定路径,但我可以指定对象名称吗?如果是这样,如何?我找不到这个选项。

Q3) 我在一个包含 100 行数据的示例表上尝试了我的粘合作业,它自动将输出分成 20 个文件,每个文件中有 5 行,我如何在作业中指定批处理大小?

提前致谢

这个问题我也在 AWS Glue 论坛上发布过,这里有一个链接:https://forums.aws.amazon.com/thread.jspa?threadID=280743

【问题讨论】:

您找到解决方案了吗? 【参考方案1】:
    Glue 支持pushdown predicates 功能,但目前它仅适用于 s3 上的分区数据。不过,有一个功能请求支持 JDBC 连接。 无法指定输出文件的名称。但是,看起来有一个option with renaming files(请注意,在 s3 上重命名意味着将文件从一个位置复制到另一个位置,因此成本高昂且不是原子操作) 您无法真正控制输出文件的大小。不过,control min number of files 可以选择使用 coalesce。同样从 Spark 2.2 开始,可以通过设置 config spark.sql.files.maxRecordsPerFile 来设置每个文件的最大记录数

【讨论】:

我们公司正在考虑使用 AWS Glue 作为数据仓库项目的主要 ETL 工具。您似乎对 Glue 有经验。有趣的是,为什么 ETL 工具不能过滤源数据?从架构的角度来看,这对我来说似乎是错误的。没有人愿意每次都将 1 亿行加载到内存中。你对此的看法如何?来源是 RDBMS:SQL Server 和 PostgreSQL。谢谢 我完全同意下推谓词功能应该适用于所有类型的数据源,尤其是 SQL 源,因为它很容易实现(只需首先添加 where 子句)。不过还有其他选择 - load data using Spark

以上是关于AWS Glue,加载到框架之前的数据过滤,命名 s3 对象的主要内容,如果未能解决你的问题,请参考以下文章

如何在数据加载之前截断 AWS Glue 作业中的 RDS 表?

AWS Glue输出文件名

将 Parquet 文件从 AWS Glue 加载到 Redshift

如何以编程方式重命名 AWS Glue 目录中的列名

如何在 ETL 处理之前检查 AWS Glue 架构?

AWS Glue 输出文件名