我正在学习AWS Glue。对于传统的ETL,常见的模式是从目标表中查找主键,以确定是否需要执行更新或插入(也称为upsert设计模式)。使用胶水似乎没有相同的控制。简单地写出动态帧只是一个插入过程。有两种设计模式,我可以想到如何解决这个问题:
这是我第一次探索的第二种方法。在AWS Glue作业完成后,我如何在AWS世界中执行SQL脚本或存储过程?你做一个python-shell工作,lambda,直接部分胶水,还有其他方式吗?
我使用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