PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

AWS Glue - Tronquer la table postgres de destination avant l'insertion

J'ai essayé le DROP/ TRUNCATE scénario, mais n'ont pas pu le faire avec des connexions déjà créées dans Glue, mais avec un pilote Python PostgreSQL pur, pg8000 .

  1. Télécharger le tar de pg8000 depuis pypi
  2. Créer un __init__.py vide dans le dossier racine
  3. Compressez le contenu et importez-le sur S3
  4. Référencez le fichier zip dans le Python lib path du travail
  5. Définissez les détails de connexion à la base de données en tant que paramètres de tâche (assurez-vous de faire précéder tous les noms de clé de -- ). Cochez la case "Cryptage côté serveur".

Ensuite, vous pouvez simplement créer une connexion et exécuter 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()