

 Amazon Redshift ne prendra plus en charge la création de nouveaux Python à UDFs partir du patch 198. UDFs Le Python existant continuera de fonctionner jusqu'au 30 juin 2026. Pour plus d’informations, consultez le [ billet de blog ](https://aws.amazon.com/blogs/big-data/amazon-redshift-python-user-defined-functions-will-reach-end-of-support-after-june-30-2026/). 

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

# Exécution d’une opération de fusion en spécifiant une liste de colonnes sans utiliser la commande MERGE
<a name="merge-specify-a-column-list"></a>

Exécutez la totalité de l’opération de fusion détaillée dans la procédure dans une même transaction. La transaction est annulée en cas d’échec d’une étape. L’utilisation d’une seule transaction réduit aussi le nombre de validations, ce qui permet de gagner du temps et d’économiser des ressources.

**Pour exécuter une opération de fusion par spécification d’une liste de colonnes**

1. Placez l’ensemble de l’opération dans un seul bloc de transactions. 

   ```
   BEGIN transaction;
   … 
   END transaction;
   ```

1. Créez une table intermédiaire, puis complétez-la avec les données à fusionner, comme illustré dans le pseudocode suivant. 

   ```
   create temp table stage (like target); 
   insert into stage 
   select * from source 
   where source.filter = 'filter_expression';
   ```

1. Mettez à jour la table cible à l’aide d’une jointure interne avec la table intermédiaire. 
   + Dans la clause UPDATE, listez explicitement les colonnes à mettre à jour. 
   + Effectuez une jointure interne avec la table intermédiaire. 
   + Si la clé de distribution est différente de la clé primaire et que la clé de distribution n’est pas mise à jour, ajoutez une jointure redondante sur la clé de distribution. Pour vérifier que la requête utilise une jointure colocalisée, exécutez la requête avec [EXPLAIN](r_EXPLAIN.md) et recherchez DS\$1DIST\$1NONE sur l’ensemble des jointures. Pour plus d'informations, consultez [Évaluation du plan de requête](c_data_redistribution.md)
   + Si votre table cible est triée par horodatage, ajoutez un prédicat pour tirer parti des analyses à plage restreinte sur la table cible. Pour plus d’informations, consultez [Bonnes pratiques Amazon Redshift pour la conception de requêtes](c_designing-queries-best-practices.md).
   + Si vous n’utilisez pas toutes les lignes de la fusion, ajoutez une clause pour filtrer les lignes que vous ne voulez pas modifier. Par exemple, ajoutez un filtre d’inégalité sur une ou plusieurs colonnes afin d’exclure les lignes qui n’ont pas changé.
   + Placez les opérations de mise à jour, de suppression et d’insertion dans un même bloc de transaction de telle sorte qu’en cas de problème, tout puisse être annulé.

    Par exemple : 

   ```
   begin transaction;
   
   update target 
   set col1 = stage.col1, 
   col2 = stage.col2, 
   col3 = 'expression' 
   from stage 
   where target.primarykey = stage.primarykey 
   and target.distkey = stage.distkey 
   and target.col3 > 'last_update_time' 
   and (target.col1 != stage.col1 
   or target.col2 != stage.col2 
   or target.col3 = 'filter_expression');
   ```

1. Supprimez les lignes superflues de la table intermédiaire à l’aide d’une jointure interne avec la table cible. Certaines lignes de la table cible correspondent déjà aux lignes correspondantes de la table intermédiaire, tandis que d’autres ont été mises à jour lors de l’étape précédente. Dans les deux cas, elles ne sont pas nécessaires pour l’insertion. 

   ```
   delete from stage 
   using target 
   where stage.primarykey = target.primarykey;
   ```

1. Insérez les lignes restantes de la table intermédiaire. Utilisez la même liste de la colonne dans la clause VALUES que celle que vous avez utilisée dans l’instruction UPDATE à l’étape 2. 

   ```
   insert into target
   (select col1, col2, 'expression'
   from stage);
   
   end transaction;
   ```

1. Supprimez la table intermédiaire. 

   ```
   drop table stage;
   ```