如何在AWS Glue作业脚本中从AWS RDS获取数据并相应地转换数据并将其重新插入到AWS RDS中?

时间:2019-05-21 07:43:25

标签: amazon-web-services stored-procedures aws-lambda amazon-rds aws-glue

我想通过AWS Glue从s3存储桶csv中插入数据,但是数据的插入取决于存储在AWS RDS中的数据(例如该数据是否已经存在然后不插入或者是否已经存在以及仅该数据的某些属性进行更新,然后更新值)。有什么方法可以从AWS Glue作业脚本中的RDS获取数据,然后相应地转换数据。

我还想到了在AWS Glue作业完成后调用AWS Lambda。 在aws胶工作完成之后,是否有任何aws胶工作脚本的代码可以调用lambda或以任何方式获得aws胶工作的响应(如SNS或我们可以调用lambda的东西)?

我希望在aws rds表中插入数据后,调用一个存储过程来处理数据

1 个答案:

答案 0 :(得分:0)

我们已经成功地通过Glue作业将数据直接插入到MySQL Aurora集群中,并且仅通过在DUMPLICATE KEY UPDATE语句上发送INSERT就避免了重复。看起来像这样:

import mysql

# Other logic here...

# Convert to DataFrame (from a DynamicFrame) 
df = mapping.toDF()

# Connect to MySQL
db = mysql.connect(glueContext, 'name-of-mysql-connection', 'db')
cursor = db.cursor()

insert_statement = """
  INSERT INTO my_table
  (column1, column2, updated_at)
  VALUES(%s, %s, NOW())
  ON DUPLICATE KEY UPDATE
  column1 = %s,
  column2 = %s,
  updated_at = NOW()
  """

# Execute each statement
for row in df.rdd.collect():
  cursor.execute(insert_statement, (
    row['column1'],
    row['column2'],
    row['column1'],
    row['column2']
  ))

# Commit to the database
db.commit()
db.close()