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 表?