在AWS Glue中使用动态框架更新RDS表



我有一个胶水工作,在我插入数据从csv到postgresql表。现在我需要更新postgresql DB表中的一行。我已经这样做了,但是所需的行是作为表中的新条目来的,而不是更新现有的。我该怎么做呢?请帮助…

Glue目前不支持覆盖模式。您需要将DynamicFrame转换为DataFrame,然后使用mode = overwrite这样写:

dynamic_frame.toDF()
.write
.mode("overwrite")

Spark还不支持更新记录。您只能覆盖(删除现有记录并添加新记录)或追加(在现有记录的基础上添加新记录)。

但是如果你想更新某一行,你可以使用python库pg8000。

胶水版本2.0和python版本3的步骤如下:

  1. 下载并解压pg8000, asn1crypto和rump tar文件,然后将它们压缩成一个。

  2. 上传文件到s3桶

  3. 在"python library path"中添加pg8000压缩文件的路径。如:s3://bucketname/foldername pg8000-1.19.2.zip

  4. 只导入pg8000。本机和使用下面的代码直接连接到数据库。

    import ssl
    import pg8000.native
    conn = pg8000.native.Connection(database="database", host="xxxxxxrds.amazonaws.com", port=xxxx, user="user", password="password",ssl_context=ssl._create_unverified_context())
    insert_query = "your update query that you would generally write in postgresql"
    conn.run(insert_query)
    conn.run("COMMIT")
    conn.close()
    

PS:你也可以使用python '。格式化'以使查询通用。

最新更新