[英]Guide to setup aws ETL glue pyspark job by step by step
我是 AWS 管道的初学者。
输入我每天从 ERP 接收 S3 存储桶RAW_input
中的csvs
表,时间可以更改。 例如- ERP1_folder
包含erp1_sales.csv
和erp1_customer.csv
和ERP2_folder
相同。
转换然后我们需要应用tested
query
(SQLsfiles are in S3)
并应用mapping + structure cleaning
(Glue Jobs)
,例如对存储桶中的each
表进行 int 更改、数据格式更改等,并在所需的destination
设置output
。
目的地: Output 的queries
预计在 redshift redshift tables
中。 (我们已经为它准备好了集群和数据库)。
Req我想设置一个 pyspark 粘合作业,当任何文件上传到 S3 存储桶时自动触发。
问题
input s3 trigger
+ mapping
+ cleaning
等所有工作吗?aws lambda
function 来trigger
胶水作业?job
为每个selected table
分配query trigger
听起来是一项艰巨的工作。AWS
胶水中的clusters
是手动创建的,我不知道它是否是唯一的方法。我不能拥有用户secret access keys
,因此我只能通过访问角色和策略在 AWS 服务内工作。 无需 CI/CD 解决方案
仅当您需要一些解释时才请相关评论。
我试过:但我更喜欢在 S3 中循环遍历不同的 Athena SQL 文件而不是类似的 ERP。 例如 erp000.sql 运行 erp000.csv 并将数据发送到 redshift
from pyspark.context import SparkContext
from awsglue.context import GlueContext
from pyspark.sql import SQLContext
sc = SparkContext()
glueContext = GlueContext(sc)
spark = glueContext.spark_session
# EXTRACT: Reading parquet data
df = spark.read.format("csv").load('s3://<bucket_name>/<file_path>/<file_name>.csv')
# TRANSFORM: some transformation
df = df.distinct()
# LOAD: write data to Redshift
df.write.format("jdbc").\
option("url", "jdbc:redshift://<host>:5439/<database>").\
option("dbtable", "<table_schema>.<table_name>").\
option("user", "<username>").\
option("password", "<password>").\
mode('overwrite').save()
print("Data Loaded to Redshift")
我将尝试直接回答您的问题:
只有Glue作业才能完成输入s3触发器+映射+清洗等所有工作吗?
触发器按需或在特定时间启动 ETL 作业执行。
我是否还需要在此过程中开发 aws lambda function 来触发胶水作业?
没有
按作业为每个选定表分配查询触发器听起来是一项艰巨的工作。
最终表格到位后,您可以创建 Glue 作业,它可以按计划、触发器或按需运行。 作业是执行 ETL 任务的业务逻辑。 因此,您根据选择的表创建作业,而不是每个表的作业。
AWS 胶水中的集群是手动创建的,我不知道它是否是唯一的方法。
AWS Glue 只是一个无服务器 ETL 工具,您不需要管理集群,也不需要手动创建集群。
任何参考/pyspark 的 github 代码都会有所帮助
https://aws.amazon.com/glue/getting-started/ https://docs.aws.amazon.com/glue/index.html https://docs.aws.amazon.com/glue/latest/dg /触发作业.html
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.