从 Glue 目录和 Glue Py Spark 脚本中的动态路径同步 CSV 文件

Posted

技术标签:

【中文标题】从 Glue 目录和 Glue Py Spark 脚本中的动态路径同步 CSV 文件【英文标题】:Sync CSV files from Dynamic path in Glue Catalog and Glue Py Spark Script 【发布时间】:2019-09-19 14:57:01 【问题描述】:

我每天都在 AWS s3 中存储 CSV 文件。下面是我的 S3 文件路径结构:

s3://data-dl/abc/d=2019-09-19/2019-09-19-data.csv

在这个结构中,每天都会生成s3文件路径的日期部分。

现在我想使用 AWS 胶水进行 ETL 将数据从 S3 传送到 Redshift。要使用它,如何在数据目录中添加 S3 路径?我只想同步最近的文件夹 CSV 文件。

对于作业部分,如何在 Glue Pyspark 脚本中声明此动态路径?

【问题讨论】:

【参考方案1】:

填充胶水目录

您可以在按日期列分区的雅典娜中创建一个外部表。然后执行MSCK repair table命令,每当新数据添加到S3时更新表中的分区信息。

这将使您的胶水目录与所有最新数据保持同步。

参考 AWS 文档:

Create External Table

MSCK repair table to update partitions

在 Glue ETL 中读取一日数据

您可以使用在上述步骤中创建的表格从目录中创建动态框架。您也可以在创建动态框架时使用“push_down_predicate”参数只读取一天的记录。

参考 AWS 文档:

Create dynamic frame from catalog

【讨论】:

谢谢!没有雅典娜有什么办法吗?使用 Athena 会产生额外费用。 您可以查看 Glue 爬虫。但是,athena 不收取执行 DDL 命令的费用 :-)【参考方案2】:

如果您只想同步,则不需要 etl。您可以使用copy 命令从红移同步。您可以按预定时间间隔运行 python shell 作业,或者使用 s3 事件编写 lambda/sns 以在所有文件进入 s3 时立即触发。

【讨论】:

我知道这是一种方法,但我有 100 多个这样的来源,因此需要一种易于管理的 ETL 方法。 您是在使用超过 100 个源的任何转换,还是将它们存储在 redshift 的 100 个表中? 那么它不是问题所述的同步。您可以使用docs.aws.amazon.com/glue/latest/dg/… 将数据写入redshift。或者,如果可以使用纯 SQL 命令完成转换,您可以使用爬虫将原始数据源保持在胶合状态,然后在将结果移动到 redshift 表之前使用 redshift 频谱/python shell 作业进行 sql 转换。

以上是关于从 Glue 目录和 Glue Py Spark 脚本中的动态路径同步 CSV 文件的主要内容,如果未能解决你的问题,请参考以下文章

AWS Glue 错误 |无法使用 spark 从开发人员端点读取 Glue 表

AWS Glue CDK - 创建作业类型 Spark (Glue 2.0)

如何配置 Spark / Glue 以避免在 Glue 作业成功执行后创建空的 $_folder_$

使用 AWS Glue Scala 查询 Athena(添加分区)

Spark/Glue:.count() 或在约 20MM 记录和 1 个工作人员的数据帧上生成字段列表时的性能问题

优化 Spark AWS GLUE 作业