Python 可以在AWS Glue中对Postgres数据库执行SQL吗?

Python 可以在AWS Glue中对Postgres数据库执行SQL吗?,python,postgresql,amazon-web-services,pyspark,aws-glue,Python,Postgresql,Amazon Web Services,Pyspark,Aws Glue,我正在聚合来自S3的数据,并使用胶水将其写入Postgres。我的问题是,我需要在写入表之前截断它。我发现了connection\u选项:{“preactions”:“truncate table”}功能,但这似乎只适用于红移。有没有简单的方法,使用粘合连接,只运行一个简单的截断查询?我已经找到了建议使用自定义jar或编写自定义java函数的答案,但我真的希望得到类似的结果。以下是相关代码行: dfFinal = df4.drop_duplicates() datasource2 = Dynam

我正在聚合来自S3的数据,并使用胶水将其写入Postgres。我的问题是,我需要在写入表之前截断它。我发现了
connection\u选项:{“preactions”:“truncate table”}
功能,但这似乎只适用于红移。有没有简单的方法,使用粘合连接,只运行一个简单的截断查询?我已经找到了建议使用自定义jar或编写自定义java函数的答案,但我真的希望得到类似的结果。以下是相关代码行:

dfFinal = df4.drop_duplicates()
datasource2 = DynamicFrame.fromDF(dfFinal, glueContext, "scans")

output = glueContext.write_dynamic_frame.from_jdbc_conf(frame = datasource2, catalog_connection = "MPtest", connection_options = {"preactions":"truncate table scans_staging;","database" : "app", "dbtable" : "scans_staging"})

您已经有一个pyspark数据帧,然后创建一个pyspark jdbc连接并使用mode
overwrite

conn = glueContext.extract_jdbc_conf(connection_name)
HOST_NAME = conn['host']
USERNAME = conn['user']
PASSWORD = conn['password']
PORT = conn['port']
DATABASE = “<Database name>”
URL = conn['url']+"/"+DATABASE
DRIVER = "org.postgresql.Driver"

finaldf.write.jdbc(url=URL, dbtable=table, user= USERNAME, password=PASSWORD, driver=DRIVER, mode='overwrite')
conn=glueContext.extract\u jdbc\u conf(连接\u名称)
主机名=conn['HOST']
USERNAME=conn['user']
PASSWORD=conn['PASSWORD']
端口=连接['PORT']
DATABASE=“”
URL=conn['URL']+“/”+数据库
DRIVER=“org.postgresql.DRIVER”
jdbc(url=url,dbtable=table,user=USERNAME,password=password,driver=driver,mode='overwrite')
这是供参考的:
但是,本文中的语法已经过时:

所以试试这个:

替换中的语法

glueContext.write_dynamic_frame.from_jdbc_conf()


glueContext.从jdbc\u conf()编写动态框架
它会起作用的

以下是该功能的文档:


至少在我的情况下,这对我有所帮助(AWS Glue job只需将数据插入到Redshift中,而不执行截断表操作。)

为什么不通过类似pyscopg2的方式连接并运行terminate语句呢?胶水连接不允许你这么做。我想这基本上就是我要做的。运行lambda来截断表,然后触发glue jobnah,只需在glue中创建一个连接。就在你插入之前,你已经开始使用连接来写Postgres了