我正在学习AWS Glue。使用传统的ETL,一种常见的模式是从目标表中查找主键,以确定是否需要进行更新或插入(又称upsert设计模式)。使用胶水似乎没有相同的控件。简单地写出动态框架只是一个插入过程。我可以想到两种设计模式来解决这个问题:
这是我首先探讨的第二种方法。 AWS Glue作业完成后,我如何在AWS世界中执行SQL脚本或存储过程?您是否通过其他方式直接在胶水的一部分中执行了python-shell工作,lambda?
答案 0 :(得分:1)
我已将pymysql库用作上传到AWS S3的zip文件,并在AWS Glue作业参数中进行了配置。对于UPSERT,我已经使用INSERT INTO TABLE ...... ON 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