sql >> Base de Datos >  >> RDS >> PostgreSQL

AWS Glue:trunca la tabla postgres de destino antes de insertar

Probé DROP/ TRUNCATE escenario, pero no he podido hacerlo con conexiones ya creadas en Glue, sino con un controlador Python PostgreSQL puro, pg8000 .

  1. Descargar el tar de pg8000 desde pypi
  2. Cree un __init__.py vacío en la carpeta raíz
  3. Comprima el contenido y súbalo a S3
  4. Haga referencia al archivo zip en la Python lib path del trabajo
  5. Establezca los detalles de conexión de la base de datos como parámetros de trabajo (asegúrese de anteponer todos los nombres clave con -- ). Marque la casilla "Cifrado del lado del servidor".

Luego puede simplemente crear una conexión y ejecutar 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()