

 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.

# Annuler une requête
<a name="cancel_query"></a>

Si vous exécutez une requête qui prend trop de temps ou consomme des ressources excessives, annulez-la. Par exemple, vous créez une liste de vendeurs de billets comprenant le nom du vendeur et la quantité de billets vendus. La requête suivante sélectionne les données des tables `SALES` et `USERS`, et joint les deux tables en associant SELLERID et USERID dans la clause WHERE.

```
SELECT sellerid, firstname, lastname, sum(qtysold)
FROM sales, users
WHERE sales.sellerid = users.userid
GROUP BY sellerid, firstname, lastname
ORDER BY 4 desc;
```

Le résultat ressemble à ce qui suit.

```
 sellerid | firstname | lastname | sum
----------+-----------+----------+------
  48950   |   Nayda   |   Hood   | 184
  19123   |   Scott   | Simmons  | 164
  20029   |    Drew   | Mcguire  | 164
  36791   |  Emerson  | Delacruz | 160
  13567   |   Imani   |   Adams  | 156
  9697    |  Dorian   |    Ray   | 156
  41579   | Harrison  | Durham   | 156
  15591   |  Phyllis  |  Clay    | 152
  3008    |  Lucas    | Stanley  | 148
  44956   |  Rachel   |Villarreal| 148
```

**Note**  
Il s’agit d’une requête complexe. Pour ce didacticiel, vous n’avez pas à vous préoccuper de la façon dont la requête est construite.

La requête précédente s’exécute en quelques secondes et retourne 2 102 lignes.

Supposons vous oubliez de placer la clause WHERE.

```
SELECT sellerid, firstname, lastname, sum(qtysold)
FROM sales, users
GROUP BY sellerid, firstname, lastname
ORDER BY 4 desc;
```

L’ensemble de résultats contient le nombre de toutes les lignes de la table `SALES` multiplié par le nombre de toutes les lignes de la table `USERS` (49989 \$1 3766). Cette jointure est appelée jointure cartésienne et n’est pas recommandée. Le résultat est supérieur à 188 millions de lignes et son exécution prend beaucoup de temps.

Pour annuler une requête en cours d’exécution, utilisez la commande CANCEL avec l’ID de session de la requête. Avec Amazon Redshift Query Editor V2, vous pouvez annuler une requête en cliquant sur le bouton Annuler pendant que la requête est en cours d’exécution.

Pour obtenir l’ID de session, démarrez une nouvelle séance et interrogez la table STV\$1RECENTS, comme illustré dans l’étape précédente. L’exemple suivant montre comment vous pouvez rendre les résultats plus lisibles. Pour ce faire, utilisez la fonction TRIM pour couper les espaces de fin de ligne et n’afficher que les 20 premiers caractères de la chaîne de requête.

Pour déterminer l’ID de session d’une requête en cours d’exécution, exécutez l’instruction SELECT suivante.

```
SELECT user_id, session_id, start_time, query_text
FROM sys_query_history
WHERE status='running';
```

Le résultat ressemble à ce qui suit.

```
 user_id |   session_id  |   start_time               |   query_text
---------+---------------+----------------------------+----------------------------------------------------------------
 100     |    1073791534 | 2024-03-19 22:26:21.205739 | SELECT user_id, session_id, start_time, query_text FROM  ...
```

Pour annuler la requête avec l’I de session `1073791534`, exécutez la commande suivante.

```
CANCEL 1073791534;
```

**Note**  
La commande CANCEL n’arrête pas une transaction. Pour arrêter ou restaurer une transaction, utilisez la commande ABORT ou ROLLBACK. Pour annuler une requête associée à une transaction, annulez d’abord la requête, puis arrêtez la transaction.

Si la requête que vous avez annulée est associée à une transaction, utilisez la commande ABORT ou ROLLBACK. pour annuler la transaction et ignorer toutes les modifications apportées aux données :

```
ABORT;
```

Sauf si vous êtes connecté comme super-utilisateur, vous pouvez annuler uniquement vos propres requêtes. Un super-utilisateur peut annuler toutes les requêtes.

Si votre outil de requête ne prend pas en charge l’exécution simultanée de requêtes, démarrez une nouvelle séance pour annuler la requête.

Pour plus d’informations sur l’annulation d’une requête, consultez [CANCEL](https://docs.aws.amazon.com/redshift/latest/dg/r_CANCEL.html) dans le *Guide du développeur de la base de données Amazon Redshift*.

## Annuler une requête à l’aide de la file d’attente super-utilisateur
<a name="cancel_query-cancel-a-query-using-the-superuser-queue"></a>

Si votre séance en cours a un trop grand nombre de requêtes s’exécutant en même temps, il se peut que vous ne soyez pas en mesure d’exécuter la commande CANCEL tant qu’une autre requête n’est pas terminée. Dans ce cas, exécutez la commande CANCEL en utilisant une autre file d’attente de requêtes de gestion de la charge de travail.

La gestion de la charge de travail vous permet d’exécuter les requêtes dans différentes files d’attente de afin que vous n’ayez pas besoin d’attendre qu’une autre requête se termine. Le gestionnaire de la charge de travail crée une file d’attente distincte, appelée file d’attente super-utilisateur, que vous pouvez utiliser à des fins de dépannage. Pour utiliser la file d’attente super-utilisateur, connectez-vous en tant que super-utilisateur et définissez le groupe de requêtes avec la valeur « superuser » à l’aide de la commande SET. Après l’exécution de vos commandes, réinitialisez le groupe de requêtes à l’aide de la commande RESET.

Pour annuler une requête à l’aide de la file d’attente super-utilisateur, exécutez ces commandes.

```
SET query_group TO 'superuser';
CANCEL 1073791534;
RESET query_group;
```