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



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

  1. 将目标加载为数据框,并在 Spark 中,左外部连接以仅插入新行(如果需要,您将如何更新行?删除然后插入???因为我是新手,所以这对我来说是最陌生的(
  2. 将数据加载到阶段表中,然后使用 SQL 执行最终合并

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

我已将 pymysql 库用作上传到 AWS S3 的 zip 文件,并在 AWS Glue 作业参数中进行配置。 对于 UPSERT,我使用了插入到表中....在重复键上。

因此,根据主键验证,代码将更新记录(如果已存在(,或插入新记录。 希望这有帮助。 请参考这个:

import pymysql
rds_host  = "rds.url.aaa.us-west-2.rds.amazonaws.com"
name = "username"
password = "userpwd"
db_name = "dbname"
conn = pymysql.connect(host=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()

在上面的代码示例中,区域代码、邮政编码是主键。 也请参考这里: 有关使用 for 循环循环插入

的更多信息

与往常一样,AWS 不断变化的功能列表解决了其中的大部分问题(由用户需求和常见工作模式引起(。

AWS 已发布有关使用临时表更新和插入新数据的文档(您在第二个策略中提到过(。

一般来说,ETL 最严格的方法是截断并重新加载源数据,但这取决于源数据。如果源数据是跨越数十亿条记录的时间序列数据集,则可能需要使用增量/增量加载模式。

相关内容

  • 没有找到相关文章

最新更新