AWS Glue完成后,如何执行SQL脚本或存储过程?

问题描述 投票:0回答:1

我正在学习AWS Glue。对于传统的ETL,常见的模式是从目标表中查找主键,以确定是否需要执行更新或插入(也称为upsert设计模式)。使用胶水似乎没有相同的控制。简单地写出动态帧只是一个插入过程。有两种设计模式,我可以想到如何解决这个问题:

  1. 将目标加载为数据框,并在spark,left outer join中仅插入新行(如果需要,如何更新行?删除然后插入???因为我是新手来激发这对我来说是最陌生的)
  2. 将数据加载到阶段表中,然后使用SQL执行最终合并

这是我第一次探索的第二种方法。在AWS Glue作业完成后,我如何在AWS世界中执行SQL脚本或存储过程?你做一个python-shell工作,lambda,直接部分胶水,还有其他方式吗?

python amazon-web-services apache-spark pyspark aws-glue
1个回答
1
投票

我使用pymysql库作为上传到AWS S3的zip文件,并在AWS Glue作业参数中配置。对于UPSERT,我使用INSERT INTO TABLE ....在DUPLICATE KEY上。

因此,基于主键验证,代码将更新记录(如果已存在)或插入新记录。希望这可以帮助。请参考:

import pymysql

rds_host  = "rds.url.aaa.us-west-2.rds.amazonaws.com"
name = "username"
password = "userpwd"
db_name = "dbname"
conn = pymysql.connect(rds_host, user=name, passwd=password, db=db_name, connect_timeout=5)

with conn.cursor() as cur:
   insertQry=INSERT INTO ZIP_TERR(zip_code, territory_code, territory_name, 
   state) VALUES(zip_code, territory_code, territory_name, state) ON 
   DUPLICATE KEY UPDATE territory_name = VALUES(territory_name), state = 
   VALUES(state);"
   cur.execute(insertQry)
   conn.commit()
   cur.close()

在上面的代码示例中,区域代码,邮政编码是主键。请参考这里:More on looping inserts using a for loops

© www.soinside.com 2019 - 2024. All rights reserved.