我有一个胶水工作,在我插入数据从csv到postgresql表。现在我需要更新postgresql DB表中的一行。我已经这样做了,但是所需的行是作为表中的新条目来的,而不是更新现有的。我该怎么做呢?请帮助…
Glue目前不支持覆盖模式。您需要将DynamicFrame
转换为DataFrame
,然后使用mode = overwrite
这样写:
dynamic_frame.toDF()
.write
.mode("overwrite")
Spark还不支持更新记录。您只能覆盖(删除现有记录并添加新记录)或追加(在现有记录的基础上添加新记录)。
但是如果你想更新某一行,你可以使用python库pg8000。
胶水版本2.0和python版本3的步骤如下:
-
下载并解压pg8000, asn1crypto和rump tar文件,然后将它们压缩成一个。
-
上传文件到s3桶
-
在"python library path"中添加pg8000压缩文件的路径。如:s3://bucketname/foldername pg8000-1.19.2.zip
-
只导入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 '。格式化'以使查询通用。