Estoy agregando datos de S3 y escribiéndolos en Postgres usando Glue. Mi problema es que necesito truncar la tabla en la que escribo antes de escribirla. He encontrado la connection_options: {"preactions":"truncate table <table_name>"} pero eso solo parece funcionar para Redshift. ¿Hay alguna manera fácil, usando una conexión de pegamento, para simplemente ejecutar una consulta truncada simple? He encontrado respuestas que sugieren usar un jar personalizado o escribir una función Java personalizada, pero realmente esperaba algo similar. Aquí están las líneas de código relevantes:
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"})Ya tiene un marco de datos pyspark, luego cree una conexión pyspark jdbc y use el modo de 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')Esto es para tu información:
PERO, la sintaxis está desactualizada en este artículo:
https://aws.amazon.com/premiumsupport/knowledge-center/sql-commands-redshift-glue-job/
Así que prueba esto:
reemplazar la sintaxis de
glueContext.write_dynamic_frame.from_jdbc_conf()
para
glueContext.write_dynamic_frame_from_jdbc_conf() ,
y funcionará
Aquí están los documentos para la función: https://docs.aws.amazon.com/glue/latest/dg/aws-glue-api-crawler-pyspark-extensions-glue-context.html
Al menos esto me ayudó en mi caso (el trabajo de AWS Glue simplemente inserta datos en Redshift sin ejecutar las acciones de Truncar tabla).