PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

AWS Glue:tronca la tabella postgres di destinazione prima dell'inserimento

Ho provato DROP/ TRUNCATE scenario, ma non sono stati in grado di farlo con connessioni già create in Glue, ma con un driver Python PostgreSQL puro, pg8000 .

  1. Scarica il tar di pg8000 da pypi
  2. Crea un __init__.py vuoto nella cartella principale
  3. Comprimi i contenuti e caricali su S3
  4. Fai riferimento al file zip nel Python lib path del lavoro
  5. Imposta i dettagli della connessione DB come parametri del lavoro (assicurati di anteporre tutti i nomi delle chiavi con -- ). Spunta la casella "Crittografia lato server".

Quindi puoi semplicemente creare una connessione ed eseguire SQL.

import sys
from awsglue.utils import getResolvedOptions
from pyspark.context import SparkContext
from awsglue.context import GlueContext
from awsglue.dynamicframe import DynamicFrame
from awsglue.job import Job

import pg8000

args = getResolvedOptions(sys.argv, [
    'JOB_NAME',
    'PW',
    'HOST',
    'USER',
    'DB'
])
# ...
# Create Spark & Glue context

job = Job(glueContext)
job.init(args['JOB_NAME'], args)

# ...
config_port = 5432
conn = pg8000.connect(
    database=args['DB'], 
    user=args['USER'], 
    password=args['PW'],
    host=args['HOST'],
    port=config_port
)
query = "TRUNCATE TABLE {0};".format(".".join([schema, table]))
cur = conn.cursor()
cur.execute(query)
conn.commit()
cur.close()
conn.close()