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

时间:2019-04-01 18:22:42

标签: python amazon-web-services apache-spark pyspark aws-glue

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

  1. 将目标加载为数据框,并在spark中,左外部联接仅插入新行(如果需要,您将如何更新行?先删除再插入???),因为我是Spark的新手我)
  2. 将数据加载到阶段表中,然后使用SQL执行最终合并

这是我首先探讨的第二种方法。 AWS Glue作业完成后,我如何在AWS世界中执行SQL脚本或存储过程?您是否通过其他方式直接在胶水的一部分中执行了python-shell工作,lambda?

1 个答案:

答案 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