PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

AWS Glue – Kürzen Sie die Postgres-Zieltabelle vor dem Einfügen

Ich habe es mit DROP/ TRUNCATE versucht Szenario, konnte dies jedoch nicht mit bereits in Glue erstellten Verbindungen tun, sondern mit einem reinen Python-PostgreSQL-Treiber, pg8000 .

  1. Laden Sie das tar von pg8000 von pypi herunter
  2. Erstellen Sie eine leere __init__.py im Root-Ordner
  3. Inhalte komprimieren und auf S3 hochladen
  4. Verweisen Sie auf die ZIP-Datei im Python lib path des Jobs
  5. Legen Sie die DB-Verbindungsdetails als Jobparameter fest (achten Sie darauf, allen Schlüsselnamen -- voranzustellen ). Aktivieren Sie das Kontrollkästchen "Serverseitige Verschlüsselung".

Dann können Sie einfach eine Verbindung herstellen und SQL ausführen.

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()