Répondre

0

Vous devez spécifier mode dans la bibliothèque avant d'appeler la sauvegarde. Par exemple:

my_dataframe.write 
    .format("com.databricks.spark.redshift") 
    .option("url", "jdbc:redshift://my_cluster.qwertyuiop.eu-west-1.redshift.amazonaws.com:5439/my_database?user=my_user&password=my_password") 
    .option("dbtable", "my_table") 
    .option("tempdir", "s3://my-bucket") 
    .option("diststyle", "KEY") 
    .option("distkey", "dist_key") 
    .option("sortkeyspec", "COMPOUND SORTKEY(key_1, key_2)") 
    .option("extracopyoptions", "TRUNCATECOLUMNS COMPUPDATE OFF STATUPDATE OFF") 
    .mode("overwrite") // "append"/"error" 
    .save() 
+0

Que dans le code fourni permet à l'utilisateur de tronquer une table? est l'implication que my_dataframe est une dataframe vide? – CedricB

+0

'.mode (" overwrite ")' provoquera la suppression des données existantes. L'utilisateur spécifié dans l'URL Redshift doit avoir les autorisations nécessaires ou il va erreur. –

+0

probablement my_dataframe est construit sur "my_table"? si cette supposition est correcte, je pense que .mode ("overwrite") écrira toutes les données de my_table dans ma table, et ne tronquera en fait rien. Qu'est-ce que je rate? – CedricB